mirror of
https://github.com/FluxaMedia/fluxa.git
synced 2026-07-28 12:42:51 +00:00
38 lines
1.3 KiB
Swift
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"
|
|
}
|