SPB Git

spb/prisme Public MIT

Navigateur iOS intelligent — chaque page comprise localement avant d'être affichée. SwiftUI · WebKit · Foundation Models, 100% on-device.

Swift 96.7% JavaScript 3.3%
1.4 KB · 49 lines swift
Raw Blame History
1//2//  IdentityContainerStore.swift3//  Prisme4//5//  Author: Simon-Pierre Boucher <contact@spboucher.ai>6//78import Foundation9import Observation10import WebKit1112/// Owns the list of identity containers and hands out their partitioned13/// `WKWebsiteDataStore`s. Container IDs are persisted in UserDefaults so the14/// same data stores are recovered across launches.15@MainActor16@Observable17final class IdentityContainerStore {18    private static let defaultsKey = "prisme.identityContainers"1920    private(set) var all: [IdentityContainer]2122    init() {23        if let data = UserDefaults.standard.data(forKey: Self.defaultsKey),24           let decoded = try? JSONDecoder().decode([IdentityContainer].self, from: data),25           !decoded.isEmpty {26            all = decoded27        } else {28            all = IdentityContainer.makeDefaults()29            persist()30        }31    }3233    func container(for id: IdentityContainer.ID) -> IdentityContainer? {34        all.first { $0.id == id }35    }3637    /// The partitioned data store for a container. Same UUID → same38    /// persistent store, fully isolated from every other container.39    func dataStore(for id: IdentityContainer.ID) -> WKWebsiteDataStore {40        WKWebsiteDataStore(forIdentifier: id)41    }4243    private func persist() {44        if let data = try? JSONEncoder().encode(all) {45            UserDefaults.standard.set(data, forKey: Self.defaultsKey)46        }47    }48}49