damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit 0aff41d3842924dd67753e1cf469ad6442a3ae0c
parent 3fec9dd20943a3682c43283de5b0a094ac31c209
Author: OlegAba <mail@olegaba.com>
Date:   Tue, 28 Feb 2023 16:40:51 -0500

Add option to disable image animation

Changelog-Added: Add option to disable image animation
Closes: #707

Diffstat:
Mdamus/Models/UserSettingsStore.swift | 12++++++++++++
Mdamus/Util/KFOptionSetter+.swift | 1+
Mdamus/Views/ConfigView.swift | 20+++++++++++++++-----
3 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/damus/Models/UserSettingsStore.swift b/damus/Models/UserSettingsStore.swift @@ -7,6 +7,7 @@ import Foundation import Vault +import UIKit func should_show_wallet_selector(_ pubkey: String) -> Bool { return UserDefaults.standard.object(forKey: "show_wallet_selector") as? Bool ?? true @@ -34,6 +35,10 @@ func get_default_zap_amount(pubkey: String) -> Int? { return amt } +func should_disable_image_animation() -> Bool { + return (UserDefaults.standard.object(forKey: "disable_animation") as? Bool) + ?? UIAccessibility.isReduceMotionEnabled + } func get_default_wallet(_ pubkey: String) -> Wallet { if let defaultWalletName = UserDefaults.standard.string(forKey: "default_wallet"), @@ -159,6 +164,12 @@ class UserSettingsStore: ObservableObject { } } } + + @Published var disable_animation: Bool { + didSet { + UserDefaults.standard.set(disable_animation, forKey: "disable_animation") + } + } init() { // TODO: pubkey-scoped settings @@ -167,6 +178,7 @@ class UserSettingsStore: ObservableObject { show_wallet_selector = should_show_wallet_selector(pubkey) left_handed = UserDefaults.standard.object(forKey: "left_handed") as? Bool ?? false + disable_animation = should_disable_image_animation() // Note from @tyiu: // Default translation service is disabled by default for now until we gain some confidence that it is working well in production. diff --git a/damus/Util/KFOptionSetter+.swift b/damus/Util/KFOptionSetter+.swift @@ -17,6 +17,7 @@ extension KFOptionSetter { options.backgroundDecode = true options.cacheOriginalImage = true options.scaleFactor = UIScreen.main.scale + options.onlyLoadFirstFrame = should_disable_image_animation() options.processor = CustomImageProcessor( maxSize: imageContext.maxMebibyteSize(), diff --git a/damus/Views/ConfigView.swift b/damus/Views/ConfigView.swift @@ -199,11 +199,15 @@ struct ConfigView: View { .toggleStyle(.switch) } - Section(NSLocalizedString("Clear Cache", comment: "Section title for clearing cached data.")) { - Button(NSLocalizedString("Clear", comment: "Button for clearing cached data.")) { - KingfisherManager.shared.cache.clearMemoryCache() - KingfisherManager.shared.cache.clearDiskCache() - KingfisherManager.shared.cache.cleanExpiredDiskCache() + Section(NSLocalizedString("Images", comment: "Section title for images configuration.")) { + Toggle(NSLocalizedString("Disable animations", comment: "Button to disable image animation"), isOn: $settings.disable_animation) + .toggleStyle(.switch) + .onChange(of: settings.disable_animation) { _ in + clear_kingfisher_cache() + } + + Button(NSLocalizedString("Clear Cache", comment: "Button to clear image cache.")) { + clear_kingfisher_cache() } } @@ -380,3 +384,9 @@ func handle_string_amount(new_value: String) -> Int? { return amt } + +func clear_kingfisher_cache() -> Void { + KingfisherManager.shared.cache.clearMemoryCache() + KingfisherManager.shared.cache.clearDiskCache() + KingfisherManager.shared.cache.cleanExpiredDiskCache() +}