mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
This commit is contained in:
commit
2d890dd1e2
@ -361,19 +361,20 @@ public final class PresentationGroupCallImpl: PresentationGroupCall {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if case let .estabilished(callInfo, _, _, _) = strongSelf.internalState {
|
if case let .estabilished(callInfo, _, _, _) = strongSelf.internalState {
|
||||||
/*var addedSsrc: [UInt32] = []
|
var removedSsrc: [UInt32] = []
|
||||||
var removedSsrc: [UInt32] = []*/
|
|
||||||
for (callId, update) in updates {
|
for (callId, update) in updates {
|
||||||
if callId == callInfo.id {
|
if callId == callInfo.id {
|
||||||
|
for participantUpdate in update.participantUpdates {
|
||||||
|
if participantUpdate.isRemoved {
|
||||||
|
removedSsrc.append(participantUpdate.ssrc)
|
||||||
|
}
|
||||||
|
}
|
||||||
strongSelf.participantsContext?.addUpdates(updates: [update])
|
strongSelf.participantsContext?.addUpdates(updates: [update])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*if !addedSsrc.isEmpty {
|
|
||||||
strongSelf.callContext?.addSsrcs(ssrcs: addedSsrc)
|
|
||||||
}
|
|
||||||
if !removedSsrc.isEmpty {
|
if !removedSsrc.isEmpty {
|
||||||
strongSelf.callContext?.removeSsrcs(ssrcs: removedSsrc)
|
strongSelf.callContext?.removeSsrcs(ssrcs: removedSsrc)
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -536,7 +536,7 @@ public final class VoiceChatController: ViewController {
|
|||||||
let wasMuted = strongSelf.callState?.muteState != nil
|
let wasMuted = strongSelf.callState?.muteState != nil
|
||||||
strongSelf.callState = state
|
strongSelf.callState = state
|
||||||
|
|
||||||
if state.muteState != nil {
|
if let muteState = state.muteState, !muteState.canUnmute {
|
||||||
if strongSelf.pushingToTalk {
|
if strongSelf.pushingToTalk {
|
||||||
strongSelf.pushingToTalk = false
|
strongSelf.pushingToTalk = false
|
||||||
strongSelf.actionButton.pressing = false
|
strongSelf.actionButton.pressing = false
|
||||||
|
@ -32,22 +32,15 @@ public final class OngoingGroupCallContext {
|
|||||||
case connected
|
case connected
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct MemberState: Equatable {
|
|
||||||
public var isSpeaking: Bool
|
|
||||||
}
|
|
||||||
|
|
||||||
private final class Impl {
|
private final class Impl {
|
||||||
let queue: Queue
|
let queue: Queue
|
||||||
let context: GroupCallThreadLocalContext
|
let context: GroupCallThreadLocalContext
|
||||||
|
|
||||||
let sessionId = UInt32.random(in: 0 ..< UInt32(Int32.max))
|
let sessionId = UInt32.random(in: 0 ..< UInt32(Int32.max))
|
||||||
var mainStreamAudioSsrc: UInt32?
|
|
||||||
var otherSsrcs: [UInt32] = []
|
|
||||||
|
|
||||||
let joinPayload = Promise<(String, UInt32)>()
|
let joinPayload = Promise<(String, UInt32)>()
|
||||||
let networkState = ValuePromise<NetworkState>(.connecting, ignoreRepeated: true)
|
let networkState = ValuePromise<NetworkState>(.connecting, ignoreRepeated: true)
|
||||||
let isMuted = ValuePromise<Bool>(true, ignoreRepeated: true)
|
let isMuted = ValuePromise<Bool>(true, ignoreRepeated: true)
|
||||||
let memberStates = ValuePromise<[UInt32: MemberState]>([:], ignoreRepeated: true)
|
|
||||||
let audioLevels = ValuePipe<[(UInt32, Float)]>()
|
let audioLevels = ValuePipe<[(UInt32, Float)]>()
|
||||||
let myAudioLevel = ValuePipe<Float>()
|
let myAudioLevel = ValuePipe<Float>()
|
||||||
|
|
||||||
@ -118,7 +111,6 @@ public final class OngoingGroupCallContext {
|
|||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
strongSelf.mainStreamAudioSsrc = ssrc
|
|
||||||
strongSelf.joinPayload.set(.single((payload, ssrc)))
|
strongSelf.joinPayload.set(.single((payload, ssrc)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -130,58 +122,15 @@ public final class OngoingGroupCallContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func addSsrcs(ssrcs: [UInt32]) {
|
func addSsrcs(ssrcs: [UInt32]) {
|
||||||
if ssrcs.isEmpty {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
guard let mainStreamAudioSsrc = self.mainStreamAudioSsrc else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let mappedSsrcs = ssrcs
|
|
||||||
var otherSsrcs = self.otherSsrcs
|
|
||||||
for ssrc in mappedSsrcs {
|
|
||||||
if ssrc == mainStreamAudioSsrc {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if !otherSsrcs.contains(ssrc) {
|
|
||||||
otherSsrcs.append(ssrc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if self.otherSsrcs != otherSsrcs {
|
|
||||||
self.otherSsrcs = otherSsrcs
|
|
||||||
var memberStatesValue: [UInt32: MemberState] = [:]
|
|
||||||
for ssrc in otherSsrcs {
|
|
||||||
memberStatesValue[ssrc] = MemberState(isSpeaking: false)
|
|
||||||
}
|
|
||||||
self.memberStates.set(memberStatesValue)
|
|
||||||
|
|
||||||
self.context.setSsrcs(self.otherSsrcs.map { ssrc in
|
|
||||||
return ssrc as NSNumber
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeSsrcs(ssrcs: [UInt32]) {
|
func removeSsrcs(ssrcs: [UInt32]) {
|
||||||
if ssrcs.isEmpty {
|
if ssrcs.isEmpty {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guard let mainStreamAudioSsrc = self.mainStreamAudioSsrc else {
|
self.context.removeSsrcs(ssrcs.map { ssrc in
|
||||||
return
|
return ssrc as NSNumber
|
||||||
}
|
})
|
||||||
var otherSsrcs = self.otherSsrcs.filter { ssrc in
|
|
||||||
return !ssrcs.contains(ssrc)
|
|
||||||
}
|
|
||||||
if self.otherSsrcs != otherSsrcs {
|
|
||||||
self.otherSsrcs = otherSsrcs
|
|
||||||
var memberStatesValue: [UInt32: MemberState] = [:]
|
|
||||||
for ssrc in otherSsrcs {
|
|
||||||
memberStatesValue[ssrc] = MemberState(isSpeaking: false)
|
|
||||||
}
|
|
||||||
self.memberStates.set(memberStatesValue)
|
|
||||||
|
|
||||||
self.context.setSsrcs(self.otherSsrcs.map { ssrc in
|
|
||||||
return ssrc as NSNumber
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func stop() {
|
func stop() {
|
||||||
@ -228,18 +177,6 @@ public final class OngoingGroupCallContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public var memberStates: Signal<[UInt32: MemberState], NoError> {
|
|
||||||
return Signal { subscriber in
|
|
||||||
let disposable = MetaDisposable()
|
|
||||||
self.impl.with { impl in
|
|
||||||
disposable.set(impl.memberStates.get().start(next: { value in
|
|
||||||
subscriber.putNext(value)
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
return disposable
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public var audioLevels: Signal<[(UInt32, Float)], NoError> {
|
public var audioLevels: Signal<[(UInt32, Float)], NoError> {
|
||||||
return Signal { subscriber in
|
return Signal { subscriber in
|
||||||
let disposable = MetaDisposable()
|
let disposable = MetaDisposable()
|
||||||
|
@ -164,7 +164,7 @@ typedef NS_ENUM(int32_t, GroupCallNetworkState) {
|
|||||||
|
|
||||||
- (void)emitJoinPayload:(void (^ _Nonnull)(NSString * _Nonnull, uint32_t))completion;
|
- (void)emitJoinPayload:(void (^ _Nonnull)(NSString * _Nonnull, uint32_t))completion;
|
||||||
- (void)setJoinResponsePayload:(NSString * _Nonnull)payload;
|
- (void)setJoinResponsePayload:(NSString * _Nonnull)payload;
|
||||||
- (void)setSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs;
|
- (void)removeSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs;
|
||||||
- (void)setIsMuted:(bool)isMuted;
|
- (void)setIsMuted:(bool)isMuted;
|
||||||
|
|
||||||
- (void)switchAudioOutput:(NSString * _Nonnull)deviceId;
|
- (void)switchAudioOutput:(NSString * _Nonnull)deviceId;
|
||||||
|
@ -1029,13 +1029,13 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs {
|
- (void)removeSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs {
|
||||||
if (_instance) {
|
if (_instance) {
|
||||||
std::vector<uint32_t> values;
|
std::vector<uint32_t> values;
|
||||||
for (NSNumber *ssrc in ssrcs) {
|
for (NSNumber *ssrc in ssrcs) {
|
||||||
values.push_back([ssrc unsignedIntValue]);
|
values.push_back([ssrc unsignedIntValue]);
|
||||||
}
|
}
|
||||||
_instance->setSsrcs(values);
|
_instance->removeSsrcs(values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 9e25105d8662f54b7151070225c5866d0f0a6231
|
Subproject commit 1a3df12fbe943fe66df86607a5e6347a0db4cf4f
|
3
third-party/webrtc/BUILD
vendored
3
third-party/webrtc/BUILD
vendored
@ -700,9 +700,12 @@ webrtc_sources = [
|
|||||||
"media/engine/simulcast.cc",
|
"media/engine/simulcast.cc",
|
||||||
"media/engine/simulcast_encoder_adapter.cc",
|
"media/engine/simulcast_encoder_adapter.cc",
|
||||||
"media/engine/unhandled_packets_buffer.cc",
|
"media/engine/unhandled_packets_buffer.cc",
|
||||||
|
"media/engine/webrtc_media_engine.h",
|
||||||
"media/engine/webrtc_media_engine.cc",
|
"media/engine/webrtc_media_engine.cc",
|
||||||
"media/engine/webrtc_media_engine_defaults.cc",
|
"media/engine/webrtc_media_engine_defaults.cc",
|
||||||
|
"media/engine/webrtc_video_engine.h",
|
||||||
"media/engine/webrtc_video_engine.cc",
|
"media/engine/webrtc_video_engine.cc",
|
||||||
|
"media/engine/webrtc_voice_engine.h",
|
||||||
"media/engine/webrtc_voice_engine.cc",
|
"media/engine/webrtc_voice_engine.cc",
|
||||||
"media/sctp/noop.cc",
|
"media/sctp/noop.cc",
|
||||||
"media/sctp/sctp_transport.cc",
|
"media/sctp/sctp_transport.cc",
|
||||||
|
2
third-party/webrtc/webrtc-ios
vendored
2
third-party/webrtc/webrtc-ios
vendored
@ -1 +1 @@
|
|||||||
Subproject commit facc5cdcc8792fd1a83f39b14ce5d719c6f44625
|
Subproject commit 7198385cd356994e366ea325c84b34e974c9117e
|
Loading…
x
Reference in New Issue
Block a user