diff --git a/src/storage/db.ts b/src/storage/db.ts index 5e67dd8..7110c4d 100644 --- a/src/storage/db.ts +++ b/src/storage/db.ts @@ -1,4 +1,11 @@ -import type { Progress, Settings } from "../types"; +import type { + CompanionAssets, + CompanionType, + ForestElement, + Progress, + Settings, + StyleReference, +} from "../types"; const DB_NAME = "zauberwald"; const DB_VERSION = 1; @@ -68,3 +75,63 @@ export function saveSettings(db: IDBDatabase, settings: Settings): Promise request.onerror = () => reject(request.error); }); } + +export function saveCompanionAssets(db: IDBDatabase, assets: CompanionAssets): Promise { + return new Promise((resolve, reject) => { + const tx = db.transaction("companionAssets", "readwrite"); + const store = tx.objectStore("companionAssets"); + const request = store.put(assets); + request.onsuccess = () => resolve(); + request.onerror = () => reject(request.error); + }); +} + +export function getCompanionAssets(db: IDBDatabase, characterType: CompanionType): Promise { + return new Promise((resolve, reject) => { + const tx = db.transaction("companionAssets", "readonly"); + const store = tx.objectStore("companionAssets"); + const request = store.get(characterType); + request.onsuccess = () => resolve((request.result as CompanionAssets) ?? null); + request.onerror = () => reject(request.error); + }); +} + +export function saveStyleReference(db: IDBDatabase, ref: StyleReference): Promise { + return new Promise((resolve, reject) => { + const tx = db.transaction("styleReference", "readwrite"); + const store = tx.objectStore("styleReference"); + const request = store.put(ref); + request.onsuccess = () => resolve(); + request.onerror = () => reject(request.error); + }); +} + +export function getStyleReference(db: IDBDatabase): Promise { + return new Promise((resolve, reject) => { + const tx = db.transaction("styleReference", "readonly"); + const store = tx.objectStore("styleReference"); + const request = store.get(1); + request.onsuccess = () => resolve((request.result as StyleReference) ?? null); + request.onerror = () => reject(request.error); + }); +} + +export function saveForestElement(db: IDBDatabase, element: ForestElement): Promise { + return new Promise((resolve, reject) => { + const tx = db.transaction("forestElements", "readwrite"); + const store = tx.objectStore("forestElements"); + const request = store.add(element); + request.onsuccess = () => resolve(request.result as number); + request.onerror = () => reject(request.error); + }); +} + +export function getForestElements(db: IDBDatabase): Promise { + return new Promise((resolve, reject) => { + const tx = db.transaction("forestElements", "readonly"); + const store = tx.objectStore("forestElements"); + const request = store.getAll(); + request.onsuccess = () => resolve((request.result as ForestElement[]) ?? []); + request.onerror = () => reject(request.error); + }); +}