Fixed tree reset after sync, optimized sync with IndexedDB
This commit is contained in:
parent
454d065baa
commit
26ca510785
5 changed files with 72 additions and 52 deletions
|
|
@ -159,6 +159,7 @@ export class NodeStore {
|
|||
})
|
||||
}//}}}
|
||||
|
||||
/*
|
||||
upsertNodeRecords(records) {//{{{
|
||||
return new Promise((resolve, reject) => {
|
||||
const t = this.db.transaction('nodes', 'readwrite')
|
||||
|
|
@ -187,16 +188,10 @@ export class NodeStore {
|
|||
record.modified = 0
|
||||
addReq = nodeStore.put(record)
|
||||
}
|
||||
addReq.onsuccess = () => {
|
||||
console.debug(`${op} ${record.UUID} (${record.Name})`)
|
||||
}
|
||||
addReq.onerror = (event) => {
|
||||
console.log(`error ${op} ${record.UUID}`, event.target.error)
|
||||
reject(event.target.error)
|
||||
}
|
||||
}
|
||||
})
|
||||
}//}}}
|
||||
*/
|
||||
getTreeNodes(parent, newLevel) {//{{{
|
||||
return new Promise((resolve, reject) => {
|
||||
// Parent of toplevel nodes is ROOT_NODE in indexedDB.
|
||||
|
|
@ -219,7 +214,7 @@ export class NodeStore {
|
|||
req.onerror = (event) => reject(event.target.error)
|
||||
})
|
||||
}//}}}
|
||||
async search(searchfor, parent) {//{{{
|
||||
search(searchfor, parent) {//{{{
|
||||
return new Promise((resolve, reject) => {
|
||||
const trx = this.db.transaction('nodes', 'readonly')
|
||||
const nodeStore = trx.objectStore('nodes')
|
||||
|
|
@ -249,43 +244,55 @@ export class NodeStore {
|
|||
})
|
||||
}//}}}
|
||||
|
||||
add(records) {//{{{
|
||||
add(records, objstore) {//{{{
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const t = this.db.transaction('nodes', 'readwrite')
|
||||
const nodeStore = t.objectStore('nodes')
|
||||
t.onerror = (event) => {
|
||||
console.error('transaction error', event.target.error)
|
||||
reject(event.target.error)
|
||||
// A nodestore can be provided in order to
|
||||
// avoid creating new transactions.
|
||||
let nodeStore = objstore
|
||||
let t
|
||||
|
||||
if (nodeStore === undefined) {
|
||||
t = this.db.transaction('nodes', 'readwrite')
|
||||
nodeStore = t.objectStore('nodes')
|
||||
|
||||
t.oncomplete = (_event) => {
|
||||
resolve()
|
||||
}
|
||||
|
||||
t.onerror = (event) => {
|
||||
console.error('transaction error', event.target.error)
|
||||
reject(event.target.error)
|
||||
}
|
||||
}
|
||||
|
||||
// records is an object, not an array.
|
||||
const promises = []
|
||||
for (const recordIdx in records) {
|
||||
const record = records[recordIdx]
|
||||
const addReq = nodeStore.put(record.data)
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
addReq.onsuccess = () => resolve()
|
||||
addReq.onerror = (event) => {
|
||||
console.error('Error!', event.target.error, record.ID)
|
||||
reject(event.target.error)
|
||||
}
|
||||
})
|
||||
promises.push(promise)
|
||||
nodeStore.put(record.data)
|
||||
}
|
||||
|
||||
Promise.all(promises).then(() => resolve())
|
||||
resolve()
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
console.error(e)
|
||||
reject(e)
|
||||
}
|
||||
})
|
||||
}//}}}
|
||||
get(uuid) {//{{{
|
||||
get(uuid, suppliedNodestore) {//{{{
|
||||
return new Promise((resolve, reject) => {
|
||||
const trx = this.db.transaction('nodes', 'readonly')
|
||||
const nodeStore = trx.objectStore('nodes')
|
||||
// A nodestore can be provided in order to
|
||||
// avoid creating new transactions.
|
||||
let trx
|
||||
let nodeStore = suppliedNodestore
|
||||
|
||||
if (nodeStore === undefined) {
|
||||
trx = this.db.transaction('nodes', 'readonly')
|
||||
nodeStore = trx.objectStore('nodes')
|
||||
}
|
||||
|
||||
const getRequest = nodeStore.get(uuid)
|
||||
|
||||
getRequest.onsuccess = (event) => {
|
||||
// Node not found in IndexedDB.
|
||||
if (event.target.result === undefined) {
|
||||
|
|
@ -328,6 +335,9 @@ export class NodeStore {
|
|||
})
|
||||
|
||||
}//}}}
|
||||
newTransaction(objectStore, mode) {// {{{
|
||||
return this.db.transaction(objectStore, mode)
|
||||
}// }}}
|
||||
|
||||
nodeCount() {//{{{
|
||||
return new Promise((resolve, reject) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue