@@ -614,7 +614,7 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
614614 } )
615615
616616 return ContactsPeerItem ( presentationData: ItemListPresentationData ( presentationData) , sortOrder: . firstLast, displayOrder: . firstLast, context: context, peerMode: . generalSearch( isSavedMessages: false ) , peer: . thread( peer: peer, title: threadInfo. info. title, icon: threadInfo. info. icon, color: threadInfo. info. iconColor) , status: . none, badge: nil , enabled: true , selection: . none, editing: ContactsPeerItemEditing ( editable: false , editing: false , revealed: false ) , index: nil , header: header, action: { _ in
617- interaction. peerSelected ( peer, nil , threadInfo. id, nil )
617+ interaction. peerSelected ( peer, nil , threadInfo. id, nil , false )
618618 } , contextAction: nil , animationCache: interaction. animationCache, animationRenderer: interaction. animationRenderer)
619619 case let . recentlySearchedPeer( peer, associatedPeer, unreadBadge, _, theme, strings, nameSortOrder, nameDisplayOrder, storyStats, requiresPremiumForMessaging) :
620620 let primaryPeer : EnginePeer
@@ -667,6 +667,7 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
667667 badge = ContactsPeerItemBadge ( count: unreadBadge. 0 , type: unreadBadge. 1 ? . inactive : . active)
668668 }
669669
670+ var buttonAction : ContactsPeerItemButtonAction ?
670671 let header : ChatListSearchItemHeader ?
671672 if filter. contains ( . removeSearchHeader) {
672673 header = nil
@@ -676,15 +677,24 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
676677 headerType = . chats
677678 } else {
678679 headerType = . recentPeers
680+
681+ if case . chats = key, case let . user( user) = primaryPeer, let botInfo = user. botInfo, botInfo. flags. contains ( . hasWebApp) {
682+ buttonAction = ContactsPeerItemButtonAction (
683+ title: presentationData. strings. ChatList_Search_Open,
684+ action: { peer, _, _ in
685+ interaction. peerSelected ( primaryPeer, nil , nil , nil , true )
686+ }
687+ )
688+ }
679689 }
680690 header = ChatListSearchItemHeader ( type: headerType, theme: theme, strings: strings, actionTitle: nil , action: nil )
681691 }
682-
683- return ContactsPeerItem ( presentationData: ItemListPresentationData ( presentationData) , sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: . generalSearch( isSavedMessages: false ) , peer: . peer( peer: primaryPeer, chatPeer: chatPeer) , status: . none, badge: badge, requiresPremiumForMessaging: requiresPremiumForMessaging, enabled: enabled, selection: . none, editing: ContactsPeerItemEditing ( editable: false , editing: false , revealed: false ) , index: nil , header: header, action: { contactPeer in
692+
693+ return ContactsPeerItem ( presentationData: ItemListPresentationData ( presentationData) , sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: . generalSearch( isSavedMessages: false ) , peer: . peer( peer: primaryPeer, chatPeer: chatPeer) , status: . none, badge: badge, requiresPremiumForMessaging: requiresPremiumForMessaging, enabled: enabled, selection: . none, editing: ContactsPeerItemEditing ( editable: false , editing: false , revealed: false ) , buttonAction : buttonAction , index: nil , header: header, action: { contactPeer in
684694 if case let . peer( maybePeer, maybeChatPeer) = contactPeer, let peer = maybePeer, let chatPeer = maybeChatPeer {
685- interaction. peerSelected ( chatPeer, peer, nil , nil )
695+ interaction. peerSelected ( chatPeer, peer, nil , nil , false )
686696 } else {
687- interaction. peerSelected ( peer, nil , nil , nil )
697+ interaction. peerSelected ( peer, nil , nil , nil , false )
688698 }
689699 } , disabledAction: { _ in
690700 interaction. disabledPeerSelected ( peer, nil , requiresPremiumForMessaging ? . premiumRequired : . generic)
@@ -803,12 +813,22 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
803813 status = . custom( string: presentationData. strings. Bot_GenericBotStatus, multiline: false , isActive: false , icon: nil )
804814 }
805815 }
816+
817+ var buttonAction : ContactsPeerItemButtonAction ?
818+ if case . chats = key, case let . user( user) = primaryPeer, let botInfo = user. botInfo, botInfo. flags. contains ( . hasWebApp) {
819+ buttonAction = ContactsPeerItemButtonAction (
820+ title: presentationData. strings. ChatList_Search_Open,
821+ action: { peer, _, _ in
822+ interaction. peerSelected ( primaryPeer, nil , nil , nil , true )
823+ }
824+ )
825+ }
806826
807- return ContactsPeerItem ( presentationData: ItemListPresentationData ( presentationData) , sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: . generalSearch( isSavedMessages: isSavedMessages) , peer: . peer( peer: primaryPeer, chatPeer: chatPeer) , status: status, badge: badge, requiresPremiumForMessaging: requiresPremiumForMessaging, enabled: enabled, selection: . none, editing: ContactsPeerItemEditing ( editable: false , editing: false , revealed: false ) , index: nil , header: header, action: { contactPeer in
827+ return ContactsPeerItem ( presentationData: ItemListPresentationData ( presentationData) , sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: . generalSearch( isSavedMessages: isSavedMessages) , peer: . peer( peer: primaryPeer, chatPeer: chatPeer) , status: status, badge: badge, requiresPremiumForMessaging: requiresPremiumForMessaging, enabled: enabled, selection: . none, editing: ContactsPeerItemEditing ( editable: false , editing: false , revealed: false ) , buttonAction : buttonAction , index: nil , header: header, action: { contactPeer in
808828 if case let . peer( maybePeer, maybeChatPeer) = contactPeer, let peer = maybePeer, let chatPeer = maybeChatPeer {
809- interaction. peerSelected ( chatPeer, peer, nil , nil )
829+ interaction. peerSelected ( chatPeer, peer, nil , nil , false )
810830 } else {
811- interaction. peerSelected ( peer, nil , nil , nil )
831+ interaction. peerSelected ( peer, nil , nil , nil , false )
812832 }
813833 } , disabledAction: { _ in
814834 interaction. disabledPeerSelected ( peer, nil , requiresPremiumForMessaging ? . premiumRequired : . generic)
@@ -891,7 +911,7 @@ public enum ChatListSearchEntry: Comparable, Identifiable {
891911 }
892912
893913 return ContactsPeerItem ( presentationData: ItemListPresentationData ( presentationData) , sortOrder: nameSortOrder, displayOrder: nameDisplayOrder, context: context, peerMode: . generalSearch( isSavedMessages: isSavedMessages) , peer: . peer( peer: EnginePeer ( peer. peer) , chatPeer: EnginePeer ( peer. peer) ) , status: . addressName( suffixString) , badge: badge, requiresPremiumForMessaging: requiresPremiumForMessaging, enabled: enabled, selection: . none, editing: ContactsPeerItemEditing ( editable: false , editing: false , revealed: false ) , index: nil , header: header, searchQuery: query, action: { _ in
894- interaction. peerSelected ( EnginePeer ( peer. peer) , nil , nil , nil )
914+ interaction. peerSelected ( EnginePeer ( peer. peer) , nil , nil , nil , false )
895915 } , disabledAction: { _ in
896916 interaction. disabledPeerSelected ( EnginePeer ( peer. peer) , nil , requiresPremiumForMessaging ? . premiumRequired : . generic)
897917 } , contextAction: peerContextAction. flatMap { peerContextAction in
@@ -2883,9 +2903,29 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
28832903 }
28842904
28852905 let chatListInteraction = ChatListNodeInteraction ( context: context, animationCache: self . animationCache, animationRenderer: self . animationRenderer, activateSearch: {
2886- } , peerSelected: { [ weak self] peer, chatPeer, threadId, _ in
2906+ } , peerSelected: { [ weak self] peer, chatPeer, threadId, _, openApp in
28872907 interaction. dismissInput ( )
2888- interaction. openPeer ( peer, chatPeer, threadId, false )
2908+ if openApp, let self {
2909+ if case let . user( user) = peer, let botInfo = user. botInfo, botInfo. flags. contains ( . hasWebApp) , let parentController = self . parentController {
2910+ context. sharedContext. openWebApp (
2911+ context: context,
2912+ parentController: parentController,
2913+ updatedPresentationData: nil ,
2914+ botPeer: peer,
2915+ chatPeer: nil ,
2916+ threadId: nil ,
2917+ buttonText: " " ,
2918+ url: " " ,
2919+ simple: true ,
2920+ source: . generic,
2921+ skipTermsOfService: true ,
2922+ payload: nil
2923+ )
2924+ interaction. dismissSearch ( )
2925+ }
2926+ } else {
2927+ interaction. openPeer ( peer, chatPeer, threadId, false )
2928+ }
28892929 switch location {
28902930 case . chatList, . forum:
28912931 let _ = context. engine. peers. addRecentlySearchedPeer ( peerId: peer. id) . startStandalone ( )
@@ -3851,6 +3891,7 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
38513891 skipTermsOfService: true ,
38523892 payload: nil
38533893 )
3894+ interaction. dismissSearch ( )
38543895 } else {
38553896 interaction. openPeer ( peer, nil , threadId, true )
38563897 }
@@ -4853,7 +4894,7 @@ public final class ChatListSearchShimmerNode: ASDisplayNode {
48534894 let timestamp1 : Int32 = 100000
48544895 var peers : [ EnginePeer . Id : EnginePeer ] = [ : ]
48554896 peers [ peer1. id] = peer1
4856- let interaction = ChatListNodeInteraction ( context: context, animationCache: animationCache, animationRenderer: animationRenderer, activateSearch: { } , peerSelected: { _, _, _, _ in } , disabledPeerSelected: { _, _, _ in } , togglePeerSelected: { _, _ in } , togglePeersSelection: { _, _ in } , additionalCategorySelected: { _ in
4897+ let interaction = ChatListNodeInteraction ( context: context, animationCache: animationCache, animationRenderer: animationRenderer, activateSearch: { } , peerSelected: { _, _, _, _, _ in } , disabledPeerSelected: { _, _, _ in } , togglePeerSelected: { _, _ in } , togglePeersSelection: { _, _ in } , additionalCategorySelected: { _ in
48574898 } , messageSelected: { _, _, _, _ in } , groupSelected: { _ in } , addContact: { _ in } , setPeerIdWithRevealedOptions: { _, _ in } , setItemPinned: { _, _ in } , setPeerMuted: { _, _ in } , setPeerThreadMuted: { _, _, _ in } , deletePeer: { _, _ in } , deletePeerThread: { _, _ in } , setPeerThreadStopped: { _, _, _ in } , setPeerThreadPinned: { _, _, _ in } , setPeerThreadHidden: { _, _, _ in } , updatePeerGrouping: { _, _ in } , togglePeerMarkedUnread: { _, _ in } , toggleArchivedFolderHiddenByDefault: { } , toggleThreadsSelection: { _, _ in } , hidePsa: { _ in } , activateChatPreview: { _, _, _, gesture, _ in
48584899 gesture? . cancel ( )
48594900 } , present: { _ in } , openForumThread: { _, _ in } , openStorageManagement: { } , openPasswordSetup: { } , openPremiumIntro: { } , openPremiumGift: { _, _ in } , openPremiumManagement: { } , openActiveSessions: {
0 commit comments