diff --git a/Telegram/SiriIntents/IntentHandler.swift b/Telegram/SiriIntents/IntentHandler.swift index 843eea96d7..edca26d9f6 100644 --- a/Telegram/SiriIntents/IntentHandler.swift +++ b/Telegram/SiriIntents/IntentHandler.swift @@ -793,7 +793,7 @@ class IntentHandler: INExtension, INSendMessageIntentHandling, INSearchForMessag if let searchTerm = searchTerm { if !searchTerm.isEmpty { for renderedPeer in transaction.searchPeers(query: searchTerm) { - if let peer = renderedPeer.peer, !(peer is TelegramSecretChat) { + if let peer = renderedPeer.peer, !(peer is TelegramSecretChat), !peer.isDeleted { peers.append(peer) } } @@ -804,7 +804,7 @@ class IntentHandler: INExtension, INSendMessageIntentHandling, INSearchForMessag } } else { for renderedPeer in transaction.getTopChatListEntries(groupId: .root, count: 50) { - if let peer = renderedPeer.peer, !(peer is TelegramSecretChat) { + if let peer = renderedPeer.peer, !(peer is TelegramSecretChat), !peer.isDeleted { peers.append(peer) } } diff --git a/Telegram/WidgetKitWidget/TodayViewController.swift b/Telegram/WidgetKitWidget/TodayViewController.swift index 969c96ad86..4550059a49 100644 --- a/Telegram/WidgetKitWidget/TodayViewController.swift +++ b/Telegram/WidgetKitWidget/TodayViewController.swift @@ -369,12 +369,12 @@ struct WidgetView: View { } } - private func linkForPeer(id: Int64) -> String { + private func linkForPeer(accountId: Int64, id: Int64) -> String { switch self.widgetFamily { case .systemSmall: return "\(buildConfig.appSpecificUrlScheme)://" default: - return "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(id)" + return "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(id)&accountId=\(accountId)" } } @@ -427,7 +427,7 @@ struct WidgetView: View { return ZStack { ForEach(0 ..< min(peers.peers.count, columnCount * rowCount), content: { i in - Link(destination: URL(string: linkForPeer(id: peers.peers[i].peer.id))!, label: { + Link(destination: URL(string: linkForPeer(accountId: peers.peers[i].accountId, id: peers.peers[i].peer.id))!, label: { AvatarItemView( peer: peers.peers[i], itemSize: itemSize @@ -507,13 +507,29 @@ struct WidgetView: View { case .text: break case .image: - text = "🖼 Photo" + if !message.text.isEmpty { + text = "🖼 \(message.text)" + } else { + text = "🖼 Photo" + } case .video: - text = "📹 Video" + if !message.text.isEmpty { + text = "📹 \(message.text)" + } else { + text = "📹 Video" + } case .gif: - text = "Gif" + if !message.text.isEmpty { + text = "\(message.text)" + } else { + text = "Gif" + } case let .file(file): - text = "📎 \(file.name)" + if !message.text.isEmpty { + text = "📹 \(message.text)" + } else { + text = "📎 \(file.name)" + } case let .music(music): if !music.title.isEmpty && !music.artist.isEmpty { text = "\(music.artist) — \(music.title)" @@ -611,9 +627,11 @@ struct WidgetView: View { func chatContentView(_ index: Int, size: CGSize) -> AnyView { let peers: ParsedPeers? + var isPlaceholder = false switch data { case let .peers(peersValue): if peersValue.peers.count <= index { + isPlaceholder = peersValue.peers.count != 0 peers = nil } else { peers = peersValue @@ -624,9 +642,15 @@ struct WidgetView: View { let itemHeight = (size.height - 22.0) / 2.0 + if isPlaceholder { + return AnyView(Spacer() + .frame(width: size.width, height: itemHeight, alignment: .leading) + ) + } + let url: URL if let peers = peers { - url = URL(string: linkForPeer(id: peers.peers[index].peer.id))! + url = URL(string: linkForPeer(accountId: peers.peers[index].accountId, id: peers.peers[index].peer.id))! } else { url = URL(string: "\(buildConfig.appSpecificUrlScheme)://")! } diff --git a/submodules/TelegramUI/Sources/OpenUrl.swift b/submodules/TelegramUI/Sources/OpenUrl.swift index e85b6a7b6f..a27728c279 100644 --- a/submodules/TelegramUI/Sources/OpenUrl.swift +++ b/submodules/TelegramUI/Sources/OpenUrl.swift @@ -236,18 +236,21 @@ func openExternalUrlImpl(context: AccountContext, urlContext: OpenURLContext, ur if parsedUrl.host == "localpeer" { if let components = URLComponents(string: "/?" + query) { var peerId: PeerId? + var accountId: Int64? if let queryItems = components.queryItems { for queryItem in queryItems { if let value = queryItem.value { if queryItem.name == "id", let intValue = Int64(value) { peerId = PeerId(intValue) + } else if queryItem.name == "accountId", let intValue = Int64(value) { + accountId = intValue } } } } - if let peerId = peerId, let navigationController = navigationController { + if let peerId = peerId, let accountId = accountId { context.sharedContext.applicationBindings.dismissNativeController() - context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId))) + context.sharedContext.navigateToChat(accountId: AccountRecordId(rawValue: accountId), peerId: peerId, messageId: nil) } } } else if parsedUrl.host == "join" {