mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
[WIP] Release changes
This commit is contained in:
@@ -121,6 +121,7 @@ import MediaEditorScreen
|
||||
import WallpaperGalleryScreen
|
||||
import WallpaperGridScreen
|
||||
import VideoMessageCameraScreen
|
||||
import TopMessageReactions
|
||||
|
||||
public enum ChatControllerPeekActions {
|
||||
case standard
|
||||
@@ -1253,7 +1254,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
return
|
||||
}
|
||||
self.openMessageReactionContextMenu(message: message, sourceView: sourceView, gesture: gesture, value: value)
|
||||
}, updateMessageReaction: { [weak self] initialMessage, reaction in
|
||||
}, updateMessageReaction: { [weak self] initialMessage, reaction, force in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
@@ -1264,6 +1265,54 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
return
|
||||
}
|
||||
|
||||
if !force && message.areReactionsTags(accountPeerId: strongSelf.context.account.peerId) {
|
||||
strongSelf.chatDisplayNode.historyNode.forEachItemNode { itemNode in
|
||||
guard let itemNode = itemNode as? ChatMessageItemView, let item = itemNode.item else {
|
||||
return
|
||||
}
|
||||
guard item.message.id == message.id else {
|
||||
return
|
||||
}
|
||||
|
||||
let chosenReaction: MessageReaction.Reaction?
|
||||
|
||||
switch reaction {
|
||||
case .default:
|
||||
switch item.associatedData.defaultReaction {
|
||||
case .none:
|
||||
chosenReaction = nil
|
||||
case let .builtin(value):
|
||||
chosenReaction = .builtin(value)
|
||||
case let .custom(fileId):
|
||||
chosenReaction = .custom(fileId)
|
||||
}
|
||||
case let .reaction(value):
|
||||
switch value {
|
||||
case let .builtin(value):
|
||||
chosenReaction = .builtin(value)
|
||||
case let .custom(fileId):
|
||||
chosenReaction = .custom(fileId)
|
||||
}
|
||||
}
|
||||
|
||||
guard let chosenReaction = chosenReaction else {
|
||||
return
|
||||
}
|
||||
|
||||
let tags: [EngineMessage.CustomTag] = [ReactionsMessageAttribute.messageTag(reaction: chosenReaction)]
|
||||
if strongSelf.presentationInterfaceState.historyFilter?.customTags == tags {
|
||||
strongSelf.interfaceInteraction?.updateHistoryFilter { _ in
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
strongSelf.interfaceInteraction?.updateHistoryFilter { _ in
|
||||
return ChatPresentationInterfaceState.HistoryFilter(customTags: tags, isActive: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
let _ = (peerMessageAllowedReactions(context: strongSelf.context, message: message)
|
||||
|> deliverOnMainQueue).startStandalone(next: { allowedReactions in
|
||||
guard let strongSelf = self else {
|
||||
@@ -8551,7 +8600,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}, deleteSelectedMessages: { [weak self] in
|
||||
if let strongSelf = self {
|
||||
if let messageIds = strongSelf.presentationInterfaceState.interfaceState.selectionState?.selectedIds, !messageIds.isEmpty {
|
||||
strongSelf.messageContextDisposable.set((strongSelf.context.sharedContext.chatAvailableMessageActions(engine: strongSelf.context.engine, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds)
|
||||
strongSelf.messageContextDisposable.set((strongSelf.context.sharedContext.chatAvailableMessageActions(engine: strongSelf.context.engine, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds, keepUpdated: false)
|
||||
|> deliverOnMainQueue).startStrict(next: { actions in
|
||||
if let strongSelf = self, !actions.options.isEmpty {
|
||||
if let banAuthor = actions.banAuthor {
|
||||
@@ -8665,7 +8714,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
|
||||
}, deleteMessages: { [weak self] messages, contextController, completion in
|
||||
if let strongSelf = self, !messages.isEmpty {
|
||||
let messageIds = Set(messages.map { $0.id })
|
||||
strongSelf.messageContextDisposable.set((strongSelf.context.sharedContext.chatAvailableMessageActions(engine: strongSelf.context.engine, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds)
|
||||
strongSelf.messageContextDisposable.set((strongSelf.context.sharedContext.chatAvailableMessageActions(engine: strongSelf.context.engine, accountPeerId: strongSelf.context.account.peerId, messageIds: messageIds, keepUpdated: false)
|
||||
|> deliverOnMainQueue).startStrict(next: { actions in
|
||||
if let strongSelf = self, !actions.options.isEmpty {
|
||||
if let banAuthor = actions.banAuthor {
|
||||
@@ -18000,64 +18049,6 @@ final class ChatControllerContextReferenceContentSource: ContextReferenceContent
|
||||
}
|
||||
}
|
||||
|
||||
enum AllowedReactions {
|
||||
case set(Set<MessageReaction.Reaction>)
|
||||
case all
|
||||
}
|
||||
|
||||
func peerMessageAllowedReactions(context: AccountContext, message: Message) -> Signal<AllowedReactions?, NoError> {
|
||||
if message.id.peerId == context.account.peerId {
|
||||
return .single(.all)
|
||||
}
|
||||
|
||||
if message.containsSecretMedia {
|
||||
return .single(AllowedReactions.set(Set()))
|
||||
}
|
||||
|
||||
return combineLatest(
|
||||
context.engine.data.get(
|
||||
TelegramEngine.EngineData.Item.Peer.Peer(id: message.id.peerId),
|
||||
TelegramEngine.EngineData.Item.Peer.AllowedReactions(id: message.id.peerId)
|
||||
),
|
||||
context.engine.stickers.availableReactions() |> take(1)
|
||||
)
|
||||
|> map { data, availableReactions -> AllowedReactions? in
|
||||
let (peer, allowedReactions) = data
|
||||
|
||||
if let effectiveReactions = message.effectiveReactions(isTags: message.areReactionsTags(accountPeerId: context.account.peerId)), effectiveReactions.count >= 11 {
|
||||
return .set(Set(effectiveReactions.map(\.value)))
|
||||
}
|
||||
|
||||
switch allowedReactions {
|
||||
case .unknown:
|
||||
if case let .channel(channel) = peer, case .broadcast = channel.info {
|
||||
if let availableReactions = availableReactions {
|
||||
return .set(Set(availableReactions.reactions.map(\.value)))
|
||||
} else {
|
||||
return .set(Set())
|
||||
}
|
||||
}
|
||||
return .all
|
||||
case let .known(value):
|
||||
switch value {
|
||||
case .all:
|
||||
if case let .channel(channel) = peer, case .broadcast = channel.info {
|
||||
if let availableReactions = availableReactions {
|
||||
return .set(Set(availableReactions.reactions.map(\.value)))
|
||||
} else {
|
||||
return .set(Set())
|
||||
}
|
||||
}
|
||||
return .all
|
||||
case let .limited(reactions):
|
||||
return .set(Set(reactions))
|
||||
case .empty:
|
||||
return .set(Set())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func peerMessageSelectedReactions(context: AccountContext, message: Message) -> Signal<(reactions: Set<MessageReaction.Reaction>, files: Set<MediaId>), NoError> {
|
||||
return context.engine.stickers.availableReactions()
|
||||
|> take(1)
|
||||
|
||||
Reference in New Issue
Block a user