Primera build enviada

This commit is contained in:
2026-01-19 14:40:43 +01:00
parent c6be398e5a
commit b03d35194f
36 changed files with 1641 additions and 561 deletions
+32 -4
View File
@@ -19,8 +19,14 @@ class AccountStore: ObservableObject {
self.accountRepository = accountRepository ?? AccountRepository()
self.iapService = iapService
self.accountRepository.fetchAccounts()
// Clean up any duplicate Default accounts from previous bug
self.accountRepository.cleanupDuplicateDefaultAccounts()
// Create default account if needed (now fetches directly from DB)
let defaultAccount = self.accountRepository.createDefaultAccountIfNeeded()
// Trigger async fetch to populate the published accounts array
self.accountRepository.fetchAccounts()
accounts = self.accountRepository.accounts
selectedAccount = defaultAccount
@@ -33,9 +39,23 @@ class AccountStore: ObservableObject {
.receive(on: DispatchQueue.main)
.sink { [weak self] accounts in
self?.accounts = accounts
if let selected = self?.selectedAccount, selected.isDeleted {
self?.selectedAccount = nil
}
self?.syncSelectedAccount()
}
.store(in: &cancellables)
NotificationCenter.default.publisher(for: .didResetData)
.receive(on: DispatchQueue.main)
.sink { [weak self] _ in
guard let self else { return }
self.accountRepository.fetchAccounts()
self.selectedAccount = nil
self.showAllAccounts = true
self.persistSelection()
}
.store(in: &cancellables)
}
private func loadSelection() {
@@ -53,8 +73,8 @@ class AccountStore: ObservableObject {
private func syncSelectedAccount() {
if showAllAccounts { return }
if let selected = selectedAccount,
accounts.contains(where: { $0.id == selected.id }) {
if let selectedId = selectedAccount?.safeId,
accounts.contains(where: { $0.safeId == selectedId }) {
return
}
selectedAccount = accounts.first
@@ -62,6 +82,7 @@ class AccountStore: ObservableObject {
func selectAllAccounts() {
showAllAccounts = true
selectedAccount = nil
persistSelection()
}
@@ -75,7 +96,7 @@ class AccountStore: ObservableObject {
let context = CoreDataStack.shared.viewContext
let settings = AppSettings.getOrCreate(in: context)
settings.showAllAccounts = showAllAccounts
settings.selectedAccountId = showAllAccounts ? nil : selectedAccount?.id
settings.selectedAccountId = showAllAccounts ? nil : selectedAccount?.safeId
CoreDataStack.shared.save()
}
@@ -83,3 +104,10 @@ class AccountStore: ObservableObject {
iapService.isPremium || accounts.count < 1
}
}
extension Account {
var safeId: UUID? {
guard !isDeleted else { return nil }
return value(forKey: "id") as? UUID
}
}