2022-09-19 19:47:36 +02:00

43 lines
1.4 KiB
Swift

import Postbox
import SwiftSignalKit
public struct ReactionSettings: Equatable, Codable {
public static var `default` = ReactionSettings(quickReaction: .builtin("👍"))
public var quickReaction: MessageReaction.Reaction
public init(quickReaction: MessageReaction.Reaction) {
self.quickReaction = quickReaction
}
}
public extension ReactionSettings {
func effectiveQuickReaction(hasPremium: Bool) -> MessageReaction.Reaction {
switch self.quickReaction {
case .builtin:
return self.quickReaction
case .custom:
if hasPremium {
return self.quickReaction
} else {
return ReactionSettings.default.quickReaction
}
}
}
}
func updateReactionSettings(transaction: Transaction, _ f: (ReactionSettings) -> ReactionSettings) {
transaction.updatePreferencesEntry(key: PreferencesKeys.reactionSettings, { current in
let previous = current?.get(ReactionSettings.self) ?? ReactionSettings.default
let updated = f(previous)
return PreferencesEntry(updated)
})
}
public func updateReactionSettingsInteractively(postbox: Postbox, _ f: @escaping (ReactionSettings) -> ReactionSettings) -> Signal<Never, NoError> {
return postbox.transaction { transaction -> Void in
updateReactionSettings(transaction: transaction, f)
}
|> ignoreValues
}