mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various Fixes
This commit is contained in:
parent
09179b81d1
commit
8c5e0ae260
@ -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
|
||||
|
@ -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) })
|
||||
})
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user