diff --git a/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift index c18a2229d6..d33d2887a8 100644 --- a/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift @@ -830,23 +830,6 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo self.listNode.isHidden = true self.mediaNode.isHidden = true - self.listNode.visibleBottomContentOffsetChanged = { offset in - guard case let .known(value) = offset, value < 160.0 else { - return - } - updateSearchContext { previous in - guard let previous = previous else { - return (nil, false) - } - if previous.loadMoreIndex != nil { - return (previous, false) - } - guard let last = previous.result.messages.last else { - return (previous, false) - } - return (ChatListSearchMessagesContext(result: previous.result, loadMoreIndex: last.index), true) - } - } self.recentListNode.isHidden = filter.contains(.excludeRecent) let currentRemotePeers = Atomic<([FoundPeer], [FoundPeer])?>(value: nil) @@ -1177,8 +1160,24 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo return ([], 0, false) } } + + let loadMore = { + updateSearchContext { previous in + guard let previous = previous else { + return (nil, false) + } + if previous.loadMoreIndex != nil { + return (previous, false) + } + guard let last = previous.result.messages.last else { + return (previous, false) + } + return (ChatListSearchMessagesContext(result: previous.result, loadMoreIndex: last.index), true) + } + } + openMediaMessageImpl = { [weak self] message, mode in - let _ = context.sharedContext.openChatMessage(OpenChatMessageParams(context: context, chatLocation: nil, chatLocationContextHolder: nil, message: message, standalone: false, reverseMessageGalleryOrder: true, navigationController: nil, dismissInput: { + let _ = context.sharedContext.openChatMessage(OpenChatMessageParams(context: context, chatLocation: nil, chatLocationContextHolder: nil, message: message, standalone: false, reverseMessageGalleryOrder: true, navigationController: navigationController, dismissInput: { self?.view.window?.endEditing(true) }, present: { c, a in present(c, a) @@ -1205,18 +1204,7 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo }, callPeer: { _, _ in }, enqueueMessage: { _ in }, sendSticker: nil, setupTemporaryHiddenMedia: { _, _, _ in }, chatAvatarHiddenMedia: { _, _ in }, gallerySource: .custom(messages: foundMessages, messageId: message.id, loadMore: { - updateSearchContext { previous in - guard let previous = previous else { - return (nil, false) - } - if previous.loadMoreIndex != nil { - return (previous, false) - } - guard let last = previous.result.messages.last else { - return (previous, false) - } - return (ChatListSearchMessagesContext(result: previous.result, loadMoreIndex: last.index), true) - } + loadMore() }))) } @@ -1415,25 +1403,33 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo })) let listInteraction = ListMessageItemInteraction(openMessage: { [weak self] message, mode -> Bool in - return context.sharedContext.openChatMessage(OpenChatMessageParams(context: context, chatLocation: nil, chatLocationContextHolder: nil, message: message, standalone: false, reverseMessageGalleryOrder: false, navigationController: nil, dismissInput: { [weak self] in + return context.sharedContext.openChatMessage(OpenChatMessageParams(context: context, chatLocation: nil, chatLocationContextHolder: nil, message: message, standalone: false, reverseMessageGalleryOrder: true, navigationController: navigationController, dismissInput: { [weak self] in self?.view.window?.endEditing(true) }, present: { c, a in present(c, a) - }, transitionNode: { messageId, media in - return transitionNodeImpl?(messageId, media) + }, transitionNode: { [weak self] messageId, media in + var transitionNode: (ASDisplayNode, CGRect, () -> (UIView?, UIView?))? + if let strongSelf = self { + strongSelf.listNode.forEachItemNode { itemNode in + if let itemNode = itemNode as? ListMessageNode { + if let result = itemNode.transitionNode(id: messageId, media: media) { + transitionNode = result + } + } + } + } + return transitionNode }, addToTransitionSurface: { view in - - // strongSelf.paneContainerNode.currentPane?.node.addToTransitionSurface(view: view) + self?.view.addSubview(view) }, openUrl: { url in // self?.openUrl(url: url, concealed: false, external: false) }, openPeer: { peer, navigation in // self?.openPeer(peerId: peer.id, navigation: navigation) - }, callPeer: { peerId, isVideo in - //self?.controllerInteraction?.callPeer(peerId) + }, callPeer: { _, _ in }, enqueueMessage: { _ in - }, sendSticker: nil, setupTemporaryHiddenMedia: { _, _, _ in }, chatAvatarHiddenMedia: { _, _ in }, playlistLocation: .searchResults(query: "", peerId: nil, messages: [], at: message.id))) - - return true + }, sendSticker: nil, setupTemporaryHiddenMedia: { _, _, _ in }, chatAvatarHiddenMedia: { _, _ in }, playlistLocation: .searchResults(query: "", peerId: nil, messages: [], at: message.id), gallerySource: .custom(messages: foundMessages, messageId: message.id, loadMore: { + loadMore() + }))) }, openMessageContextMenu: { [weak self] message, bool, node, rect, gesture in self?.messageContextAction(message, node: node, rect: rect, gesture: gesture) }, toggleMessagesSelection: { messageId, selected in @@ -1452,12 +1448,10 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo self?.view.window?.endEditing(true) }, contentContext: nil) }) - }, openInstantPage: { [weak self] message, data in - if let strongSelf = self { - if let (webpage, anchor) = instantPageAndAnchor(message: message) { - let pageController = InstantPageController(context: context, webPage: webpage, sourcePeerType: .channel, anchor: anchor) - navigationController?.pushViewController(pageController) - } + }, openInstantPage: { message, data in + if let (webpage, anchor) = instantPageAndAnchor(message: message) { + let pageController = InstantPageController(context: context, webPage: webpage, sourcePeerType: .channel, anchor: anchor) + navigationController?.pushViewController(pageController) } }, longTap: { action, message in @@ -1554,19 +1548,15 @@ public final class ChatListSearchContainerNode: SearchDisplayControllerContentNo self?.dismissInput?() } - self.mediaNode.loadMore = { - updateSearchContext { previous in - guard let previous = previous else { - return (nil, false) - } - if previous.loadMoreIndex != nil { - return (previous, false) - } - guard let last = previous.result.messages.last else { - return (previous, false) - } - return (ChatListSearchMessagesContext(result: previous.result, loadMoreIndex: last.index), true) + self.listNode.visibleBottomContentOffsetChanged = { offset in + guard case let .known(value) = offset, value < 160.0 else { + return } + loadMore() + } + + self.mediaNode.loadMore = { + loadMore() } self.filterContainerNode.filterPressed = { [weak self] filter in diff --git a/submodules/GalleryData/Sources/GalleryData.swift b/submodules/GalleryData/Sources/GalleryData.swift index c342eb3858..a04e70fa18 100644 --- a/submodules/GalleryData/Sources/GalleryData.swift +++ b/submodules/GalleryData/Sources/GalleryData.swift @@ -215,7 +215,7 @@ public func chatMessageGalleryControllerData(context: AccountContext, chatLocati } if internalDocumentItemSupportsMimeType(file.mimeType, fileName: file.fileName ?? "file") { - let gallery = GalleryController(context: context, source: .peerMessagesAtId(messageId: message.id, chatLocation: chatLocation ?? .peer(message.id.peerId), chatLocationContextHolder: chatLocationContextHolder ?? Atomic(value: nil)), invertItemOrder: reverseMessageGalleryOrder, streamSingleVideo: stream, fromPlayingVideo: autoplayingVideo, landscape: landscape, timecode: timecode, synchronousLoad: synchronousLoad, replaceRootController: { [weak navigationController] controller, ready in + let gallery = GalleryController(context: context, source: source ?? .peerMessagesAtId(messageId: message.id, chatLocation: chatLocation ?? .peer(message.id.peerId), chatLocationContextHolder: chatLocationContextHolder ?? Atomic(value: nil)), invertItemOrder: reverseMessageGalleryOrder, streamSingleVideo: stream, fromPlayingVideo: autoplayingVideo, landscape: landscape, timecode: timecode, synchronousLoad: synchronousLoad, replaceRootController: { [weak navigationController] controller, ready in navigationController?.replaceTopController(controller, animated: false, ready: ready) }, baseNavigationController: navigationController, actionInteraction: actionInteraction) return .gallery(.single(gallery)) diff --git a/submodules/GalleryUI/Sources/GalleryController.swift b/submodules/GalleryUI/Sources/GalleryController.swift index d1810115d9..a961a3decd 100644 --- a/submodules/GalleryUI/Sources/GalleryController.swift +++ b/submodules/GalleryUI/Sources/GalleryController.swift @@ -451,9 +451,9 @@ public class GalleryController: ViewController, StandalonePresentableController return messages |> map { messages, totalCount, hasMore in var entries: [MessageHistoryEntry] = [] - var index = messages.count - 1 + var index = messages.count for message in messages.reversed() { - entries.append(MessageHistoryEntry(message: message, isRead: false, location: MessageHistoryEntryLocation(index: index, count: Int(totalCount)), monthLocation: nil, attributes: MutableMessageHistoryEntryAttributes(authorIsContact: false))) + entries.append(MessageHistoryEntry(message: message, isRead: false, location: MessageHistoryEntryLocation(index: Int(totalCount) - index, count: Int(totalCount)), monthLocation: nil, attributes: MutableMessageHistoryEntryAttributes(authorIsContact: false))) index -= 1 } return GalleryMessageHistoryView.entries(entries, hasMore, false) @@ -1076,9 +1076,9 @@ public class GalleryController: ViewController, StandalonePresentableController } var entries: [MessageHistoryEntry] = [] - var index = messages.count - 1 + var index = messages.count for message in messages.reversed() { - entries.append(MessageHistoryEntry(message: message, isRead: false, location: MessageHistoryEntryLocation(index: index, count: Int(totalCount)), monthLocation: nil, attributes: MutableMessageHistoryEntryAttributes(authorIsContact: false))) + entries.append(MessageHistoryEntry(message: message, isRead: false, location: MessageHistoryEntryLocation(index: Int(totalCount) - index, count: Int(totalCount)), monthLocation: nil, attributes: MutableMessageHistoryEntryAttributes(authorIsContact: false))) index -= 1 }