Update db
This commit is contained in:
parent
382517bab6
commit
704e6e7464
@ -16,29 +16,18 @@ self.addEventListener('message', async (event) => {
|
||||
const db = await openDatabase();
|
||||
const tx = db.transaction(storeName, 'readwrite');
|
||||
const store = tx.objectStore(storeName);
|
||||
await store.put({
|
||||
...object,
|
||||
modified: Date.now()
|
||||
});
|
||||
event.ports[0].postMessage({ status: 'success', message: 'Object added or replaced successfully' });
|
||||
|
||||
if (key) {
|
||||
await store.put(object, key);
|
||||
} else {
|
||||
await store.put(object);
|
||||
}
|
||||
|
||||
event.ports[0].postMessage({ status: 'success', message: '' });
|
||||
} catch (error) {
|
||||
event.ports[0].postMessage({ status: 'error', message: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
if (data.type === 'GET_OBJECT') {
|
||||
const { storeName, key } = data.payload;
|
||||
const db = await openDatabase();
|
||||
const tx = db.transaction(storeName, 'readonly');
|
||||
const store = tx.objectStore(storeName);
|
||||
const result = await new Promise((resolve, reject) => {
|
||||
const getRequest = store.get(key);
|
||||
getRequest.onsuccess = (event) => resolve(getRequest.result);
|
||||
getRequest.onerror = (event) => reject(getRequest.error);
|
||||
});
|
||||
|
||||
event.ports[0].postMessage({ type: 'GET_OBJECT_RESULT', payload: result });
|
||||
}
|
||||
});
|
||||
|
||||
async function openDatabase() {
|
||||
|
@ -17,9 +17,14 @@ class Database {
|
||||
options: { keyPath: 'id' },
|
||||
indices: [],
|
||||
},
|
||||
AnkMessages: {
|
||||
name: 'messages',
|
||||
options: { keyPath: 'id' },
|
||||
AnkSharedSecrets: {
|
||||
name: 'shared_secrets',
|
||||
options: { keyPath: 'key' },
|
||||
indices: [],
|
||||
},
|
||||
AnkUnconfirmedSecrets: {
|
||||
name: 'unconfirmed_secrets',
|
||||
options: { autoIncrement: true },
|
||||
indices: [],
|
||||
},
|
||||
AnkProcessData: {
|
||||
@ -139,50 +144,52 @@ class Database {
|
||||
console.log('Received response from service worker (GET_OBJECT):', event.data);
|
||||
};
|
||||
|
||||
public async addObject(payload: { storeName: string; object: any; key: any }) {
|
||||
if (this.serviceWorkerRegistration?.active) {
|
||||
const messageChannel = this.createMessageChannel(this.handleAddObjectResponse);
|
||||
this.serviceWorkerRegistration.active.postMessage(
|
||||
{
|
||||
type: 'ADD_OBJECT',
|
||||
payload,
|
||||
},
|
||||
[messageChannel.port2],
|
||||
);
|
||||
} else {
|
||||
const { storeName, object } = payload;
|
||||
const db = await openDatabase();
|
||||
const tx = db.transaction(storeName, 'readwrite');
|
||||
const store = tx.objectStore(storeName);
|
||||
await store.put({
|
||||
...object,
|
||||
modified: Date.now()
|
||||
});
|
||||
}
|
||||
public addObject(payload: { storeName: string; object: any; key: any }): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Check if the service worker is active
|
||||
if (!this.serviceWorkerRegistration?.active) {
|
||||
reject(new Error('Service worker is not active'));
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a message channel for communication
|
||||
const messageChannel = new MessageChannel();
|
||||
|
||||
// Handle the response from the service worker
|
||||
messageChannel.port1.onmessage = (event) => {
|
||||
if (event.data.status === 'success') {
|
||||
resolve();
|
||||
} else {
|
||||
const error = event.data.message;
|
||||
reject(new Error(error || 'Unknown error occurred while adding object'));
|
||||
}
|
||||
};
|
||||
|
||||
// Send the add object request to the service worker
|
||||
try {
|
||||
this.serviceWorkerRegistration.active.postMessage(
|
||||
{
|
||||
type: 'ADD_OBJECT',
|
||||
payload,
|
||||
},
|
||||
[messageChannel.port2],
|
||||
);
|
||||
} catch (error) {
|
||||
reject(new Error(`Failed to send message to service worker: ${error}`));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public async getObject(storeName: string, key: string) {
|
||||
if (this.serviceWorkerRegistration?.active) {
|
||||
const messageChannel = this.createMessageChannel(this.handleGetObjectResponse);
|
||||
|
||||
this.serviceWorkerRegistration.active.postMessage(
|
||||
{
|
||||
type: 'GET_OBJECT',
|
||||
payload: { storeName, key },
|
||||
},
|
||||
[messageChannel.port2],
|
||||
);
|
||||
} else {
|
||||
const db = await openDatabase();
|
||||
const tx = db.transaction(storeName, 'readonly');
|
||||
const store = tx.objectStore(storeName);
|
||||
const result = await new Promise((resolve, reject) => {
|
||||
const getRequest = store.get(key);
|
||||
getRequest.onsuccess = () => resolve(getRequest.result);
|
||||
getRequest.onerror = () => reject(getRequest.error);
|
||||
});
|
||||
console.log("🚀 ~ Database ~ result ~ result:", result)
|
||||
}
|
||||
public async getObject(storeName: string, key: string): Promise<any | null> {
|
||||
const db = await this.getDb();
|
||||
const tx = db.transaction(storeName, 'readonly');
|
||||
const store = tx.objectStore(storeName);
|
||||
const result = await new Promise((resolve, reject) => {
|
||||
const getRequest = store.get(key);
|
||||
getRequest.onsuccess = () => resolve(getRequest.result);
|
||||
getRequest.onerror = () => reject(getRequest.error);
|
||||
});
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -297,18 +297,30 @@ export default class Services {
|
||||
|
||||
async saveDevice(device: any): Promise<any> {
|
||||
const db = await Database.getInstance();
|
||||
db.addObject({
|
||||
storeName: 'wallet',
|
||||
object: { pre_id: '1', device },
|
||||
key: '1',
|
||||
});
|
||||
localStorage.setItem('wallet', device);
|
||||
try {
|
||||
await db.addObject({
|
||||
storeName: 'wallet',
|
||||
object: { pre_id: '1', device },
|
||||
key: null,
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
async getDevice(): Promise<string | null> {
|
||||
const db = await Database.getInstance();
|
||||
db.getObject('wallet', '1');
|
||||
return localStorage.getItem('wallet');
|
||||
try {
|
||||
const dbRes = await db.getObject('wallet', '1');
|
||||
if (dbRes) {
|
||||
const wallet = dbRes['device'];
|
||||
return wallet;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
throw new Error(`Failed to retrieve device from db: ${e}`);
|
||||
}
|
||||
}
|
||||
|
||||
async dumpWallet() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user