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 { 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 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) f(.default)
}))) })))
} else { } 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 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) f(.default)
}))) })))
} }

View File

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

View File

@ -885,7 +885,7 @@ public final class ChatListNode: ListView {
return return
} }
self?.setCurrentRemovingPeerId(peerId) 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: { |> deliverOnMainQueue).start(completed: {
self?.updateState { state in self?.updateState { state in
var state = state 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 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 let principalNamespace: MessageId.Namespace
if peerId.namespace == Namespaces.Peer.SecretChat { if peerId.namespace == Namespaces.Peer.SecretChat {
principalNamespace = Namespaces.Message.SecretIncoming 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?) { func _internal_markAllChatsAsReadInteractively(transaction: Transaction, viewTracker: AccountViewTracker, groupId: PeerGroupId, filterPredicate: ChatListFilterPredicate?) {
for peerId in transaction.getUnreadChatListPeerIds(groupId: groupId, filterPredicate: filterPredicate) { 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()) 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 return self.presentationInterfaceState.interfaceState.selectionState?.selectedIds
} }
private var cachedDataPromise = Promise<CachedPeerData?>() private var themeEmoticonPromise = Promise<String?>()
private var chatTitleView: ChatTitleView? private var chatTitleView: ChatTitleView?
private var leftNavigationButton: ChatNavigationButton? private var leftNavigationButton: ChatNavigationButton?
@ -4664,18 +4664,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}) })
} }
let themeEmoticon: Signal<String?, NoError> = self.cachedDataPromise.get() let themeEmoticon: Signal<String?, NoError> = self.themeEmoticonPromise.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
}
}
|> distinctUntilChanged |> distinctUntilChanged
let themeSettings = context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.presentationThemeSettings]) 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) let topPinnedMessage: Signal<ChatPinnedMessage?, NoError> = self.topPinnedMessageSignal(latest: false)
if let peerId = self.chatLocation.peerId { if let peerId = self.chatLocation.peerId {
let _ = (self.context.account.postbox.transaction { transaction -> CachedPeerData? in self.themeEmoticonPromise.set(self.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.ThemeEmoticon(id: peerId)))
return transaction.getPeerCachedData(peerId: peerId)
}).start(next: { [weak self] cachedData in
if let strongSelf = self {
strongSelf.cachedDataPromise.set(.single(cachedData))
}
})
} else { } else {
self.cachedDataPromise.set(.single(nil)) self.themeEmoticonPromise.set(.single(nil))
} }
if let peerId = self.chatLocation.peerId { if let peerId = self.chatLocation.peerId {
@ -5586,7 +5569,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
let (cachedData, messages) = cachedDataAndMessages let (cachedData, messages) = cachedDataAndMessages
if cachedData != nil { 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? var pinnedMessageId: MessageId?
@ -15944,22 +15936,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
return animatedEmojiStickers return animatedEmojiStickers
} }
let _ = (combineLatest(queue: Queue.mainQueue(), self.cachedDataPromise.get(), animatedEmojiStickers) let _ = (combineLatest(queue: Queue.mainQueue(), self.themeEmoticonPromise.get(), animatedEmojiStickers)
|> take(1)).start(next: { [weak self] cachedData, animatedEmojiStickers in |> take(1)).start(next: { [weak self] themeEmoticon, animatedEmojiStickers in
guard let strongSelf = self else { guard let strongSelf = self else {
return return
} }
let selectedEmoticon: String? let selectedEmoticon: String? = themeEmoticon
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 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 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 { if let strongSelf = self {