From fd538327d879757b3beaf250822ed2554d4e7600 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 28 Sep 2021 14:52:56 +0300 Subject: [PATCH 01/10] Cherry-pick more fixes --- Telegram/Telegram-iOS/en.lproj/Localizable.strings | 1 + submodules/TelegramCallsUI/Sources/VoiceChatController.swift | 4 ++++ submodules/TelegramUI/Sources/ChatMediaInputGridEntries.swift | 3 +++ submodules/TelegramUI/Sources/PeachHaptic.swift | 2 +- submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift | 2 +- 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index a896f1b90f..c2e713aae1 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -4289,6 +4289,7 @@ Unused sets are archived when you add more."; "Settings.CheckPhoneNumberText" = "Keep your number up to date to ensure you can always log in to Telegram. [Learn more]()"; "Settings.KeepPhoneNumber" = "Keep %@"; "Settings.ChangePhoneNumber" = "Change Number"; +"Settings.CheckPhoneNumberFAQAnchor" = "q-i-have-a-new-phone-number-what-do-i-do"; "Undo.ChatDeletedForBothSides" = "Chat deleted for both sides"; diff --git a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift index 82adac7ae7..b6042eba0f 100644 --- a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift +++ b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift @@ -5827,6 +5827,10 @@ public final class VoiceChatController: ViewController { let translation = recognizer.translation(in: self.contentContainer.view) var velocity = recognizer.velocity(in: self.contentContainer.view) + if self.isScheduled && (translation.y < 0.0 || velocity.y < 0.0) { + return + } + if case let .known(value) = contentOffset, value > 0.0 { velocity = CGPoint() } else if case .unknown = contentOffset { diff --git a/submodules/TelegramUI/Sources/ChatMediaInputGridEntries.swift b/submodules/TelegramUI/Sources/ChatMediaInputGridEntries.swift index 2e1671d13e..4149960057 100644 --- a/submodules/TelegramUI/Sources/ChatMediaInputGridEntries.swift +++ b/submodules/TelegramUI/Sources/ChatMediaInputGridEntries.swift @@ -142,6 +142,9 @@ enum ChatMediaInputGridEntry: Equatable, Comparable, Identifiable { if lhsStrings !== rhsStrings { return false } + if lhsPacks.count != rhsPacks.count { + return false + } for i in 0 ..< lhsPacks.count { if lhsPacks[i].unread != rhsPacks[i].unread { return false diff --git a/submodules/TelegramUI/Sources/PeachHaptic.swift b/submodules/TelegramUI/Sources/PeachHaptic.swift index e92ffeb0af..10a6d757ab 100644 --- a/submodules/TelegramUI/Sources/PeachHaptic.swift +++ b/submodules/TelegramUI/Sources/PeachHaptic.swift @@ -2,7 +2,7 @@ import Foundation import Display import SwiftSignalKit -private let impactTime: Double = 0.4 +private let impactTime: Double = 0.6 final class PeachHaptic: EmojiHaptic { private var hapticFeedback = HapticFeedback() diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index 106d7ec186..5d1a37cb24 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -701,7 +701,7 @@ private func settingsItems(data: PeerInfoScreenData?, context: AccountContext, p let phoneNumber = formatPhoneNumber(peer.phone ?? "") items[.phone]!.append(PeerInfoScreenInfoItem(id: 0, title: presentationData.strings.Settings_CheckPhoneNumberTitle(phoneNumber).string, text: .markdown(presentationData.strings.Settings_CheckPhoneNumberText), linkAction: { link in if case .tap = link { - interaction.openFaq("q-i-have-a-new-phone-number-what-do-i-do") + interaction.openFaq(presentationData.strings.Settings_CheckPhoneNumberFAQAnchor) } })) items[.phone]!.append(PeerInfoScreenActionItem(id: 1, text: presentationData.strings.Settings_KeepPhoneNumber(phoneNumber).string, action: { From 481a6dbf6445266a04ab3740a7d1e5665814f205 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 28 Sep 2021 18:59:06 +0400 Subject: [PATCH 02/10] Update device strings --- submodules/MtProtoKit/Sources/MTApiEnvironment.m | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/submodules/MtProtoKit/Sources/MTApiEnvironment.m b/submodules/MtProtoKit/Sources/MTApiEnvironment.m index bcab215524..c44a91c866 100644 --- a/submodules/MtProtoKit/Sources/MTApiEnvironment.m +++ b/submodules/MtProtoKit/Sources/MTApiEnvironment.m @@ -569,6 +569,14 @@ NSString *suffix = @""; return @"iPhone 12 Pro"; if ([platform isEqualToString:@"iPhone13,4"]) return @"iPhone 12 Pro Max"; + if ([platform isEqualToString:@"iPhone14,2"]) + return @"iPhone 13 Pro"; + if ([platform isEqualToString:@"iPhone14,3"]) + return @"iPhone 13 Pro Max"; + if ([platform isEqualToString:@"iPhone14,4"]) + return @"iPhone 13 Mini"; + if ([platform isEqualToString:@"iPhone14,5"]) + return @"iPhone 13"; if ([platform hasPrefix:@"iPod1"]) return @"iPod touch 1G"; From 8b517156be0798259e4012ec2a02c473dfaf8e7d Mon Sep 17 00:00:00 2001 From: Ali <> Date: Mon, 4 Oct 2021 18:22:24 +0400 Subject: [PATCH 03/10] Bump version --- versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.json b/versions.json index 4b23ebc07a..e735941e1c 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,5 @@ { - "app": "8.1.2", + "app": "8.2", "bazel": "4.0.0", "xcode": "13.0" } From 0340ad1596e976c0678811c12189dc6b422b5e76 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Thu, 14 Oct 2021 00:47:34 +0400 Subject: [PATCH 04/10] Trigger build --- Random.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Random.txt b/Random.txt index f2ad2dc94e..0777cb76a9 100644 --- a/Random.txt +++ b/Random.txt @@ -1 +1 @@ -1c6f97bd3d230ccacfcdb9ff323624644fa53fc0ca4bbb6a5152826fa731a273 +2bf91df86de591d993771f62fd05896852285001a5e720b8b04158a855350de3 From 6b2aabaf0022c76f674f3bcfdbeaf406d57b5550 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 14 Oct 2021 23:45:59 +0400 Subject: [PATCH 05/10] Fix theme settings coding --- .../Sources/PresentationThemeSettings.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift b/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift index f6501a0ef4..7e85856ca0 100644 --- a/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift +++ b/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift @@ -643,8 +643,8 @@ public struct PresentationThemeSettings: Codable { public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: StringCodingKey.self) - if let themeData = try container.decodeIfPresent(AdaptedPostboxDecoder.RawObjectData.self, forKey: "t"), let theme = PostboxDecoder(buffer: MemoryBuffer(data: themeData.data)).decodeRootObjectWithHash(hash: themeData.typeHash) as? PresentationThemeReference { - self.theme = theme + if let themeData = try container.decodeIfPresent(AdaptedPostboxDecoder.RawObjectData.self, forKey: "t") { + self.theme = PresentationThemeReference(decoder: PostboxDecoder(buffer: MemoryBuffer(data: themeData.data))) } else { self.theme = .builtin(.dayClassic) } From a7e59cecf4cf0971afb053ad92dc25f7e9f7ed5f Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 26 Oct 2021 14:18:27 +0400 Subject: [PATCH 06/10] Fix notification service --- .../Sources/NotificationService.swift | 62 +++++++++++++-- .../Sources/Account/Account.swift | 75 ++++++++++++------- .../SyncCore_AccountBackupDataAttribute.swift | 10 ++- .../TelegramUI/Sources/AppDelegate.swift | 4 + 4 files changed, 115 insertions(+), 36 deletions(-) diff --git a/Telegram/NotificationService/Sources/NotificationService.swift b/Telegram/NotificationService/Sources/NotificationService.swift index ff735b74ae..c3c1185147 100644 --- a/Telegram/NotificationService/Sources/NotificationService.swift +++ b/Telegram/NotificationService/Sources/NotificationService.swift @@ -598,17 +598,40 @@ private final class NotificationServiceHandler { return nil } - let _ = (self.accountManager.currentAccountRecord(allocateIfNotExists: false) + let _ = (self.accountManager.accountRecords() |> take(1) |> deliverOn(self.queue)).start(next: { [weak self] records in - guard let strongSelf = self, let record = records else { + var recordId: AccountRecordId? + var isCurrentAccount: Bool = false + + if let keyId = notificationPayloadKeyId(data: payloadData) { + outer: for listRecord in records.records { + for attribute in listRecord.attributes { + if case let .backupData(backupData) = attribute { + if let notificationEncryptionKeyId = backupData.data?.notificationEncryptionKeyId { + if keyId == notificationEncryptionKeyId { + recordId = listRecord.id + isCurrentAccount = records.currentRecord?.id == listRecord.id + break outer + } + } + } + } + } + } + + guard let strongSelf = self, let recordId = recordId else { + let content = NotificationContent() + updateCurrentContent(content) + completed() + return } let _ = (standaloneStateManager( accountManager: strongSelf.accountManager, networkArguments: networkArguments, - id: record.0, + id: recordId, encryptionParameters: strongSelf.encryptionParameters, rootPath: rootPath, auxiliaryMethods: accountAuxiliaryMethods @@ -618,6 +641,8 @@ private final class NotificationServiceHandler { return } guard let stateManager = stateManager else { + let content = NotificationContent() + updateCurrentContent(content) completed() return } @@ -626,18 +651,31 @@ private final class NotificationServiceHandler { strongSelf.notificationKeyDisposable.set((existingMasterNotificationsKey(postbox: stateManager.postbox) |> deliverOn(strongSelf.queue)).start(next: { notificationsKey in guard let strongSelf = self else { + let content = NotificationContent() + updateCurrentContent(content) + completed() + return } guard let notificationsKey = notificationsKey else { + let content = NotificationContent() + updateCurrentContent(content) completed() + return } guard let decryptedPayload = decryptedNotificationPayload(key: notificationsKey, data: payloadData) else { + let content = NotificationContent() + updateCurrentContent(content) completed() + return } guard let payloadJson = try? JSONSerialization.jsonObject(with: decryptedPayload, options: []) as? [String: Any] else { + let content = NotificationContent() + updateCurrentContent(content) completed() + return } @@ -663,6 +701,10 @@ private final class NotificationServiceHandler { if let channelIdValue = Int64(channelIdString) { peerId = PeerId(namespace: Namespaces.Peer.CloudChannel, id: PeerId.Id._internalFromInt64Value(channelIdValue)) } + } else if let encryptionIdString = payloadJson["encryption_id"] as? String { + if let encryptionIdValue = Int64(encryptionIdString) { + peerId = PeerId(namespace: Namespaces.Peer.SecretChat, id: PeerId.Id._internalFromInt64Value(encryptionIdValue)) + } } enum Action { @@ -735,7 +777,7 @@ private final class NotificationServiceHandler { } content.userInfo["peerId"] = "\(peerId.toInt64())" - content.userInfo["accountId"] = "\(record.0.int64)" + content.userInfo["accountId"] = "\(recordId.int64)" if let silentString = payloadJson["silent"] as? String { if let silentValue = Int(silentString), silentValue != 0 { @@ -888,7 +930,9 @@ private final class NotificationServiceHandler { return } - content.badge = Int(value.0) + if isCurrentAccount { + content.badge = Int(value.0) + } if let image = mediaAttachment as? TelegramMediaImage, let resource = largestImageRepresentation(image.representations)?.resource { if let mediaData = mediaData { @@ -1037,7 +1081,9 @@ private final class NotificationServiceHandler { ) |> deliverOn(strongSelf.queue)).start(next: { value in var content = NotificationContent() - content.badge = Int(value.0) + if isCurrentAccount { + content.badge = Int(value.0) + } updateCurrentContent(content) @@ -1080,7 +1126,9 @@ private final class NotificationServiceHandler { ) |> deliverOn(strongSelf.queue)).start(next: { value in var content = NotificationContent() - content.badge = Int(value.0) + if isCurrentAccount { + content.badge = Int(value.0) + } updateCurrentContent(content) diff --git a/submodules/TelegramCore/Sources/Account/Account.swift b/submodules/TelegramCore/Sources/Account/Account.swift index 5ccafd6349..19d4c84d1a 100644 --- a/submodules/TelegramCore/Sources/Account/Account.swift +++ b/submodules/TelegramCore/Sources/Account/Account.swift @@ -693,37 +693,49 @@ private func masterNotificationsKey(masterNotificationKeyValue: Atomic MasterNotificationKey? in - if let value = transaction.keychainEntryForKey("master-notification-secret"), !value.isEmpty { - let authKeyHash = sha1Digest(value) - let authKeyId = authKeyHash.subdata(in: authKeyHash.count - 8 ..< authKeyHash.count) - let keyData = MasterNotificationKey(id: authKeyId, data: value) - let _ = masterNotificationKeyValue.swap(keyData) - return keyData - } else if createIfNotExists { - var secretData = Data(count: 256) - let secretDataCount = secretData.count - if !secretData.withUnsafeMutableBytes({ rawBytes -> Bool in - let bytes = rawBytes.baseAddress!.assumingMemoryBound(to: Int8.self) - let copyResult = SecRandomCopyBytes(nil, secretDataCount, bytes) - return copyResult == errSecSuccess - }) { - assertionFailure() - } - - transaction.setKeychainEntry(secretData, forKey: "master-notification-secret") - let authKeyHash = sha1Digest(secretData) - let authKeyId = authKeyHash.subdata(in: authKeyHash.count - 8 ..< authKeyHash.count) - let keyData = MasterNotificationKey(id: authKeyId, data: secretData) - let _ = masterNotificationKeyValue.swap(keyData) - return keyData - } else { - return nil - } + let result = masterNotificationsKey(transaction: transaction, createIfNotExists: createIfNotExists) + let _ = masterNotificationKeyValue.swap(result) + return result }) } +func masterNotificationsKey(transaction: Transaction, createIfNotExists: Bool) -> MasterNotificationKey? { + if let value = transaction.keychainEntryForKey("master-notification-secret"), !value.isEmpty { + let authKeyHash = sha1Digest(value) + let authKeyId = authKeyHash.subdata(in: authKeyHash.count - 8 ..< authKeyHash.count) + let keyData = MasterNotificationKey(id: authKeyId, data: value) + return keyData + } else if createIfNotExists { + var secretData = Data(count: 256) + let secretDataCount = secretData.count + if !secretData.withUnsafeMutableBytes({ rawBytes -> Bool in + let bytes = rawBytes.baseAddress!.assumingMemoryBound(to: Int8.self) + let copyResult = SecRandomCopyBytes(nil, secretDataCount, bytes) + return copyResult == errSecSuccess + }) { + assertionFailure() + } + + transaction.setKeychainEntry(secretData, forKey: "master-notification-secret") + let authKeyHash = sha1Digest(secretData) + let authKeyId = authKeyHash.subdata(in: authKeyHash.count - 8 ..< authKeyHash.count) + let keyData = MasterNotificationKey(id: authKeyId, data: secretData) + return keyData + } else { + return nil + } +} + +public func notificationPayloadKeyId(data: Data) -> Data? { + if data.count < 8 { + return nil + } + + return data.subdata(in: 0 ..< 8) +} + public func decryptedNotificationPayload(key: MasterNotificationKey, data: Data) -> Data? { if data.count < 8 { return nil @@ -792,7 +804,14 @@ public func accountBackupData(postbox: Postbox) -> Signal Data? { private func accountIdFromNotification(_ notification: UNNotification, sharedContext: Signal) -> Signal { if let id = notification.request.content.userInfo["accountId"] as? Int64 { return .single(AccountRecordId(rawValue: id)) + } else if let idString = notification.request.content.userInfo["accountId"] as? String, let id = Int64(idString) { + return .single(AccountRecordId(rawValue: id)) } else { var encryptedData: Data? if var encryptedPayload = notification.request.content.userInfo["p"] as? String { @@ -2336,6 +2338,8 @@ private func accountIdFromNotification(_ notification: UNNotification, sharedCon private func peerIdFromNotification(_ notification: UNNotification) -> PeerId? { if let peerId = notification.request.content.userInfo["peerId"] as? Int64 { return PeerId(peerId) + } else if let peerIdString = notification.request.content.userInfo["peerId"] as? String, let peerId = Int64(peerIdString) { + return PeerId(peerId) } else { let payload = notification.request.content.userInfo var peerId: PeerId? From c95766858d2a55ee889cf89410d312e2944a0d2d Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 26 Oct 2021 14:24:21 +0400 Subject: [PATCH 07/10] Shared media improvements --- .../SparseItemGrid/Sources/SparseItemGridScrollingArea.swift | 2 +- .../Sources/TelegramEngine/Messages/SparseMessageList.swift | 4 ++-- .../Sources/DefaultDarkPresentationTheme.swift | 2 +- .../Sources/DefaultDarkTintedPresentationTheme.swift | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/submodules/SparseItemGrid/Sources/SparseItemGridScrollingArea.swift b/submodules/SparseItemGrid/Sources/SparseItemGridScrollingArea.swift index 139eea45b5..38e9579515 100644 --- a/submodules/SparseItemGrid/Sources/SparseItemGridScrollingArea.swift +++ b/submodules/SparseItemGrid/Sources/SparseItemGridScrollingArea.swift @@ -802,7 +802,7 @@ public final class SparseItemGridScrollingArea: ASDisplayNode { let indicatorSize = self.dateIndicator.update( transition: .immediate, component: AnyComponent(SparseItemGridScrollingIndicatorComponent( - backgroundColor: theme.list.itemHighlightedBackgroundColor, + backgroundColor: theme.list.itemBlocksBackgroundColor, shadowColor: .black, foregroundColor: theme.list.itemPrimaryTextColor, dateString: dateString diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Messages/SparseMessageList.swift b/submodules/TelegramCore/Sources/TelegramEngine/Messages/SparseMessageList.swift index 48da3da24d..4ac4b36196 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Messages/SparseMessageList.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Messages/SparseMessageList.swift @@ -209,8 +209,8 @@ public final class SparseMessageList { var removeIndices: [Int] = [] for i in 0 ..< sparseItems.items.count { switch sparseItems.items[i] { - case let .anchor(id, _, message): - if message != nil, idsSet.contains(id) { + case let .anchor(id, _, _): + if idsSet.contains(id) { removeIndices.append(i) } default: diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift index 3f546a860d..fb4cfcdb68 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift @@ -389,7 +389,7 @@ public func makeDefaultDarkPresentationTheme(extendingThemeReference: Presentati controlColor: UIColor(rgb: 0x98989e) ), mediaPlaceholderColor: UIColor(rgb: 0xffffff).mixedWith(UIColor(rgb: 0x1c1c1d), alpha: 0.9), - scrollIndicatorColor: UIColor(rgb: 0xffffff, alpha: 0.3), + scrollIndicatorColor: UIColor(rgb: 0xffffff, alpha: 0.5), pageIndicatorInactiveColor: UIColor(white: 1.0, alpha: 0.3), inputClearButtonColor: UIColor(rgb: 0x8b9197), itemBarChart: PresentationThemeItemBarChart(color1: UIColor(rgb: 0xffffff), color2: UIColor(rgb: 0x929196), color3: UIColor(rgb: 0x333333)), diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift index 81d4daea79..c8ea3de526 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift @@ -644,7 +644,7 @@ public func makeDefaultDarkTintedPresentationTheme(extendingThemeReference: Pres controlColor: mainSecondaryTextColor.withAlphaComponent(0.5) ), mediaPlaceholderColor: UIColor(rgb: 0xffffff).mixedWith(mainBackgroundColor, alpha: 0.9), - scrollIndicatorColor: UIColor(white: 1.0, alpha: 0.3), + scrollIndicatorColor: UIColor(white: 1.0, alpha: 0.5), pageIndicatorInactiveColor: mainSecondaryTextColor.withAlphaComponent(0.4), inputClearButtonColor: mainSecondaryColor, itemBarChart: PresentationThemeItemBarChart(color1: accentColor, color2: mainSecondaryTextColor.withAlphaComponent(0.5), color3: accentColor.withMultiplied(hue: 1.038, saturation: 0.329, brightness: 0.33)), From 3d0a67fb6e3387b50cef50837673eb449a51dc1f Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 26 Oct 2021 14:24:53 +0400 Subject: [PATCH 08/10] Replace merchant id --- Telegram/BUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Telegram/BUILD b/Telegram/BUILD index bcc1987dc2..483c8c16e0 100644 --- a/Telegram/BUILD +++ b/Telegram/BUILD @@ -372,7 +372,6 @@ plist_fragment( official_apple_pay_merchants = [ "merchant.ph.telegra.Telegraph", - "merchant.yandex.ph.telegra.Telegraph", "merchant.sberbank.ph.telegra.Telegraph", "merchant.sberbank.test.ph.telegra.Telegraph", "merchant.privatbank.test.telergramios", @@ -380,6 +379,7 @@ official_apple_pay_merchants = [ "merchant.paymaster.test.telegramios", "merchant.smartglocal.prod.telegramios", "merchant.smartglocal.test.telegramios", + "merchant.yoomoney.test.telegramios", ] official_bundle_ids = [ From 1e2b1027af4c8b63be88a7d5264bfbf2e3f6be59 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 26 Oct 2021 14:25:48 +0400 Subject: [PATCH 09/10] Bump version --- versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.json b/versions.json index 4b23ebc07a..e735941e1c 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,5 @@ { - "app": "8.1.2", + "app": "8.2", "bazel": "4.0.0", "xcode": "13.0" } From 426c2f7e79916af26b33bcf684b11cca11e00b4b Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 26 Oct 2021 14:57:40 +0400 Subject: [PATCH 10/10] Fix fetch status --- submodules/TelegramUI/Sources/FetchManager.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/submodules/TelegramUI/Sources/FetchManager.swift b/submodules/TelegramUI/Sources/FetchManager.swift index cf546fc69c..d267ddae57 100644 --- a/submodules/TelegramUI/Sources/FetchManager.swift +++ b/submodules/TelegramUI/Sources/FetchManager.swift @@ -101,6 +101,8 @@ private final class FetchManagerStatusContext { return .Fetching(isActive: false, progress: 0.0) } else if self.hasEntry { return originalStatus + } else if case .Local = originalStatus { + return originalStatus } else { return .Remote }