From 4637509b3d27cf7de7c0ca1ecb59cc173d86f480 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sat, 15 Jan 2022 21:48:04 +0000 Subject: [PATCH] Enumerate apps without walking all DB keys. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3768 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- core/core.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/core/core.js b/core/core.js index 00facd83..49793fd7 100644 --- a/core/core.js +++ b/core/core.js @@ -193,12 +193,17 @@ async function getProcessBlob(blobId, key, options) { 'getUser': getUser.bind(null, process, process), 'user': getUser(process, process), 'apps': function() { - var apps = process.credentials && + if (process.credentials && process.credentials.session && - process.credentials.session.name ? - new Database(process.credentials.session.name).getLike('path:%') : - {}; - return Object.fromEntries(Object.keys(apps).map(key => [key.substring(5), apps[key]])); + process.credentials.session.name) { + var db = new Database(process.credentials.session.name); + try { + var names = JSON.parse(db.get('apps')); + return Object.fromEntries(names.map(name => [name, db.get('path:' + name)])); + } catch { + } + } + return {}; }, } }; @@ -478,7 +483,16 @@ async function blobHandler(request, response, blobId, uri) { return; } var database = new Database(user); - await database.set('path:' + app, newBlobId); + var apps = new Set(); + try { + apps = new Set(JSON.parse(database.get('apps'))); + } catch { + } + if (!apps.has(app)) { + apps.add(app); + database.set('apps', JSON.stringify([...apps])); + } + database.set('path:' + app, newBlobId); } response.writeHead(200, {"Content-Type": "text/plain; charset=utf-8"});