diff --git a/submodules/AccountContext/Sources/PresentationCallManager.swift b/submodules/AccountContext/Sources/PresentationCallManager.swift index bb962a16ff..d253aeb66a 100644 --- a/submodules/AccountContext/Sources/PresentationCallManager.swift +++ b/submodules/AccountContext/Sources/PresentationCallManager.swift @@ -294,6 +294,7 @@ public protocol PresentationGroupCall: class { func toggleIsMuted() func setIsMuted(action: PresentationGroupCallMuteAction) func updateDefaultParticipantsAreMuted(isMuted: Bool) + func setVolume(peerId: PeerId, volume: Double) func setCurrentAudioOutput(_ output: AudioSessionOutput) func updateMuteState(peerId: PeerId, isMuted: Bool) diff --git a/submodules/CallListUI/Sources/CallListNodeLocation.swift b/submodules/CallListUI/Sources/CallListNodeLocation.swift index 5c7655d97b..4f660fb007 100644 --- a/submodules/CallListUI/Sources/CallListNodeLocation.swift +++ b/submodules/CallListUI/Sources/CallListNodeLocation.swift @@ -57,12 +57,12 @@ func callListViewForLocationAndType(locationAndType: CallListNodeLocationAndType return (CallListNodeViewUpdate(view: view, type: .Generic, scrollPosition: nil), locationAndType.type) } case let .changeType(index): - return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 200) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in + return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 120) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in return (CallListNodeViewUpdate(view: view, type: .ReloadAnimated, scrollPosition: nil), locationAndType.type) } case let .navigation(index): var first = true - return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 200) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in + return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 120) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in let genericType: CallListNodeViewUpdateType if first { first = false @@ -76,7 +76,7 @@ func callListViewForLocationAndType(locationAndType: CallListNodeLocationAndType let directionHint: ListViewScrollToItemDirectionHint = sourceIndex > index ? .Down : .Up let callScrollPosition: CallListNodeViewScrollPosition = .index(index: index, position: scrollPosition, directionHint: directionHint, animated: animated) var first = true - return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 200) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in + return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 120) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in let genericType: CallListNodeViewUpdateType let scrollPosition: CallListNodeViewScrollPosition? = first ? callScrollPosition : nil if first { diff --git a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift index f0a13c053e..a2ef07c10c 100644 --- a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift +++ b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift @@ -1235,6 +1235,15 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { } } + public func setVolume(peerId: PeerId, volume: Double) { + for (ssrc, id) in self.ssrcMapping { + if id == peerId { + self.callContext?.setVolume(ssrc: ssrc, volume: volume) + break + } + } + } + public func setCurrentAudioOutput(_ output: AudioSessionOutput) { guard self.currentSelectedAudioOutputValue != output else { return diff --git a/submodules/TelegramVoip/Sources/GroupCallContext.swift b/submodules/TelegramVoip/Sources/GroupCallContext.swift index 3477df3b60..d06a0d06e9 100644 --- a/submodules/TelegramVoip/Sources/GroupCallContext.swift +++ b/submodules/TelegramVoip/Sources/GroupCallContext.swift @@ -133,6 +133,10 @@ public final class OngoingGroupCallContext { }) } + func setVolume(ssrc: UInt32, volume: Double) { + self.context.setVolumeForSsrc(ssrc, volume: volume) + } + func stop() { self.context.stop() } @@ -242,6 +246,12 @@ public final class OngoingGroupCallContext { } } + public func setVolume(ssrc: UInt32, volume: Double) { + self.impl.with { impl in + impl.setVolume(ssrc: ssrc, volume: volume) + } + } + public func stop() { self.impl.with { impl in impl.stop() diff --git a/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h b/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h index 8f01d6599f..a168ade2ca 100644 --- a/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h +++ b/submodules/TgVoipWebrtc/PublicHeaders/TgVoipWebrtc/OngoingCallThreadLocalContext.h @@ -168,6 +168,8 @@ typedef NS_ENUM(int32_t, GroupCallNetworkState) { - (void)removeSsrcs:(NSArray * _Nonnull)ssrcs; - (void)setIsMuted:(bool)isMuted; +- (void)setVolumeForSsrc:(uint32_t)ssrc volume:(double)volume; + - (void)switchAudioOutput:(NSString * _Nonnull)deviceId; - (void)switchAudioInput:(NSString * _Nonnull)deviceId; diff --git a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm index 61cae7f2a0..0f58e6bad8 100644 --- a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm +++ b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm @@ -1052,6 +1052,12 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL; } } +- (void)setVolumeForSsrc:(uint32_t)ssrc volume:(double)volume { + if (_instance) { + _instance->setVolume(ssrc, volume); + } +} + - (void)switchAudioOutput:(NSString * _Nonnull)deviceId { if (_instance) { _instance->setAudioOutputDevice(deviceId.UTF8String); diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index 6156230e6a..727044698c 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit 6156230e6a50c65e4e6495623989689834e8e09a +Subproject commit 727044698c8f3df83c0b6f9b37cc0ec3acba0c98