mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-16 11:20:18 +00:00
Refactoring
This commit is contained in:
parent
47fb45e08f
commit
3d10a0c38c
@ -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)
|
||||
})))
|
||||
}
|
||||
|
||||
@ -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?
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user