Uses Keychain.patreonAccountID to fetch current user’s PatreonAccount

Allows us to distinguish between the current user and other cached patrons in the future.
This commit is contained in:
Riley Testut
2022-04-14 16:37:29 -07:00
parent 1f7c089c70
commit 8ddeb7f9fb
3 changed files with 23 additions and 5 deletions

View File

@@ -74,6 +74,9 @@ public class Keychain
@KeychainItem(key: "patreonCreatorAccessToken")
public var patreonCreatorAccessToken: String?
@KeychainItem(key: "patreonAccountID")
public var patreonAccountID: String?
private init()
{
}

View File

@@ -151,8 +151,12 @@ public extension DatabaseManager
func patreonAccount(in context: NSManagedObjectContext = DatabaseManager.shared.viewContext) -> PatreonAccount?
{
let patronAccount = PatreonAccount.first(in: context)
return patronAccount
guard let patreonAccountID = Keychain.shared.patreonAccountID else { return nil }
let predicate = NSPredicate(format: "%K == %@", #keyPath(PatreonAccount.identifier), patreonAccountID)
let patreonAccount = PatreonAccount.first(satisfying: predicate, in: context)
return patreonAccount
}
}

View File

@@ -120,7 +120,15 @@ public extension PatreonAPI
Keychain.shared.patreonAccessToken = accessToken
Keychain.shared.patreonRefreshToken = refreshToken
self.fetchAccount(completion: completion)
self.fetchAccount { (result) in
switch result
{
case .success(let account): Keychain.shared.patreonAccountID = account.identifier
case .failure: break
}
completion(result)
}
}
}
}
@@ -238,8 +246,10 @@ public extension PatreonAPI
DatabaseManager.shared.persistentContainer.performBackgroundTask { (context) in
do
{
let accounts = PatreonAccount.all(in: context, requestProperties: [\FetchRequest.returnsObjectsAsFaults: true])
accounts.forEach(context.delete(_:))
if let account = DatabaseManager.shared.patreonAccount(in: context)
{
context.delete(account)
}
self.deactivateBetaApps(in: context)
@@ -247,6 +257,7 @@ public extension PatreonAPI
Keychain.shared.patreonAccessToken = nil
Keychain.shared.patreonRefreshToken = nil
Keychain.shared.patreonAccountID = nil
completion(.success(()))
}