Add persistence of selected currencies to disk via SQLite
This commit is contained in:
@@ -13,6 +13,8 @@ import Foundation
|
||||
import SwiftUI
|
||||
|
||||
class SatsViewModel: ObservableObject {
|
||||
let model: SatsPriceModel
|
||||
|
||||
@Published var lastUpdated: Date?
|
||||
|
||||
@Published var priceSourceInternal: PriceSource = .coinbase
|
||||
@@ -20,7 +22,6 @@ class SatsViewModel: ObservableObject {
|
||||
|
||||
@Published var satsStringInternal: String = ""
|
||||
@Published var btcStringInternal: String = ""
|
||||
@Published var selectedCurrency: Locale.Currency = Locale.current.currency ?? Locale.Currency("USD")
|
||||
@Published var selectedCurrencies = Set<Locale.Currency>()
|
||||
@Published var currencyValueStrings: [Locale.Currency: String] = [:]
|
||||
|
||||
@@ -28,6 +29,10 @@ class SatsViewModel: ObservableObject {
|
||||
|
||||
let currentCurrency: Locale.Currency = Locale.current.currency ?? Locale.Currency("USD")
|
||||
|
||||
init(model: SatsPriceModel) {
|
||||
self.model = model
|
||||
}
|
||||
|
||||
var currencies: [Locale.Currency] {
|
||||
let commonISOCurrencyCodes = Set(Locale.commonISOCurrencyCodes)
|
||||
if commonISOCurrencyCodes.contains(currentCurrency.identifier) {
|
||||
@@ -40,6 +45,34 @@ class SatsViewModel: ObservableObject {
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func pullSelectedCurrenciesFromDB() async {
|
||||
do {
|
||||
let selectedCurrencies = Set(try await model.selectedCurrencies().compactMap { Locale.Currency($0.currencyCode) })
|
||||
let currenciesToAdd = selectedCurrencies.subtracting(self.selectedCurrencies)
|
||||
let currenciesToRemove = self.selectedCurrencies.subtracting(selectedCurrencies)
|
||||
|
||||
self.selectedCurrencies.subtract(currenciesToRemove)
|
||||
self.selectedCurrencies.formUnion(currenciesToAdd)
|
||||
} catch {
|
||||
logger.error("Unable to pull selected currencies from DB. Error: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
func addSelectedCurrency(_ currency: Locale.Currency) {
|
||||
selectedCurrencies.insert(currency)
|
||||
Task {
|
||||
try await model.insert(SelectedCurrency(currencyCode: currency.identifier))
|
||||
}
|
||||
}
|
||||
|
||||
func removeSelectedCurrency(_ currency: Locale.Currency) {
|
||||
selectedCurrencies.remove(currency)
|
||||
Task {
|
||||
try await model.deleteSelectedCurrency(currencyCode: currency.identifier)
|
||||
}
|
||||
}
|
||||
|
||||
var priceSource: PriceSource {
|
||||
get {
|
||||
priceSourceInternal
|
||||
|
||||
Reference in New Issue
Block a user