add preference persist / restore

This commit is contained in:
Stewart Allen 2022-01-10 23:02:34 -05:00
commit 2060819700
4 changed files with 34 additions and 7 deletions

View file

@ -27,6 +27,9 @@ function init() {
db.admin.put("init", Date.now()); db.admin.put("init", Date.now());
db.admin.get("uses").then(v => db.admin.put("uses", (v||0) + 1)); db.admin.get("uses").then(v => db.admin.put("uses", (v||0) + 1));
// reload preferences
api.prefs.restore();
// setup default workspace // setup default workspace
space.useDefaultKeys(false); space.useDefaultKeys(false);
space.sky.set({ space.sky.set({

View file

@ -11,6 +11,7 @@ gapp.register("mesh.api", [
"moto.client", // dep: moto.client "moto.client", // dep: moto.client
"moto.broker", // dep: moto.broker "moto.broker", // dep: moto.broker
"moto.space", // dep: moto.space "moto.space", // dep: moto.space
"data.index", // dep: data.index
"mesh.tool", // dep: mesh.tool "mesh.tool", // dep: mesh.tool
"add.array", // dep: add.array "add.array", // dep: add.array
]); ]);
@ -277,6 +278,28 @@ let tool = {
} }
}; };
// persisted preference map
let prefs = {
map: {},
put(key, val) {
prefs.map[key] = val;
prefs.update();
},
// persist to data store
update() {
mesh.db.admin.put("prefs", prefs.map);
},
// reload from data store
restore() {
mesh.db.admin.get("prefs").then(data => {
if (data) prefs.map = data;
});
}
};
// api is augmented in mesh.build (log, modal, download) // api is augmented in mesh.build (log, modal, download)
let api = mesh.api = { let api = mesh.api = {
help() { help() {
@ -328,6 +351,8 @@ let api = mesh.api = {
tool, tool,
prefs,
objects() { objects() {
// return model objects suitable for finding ray intersections // return model objects suitable for finding ray intersections
return group.list().map(o => o.models).flat().map(o => o.mesh); return group.list().map(o => o.models).flat().map(o => o.mesh);
@ -476,4 +501,7 @@ broker.wrapObject(selection, 'selection');
broker.wrapObject(model, 'model'); broker.wrapObject(model, 'model');
broker.wrapObject(group, 'group'); broker.wrapObject(group, 'group');
// optimize db writes by merging updates
prefs.update = util.deferWrap(prefs.update);
})(); })();

View file

@ -355,14 +355,14 @@ function ui_build() {
s.onclick = () => { s.onclick = () => {
s.style.display = 'none'; s.style.display = 'none';
d.style.display = 'flex'; d.style.display = 'flex';
prefs[label] = 1; api.prefs.put(label, 1);
}; };
h.onclick = () => { h.onclick = () => {
d.style.display = 'none'; d.style.display = 'none';
s.style.display = 'flex'; s.style.display = 'flex';
prefs[label] = 2; api.prefs.put(label, 2);
}; };
if (prefs[label] === 1) { if (api.prefs.map[label] === 1) {
s.onclick(); s.onclick();
} else { } else {
h.onclick(); h.onclick();
@ -374,9 +374,6 @@ function ui_build() {
} }
} }
// temp store of ui prefs (hide/show)
let prefs = {};
// listen for api calls // listen for api calls
// create a deferred wrapper to merge multiple rapid events // create a deferred wrapper to merge multiple rapid events
let defer_all = util.deferWrap(update_all); let defer_all = util.deferWrap(update_all);

View file

@ -63,7 +63,6 @@ mesh.model = class MeshModel extends mesh.object {
this.file = file || 'unnamed'; this.file = file || 'unnamed';
this.load(mesh || vertices, indices, normals); this.load(mesh || vertices, indices, normals);
// persist in db so it can be restored on page load // persist in db so it can be restored on page load
mapp.db.space.put(this.id, { file, mesh }); mapp.db.space.put(this.id, { file, mesh });
} }