[WIP] Release changes

This commit is contained in:
Isaac
2024-01-26 15:33:01 +01:00
parent ce83d7510f
commit 953e1598f7
93 changed files with 4096 additions and 556 deletions

View File

@@ -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)