📄 src/models/indexdb/book_data.ts
D-OPEN SOVEREIGN
1/*
2 * Copyright (c) 2026 DataPond D-Library Pty Ltd. ("The Sanctuary")
3 * Non-Profit Public Library — The World Library
4 *
5 * D-SAFE Certification issued by POND Enterprise.
6 * Published under the D-Open Code Sovereign Licence v1.0 framework
7 * DataPond D-Library All exclusive Right reserved on modifiying the code - CC Attribution to data pond, Non modifiable, Non Commercial.
8 * https://registry.world.bibliotech.com/licence
9 * Source code donated to DataPond D-Library by it's author: data pond.
10 *
11 * Technical Guardian ("The Shield"): Pond Enterprise Pty Ltd. (ACN 694 747 987)
12 * All liability claims about D-SAFE certification issues coming from the published D-Safe direction must be addressed with Pond Enterprise Pty Ltd.
13 * Code Modification automatically voids the certified liability protection provided by Pond Enterprise.
14 */
15import {proResolver} from "../promises.ts";
16import type { BookData} from "./../interfaces.ts"
17import {Db, pdfDataStoreName} from "./common";
18
19export const hasBookData = (fileId:string): Promise<boolean> => {
20 const deferred = proResolver<boolean>()
21 Db().then(db => {
22 try {
23 const tx = db.transaction(pdfDataStoreName, "readonly");
24 const req = tx.objectStore(pdfDataStoreName).openCursor(fileId);
25 req.onsuccess = function (e) {
26 // @ts-ignore
27 const cursor = e.target.result;
28 if (cursor) { // key already exist
29 deferred.resolve(true)
30 } else { // key not exist
31 deferred.resolve(false)
32 }
33 };
34 req.onerror = function (e) {
35 console.error("worker: error", e.target)
36 deferred.reject(e.target)
37 }
38 } catch(e) {
39 console.error(e);
40 debugger
41 }
42 }).catch(e => {
43 console.error(`[indexdb error:] hasFile(): ${e.message}`)
44 deferred.reject(e)
45 });
46 return deferred.pro
47}
48
49export const loadBookData = (fileId: string) : Promise<BookData | undefined> => {
50 const deferred = proResolver<BookData | undefined>()
51 Db().then(db => {
52 const tx = db.transaction(pdfDataStoreName, "readonly");
53 let result: BookData | undefined = undefined;
54 tx.objectStore(pdfDataStoreName).get(fileId).addEventListener("success", function (event) {
55 // @ts-ignore
56 result = event.target.result;
57 });
58 tx.oncomplete = function () {
59 deferred.resolve(result);
60 };
61 tx.onerror = function (event) {
62 deferred.reject(event.target)
63 };
64 }).catch(deferred.reject)
65 return deferred.pro
66}
67
68
69export const storeBookData = (record: BookData) : Promise<boolean> => {
70 const deferred = proResolver<boolean>()
71 Db().then(async(db) => {
72 const has = await hasBookData(record.fileId)
73 const tx = db.transaction(pdfDataStoreName, "readwrite");
74 if (has) {
75 // @ts-ignore
76 tx.objectStore(pdfDataStoreName).put(record)
77 } else {
78 // @ts-ignore
79 tx.objectStore(pdfDataStoreName).add(record)
80 }
81 tx.oncomplete = function () {
82 deferred.resolve(true)
83 };
84 tx.onerror = function (event) {
85 console.error("worker: error", event.target)
86 deferred.reject(event.target)
87 };
88 }).catch(deferred.reject)
89 return deferred.pro
90}