Spaces:
Running
Running
File size: 3,381 Bytes
77c8214 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | class IndexedDBHandler {
constructor() {
this.db = null;
this.dbPromise = new Promise((resolve, reject) => {
const request = indexedDB.open('IFSDB', 2);
request.onerror = (event) => {
console.error('Database error:', event.target.errorCode);
reject(event.target.error);
};
request.onsuccess = (event) => {
this.db = event.target.result;
console.log('Database opened successfully');
resolve(this.db);
};
request.onupgradeneeded = (event) => {
this.db = event.target.result;
if (!this.db.objectStoreNames.contains('conversations')) {
this.db.createObjectStore('conversations', { keyPath: 'id', autoIncrement: true });
}
if (!this.db.objectStoreNames.contains('appState')) {
this.db.createObjectStore('appState'); // No keyPath needed for a single object
}
console.log('Database upgraded');
};
});
}
async saveState(state) {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const transaction = db.transaction(['appState'], 'readwrite');
const objectStore = transaction.objectStore('appState');
const request = objectStore.put(state, 'currentAppState'); // Store with a fixed key
request.onsuccess = () => {
resolve();
};
request.onerror = (event) => {
reject(event.target.error);
};
});
}
async loadState() {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const transaction = db.transaction(['appState'], 'readonly');
const objectStore = transaction.objectStore('appState');
const request = objectStore.get('currentAppState');
request.onsuccess = (event) => {
resolve(event.target.result);
};
request.onerror = (event) => {
reject(event.target.error);
};
});
}
async getConversations() {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const transaction = db.transaction(['conversations'], 'readonly');
const objectStore = transaction.objectStore('conversations');
const request = objectStore.getAll();
request.onsuccess = (event) => {
resolve(event.target.result);
};
request.onerror = (event) => {
reject(event.target.error);
};
});
}
async saveConversation(conversation) {
const db = await this.dbPromise;
return new Promise((resolve, reject) => {
const transaction = db.transaction(['conversations'], 'readwrite');
const objectStore = transaction.objectStore('conversations');
const request = objectStore.add(conversation);
request.onsuccess = (event) => {
resolve(event.target.result);
};
request.onerror = (event) => {
reject(event.target.error);
};
});
}
}
|