reflow catalog.putFile using promises. only notify file listeners when concurrent ops complete
This commit is contained in:
parent
f5c09f4627
commit
b6fb3b314e
3 changed files with 51 additions and 31 deletions
|
|
@ -14,6 +14,7 @@
|
||||||
this.listeners = [];
|
this.listeners = [];
|
||||||
this.options = options || {};
|
this.options = options || {};
|
||||||
this.deferredHandler = null;
|
this.deferredHandler = null;
|
||||||
|
this.concurrent = 0;
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -82,20 +83,36 @@
|
||||||
* @param {Function} [callback]
|
* @param {Function} [callback]
|
||||||
*/
|
*/
|
||||||
putFile(name, vertices, callback) {
|
putFile(name, vertices, callback) {
|
||||||
|
let mark = Date.now();
|
||||||
let store = this;
|
let store = this;
|
||||||
store.db.put('file-'+name, vertices, function(ok) {
|
let pdb = store.db.promise();
|
||||||
if (ok) {
|
store.concurrent++;
|
||||||
|
|
||||||
|
function ondone(error) {
|
||||||
|
if (callback) callback(error);
|
||||||
|
if (--store.concurrent === 0) {
|
||||||
|
notifyFileListeners(store);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pdb.put(`file-${name}`, vertices)
|
||||||
|
.then(() => {
|
||||||
store.files[name] = {
|
store.files[name] = {
|
||||||
vertices: vertices.length/3,
|
vertices: vertices.length / 3,
|
||||||
updated: new Date().getTime()
|
updated: new Date().getTime()
|
||||||
};
|
};
|
||||||
saveFileList(store);
|
return pdb.put('files', store.files);
|
||||||
store.decimate(vertices, function(decimated) {
|
})
|
||||||
store.db.put('fdec-'+name, decimated);
|
.then(() => {
|
||||||
if (callback) callback(decimated);
|
return new Promise((resolve,reject) => {
|
||||||
|
store.decimate(vertices, resolve);
|
||||||
});
|
});
|
||||||
} else if (callback) callback(ok);
|
})
|
||||||
});
|
.then(decimated => {
|
||||||
|
return pdb.put(`fdec-${name}`, decimated)
|
||||||
|
})
|
||||||
|
.then(ondone)
|
||||||
|
.catch(ondone);
|
||||||
};
|
};
|
||||||
|
|
||||||
rename(name, newname, callback) {
|
rename(name, newname, callback) {
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,7 @@ console.log/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||||
this._save_timer = setTimeout(() => {
|
this._save_timer = setTimeout(() => {
|
||||||
this._save_timer = undefined;
|
this._save_timer = undefined;
|
||||||
this.saveState(() => {});
|
this.saveState(() => {});
|
||||||
}, 150);
|
}, 1500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let widget = this;
|
let widget = this;
|
||||||
|
|
|
||||||
|
|
@ -54,27 +54,30 @@
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
SP.promise = {
|
SP.promise = function() {
|
||||||
keys: (lower, upper) => new Promise(function(resolve, reject) {
|
let db = this;
|
||||||
this.keys(resolve,lower,upper);
|
return {
|
||||||
}),
|
keys: (lower, upper) => new Promise(function(resolve, reject) {
|
||||||
|
db.keys(resolve,lower,upper);
|
||||||
|
}),
|
||||||
|
|
||||||
iterate: (lower, upper, nullterm) => new Promise(function(resolve, reject) {
|
iterate: (lower, upper, nullterm) => new Promise(function(resolve, reject) {
|
||||||
this.iterate(resolve, lower, upper, nullterm);
|
db.iterate(resolve, lower, upper, nullterm);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
get: (key) => new Promise(function(resolve, reject) {
|
get: (key) => new Promise(function(resolve, reject) {
|
||||||
this.get(key, resolve);
|
db.get(key, resolve);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
put: (key, value) => new Promise(function(resolve, reject) {
|
put: (key, value) => new Promise(function(resolve, reject) {
|
||||||
this.put(key, value, resolve);
|
db.put(key, value, resolve);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
remove: (key) => new Promise(function(resolve, reject) {
|
remove: (key) => new Promise(function(resolve, reject) {
|
||||||
this.remove(key, resolve);
|
db.remove(key, resolve);
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
SP.keys = function(callback, lower, upper) {
|
SP.keys = function(callback, lower, upper) {
|
||||||
let out = [];
|
let out = [];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue