[WIP] Stories

This commit is contained in:
Ali
2023-05-02 23:45:50 +04:00
parent cd4940865d
commit ed389b83ec
51 changed files with 5154 additions and 2474 deletions

View File

@@ -45,6 +45,8 @@ import ChatListHeaderComponent
import ChatListTitleView
import InviteLinksUI
import ChatFolderLinkPreviewScreen
import StoryContainerScreen
import StoryContentComponent
private func fixListNodeScrolling(_ listNode: ListView, searchNode: NavigationBarSearchContentNode) -> Bool {
if listNode.scroller.isDragging {
@@ -205,6 +207,9 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
private var powerSavingMonitoringDisposable: Disposable?
private var storyListContext: StoryListContext?
private var storyListStateDisposable: Disposable?
public override func updateNavigationCustomData(_ data: Any?, progress: CGFloat, transition: ContainedViewLayoutTransition) {
if self.isNodeLoaded {
self.chatListDisplayNode.effectiveContainerNode.updateSelectedChatLocation(data: data as? ChatLocation, progress: progress, transition: transition)
@@ -739,6 +744,7 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
self.joinForumDisposable.dispose()
self.actionDisposables.dispose()
self.powerSavingMonitoringDisposable?.dispose()
self.storyListStateDisposable?.dispose()
}
private func updateNavigationMetadata() {
@@ -1314,6 +1320,30 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
}
}
self.chatListDisplayNode.mainContainerNode.openStories = { [weak self] peerId in
guard let self, let storyListContext = self.storyListContext else {
return
}
let _ = (StoryChatContent.stories(
context: context,
storyList: storyListContext,
focusItem: nil
)
|> take(1)
|> deliverOnMainQueue).start(next: { [weak self] initialContent in
guard let self else {
return
}
let storyContainerScreen = StoryContainerScreen(
context: self.context,
initialFocusedId: AnyHashable(peerId),
initialContent: initialContent
)
self.push(storyContainerScreen)
})
}
self.chatListDisplayNode.peerContextAction = { [weak self] peer, source, node, gesture, location in
guard let strongSelf = self else {
gesture?.cancel()
@@ -2029,6 +2059,29 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
}
}
})
let storyListContext = self.context.engine.messages.allStories()
self.storyListContext = storyListContext
self.storyListStateDisposable = (storyListContext.state
|> deliverOnMainQueue).start(next: { [weak self] state in
guard let self else {
return
}
let _ = self
let _ = state
self.chatListDisplayNode.mainContainerNode.currentItemNode.updateState { chatListState in
var chatListState = chatListState
var peersWithNewStories = Set<EnginePeer.Id>()
for itemSet in state.itemSets {
peersWithNewStories.insert(itemSet.peerId)
}
chatListState.peersWithNewStories = peersWithNewStories
return chatListState
}
})
}
self.chatListDisplayNode.mainContainerNode.addedVisibleChatsWithPeerIds = { [weak self] peerIds in