Refactoring

This commit is contained in:
Ali 2022-05-29 03:55:42 +04:00
parent 47fb45e08f
commit 3d10a0c38c
6 changed files with 35 additions and 49 deletions

View File

@ -281,12 +281,12 @@ func chatContextMenuItems(context: AccountContext, peerId: PeerId, promoInfo: Ch
if isUnread {
items.append(.action(ContextMenuActionItem(text: strings.ChatList_Context_MarkAsRead, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/MarkAsRead"), color: theme.contextMenu.primaryColor) }, action: { _, f in
let _ = togglePeerUnreadMarkInteractively(postbox: context.account.postbox, viewTracker: context.account.viewTracker, peerId: peerId).start()
let _ = context.engine.messages.togglePeersUnreadMarkInteractively(peerIds: [peerId], setToValue: nil).start()
f(.default)
})))
} else {
items.append(.action(ContextMenuActionItem(text: strings.ChatList_Context_MarkAsUnread, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/MarkAsUnread"), color: theme.contextMenu.primaryColor) }, action: { _, f in
let _ = togglePeerUnreadMarkInteractively(postbox: context.account.postbox, viewTracker: context.account.viewTracker, peerId: peerId).start()
let _ = context.engine.messages.togglePeersUnreadMarkInteractively(peerIds: [peerId], setToValue: nil).start()
f(.default)
})))
}

View File

@ -2421,18 +2421,12 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
if case .left = action {
let signal: Signal<Never, NoError>
var completion: (() -> Void)?
let context = self.context
if !peerIds.isEmpty {
self.chatListDisplayNode.containerNode.currentItemNode.setCurrentRemovingPeerId(peerIds.first!)
completion = { [weak self] in
self?.chatListDisplayNode.containerNode.currentItemNode.setCurrentRemovingPeerId(nil)
}
signal = self.context.account.postbox.transaction { transaction -> Void in
for peerId in peerIds {
togglePeerUnreadMarkInteractively(transaction: transaction, viewTracker: context.account.viewTracker, peerId: peerId, setToValue: false)
}
}
|> ignoreValues
signal = self.context.engine.messages.togglePeersUnreadMarkInteractively(peerIds: Array(peerIds), setToValue: false)
} else {
let groupId = self.groupId
let filterPredicate: ChatListFilterPredicate?

View File

@ -885,7 +885,7 @@ public final class ChatListNode: ListView {
return
}
self?.setCurrentRemovingPeerId(peerId)
let _ = (togglePeerUnreadMarkInteractively(postbox: context.account.postbox, viewTracker: context.account.viewTracker, peerId: peerId)
let _ = (context.engine.messages.togglePeersUnreadMarkInteractively(peerIds: [peerId], setToValue: nil)
|> deliverOnMainQueue).start(completed: {
self?.updateState { state in
var state = state

View File

@ -109,13 +109,13 @@ func applySecretOutgoingMessageReadActions(transaction: Transaction, id: Message
}
}
public func togglePeerUnreadMarkInteractively(postbox: Postbox, viewTracker: AccountViewTracker, peerId: PeerId, setToValue: Bool? = nil) -> Signal<Void, NoError> {
func _internal_togglePeerUnreadMarkInteractively(postbox: Postbox, viewTracker: AccountViewTracker, peerId: PeerId, setToValue: Bool? = nil) -> Signal<Void, NoError> {
return postbox.transaction { transaction -> Void in
togglePeerUnreadMarkInteractively(transaction: transaction, viewTracker: viewTracker, peerId: peerId, setToValue: setToValue)
_internal_togglePeerUnreadMarkInteractively(transaction: transaction, viewTracker: viewTracker, peerId: peerId, setToValue: setToValue)
}
}
public func togglePeerUnreadMarkInteractively(transaction: Transaction, viewTracker: AccountViewTracker, peerId: PeerId, setToValue: Bool? = nil) {
func _internal_togglePeerUnreadMarkInteractively(transaction: Transaction, viewTracker: AccountViewTracker, peerId: PeerId, setToValue: Bool? = nil) {
let principalNamespace: MessageId.Namespace
if peerId.namespace == Namespaces.Peer.SecretChat {
principalNamespace = Namespaces.Message.SecretIncoming
@ -178,6 +178,6 @@ public func clearPeerUnseenReactionsInteractively(account: Account, peerId: Peer
func _internal_markAllChatsAsReadInteractively(transaction: Transaction, viewTracker: AccountViewTracker, groupId: PeerGroupId, filterPredicate: ChatListFilterPredicate?) {
for peerId in transaction.getUnreadChatListPeerIds(groupId: groupId, filterPredicate: filterPredicate) {
togglePeerUnreadMarkInteractively(transaction: transaction, viewTracker: viewTracker, peerId: peerId, setToValue: false)
_internal_togglePeerUnreadMarkInteractively(transaction: transaction, viewTracker: viewTracker, peerId: peerId, setToValue: false)
}
}

View File

@ -406,5 +406,14 @@ public extension TelegramEngine {
return transaction.getRelativeUnreadChatListIndex(filtered: filtered, position: position._asPosition(), groupId: groupId._asGroup())
}
}
public func togglePeersUnreadMarkInteractively(peerIds: [EnginePeer.Id], setToValue: Bool?) -> Signal<Never, NoError> {
return self.account.postbox.transaction { transaction -> Void in
for peerId in peerIds {
_internal_togglePeerUnreadMarkInteractively(transaction: transaction, viewTracker: self.account.viewTracker, peerId: peerId, setToValue: setToValue)
}
}
|> ignoreValues
}
}
}

View File

@ -247,7 +247,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
return self.presentationInterfaceState.interfaceState.selectionState?.selectedIds
}
private var cachedDataPromise = Promise<CachedPeerData?>()
private var themeEmoticonPromise = Promise<String?>()
private var chatTitleView: ChatTitleView?
private var leftNavigationButton: ChatNavigationButton?
@ -4664,18 +4664,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
})
}
let themeEmoticon: Signal<String?, NoError> = self.cachedDataPromise.get()
|> map { cachedData -> String? in
if let cachedData = cachedData as? CachedUserData {
return cachedData.themeEmoticon
} else if let cachedData = cachedData as? CachedGroupData {
return cachedData.themeEmoticon
} else if let cachedData = cachedData as? CachedChannelData {
return cachedData.themeEmoticon
} else {
return nil
}
}
let themeEmoticon: Signal<String?, NoError> = self.themeEmoticonPromise.get()
|> distinctUntilChanged
let themeSettings = context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.presentationThemeSettings])
@ -5569,15 +5558,9 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
let topPinnedMessage: Signal<ChatPinnedMessage?, NoError> = self.topPinnedMessageSignal(latest: false)
if let peerId = self.chatLocation.peerId {
let _ = (self.context.account.postbox.transaction { transaction -> CachedPeerData? in
return transaction.getPeerCachedData(peerId: peerId)
}).start(next: { [weak self] cachedData in
if let strongSelf = self {
strongSelf.cachedDataPromise.set(.single(cachedData))
}
})
self.themeEmoticonPromise.set(self.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.ThemeEmoticon(id: peerId)))
} else {
self.cachedDataPromise.set(.single(nil))
self.themeEmoticonPromise.set(.single(nil))
}
if let peerId = self.chatLocation.peerId {
@ -5586,7 +5569,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
let (cachedData, messages) = cachedDataAndMessages
if cachedData != nil {
strongSelf.cachedDataPromise.set(.single(cachedData))
var themeEmoticon: String? = nil
if let cachedData = cachedData as? CachedUserData {
themeEmoticon = cachedData.themeEmoticon
} else if let cachedData = cachedData as? CachedGroupData {
themeEmoticon = cachedData.themeEmoticon
} else if let cachedData = cachedData as? CachedChannelData {
themeEmoticon = cachedData.themeEmoticon
}
strongSelf.themeEmoticonPromise.set(.single(themeEmoticon))
}
var pinnedMessageId: MessageId?
@ -15944,22 +15936,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
return animatedEmojiStickers
}
let _ = (combineLatest(queue: Queue.mainQueue(), self.cachedDataPromise.get(), animatedEmojiStickers)
|> take(1)).start(next: { [weak self] cachedData, animatedEmojiStickers in
let _ = (combineLatest(queue: Queue.mainQueue(), self.themeEmoticonPromise.get(), animatedEmojiStickers)
|> take(1)).start(next: { [weak self] themeEmoticon, animatedEmojiStickers in
guard let strongSelf = self else {
return
}
let selectedEmoticon: String?
if let cachedData = cachedData as? CachedUserData {
selectedEmoticon = cachedData.themeEmoticon
} else if let cachedData = cachedData as? CachedGroupData {
selectedEmoticon = cachedData.themeEmoticon
} else if let cachedData = cachedData as? CachedChannelData {
selectedEmoticon = cachedData.themeEmoticon
} else {
selectedEmoticon = nil
}
let selectedEmoticon: String? = themeEmoticon
let controller = ChatThemeScreen(context: context, updatedPresentationData: strongSelf.updatedPresentationData, animatedEmojiStickers: animatedEmojiStickers, initiallySelectedEmoticon: selectedEmoticon, peerName: strongSelf.presentationInterfaceState.renderedPeer?.chatMainPeer.flatMap(EnginePeer.init)?.compactDisplayTitle ?? "", previewTheme: { [weak self] emoticon, dark in
if let strongSelf = self {