IFSNEOREVIEWV3 / indexeddb-handler.js
MMOON's picture
Upload 14 files
77c8214 verified
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);
};
});
}
}