diff --git a/NotificationContent/NotificationViewController.swift b/NotificationContent/NotificationViewController.swift index 0b3e7df15b..b4709862d1 100644 --- a/NotificationContent/NotificationViewController.swift +++ b/NotificationContent/NotificationViewController.swift @@ -117,10 +117,14 @@ class NotificationViewController: UIViewController, UNNotificationContentExtensi let appVersion = (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? "unknown" - sharedAccountContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in }) + sharedAccountContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, legacyBasePath: nil, legacyCache: nil, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in }) } } + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + } + func didReceive(_ notification: UNNotification) { if let accountIdValue = notification.request.content.userInfo["accountId"] as? Int64, let peerIdValue = notification.request.content.userInfo["peerId"] as? Int64, let messageIdNamespace = notification.request.content.userInfo["messageId.namespace"] as? Int32, let messageIdId = notification.request.content.userInfo["messageId.id"] as? Int32, let dict = notification.request.content.userInfo["mediaInfo"] as? [String: Any] { let messageId = MessageId(peerId: PeerId(peerIdValue), namespace: messageIdNamespace, id: messageIdId) diff --git a/NotificationService/NotificationService.swift b/NotificationService/NotificationService.swift index 69fdf9e6b9..232905d689 100644 --- a/NotificationService/NotificationService.swift +++ b/NotificationService/NotificationService.swift @@ -190,7 +190,7 @@ class NotificationService: UNNotificationServiceExtension { if accountsData.count > 1 { if let title = self.bestAttemptContent?.title, !account.peerName.isEmpty { - self.bestAttemptContent?.title = "[\(account.peerName)] \(title)" + self.bestAttemptContent?.title = "\(title) [\(account.peerName)]" } } diff --git a/Share/ShareRootController.swift b/Share/ShareRootController.swift index bbfc10152e..8199d34192 100644 --- a/Share/ShareRootController.swift +++ b/Share/ShareRootController.swift @@ -160,7 +160,7 @@ class ShareRootController: UIViewController { }) semaphore.wait() - let sharedContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in }) + let sharedContext = SharedAccountContext(mainWindow: nil, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: NetworkInitializationArguments(apiId: apiId, languagesCategory: languagesCategory, appVersion: appVersion, voipMaxLayer: 0), rootPath: rootPath, legacyBasePath: nil, legacyCache: nil, apsNotificationToken: .never(), voipNotificationToken: .never(), setNotificationCall: { _ in }, navigateToChat: { _, _, _ in }) sharedExtensionContext = SharedExtensionContext(sharedContext: sharedContext) globalSharedExtensionContext = sharedExtensionContext } @@ -207,7 +207,6 @@ class ShareRootController: UIViewController { } |> deliverOnMainQueue |> afterNext { [weak self] context, accessChallengeData, otherAccounts in - setupAccount(context.account) setupLegacyComponents(context: context) initializeLegacyComponents(application: nil, currentSizeClassGetter: { return .compact }, currentHorizontalClassGetter: { return .compact }, documentsPath: "", currentApplicationBounds: { return CGRect() }, canOpenUrl: { _ in return false}, openUrl: { _ in }) diff --git a/Telegram-iOS.xcodeproj/project.pbxproj b/Telegram-iOS.xcodeproj/project.pbxproj index abf5021080..d76d736002 100644 --- a/Telegram-iOS.xcodeproj/project.pbxproj +++ b/Telegram-iOS.xcodeproj/project.pbxproj @@ -236,7 +236,6 @@ D02CF61B215DA24900E0F56A /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02CF61A215DA24900E0F56A /* TelegramCore.framework */; }; D02CF61C215E51D500E0F56A /* BuildConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = D09250011FE52D2A003F693F /* BuildConfig.m */; }; D02E31231BD803E800CD3F01 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D02E31221BD803E800CD3F01 /* main.m */; }; - D039FB172170F06A00BD1BAD /* PreFetchedLegacyResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D039FB162170F06A00BD1BAD /* PreFetchedLegacyResource.swift */; }; D03B0E7B1D63484500955575 /* ShareRootController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03B0E7A1D63484500955575 /* ShareRootController.swift */; }; D03B0E821D63484500955575 /* Share.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D03B0E781D63484500955575 /* Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; D03B0E8A1D634B1100955575 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D03B0E871D634B1100955575 /* Display.framework */; }; @@ -948,7 +947,6 @@ D0369C8B1D3E2C9500D91AFC /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; D0369C8D1D3E2E4800D91AFC /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; }; D0369C8F1D3E2E5000D91AFC /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; - D039FB162170F06A00BD1BAD /* PreFetchedLegacyResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreFetchedLegacyResource.swift; sourceTree = ""; }; D03B0E781D63484500955575 /* Share.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Share.appex; sourceTree = BUILT_PRODUCTS_DIR; }; D03B0E7A1D63484500955575 /* ShareRootController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareRootController.swift; sourceTree = ""; }; D03B0E7F1D63484500955575 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -2348,7 +2346,6 @@ D0ADF962212C9AA900310BBC /* TGProxyItem.h */, D0ADF963212C9AA900310BBC /* TGProxyItem.m */, D051DB5C21602D6E00F30F92 /* LegacyDataImportSplash.swift */, - D039FB162170F06A00BD1BAD /* PreFetchedLegacyResource.swift */, ); name = "Legacy Data Import"; sourceTree = ""; @@ -3218,7 +3215,6 @@ 09C50E912173B247009E676F /* TGBridgeSubscriptions.m in Sources */, 09D304262174341A00C00567 /* TGBridgeLocationVenue.m in Sources */, 09D304312174344900C00567 /* TGBridgeImageMediaAttachment.m in Sources */, - D039FB172170F06A00BD1BAD /* PreFetchedLegacyResource.swift in Sources */, 09D304292174343300C00567 /* TGBridgeBotInfo.m in Sources */, 09D304272174341E00C00567 /* TGBridgeChatMessages.m in Sources */, D0B21B0F220438E9003F741D /* SharedNotificationManager.swift in Sources */, diff --git a/Telegram-iOS/AppDelegate.swift b/Telegram-iOS/AppDelegate.swift index c4f2bec2e0..b605041dbe 100644 --- a/Telegram-iOS/AppDelegate.swift +++ b/Telegram-iOS/AppDelegate.swift @@ -171,32 +171,6 @@ private final class SharedApplicationContext { private var replyFromNotificationsDisposables = DisposableSet() - private var replyFromNotificationsTokensValue = Set() { - didSet { - assert(Queue.mainQueue().isCurrent()) - self.replyFromNotificationsTokensPromise.set(.single(self.replyFromNotificationsTokensValue)) - } - } - private let replyFromNotificationsTokensPromise = Promise>(Set()) - private var nextToken: Int32 = 0 - private func takeNextToken() -> Int32 { - let value = self.nextToken - self.nextToken = value + 1 - return value - } - private func addReplyFromNotificationsToken() -> Int32 { - let token = self.takeNextToken() - var value = self.replyFromNotificationsTokensValue - value.insert(token) - self.replyFromNotificationsTokensValue = value - return token - } - private func removeReplyFromNotificationsToken(_ token: Int32) { - var value = self.replyFromNotificationsTokensValue - value.remove(token) - self.replyFromNotificationsTokensValue = value - } - private var _notificationTokenPromise: Promise? private let voipTokenPromise = Promise() @@ -211,11 +185,6 @@ private final class SharedApplicationContext { } } - //private var queuedNotifications: [[AnyHashable: Any]] = [] - //private var queuedNotificationRequests: [(String, String, String?, NotificationManagedNotificationRequestId)] = [] - private var queuedMutePolling = false - private var queuedAnnouncements: [String] = [] - private var queuedWakeups = Set() private var clearNotificationsManager: ClearNotificationsManager? private let idleTimerExtensionSubscribers = Bag() @@ -618,8 +587,11 @@ private final class SharedApplicationContext { }) semaphore.wait() + let legacyBasePath = appGroupUrl.path + let legacyCache = LegacyCache(path: legacyBasePath + "/Caches") + var setPresentationCall: ((PresentationCall?) -> Void)? - let sharedContext = SharedAccountContext(mainWindow: self.mainWindow, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: networkArguments, rootPath: rootPath, apsNotificationToken: self.notificationTokenPromise.get() |> map(Optional.init), voipNotificationToken: self.voipTokenPromise.get() |> map(Optional.init), setNotificationCall: { call in + let sharedContext = SharedAccountContext(mainWindow: self.mainWindow, accountManager: accountManager, applicationBindings: applicationBindings, initialPresentationDataAndSettings: initialPresentationDataAndSettings!, networkArguments: networkArguments, rootPath: rootPath, legacyBasePath: legacyBasePath, legacyCache: legacyCache, apsNotificationToken: self.notificationTokenPromise.get() |> map(Optional.init), voipNotificationToken: self.voipTokenPromise.get() |> map(Optional.init), setNotificationCall: { call in setPresentationCall?(call) }, navigateToChat: { accountId, peerId, messageId in self.openChatWhenReady(accountId: accountId, peerId: peerId, messageId: messageId) @@ -758,15 +730,6 @@ private final class SharedApplicationContext { }) let watchManagerArgumentsPromise = Promise() - - let replyFromNotificationsActive = self.replyFromNotificationsTokensPromise.get() - |> map { - !$0.isEmpty - } - |> distinctUntilChanged - - let backgroundAudioActive = self.hasActiveAudioSession.get() - |> distinctUntilChanged self.context.set(self.sharedContextPromise.get() |> deliverOnMainQueue @@ -800,7 +763,7 @@ private final class SharedApplicationContext { |> map { accountAndSettings -> AuthorizedApplicationContext? in return accountAndSettings.flatMap { account, limitsConfiguration, callListSettings in let context = AccountContext(sharedContext: sharedApplicationContext.sharedContext, account: account, limitsConfiguration: limitsConfiguration) - return AuthorizedApplicationContext(mainWindow: self.mainWindow, replyFromNotificationsActive: replyFromNotificationsActive, backgroundAudioActive: backgroundAudioActive, watchManagerArguments: watchManagerArgumentsPromise.get(), context: context, accountManager: sharedApplicationContext.sharedContext.accountManager, legacyBasePath: appGroupUrl.path, showCallsTab: callListSettings.showTab, reinitializedNotificationSettings: { + return AuthorizedApplicationContext(mainWindow: self.mainWindow, watchManagerArguments: watchManagerArgumentsPromise.get(), context: context, accountManager: sharedApplicationContext.sharedContext.accountManager, showCallsTab: callListSettings.showTab, reinitializedNotificationSettings: { let _ = (self.context.get() |> take(1) |> deliverOnMainQueue).start(next: { context in @@ -1607,8 +1570,6 @@ private final class SharedApplicationContext { } else if response.actionIdentifier == "reply", let peerId = peerIdFromNotification(response.notification) { if let response = response as? UNTextInputNotificationResponse, !response.userText.isEmpty { let text = response.userText - let token = addReplyFromNotificationsToken() - let signal = self.authorizedContext() |> take(1) |> mapToSignal { context -> Signal in @@ -1659,7 +1620,6 @@ private final class SharedApplicationContext { if let disposable = disposable { self.replyFromNotificationsDisposables.remove(disposable) } - self.removeReplyFromNotificationsToken(token) completionHandler() } }).start()) diff --git a/Telegram-iOS/ApplicationContext.swift b/Telegram-iOS/ApplicationContext.swift index 48010b4dd8..5766f95b08 100644 --- a/Telegram-iOS/ApplicationContext.swift +++ b/Telegram-iOS/ApplicationContext.swift @@ -50,16 +50,12 @@ final class AuthorizedApplicationContext { let lockedCoveringView: LockedWindowCoveringView let context: AccountContext - let replyFromNotificationsActive: Signal - let backgroundAudioActive: Signal let rootController: TelegramRootController let notificationController: NotificationContainerController private var scheduledOperChatWithPeerId: PeerId? private var scheduledOpenExternalUrl: URL? - - //let notificationManager: NotificationManager private let passcodeStatusDisposable = MetaDisposable() private let passcodeLockDisposable = MetaDisposable() @@ -103,7 +99,7 @@ final class AuthorizedApplicationContext { private var showCallsTabDisposable: Disposable? private var enablePostboxTransactionsDiposable: Disposable? - init(mainWindow: Window1, replyFromNotificationsActive: Signal, backgroundAudioActive: Signal, watchManagerArguments: Signal, context: AccountContext, accountManager: AccountManager, legacyBasePath: String, showCallsTab: Bool, reinitializedNotificationSettings: @escaping () -> Void) { + init(mainWindow: Window1, watchManagerArguments: Signal, context: AccountContext, accountManager: AccountManager, showCallsTab: Bool, reinitializedNotificationSettings: @escaping () -> Void) { setupLegacyComponents(context: context) let presentationData = context.sharedContext.currentPresentationData.with { $0 } @@ -111,8 +107,6 @@ final class AuthorizedApplicationContext { self.lockedCoveringView = LockedWindowCoveringView(theme: presentationData.theme) self.context = context - self.replyFromNotificationsActive = replyFromNotificationsActive - self.backgroundAudioActive = backgroundAudioActive let runningWatchTasksPromise = Promise(nil) @@ -126,49 +120,8 @@ final class AuthorizedApplicationContext { } |> distinctUntilChanged - //self.wakeupManager = WakeupManager(accountManager: context.sharedContext.accountManager, inForeground: context.sharedContext.applicationBindings.applicationInForeground, runningServiceTasks: context.account.importantTasksRunning, runningBackgroundLocationTasks: runningBackgroundLocationTasks, runningWatchTasks: runningWatchTasksPromise.get(), runningDownloadTasks: runningDownloadTasks) - self.showCallsTab = showCallsTab - //self.notificationManager = NotificationManager() - //self.notificationManager.isApplicationInForeground = false - - /*let shouldBeServiceTaskMaster = combineLatest(context.sharedContext.applicationBindings.applicationInForeground, self.wakeupManager.isWokenUp, replyFromNotificationsActive, backgroundAudioActive, callManager.hasActiveCalls) - |> map { foreground, wokenUp, replyFromNotificationsActive, backgroundAudioActive, hasActiveCalls -> AccountServiceTaskMasterMode in - if foreground || wokenUp || replyFromNotificationsActive || hasActiveCalls { - return .always - } else { - return .never - } - } - context.account.shouldBeServiceTaskMaster.set(shouldBeServiceTaskMaster) - self.enablePostboxTransactionsDiposable = (combineLatest(shouldBeServiceTaskMaster, backgroundAudioActive) - |> map { shouldBeServiceTaskMaster, backgroundAudioActive -> Bool in - switch shouldBeServiceTaskMaster { - case .never: - break - default: - return true - } - if backgroundAudioActive { - return true - } - return false - } - |> deliverOnMainQueue).start(next: { [weak context] next in - if let context = context { - Logger.shared.log("ApplicationContext", "setting canBeginTransactions to \(next)") - context.account.postbox.setCanBeginTransactions(next) - } - })*/ - //context.account.shouldExplicitelyKeepWorkerConnections.set(backgroundAudioActive) - - let cache = TGCache(cachesPath: legacyBasePath + "/Caches")! - - setupAccount(context.account, fetchCachedResourceRepresentation: fetchCachedResourceRepresentation, transformOutgoingMessageMedia: transformOutgoingMessageMedia, preFetchedResourcePath: { resource in - preFetchedLegacyResourcePath(basePath: legacyBasePath, resource: resource, cache: cache) - }) - self.notificationController = NotificationContainerController(context: context) self.mainWindow.previewThemeAccentColor = presentationData.theme.rootController.navigationBar.accentTextColor diff --git a/Telegram-iOS/PreFetchedLegacyResource.swift b/Telegram-iOS/PreFetchedLegacyResource.swift deleted file mode 100644 index de13c480da..0000000000 --- a/Telegram-iOS/PreFetchedLegacyResource.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation -import Postbox -import TelegramCore - -import LegacyComponents - -func preFetchedLegacyResourcePath(basePath: String, resource: MediaResource, cache: TGCache) -> String? { - - if let resource = resource as? CloudDocumentMediaResource { - let videoPath = "\(basePath)/Documents/video/remote\(String(resource.fileId, radix: 16)).mov" - if FileManager.default.fileExists(atPath: videoPath) { - return videoPath - } - let fileName = resource.fileName?.replacingOccurrences(of: "/", with: "_") ?? "file" - return pathFromLegacyFile(basePath: basePath, fileId: resource.fileId, isLocal: false, fileName: fileName) - } else if let resource = resource as? CloudFileMediaResource { - return cache.path(forCachedData: "\(resource.datacenterId)_\(resource.volumeId)_\(resource.localId)_\(resource.secret)") - } - return nil -} diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings index 2e2daa9e11..3e8db7d8a2 100644 --- a/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram-iOS/en.lproj/Localizable.strings @@ -1441,6 +1441,7 @@ "Target.InviteToGroupConfirmation" = "Add the bot to \"%@\"?"; "Target.InviteToGroupErrorAlreadyInvited" = "The bot is already a member of the group."; "Bot.GenericBotStatus" = "bot"; +"Bot.GenericSupportStatus" = "bot"; "Bot.DescriptionTitle" = "What can this bot do?"; "Bot.GroupStatusReadsHistory" = "has access to messages"; "Bot.GroupStatusDoesNotReadHistory" = "has no access to messages"; @@ -4026,3 +4027,18 @@ Unused sets are archived when you add more."; "ChatSettings.AutoDownloadSettings.TypeFile" = "Files (%@)"; "ChatSettings.AutoDownloadSettings.OffForAll" = "Disabled"; "ChatSettings.AutoDownloadSettings.Delimeter" = ", "; + +"LogoutOptions.Title" = "Log out"; +"LogoutOptions.AlternativeOptionsSection" = "ALTERNATIVE OPTIONS"; +"LogoutOptions.AddAccountTitle" = "Add another account"; +"LogoutOptions.AddAccountText" = "Set up multiple phone numbers and easily switch between them."; +"LogoutOptions.SetPasscodeTitle" = "Set a Passcode"; +"LogoutOptions.SetPasscodeText" = "Lock the app with a passcode so that others can't open it."; +"LogoutOptions.ClearCacheTitle" = "Clear Cache"; +"LogoutOptions.ClearCacheText" = "Free up disk space on your device; your media will stay in the cloud."; +"LogoutOptions.ChangePhoneNumberTitle" = "Change Phone Number"; +"LogoutOptions.ChangePhoneNumberText" = "Move your contacts, groups, messages and media to a new number."; +"LogoutOptions.ContactSupportTitle" = "Contact Support"; +"LogoutOptions.ContactSupportText" = "Tell us about any issues; logging out doesn't usually help."; +"LogoutOptions.LogOut" = "Log Out"; +"LogoutOptions.LogOutInfo" = "Remember, logging out kills all your Secret Chats."; diff --git a/Widget/TodayViewController.swift b/Widget/TodayViewController.swift index c550656dfe..9183f8d508 100644 --- a/Widget/TodayViewController.swift +++ b/Widget/TodayViewController.swift @@ -94,11 +94,9 @@ class TodayViewController: UIViewController, NCWidgetProviding { } } - let applicationInterface = account |> afterNext { account in - setupAccount(account) - } |> deliverOnMainQueue |> afterNext { [weak self] account in - account.resetStateManagement() - + let applicationInterface = account + |> deliverOnMainQueue + |> afterNext { [weak self] account in let _ = (recentPeers(account: account) |> deliverOnMainQueue).start(next: { peers in if let strongSelf = self { @@ -106,7 +104,7 @@ class TodayViewController: UIViewController, NCWidgetProviding { case let .peers(peers): strongSelf.setPeers(account: account, peers: peers.filter { !$0.isDeleted }) case .disabled: - break + strongSelf.setPeers(account: account, peers: []) } } }) @@ -210,9 +208,6 @@ class TodayViewController: UIViewController, NCWidgetProviding { if let path = self.getSnapshotPath() { DispatchQueue.main.async { UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0.0) - /*let context = UIGraphicsGetCurrentContext() - context?.setFillColor(UIColor.blue.cgColor) - context?.fill(CGRect(origin: CGPoint(), size: self.view.bounds.size))*/ self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: false) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() diff --git a/submodules/AsyncDisplayKit b/submodules/AsyncDisplayKit index 2777cc3f38..5cf9244c99 160000 --- a/submodules/AsyncDisplayKit +++ b/submodules/AsyncDisplayKit @@ -1 +1 @@ -Subproject commit 2777cc3f38f6693b6cb7bf6416a1e550a0c621d9 +Subproject commit 5cf9244c99b24d7780cbe2b920e04f3bc1fdbc87 diff --git a/submodules/Display b/submodules/Display index e908f22334..9a2b81c465 160000 --- a/submodules/Display +++ b/submodules/Display @@ -1 +1 @@ -Subproject commit e908f22334e715845848373679ce592ad162fe52 +Subproject commit 9a2b81c465c26a823bec6aaecc42e51de4773562 diff --git a/submodules/MtProtoKit b/submodules/MtProtoKit index 67e60e8e8b..dd02b83037 160000 --- a/submodules/MtProtoKit +++ b/submodules/MtProtoKit @@ -1 +1 @@ -Subproject commit 67e60e8e8b4ab11daa5b52e732d1a62232b2d31a +Subproject commit dd02b83037bc296d3fc0c7d1962a58c828788537 diff --git a/submodules/Postbox b/submodules/Postbox index 0b8a19f5c9..f027996caa 160000 --- a/submodules/Postbox +++ b/submodules/Postbox @@ -1 +1 @@ -Subproject commit 0b8a19f5c9766f4a7c418e9d9ec2f0472b956e9e +Subproject commit f027996caa7b7b4174dcb8622d321b143f746628 diff --git a/submodules/TelegramCore b/submodules/TelegramCore index 92afd48eea..2d16542a27 160000 --- a/submodules/TelegramCore +++ b/submodules/TelegramCore @@ -1 +1 @@ -Subproject commit 92afd48eea5f74d882ff33b8dd3322f01890e020 +Subproject commit 2d16542a27fb3d43eedaea8ddddaf506e249be1d diff --git a/submodules/TelegramUI b/submodules/TelegramUI index 1eba45ce51..5149354c84 160000 --- a/submodules/TelegramUI +++ b/submodules/TelegramUI @@ -1 +1 @@ -Subproject commit 1eba45ce51f1ec05acaf1ca782d4e228ae02137a +Subproject commit 5149354c84e030f92949ed2038aab8b7ed3083fc