From ee9f2904aa319231b7047fca3cb069f0c07019cd Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 12 Apr 2026 23:19:20 -0500 Subject: feat: add multi-account support Implements: https://todo.sr.ht/~ccleberg/hutch/49 Implements: https://todo.sr.ht/~ccleberg/hutch/50 Implements: https://todo.sr.ht/~ccleberg/hutch/51 --- Shared/ContributionWidgetContext.swift | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'Shared/ContributionWidgetContext.swift') diff --git a/Shared/ContributionWidgetContext.swift b/Shared/ContributionWidgetContext.swift index 2404698..33fed77 100644 --- a/Shared/ContributionWidgetContext.swift +++ b/Shared/ContributionWidgetContext.swift @@ -11,8 +11,11 @@ enum ContributionWidgetContextStore { private static let actorKey = "contributionWidget.actor" private static let enabledKey = "contributionWidget.enabled" - static func loadActor(defaults: UserDefaults? = sharedDefaults()) -> String? { - defaults?.string(forKey: actorKey) + static func loadActor( + accountID: String? = ActiveAccountContextStore.load(), + defaults: UserDefaults? = sharedDefaults() + ) -> String? { + defaults?.string(forKey: scopedActorKey(for: accountID)) } static func isEnabled(defaults: UserDefaults? = sharedDefaults()) -> Bool { @@ -24,13 +27,20 @@ enum ContributionWidgetContextStore { reloadWidgetTimelines() } - static func saveActor(_ actor: String, defaults: UserDefaults? = sharedDefaults()) { - defaults?.set(actor, forKey: actorKey) + static func saveActor( + _ actor: String, + accountID: String? = ActiveAccountContextStore.load(), + defaults: UserDefaults? = sharedDefaults() + ) { + defaults?.set(actor, forKey: scopedActorKey(for: accountID)) reloadWidgetTimelines() } - static func clear(defaults: UserDefaults? = sharedDefaults()) { - defaults?.removeObject(forKey: actorKey) + static func clear( + accountID: String? = ActiveAccountContextStore.load(), + defaults: UserDefaults? = sharedDefaults() + ) { + defaults?.removeObject(forKey: scopedActorKey(for: accountID)) reloadWidgetTimelines() } @@ -38,6 +48,11 @@ enum ContributionWidgetContextStore { UserDefaults(suiteName: HutchAppGroup.identifier) } + private static func scopedActorKey(for accountID: String?) -> String { + guard let accountID, !accountID.isEmpty else { return actorKey } + return "\(actorKey).\(accountID)" + } + private static func reloadWidgetTimelines() { #if canImport(WidgetKit) WidgetCenter.shared.reloadTimelines(ofKind: ContributionGraphWidgetConfiguration.kind) -- cgit v1.2.3