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 db = await openDatabase();
|
||||||
const tx = db.transaction(storeName, 'readwrite');
|
const tx = db.transaction(storeName, 'readwrite');
|
||||||
const store = tx.objectStore(storeName);
|
const store = tx.objectStore(storeName);
|
||||||
await store.put({
|
|
||||||
...object,
|
if (key) {
|
||||||
modified: Date.now()
|
await store.put(object, key);
|
||||||
});
|
} else {
|
||||||
event.ports[0].postMessage({ status: 'success', message: 'Object added or replaced successfully' });
|
await store.put(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.ports[0].postMessage({ status: 'success', message: '' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
event.ports[0].postMessage({ status: 'error', message: error.message });
|
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() {
|
async function openDatabase() {
|
||||||
|
@ -17,9 +17,14 @@ class Database {
|
|||||||
options: { keyPath: 'id' },
|
options: { keyPath: 'id' },
|
||||||
indices: [],
|
indices: [],
|
||||||
},
|
},
|
||||||
AnkMessages: {
|
AnkSharedSecrets: {
|
||||||
name: 'messages',
|
name: 'shared_secrets',
|
||||||
options: { keyPath: 'id' },
|
options: { keyPath: 'key' },
|
||||||
|
indices: [],
|
||||||
|
},
|
||||||
|
AnkUnconfirmedSecrets: {
|
||||||
|
name: 'unconfirmed_secrets',
|
||||||
|
options: { autoIncrement: true },
|
||||||
indices: [],
|
indices: [],
|
||||||
},
|
},
|
||||||
AnkProcessData: {
|
AnkProcessData: {
|
||||||
@ -139,9 +144,29 @@ class Database {
|
|||||||
console.log('Received response from service worker (GET_OBJECT):', event.data);
|
console.log('Received response from service worker (GET_OBJECT):', event.data);
|
||||||
};
|
};
|
||||||
|
|
||||||
public async addObject(payload: { storeName: string; object: any; key: any }) {
|
public addObject(payload: { storeName: string; object: any; key: any }): Promise<void> {
|
||||||
if (this.serviceWorkerRegistration?.active) {
|
return new Promise((resolve, reject) => {
|
||||||
const messageChannel = this.createMessageChannel(this.handleAddObjectResponse);
|
// 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(
|
this.serviceWorkerRegistration.active.postMessage(
|
||||||
{
|
{
|
||||||
type: 'ADD_OBJECT',
|
type: 'ADD_OBJECT',
|
||||||
@ -149,31 +174,14 @@ class Database {
|
|||||||
},
|
},
|
||||||
[messageChannel.port2],
|
[messageChannel.port2],
|
||||||
);
|
);
|
||||||
} else {
|
} catch (error) {
|
||||||
const { storeName, object } = payload;
|
reject(new Error(`Failed to send message to service worker: ${error}`));
|
||||||
const db = await openDatabase();
|
}
|
||||||
const tx = db.transaction(storeName, 'readwrite');
|
|
||||||
const store = tx.objectStore(storeName);
|
|
||||||
await store.put({
|
|
||||||
...object,
|
|
||||||
modified: Date.now()
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public async getObject(storeName: string, key: string) {
|
public async getObject(storeName: string, key: string): Promise<any | null> {
|
||||||
if (this.serviceWorkerRegistration?.active) {
|
const db = await this.getDb();
|
||||||
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 tx = db.transaction(storeName, 'readonly');
|
||||||
const store = tx.objectStore(storeName);
|
const store = tx.objectStore(storeName);
|
||||||
const result = await new Promise((resolve, reject) => {
|
const result = await new Promise((resolve, reject) => {
|
||||||
@ -181,8 +189,7 @@ class Database {
|
|||||||
getRequest.onsuccess = () => resolve(getRequest.result);
|
getRequest.onsuccess = () => resolve(getRequest.result);
|
||||||
getRequest.onerror = () => reject(getRequest.error);
|
getRequest.onerror = () => reject(getRequest.error);
|
||||||
});
|
});
|
||||||
console.log("🚀 ~ Database ~ result ~ result:", result)
|
return result
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,18 +297,30 @@ export default class Services {
|
|||||||
|
|
||||||
async saveDevice(device: any): Promise<any> {
|
async saveDevice(device: any): Promise<any> {
|
||||||
const db = await Database.getInstance();
|
const db = await Database.getInstance();
|
||||||
db.addObject({
|
try {
|
||||||
|
await db.addObject({
|
||||||
storeName: 'wallet',
|
storeName: 'wallet',
|
||||||
object: { pre_id: '1', device },
|
object: { pre_id: '1', device },
|
||||||
key: '1',
|
key: null,
|
||||||
});
|
});
|
||||||
localStorage.setItem('wallet', device);
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getDevice(): Promise<string | null> {
|
async getDevice(): Promise<string | null> {
|
||||||
const db = await Database.getInstance();
|
const db = await Database.getInstance();
|
||||||
db.getObject('wallet', '1');
|
try {
|
||||||
return localStorage.getItem('wallet');
|
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() {
|
async dumpWallet() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user