fluxa/appleApp/AppleCore/FluxaAppleLibraryStore.swift
2026-07-16 15:50:35 +03:00

38 lines
1.3 KiB
Swift

import Foundation
final class FluxaAppleLibraryStore {
private let defaults: UserDefaults
private let decoder = JSONDecoder()
init(defaults: UserDefaults = .standard) {
self.defaults = defaults
}
func watchlist() -> [FluxaAppleJsonValue] {
let data = defaults.string(forKey: Self.watchlistKey)?.data(using: .utf8)
?? defaults.data(forKey: Self.legacyWatchlistKey)
guard let data else {
return []
}
return (try? decoder.decode([FluxaAppleJsonValue].self, from: data)) ?? []
}
func watchlistState(item: FluxaAppleJsonValue) -> (watchlist: [FluxaAppleJsonValue], isInWatchlist: Bool) {
guard case .object(let candidate) = item,
case .string(let id)? = candidate["id"] else {
return (watchlist(), false)
}
let items = watchlist()
let containsItem = items.contains(where: { value in
guard case .object(let existing) = value,
case .string(let existingId)? = existing["id"] else {
return false
}
return existingId == id
})
return (items, containsItem)
}
private static let watchlistKey = "fluxa.apple-default.watchlist"
private static let legacyWatchlistKey = "fluxa.apple.watchlist"
}