Update widget

This commit is contained in:
Ali 2021-02-11 19:50:32 +04:00
parent 1cbe7cdd29
commit ba2d454924
3 changed files with 39 additions and 12 deletions

View File

@ -793,7 +793,7 @@ class IntentHandler: INExtension, INSendMessageIntentHandling, INSearchForMessag
if let searchTerm = searchTerm { if let searchTerm = searchTerm {
if !searchTerm.isEmpty { if !searchTerm.isEmpty {
for renderedPeer in transaction.searchPeers(query: searchTerm) { 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) peers.append(peer)
} }
} }
@ -804,7 +804,7 @@ class IntentHandler: INExtension, INSendMessageIntentHandling, INSearchForMessag
} }
} else { } else {
for renderedPeer in transaction.getTopChatListEntries(groupId: .root, count: 50) { 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) peers.append(peer)
} }
} }

View File

@ -369,12 +369,12 @@ struct WidgetView: View {
} }
} }
private func linkForPeer(id: Int64) -> String { private func linkForPeer(accountId: Int64, id: Int64) -> String {
switch self.widgetFamily { switch self.widgetFamily {
case .systemSmall: case .systemSmall:
return "\(buildConfig.appSpecificUrlScheme)://" return "\(buildConfig.appSpecificUrlScheme)://"
default: default:
return "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(id)" return "\(buildConfig.appSpecificUrlScheme)://localpeer?id=\(id)&accountId=\(accountId)"
} }
} }
@ -427,7 +427,7 @@ struct WidgetView: View {
return ZStack { return ZStack {
ForEach(0 ..< min(peers.peers.count, columnCount * rowCount), content: { i in 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( AvatarItemView(
peer: peers.peers[i], peer: peers.peers[i],
itemSize: itemSize itemSize: itemSize
@ -507,13 +507,29 @@ struct WidgetView: View {
case .text: case .text:
break break
case .image: case .image:
if !message.text.isEmpty {
text = "🖼 \(message.text)"
} else {
text = "🖼 Photo" text = "🖼 Photo"
}
case .video: case .video:
if !message.text.isEmpty {
text = "📹 \(message.text)"
} else {
text = "📹 Video" text = "📹 Video"
}
case .gif: case .gif:
if !message.text.isEmpty {
text = "\(message.text)"
} else {
text = "Gif" text = "Gif"
}
case let .file(file): case let .file(file):
if !message.text.isEmpty {
text = "📹 \(message.text)"
} else {
text = "📎 \(file.name)" text = "📎 \(file.name)"
}
case let .music(music): case let .music(music):
if !music.title.isEmpty && !music.artist.isEmpty { if !music.title.isEmpty && !music.artist.isEmpty {
text = "\(music.artist)\(music.title)" text = "\(music.artist)\(music.title)"
@ -611,9 +627,11 @@ struct WidgetView: View {
func chatContentView(_ index: Int, size: CGSize) -> AnyView { func chatContentView(_ index: Int, size: CGSize) -> AnyView {
let peers: ParsedPeers? let peers: ParsedPeers?
var isPlaceholder = false
switch data { switch data {
case let .peers(peersValue): case let .peers(peersValue):
if peersValue.peers.count <= index { if peersValue.peers.count <= index {
isPlaceholder = peersValue.peers.count != 0
peers = nil peers = nil
} else { } else {
peers = peersValue peers = peersValue
@ -624,9 +642,15 @@ struct WidgetView: View {
let itemHeight = (size.height - 22.0) / 2.0 let itemHeight = (size.height - 22.0) / 2.0
if isPlaceholder {
return AnyView(Spacer()
.frame(width: size.width, height: itemHeight, alignment: .leading)
)
}
let url: URL let url: URL
if let peers = peers { 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 { } else {
url = URL(string: "\(buildConfig.appSpecificUrlScheme)://")! url = URL(string: "\(buildConfig.appSpecificUrlScheme)://")!
} }

View File

@ -236,18 +236,21 @@ func openExternalUrlImpl(context: AccountContext, urlContext: OpenURLContext, ur
if parsedUrl.host == "localpeer" { if parsedUrl.host == "localpeer" {
if let components = URLComponents(string: "/?" + query) { if let components = URLComponents(string: "/?" + query) {
var peerId: PeerId? var peerId: PeerId?
var accountId: Int64?
if let queryItems = components.queryItems { if let queryItems = components.queryItems {
for queryItem in queryItems { for queryItem in queryItems {
if let value = queryItem.value { if let value = queryItem.value {
if queryItem.name == "id", let intValue = Int64(value) { if queryItem.name == "id", let intValue = Int64(value) {
peerId = PeerId(intValue) 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.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" { } else if parsedUrl.host == "join" {