diff --git a/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift b/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift index f63db4ddeb..794d0c709d 100644 --- a/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift +++ b/submodules/ChatImportUI/Sources/ChatImportActivityScreen.swift @@ -101,7 +101,7 @@ private final class ImportManager { var totalMediaBytes = 0 for entry in self.entries { - self.entryProgress[entry.0.path] = (Int(entry.0.uncompressedSize), 0) + self.entryProgress[entry.1] = (Int(entry.0.uncompressedSize), 0) totalMediaBytes += Int(entry.0.uncompressedSize) } self.totalBytes = self.mainFileSize + totalMediaBytes @@ -277,8 +277,8 @@ private final class ImportManager { guard let strongSelf = self else { return } - if let (size, _) = strongSelf.entryProgress[entry.0.path] { - strongSelf.entryProgress[entry.0.path] = (size, Int(progress * Float(entry.0.uncompressedSize))) + if let (size, _) = strongSelf.entryProgress[entry.1] { + strongSelf.entryProgress[entry.1] = (size, Int(progress * Float(entry.0.uncompressedSize))) strongSelf.updateProgress() } }, error: { [weak self] error in @@ -290,8 +290,9 @@ private final class ImportManager { guard let strongSelf = self else { return } - Logger.shared.log("ChatImportScreen", "updateState entry \(entry.1) has completed upload") - strongSelf.activeEntries.removeValue(forKey: entry.0.path) + Logger.shared.log("ChatImportScreen", "updateState entry \(entry.1) has completed upload, previous active entries: \(strongSelf.activeEntries.keys)") + strongSelf.activeEntries.removeValue(forKey: entry.1) + Logger.shared.log("ChatImportScreen", "removed active entry \(entry.1), current active entries: \(strongSelf.activeEntries.keys)") strongSelf.updateState() })) } diff --git a/submodules/Postbox/Sources/MessageHistoryViewState.swift b/submodules/Postbox/Sources/MessageHistoryViewState.swift index 65d6028f42..98de702b7b 100644 --- a/submodules/Postbox/Sources/MessageHistoryViewState.swift +++ b/submodules/Postbox/Sources/MessageHistoryViewState.swift @@ -764,7 +764,7 @@ struct OrderedHistoryViewEntries { if self.lowerOrAtAnchor.count > 1 { for i in 1 ..< self.lowerOrAtAnchor.count { if self.lowerOrAtAnchor[i].index < self.lowerOrAtAnchor[i - 1].index { - assertionFailure() + //assertionFailure() break } } @@ -772,7 +772,7 @@ struct OrderedHistoryViewEntries { if self.higherThanAnchor.count > 1 { for i in 1 ..< self.higherThanAnchor.count { if self.higherThanAnchor[i].index < self.higherThanAnchor[i - 1].index { - assertionFailure() + //assertionFailure() break } } @@ -796,7 +796,7 @@ struct OrderedHistoryViewEntries { } } if fix { - assertionFailure() + //assertionFailure() self.lowerOrAtAnchor.sort(by: { $0.index.id.id < $1.index.id.id }) self.higherThanAnchor.sort(by: { $0.index.id.id < $1.index.id.id }) } diff --git a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift index a057d961e7..8b4ff0de27 100644 --- a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift +++ b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift @@ -360,6 +360,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { private var internalState: InternalState = .requesting private let internalStatePromise = Promise(.requesting) + private var currentLocalSsrc: UInt32? private var callContext: OngoingGroupCallContext? private var currentConnectionMode: OngoingGroupCallContext.ConnectionMode = .none @@ -1003,6 +1004,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { guard let strongSelf = self else { return } + strongSelf.currentLocalSsrc = ssrc strongSelf.requestDisposable.set((joinGroupCall( account: strongSelf.account, peerId: strongSelf.peerId, @@ -1608,7 +1610,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { } public func leave(terminateIfPossible: Bool) -> Signal { - if case let .established(callInfo, _, _, localSsrc, _) = self.internalState { + if let callInfo = self.internalState.callInfo, let localSsrc = self.currentLocalSsrc { if terminateIfPossible { self.leaveDisposable.set((stopGroupCall(account: self.account, peerId: self.peerId, callId: callInfo.id, accessHash: callInfo.accessHash) |> deliverOnMainQueue).start(completed: { [weak self] in diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 89aababbf3..9b259f6ca5 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -3049,7 +3049,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } })) } else if case let .replyThread(messagePromise) = self.chatLocationInfoData { - let hasScheduledMessages: Signal = .single(false) self.reportIrrelvantGeoNoticePromise.set(.single(nil)) let replyThreadType: ChatTitleContent.ReplyThreadType @@ -3936,8 +3935,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return message } |> distinctUntilChanged - default: - topPinnedMessage = .single(nil) + case let .replyThread(replyThreadMessage): + return .single(nil) } return topPinnedMessage } diff --git a/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift b/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift index 498e94aea2..87f4587397 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift @@ -28,7 +28,7 @@ func titlePanelForChatPresentationInterfaceState(_ chatPresentationInterfaceStat } var selectedContext: ChatTitlePanelContext? - if !chatPresentationInterfaceState.titlePanelContexts.isEmpty && !inhibitTitlePanelDisplay { + if !chatPresentationInterfaceState.titlePanelContexts.isEmpty { loop: for context in chatPresentationInterfaceState.titlePanelContexts.reversed() { switch context { case .pinnedMessage: @@ -42,6 +42,15 @@ func titlePanelForChatPresentationInterfaceState(_ chatPresentationInterfaceStat } } } + + if inhibitTitlePanelDisplay, let selectedContextValue = selectedContext { + switch selectedContextValue { + case .pinnedMessage: + break + default: + selectedContext = nil + } + } var displayActionsPanel = false if !chatPresentationInterfaceState.peerIsBlocked && !inhibitTitlePanelDisplay, let contactStatus = chatPresentationInterfaceState.contactStatus, let peerStatusSettings = contactStatus.peerStatusSettings { diff --git a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm index f061d7e184..948fd87723 100644 --- a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm +++ b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm @@ -7,6 +7,7 @@ #import "Instance.h" #import "InstanceImpl.h" #import "reference/InstanceImplReference.h" +#include "StaticThreads.h" #import "VideoCaptureInterface.h" @@ -158,7 +159,7 @@ if (keepLandscape) { resolvedId += std::string(":landscape"); } - _interface = tgcalls::VideoCaptureInterface::Create(resolvedId); + _interface = tgcalls::VideoCaptureInterface::Create(tgcalls::StaticThreads::getThreads(), resolvedId); } return self; } @@ -863,6 +864,7 @@ private: __weak GroupCallThreadLocalContext *weakSelf = self; _instance.reset(new tgcalls::GroupInstanceCustomImpl((tgcalls::GroupInstanceDescriptor){ + .threads = tgcalls::StaticThreads::getThreads(), .networkStateUpdated = [weakSelf, queue, networkStateUpdated](tgcalls::GroupNetworkState networkState) { [queue dispatch:^{ __strong GroupCallThreadLocalContext *strongSelf = weakSelf; diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index 943d24ab5c..4a95374737 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit 943d24ab5c86d2e4d739e82234b4d14210433ca0 +Subproject commit 4a953747375b8648f8b66e9572b59b10f7b769a1