Various Fixes

This commit is contained in:
Ilya Laktyushin 2021-08-27 13:12:05 +03:00
parent 09179b81d1
commit 8c5e0ae260
3 changed files with 76 additions and 75 deletions

View File

@ -367,10 +367,20 @@ public struct ChatTextInputStateText: Codable, Equatable {
}
public enum ChatControllerSubject: Equatable {
public struct ForwardOptions: Equatable {
public let hideNames: Bool
public let hideCaptions: Bool
public init(hideNames: Bool, hideCaptions: Bool) {
self.hideNames = hideNames
self.hideCaptions = hideCaptions
}
}
case message(id: EngineMessage.Id, highlight: Bool, timecode: Double?)
case scheduledMessages
case pinnedMessages(id: EngineMessage.Id?)
case forwardedMessages(ids: [EngineMessage.Id], hideNames: Signal<Bool, NoError>, hideCaptions: Signal<Bool, NoError>)
case forwardedMessages(ids: [EngineMessage.Id], options: Signal<ForwardOptions, NoError>)
public static func ==(lhs: ChatControllerSubject, rhs: ChatControllerSubject) -> Bool {
switch lhs {
@ -392,8 +402,8 @@ public enum ChatControllerSubject: Equatable {
} else {
return false
}
case let .forwardedMessages(lhsIds, _, _):
if case let .forwardedMessages(rhsIds, _, _) = rhs, lhsIds == rhsIds {
case let .forwardedMessages(lhsIds, _):
if case let .forwardedMessages(rhsIds, _) = rhs, lhsIds == rhsIds {
return true
} else {
return false

View File

@ -3063,7 +3063,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
return message?.totalCount
}
|> distinctUntilChanged
} else if case let .forwardedMessages(messageIds, hideNames, _) = subject {
} else if case let .forwardedMessages(messageIds, options) = subject {
displayedCountSignal = self.presentationInterfaceStatePromise.get()
|> map { state -> Int? in
if let selectionState = state.interfaceState.selectionState {
@ -3074,19 +3074,19 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
|> distinctUntilChanged
subtitleTextSignal = combineLatest(self.presentationInterfaceStatePromise.get(), hideNames, displayedCountSignal)
|> map { state, hideNames, count in
subtitleTextSignal = combineLatest(self.presentationInterfaceStatePromise.get(), options, displayedCountSignal)
|> map { state, options, count in
if let peer = state.renderedPeer?.chatMainPeer {
if let peer = peer as? TelegramUser {
let displayName = peer.compactDisplayTitle
if count == 1 {
if hideNames {
if options.hideNames {
return state.strings.Conversation_ForwardOptions_UserMessageForwardHidden(displayName).string
} else {
return state.strings.Conversation_ForwardOptions_UserMessageForwardVisible(displayName).string
}
} else {
if hideNames {
if options.hideNames {
return state.strings.Conversation_ForwardOptions_UserMessagesForwardHidden(displayName).string
} else {
return state.strings.Conversation_ForwardOptions_UserMessagesForwardVisible(displayName).string
@ -3094,13 +3094,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
} else if let peer = peer as? TelegramChannel, case .broadcast = peer.info {
if count == 1 {
if hideNames {
if options.hideNames {
return state.strings.Conversation_ForwardOptions_ChannelMessageForwardHidden
} else {
return state.strings.Conversation_ForwardOptions_ChannelMessageForwardVisible
}
} else {
if hideNames {
if options.hideNames {
return state.strings.Conversation_ForwardOptions_ChannelMessagesForwardHidden
} else {
return state.strings.Conversation_ForwardOptions_ChannelMessagesForwardVisible
@ -3108,13 +3108,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
} else {
if count == 1 {
if hideNames {
if options.hideNames {
return state.strings.Conversation_ForwardOptions_GroupMessageForwardHidden
} else {
return state.strings.Conversation_ForwardOptions_GroupMessageForwardVisible
}
} else {
if hideNames {
if options.hideNames {
return state.strings.Conversation_ForwardOptions_GroupMessagesForwardHidden
} else {
return state.strings.Conversation_ForwardOptions_GroupMessagesForwardVisible
@ -5486,28 +5486,22 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
if let strongSelf = self, case let .peer(peerId) = strongSelf.chatLocation {
let presentationData = strongSelf.presentationData
let hideNames: Signal<Bool, NoError>
let forwardOptions: Signal<ChatControllerSubject.ForwardOptions, NoError>
if peerId.namespace == Namespaces.Peer.SecretChat {
hideNames = .single(true)
forwardOptions = .single(ChatControllerSubject.ForwardOptions(hideNames: true, hideCaptions: false))
} else {
hideNames = strongSelf.presentationInterfaceStatePromise.get()
|> map { state -> Bool in
return state.interfaceState.forwardOptionsState?.hideNames ?? false
forwardOptions = strongSelf.presentationInterfaceStatePromise.get()
|> map { state -> ChatControllerSubject.ForwardOptions in
return ChatControllerSubject.ForwardOptions(hideNames: state.interfaceState.forwardOptionsState?.hideNames ?? false, hideCaptions: state.interfaceState.forwardOptionsState?.hideCaptions ?? false)
}
|> distinctUntilChanged
}
let hideCaptions = strongSelf.presentationInterfaceStatePromise.get()
|> map { state -> Bool in
return state.interfaceState.forwardOptionsState?.hideCaptions ?? false
}
|> distinctUntilChanged
let chatController = strongSelf.context.sharedContext.makeChatController(context: strongSelf.context, chatLocation: .peer(peerId), subject: .forwardedMessages(ids: strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? [], hideNames: hideNames, hideCaptions: hideCaptions), botStart: nil, mode: .standard(previewing: true))
let chatController = strongSelf.context.sharedContext.makeChatController(context: strongSelf.context, chatLocation: .peer(peerId), subject: .forwardedMessages(ids: strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? [], options: forwardOptions), botStart: nil, mode: .standard(previewing: true))
chatController.canReadHistory.set(false)
let items = combineLatest(strongSelf.presentationInterfaceStatePromise.get(), strongSelf.context.account.postbox.messagesAtIds(strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? []))
|> map { presentationInterfaceState, messages -> [ContextMenuItem] in
let items = combineLatest(forwardOptions, strongSelf.context.account.postbox.messagesAtIds(strongSelf.presentationInterfaceState.interfaceState.forwardMessageIds ?? []))
|> map { forwardOptions, messages -> [ContextMenuItem] in
var items: [ContextMenuItem] = []
var hasCaptions = false
@ -5525,8 +5519,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
}
let hideNames = presentationInterfaceState.interfaceState.forwardOptionsState?.hideNames == true
let hideCaptions = presentationInterfaceState.interfaceState.forwardOptionsState?.hideNames == true
let hideNames = forwardOptions.hideNames
let hideCaptions = forwardOptions.hideCaptions
if case let .peer(peerId) = strongSelf.chatLocation, peerId.namespace == Namespaces.Peer.SecretChat {
@ -5560,8 +5554,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
})
})))
items.append(.separator)
if hasCaptions {
items.append(.separator)
@ -5595,6 +5587,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
})
})))
}
items.append(.separator)
}
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_ForwardOptions_ChangeRecipient, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Forward"), color: theme.contextMenu.primaryColor) }, action: { c, f in
@ -7440,7 +7434,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
}
if case let .forwardedMessages(messageIds, _, _) = self.subject, messageIds.count > 1 {
if case let .forwardedMessages(messageIds, _) = self.subject, messageIds.count > 1 {
self.updateChatPresentationInterfaceState(interactive: false, { state in
return state.updatedInterfaceState({ $0.withUpdatedSelectedMessages(messageIds) })
})

View File

@ -252,54 +252,51 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
self.inputContextPanelContainer = ChatControllerTitlePanelNodeContainer()
var source: ChatHistoryListSource
if case let .forwardedMessages(messageIds, hideNames, hideCaptions) = subject {
let messages = combineLatest(context.account.postbox.messagesAtIds(messageIds), context.account.postbox.loadedPeerWithId(context.account.peerId))
|> mapToSignal { messages, accountPeer -> Signal<([Message], Int32, Bool), NoError> in
return combineLatest(hideNames, hideCaptions)
|> map { hideNames, hideCaptions -> ([Message], Int32, Bool) in
var messages = messages
messages.sort(by: { lhsMessage, rhsMessage in
return lhsMessage.timestamp > rhsMessage.timestamp
if case let .forwardedMessages(messageIds, options) = subject {
let messages = combineLatest(context.account.postbox.messagesAtIds(messageIds), context.account.postbox.loadedPeerWithId(context.account.peerId), options)
|> map { messages, accountPeer, options -> ([Message], Int32, Bool) in
var messages = messages
messages.sort(by: { lhsMessage, rhsMessage in
return lhsMessage.timestamp > rhsMessage.timestamp
})
messages = messages.map { message in
var flags = message.flags
flags.remove(.Incoming)
var attributes = message.attributes
attributes.append(OutgoingScheduleInfoMessageAttribute(scheduleTime: scheduleWhenOnlineTimestamp))
attributes = attributes.filter({ attribute in
if attribute is EditedMessageAttribute {
return false
}
if attribute is ReplyMessageAttribute {
return false
}
return true
})
messages = messages.map { message in
var flags = message.flags
flags.remove(.Incoming)
var attributes = message.attributes
attributes.append(OutgoingScheduleInfoMessageAttribute(scheduleTime: scheduleWhenOnlineTimestamp))
attributes = attributes.filter({ attribute in
if attribute is EditedMessageAttribute {
return false
}
if attribute is ReplyMessageAttribute {
return false
}
return true
})
var messageText = message.text
var forwardInfo = message.forwardInfo
if forwardInfo == nil {
forwardInfo = MessageForwardInfo(author: message.author, source: nil, sourceMessageId: nil, date: 0, authorSignature: nil, psaType: nil, flags: [])
}
if hideNames {
forwardInfo = nil
}
if hideNames && hideCaptions {
for media in message.media {
if media is TelegramMediaImage || media is TelegramMediaFile {
messageText = ""
break
}
}
}
return message.withUpdatedFlags(flags).withUpdatedText(messageText).withUpdatedTimestamp(scheduleWhenOnlineTimestamp).withUpdatedAttributes(attributes).withUpdatedAuthor(accountPeer).withUpdatedForwardInfo(forwardInfo)
var messageText = message.text
var forwardInfo = message.forwardInfo
if forwardInfo == nil {
forwardInfo = MessageForwardInfo(author: message.author, source: nil, sourceMessageId: nil, date: 0, authorSignature: nil, psaType: nil, flags: [])
}
if options.hideNames {
forwardInfo = nil
}
return (messages, Int32(messages.count), false)
if options.hideNames && options.hideCaptions {
for media in message.media {
if media is TelegramMediaImage || media is TelegramMediaFile {
messageText = ""
break
}
}
}
return message.withUpdatedFlags(flags).withUpdatedText(messageText).withUpdatedTimestamp(scheduleWhenOnlineTimestamp).withUpdatedAttributes(attributes).withUpdatedAuthor(accountPeer).withUpdatedForwardInfo(forwardInfo)
}
return (messages, Int32(messages.count), false)
}
source = .custom(messages: messages, messageId: MessageId(peerId: PeerId(0), namespace: 0, id: 0), loadMore: nil)
} else {