Store default stars reaction anonymity globally

This commit is contained in:
Isaac
2024-08-16 22:17:02 +08:00
parent 4ceb3ac58b
commit 2086a5696c
4 changed files with 64 additions and 1 deletions

View File

@@ -182,7 +182,7 @@ public func sendStarsReactionsInteractively(account: Account, messageId: Message
}
var mappedCount = Int32(count)
var attributes = currentMessage.attributes
var resolvedIsAnonymous = false
var resolvedIsAnonymous = _internal_getStarsReactionDefaultToPrivate(peerId: messageId.peerId, transaction: transaction)
for attribute in attributes {
if let attribute = attribute as? ReactionsMessageAttribute {
if let myReaction = attribute.topPeers.first(where: { $0.isMy }) {
@@ -201,6 +201,7 @@ public func sendStarsReactionsInteractively(account: Account, messageId: Message
if let isAnonymous {
resolvedIsAnonymous = isAnonymous
_internal_setStarsReactionDefaultToPrivate(peerId: messageId.peerId, isPrivate: isAnonymous, transaction: transaction)
}
attributes.append(PendingStarsReactionsMessageAttribute(accountPeerId: account.peerId, count: mappedCount, isAnonymous: resolvedIsAnonymous))
@@ -241,6 +242,8 @@ func _internal_forceSendPendingSendStarsReaction(account: Account, messageId: Me
func _internal_updateStarsReactionIsAnonymous(account: Account, messageId: MessageId, isAnonymous: Bool) -> Signal<Never, NoError> {
return account.postbox.transaction { transaction -> Api.InputPeer? in
_internal_setStarsReactionDefaultToPrivate(peerId: messageId.peerId, isPrivate: isAnonymous, transaction: transaction)
transaction.updateMessage(messageId, update: { currentMessage in
var storeForwardInfo: StoreMessageForwardInfo?
if let forwardInfo = currentMessage.forwardInfo {
@@ -1024,3 +1027,31 @@ func _internal_updateDefaultReaction(account: Account, reaction: MessageReaction
}
|> ignoreValues
}
struct StarsReactionDefaultToPrivateData: Codable {
var isPrivate: Bool
init(isPrivate: Bool) {
self.isPrivate = isPrivate
}
static func key(peerId: PeerId) -> ValueBoxKey {
let value = ValueBoxKey(length: 8)
value.setInt64(0, value: peerId.toInt64())
return value
}
}
func _internal_getStarsReactionDefaultToPrivate(peerId: PeerId, transaction: Transaction) -> Bool {
guard let value = transaction.retrieveItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.starsReactionDefaultToPrivate, key: StarsReactionDefaultToPrivateData.key(peerId: peerId)))?.get(StarsReactionDefaultToPrivateData.self) else {
return false
}
return value.isPrivate
}
func _internal_setStarsReactionDefaultToPrivate(peerId: PeerId, isPrivate: Bool, transaction: Transaction) {
guard let entry = CodableEntry(StarsReactionDefaultToPrivateData(isPrivate: isPrivate)) else {
return
}
transaction.putItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.starsReactionDefaultToPrivate, key: StarsReactionDefaultToPrivateData.key(peerId: peerId)), entry: entry)
}