diff --git a/apps/cory/index.json b/apps/cory/index.json index cfc8291f..762bad99 100644 --- a/apps/cory/index.json +++ b/apps/cory/index.json @@ -1 +1 @@ -{"type":"tildefriends-app","files":{"app.js":"&F1q+r6zHWzbJE9t2rjrhupV2xCIFyJNabXkbGWjHTQQ=.sha256","index.html":"&Wllj8FUH4aUEyb79PJETNY3edqGlY5Mic/4nS9fH9nA=.sha256","vue-material.js":"&K5cdLqXYCENPak/TCINHQhyJhpS4G9DlZHGwoh/LF2g=.sha256","tf-user.js":"&DdJwZYEo7AqFyutYMvEjykoVXxdHVog0UXye6Sbo0TU=.sha256","tf-message.js":"&eS1jLx23k9mytvuDdxHu/NPblvlmp8HY46uvCP7GtVY=.sha256","tf.js":"&rUCI1QKOoyWcFegV72DfG/P7HykmkX4DcvWV87hCeBM=.sha256","commonmark.min.js":"&5x6ek3tFrKTZX6hXNNyFsjmhvrjmWpUkwuuaiyVV1Us=.sha256","vue.js":"&g1wvA+yHl1sVC+eufTsg9If7ZeVyMTBU+h0tks7ZNzE=.sha256","vue-material-theme-default-dark.css":"&RP2nr+2CR18BpHHw5ST9a5GJUCOG9n0G2kuGkcQioWE=.sha256","vue-material.min.css":"&kGbUM2QgFSyHZRzqQb0b+0S3EVIlZ0AXpdiAVjIhou8=.sha256","roboto.css":"&jJv43Om673mQO5JK0jj7714s5E+5Yrf82H6LcDx7wUs=.sha256","material-icons.css":"&a28PdcVvgq/DxyIvJAx/e+ZOEtOuHnr3kjLWKyzH11M=.sha256"}} \ No newline at end of file +{"type":"tildefriends-app","files":{"app.js":"&XVSFb4Gp/ts/5eRWY+l2vZOeWwokQJd8xO0zoDT2Nrw=.sha256","index.html":"&/CE4CuVKI56h5tfAHF0kzCXbLfhVjWzsM8aZAB9HpEM=.sha256","vue-material.js":"&K5cdLqXYCENPak/TCINHQhyJhpS4G9DlZHGwoh/LF2g=.sha256","tf-user.js":"&DdJwZYEo7AqFyutYMvEjykoVXxdHVog0UXye6Sbo0TU=.sha256","tf-message.js":"&eS1jLx23k9mytvuDdxHu/NPblvlmp8HY46uvCP7GtVY=.sha256","tf.js":"&k1spHFz1z0DroPr/95QBOjR3RVeCJi61TK4i2Xr37uE=.sha256","commonmark.min.js":"&5x6ek3tFrKTZX6hXNNyFsjmhvrjmWpUkwuuaiyVV1Us=.sha256","vue.js":"&g1wvA+yHl1sVC+eufTsg9If7ZeVyMTBU+h0tks7ZNzE=.sha256","vue-material-theme-default-dark.css":"&RP2nr+2CR18BpHHw5ST9a5GJUCOG9n0G2kuGkcQioWE=.sha256","vue-material.min.css":"&kGbUM2QgFSyHZRzqQb0b+0S3EVIlZ0AXpdiAVjIhou8=.sha256","roboto.css":"&jJv43Om673mQO5JK0jj7714s5E+5Yrf82H6LcDx7wUs=.sha256","material-icons.css":"&a28PdcVvgq/DxyIvJAx/e+ZOEtOuHnr3kjLWKyzH11M=.sha256"}} \ No newline at end of file diff --git a/apps/cory/index/app.js b/apps/cory/index/app.js index 3f6b0053..4d74c106 100644 --- a/apps/cory/index/app.js +++ b/apps/cory/index/app.js @@ -42,11 +42,13 @@ async function following(db, id) { } f.sequence = row.sequence; }); - f.users = Array.from(f.users); + var as_set = f.users; + f.users = Array.from(f.users).sort(); var j = JSON.stringify(f); if (o != j) { await db.set(id + ":following", j); } + f.users = as_set; g_following_cache[id] = f.users; return f.users; } @@ -59,7 +61,7 @@ async function followingDeep(db, seed_ids, depth) { if (g_following_deep_cache[key]) { return g_following_deep_cache[key]; } - var f = await Promise.all(seed_ids.map(x => following(db, x))); + var f = await Promise.all(seed_ids.map(x => following(db, x).then(x => [...x]))); var ids = [].concat(...f); var x = await followingDeep(db, [...new Set(ids)].sort(), depth - 1); x = [...new Set([].concat(...x, ...seed_ids))].sort(); @@ -67,19 +69,11 @@ async function followingDeep(db, seed_ids, depth) { return x; } -async function followers(db, id) { +async function followers(db, visible_users, id) { if (g_followers_cache[id]) { return g_followers_cache[id]; } - var results = []; - var me = await ssb.whoami(); - var visible_users = await followingDeep(db, [me], 2); - for (let user of visible_users) { - var followed = await following(db, user); - if (followed.indexOf(id)) { - results.push(user); - } - } + var results = visible_users.filter(user => g_following_cache[user].has(id)); g_followers_cache[id] = results; return results; } @@ -296,29 +290,24 @@ async function refresh(selected) { ssb.getBroadcasts().then(broadcasts => app.postMessage({broadcasts: broadcasts})), ssb.connections().then(connections => app.postMessage({connections: connections})), core.apps().then(apps => app.postMessage({apps: apps})), - getRecentPostIds(db, whoami, g_selected, k_posts_max).then(async function(ids) { - var posts = await getPosts(db, ids); - var roots = posts.map(function(x) { - try { - return JSON.parse(x.content).root; - } catch { - return null; - } - }); - var have = new Set(posts.map(x => x.id)); - roots = [...new Set(roots)].filter(x => x && !have.has(x)); - var all_posts = [].concat(posts, await getPosts(db, roots)); - return Promise.all(all_posts.map(x => app.postMessage({message: x}))); - }), - Promise.all([].concat(all_followed.map(function(id) { - return [ - getVotes(db, id).then(votes => app.postMessage({votes: votes})), - getAbout(db, id).then(user => app.postMessage({user: {user: id, about: user}})), - following(db, id).then(f => app.postMessage({following: {id: id, users: f}})), - followers(db, id).then(f => app.postMessage({followers: {id: id, users: f}})), - ]; - }))), ]); + var ids = await getRecentPostIds(db, whoami, g_selected, k_posts_max); + var posts = await getPosts(db, ids); + var roots = posts.map(function(x) { + try { + return JSON.parse(x.content).root; + } catch { + return null; + } + }); + var have = new Set(posts.map(x => x.id)); + roots = [...new Set(roots)].filter(x => x && !have.has(x)); + var all_posts = [].concat(posts, await getPosts(db, roots)); + await Promise.all(all_posts.map(x => app.postMessage({message: x}))); + await Promise.all(all_followed.map(id => getAbout(db, id).then(results => app.postMessage({user: {user: id, about: results}})))); + await Promise.all(all_followed.map(id => getVotes(db, id).then(results => app.postMessage({votes: results})))); + await Promise.all(all_followed.map(id => following(db, id).then(results => app.postMessage({following: {id: id, users: [...results]}})))); + await Promise.all(all_followed.map(id => followers(db, all_followed, id).then(results => app.postMessage({followers: {id: id, users: results}})))); await app.postMessage({ready: true}); } diff --git a/apps/cory/index/index.html b/apps/cory/index/index.html index 8bacb91d..29214753 100644 --- a/apps/cory/index/index.html +++ b/apps/cory/index/index.html @@ -46,6 +46,7 @@ Welcome, . + Loaded in {{load_time}} seconds.
What's up?
diff --git a/apps/cory/index/tf.js b/apps/cory/index/tf.js index 49602907..b3abb7ce 100644 --- a/apps/cory/index/tf.js +++ b/apps/cory/index/tf.js @@ -19,8 +19,10 @@ var g_data = { selected: null, edit_profile_name: null, edit_profile_description: null, + load_time: null, }; +var g_load_start = new Date(); var g_data_initial = JSON.parse(JSON.stringify(g_data)); var g_message_queue = []; var g_process_pending = false; @@ -106,11 +108,13 @@ function processMessages() { g_data.votes[link][content.vote.expression].push({author: vote.author, value: content.vote.value}); }); } else if (key == 'clear') { + g_load_start = new Date(); g_data.loading = true; Object.keys(g_data_initial).forEach(function(key) { Vue.set(g_data, key, JSON.parse(JSON.stringify(g_data_initial[key]))); }); } else if (key == 'ready') { + g_data.load_time = (new Date() - g_load_start) / 1000; g_data.loading = false; } else if (key == 'unread') { g_data.unread += event.data.unread;