Searching a new balance between the two web workers...
This commit is contained in:
1 parent
71bd820da9
commit
0e714ac361
8 files changed
+247
-201
No files matched your search
@@ -2,24 +2,71 @@ import { Signal } from 'solid-js';
|
||||
import PouchDB from 'pouchdb';
|
||||
import indexeddb from 'pouchdb-adapter-indexeddb';
|
||||
|
||||
import { getSettings } from '../db/settings';
|
||||
import { delay } from '../lib/delay';
|
||||
import { getSettings, putSettings } from '../db/settings';
|
||||
import { sleep } from '../lib/async-wait';
|
||||
import {
|
||||
getAccounts,
|
||||
initialAccount,
|
||||
putAccount,
|
||||
getAccountById,
|
||||
} from '../db/account';
|
||||
|
||||
PouchDB.plugin(indexeddb);
|
||||
|
||||
export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
const { signal, params } = p;
|
||||
declare global {
|
||||
var localDb: any;
|
||||
var db: any;
|
||||
}
|
||||
|
||||
const initDb = async () => {
|
||||
if (globalThis.localDb === undefined) {
|
||||
globalThis.localDb = new PouchDB('_local_dyomedea_', {
|
||||
adapter: 'indexeddb',
|
||||
auto_compaction: true,
|
||||
});
|
||||
}
|
||||
|
||||
const accounts = await getAccounts();
|
||||
console.log({ caller: 'initDb', accounts });
|
||||
|
||||
if (accounts.length === 0) {
|
||||
accounts[0] = initialAccount;
|
||||
await putAccount({ id: initialAccount.id, account: initialAccount });
|
||||
}
|
||||
|
||||
const settings = await getSettings();
|
||||
let currentAccount = getAccountById(accounts, settings.currentAccountId);
|
||||
if (currentAccount === undefined) {
|
||||
settings.currentAccountId = accounts[0].id;
|
||||
await putSettings({ settings });
|
||||
currentAccount = accounts[0];
|
||||
}
|
||||
|
||||
console.log({ caller: 'initDb', settings, currentAccount });
|
||||
if (globalThis.db === undefined) {
|
||||
globalThis.db = new PouchDB(currentAccount.localDb, {
|
||||
adapter: 'indexeddb',
|
||||
auto_compaction: true,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export const watchDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
const { signal } = p;
|
||||
const [, setStatus] = signal;
|
||||
console.log({ caller: 'compactDb', p });
|
||||
console.log({ caller: 'watchDb', p });
|
||||
|
||||
await initDb();
|
||||
db = globalThis.db;
|
||||
localDb = globalThis.localDb;
|
||||
|
||||
const db = new PouchDB('_dyomedea_', {
|
||||
auto_compaction: true,
|
||||
adapter: 'indexeddb',
|
||||
});
|
||||
const dbinfo = await db.info();
|
||||
const localDbInfo = await localDb.info();
|
||||
const tasks = PouchDB.activeTasks.list();
|
||||
|
||||
setStatus({ status: 'starting', db: '_dyomedea_', dbinfo, tasks });
|
||||
setStatus({ opened: true, dbinfo, localDbinfo: localDbInfo, tasks });
|
||||
|
||||
return;
|
||||
|
||||
const timerId = setInterval(async () => {
|
||||
const dbinfo = await db.info();
|
||||
@@ -39,7 +86,7 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
const iDb = indexedDB.open(name);
|
||||
iDb.onerror = (event: any) => {
|
||||
console.error({
|
||||
caller: 'compactDb',
|
||||
caller: 'watchDb',
|
||||
message: 'open db error',
|
||||
target: event.target,
|
||||
});
|
||||
@@ -48,7 +95,7 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
|
||||
iDb.onsuccess = (event: any) => {
|
||||
console.log({
|
||||
caller: 'compactDb',
|
||||
caller: 'watchDb',
|
||||
message: 'open db',
|
||||
target: event.target,
|
||||
});
|
||||
@@ -61,7 +108,7 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
const request = store.getAll();
|
||||
request.onerror = (event: any) => {
|
||||
console.error({
|
||||
caller: 'compactDb',
|
||||
caller: 'watchDb',
|
||||
message: 'getAll error',
|
||||
target: event.target,
|
||||
});
|
||||
@@ -70,7 +117,7 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
|
||||
request.onsuccess = (event: any) => {
|
||||
console.log({
|
||||
caller: 'compactDb',
|
||||
caller: 'watchDb',
|
||||
message: 'getAll',
|
||||
target: event.target,
|
||||
});
|
||||
@@ -83,7 +130,7 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
const bySequence = iDb.transaction('docs', 'readonly');
|
||||
const store = bySequence.objectStore('docs');
|
||||
console.log({
|
||||
caller: 'compactDb',
|
||||
caller: 'watchDb',
|
||||
message: 'transaction opened',
|
||||
bySequence,
|
||||
store,
|
||||
@@ -101,14 +148,14 @@ export const compactDb = async (p: { signal: Signal<any>; params: any }) => {
|
||||
if (deleted !== 0) {
|
||||
// const purge = await db.purge(id, rev);
|
||||
console.log({
|
||||
caller: 'compactDb',
|
||||
caller: 'watchDb',
|
||||
message: 'purging',
|
||||
id,
|
||||
rev,
|
||||
doc,
|
||||
// purge,
|
||||
});
|
||||
await delay(1000);
|
||||
await sleep(1000);
|
||||
}
|
||||
});
|
||||
};
|
||||
Reference in new issue
Block a user