diff --git a/apps/ssb.json b/apps/ssb.json index 34cfe2eb..b528aa10 100644 --- a/apps/ssb.json +++ b/apps/ssb.json @@ -1,5 +1,5 @@ { "type": "tildefriends-app", "emoji": "🐌", - "previous": "&HrGonbL2IZBtoP3zh1glMUO16+PZ4/t0KFTpkNMYoPI=.sha256" + "previous": "&fDu52QJE1dYO2lB/HBpQqoGnGR1b0j38JkGrqt2wHQA=.sha256" } \ No newline at end of file diff --git a/apps/ssb/app.js b/apps/ssb/app.js index 8799d8fb..24b4d84f 100644 --- a/apps/ssb/app.js +++ b/apps/ssb/app.js @@ -30,6 +30,9 @@ tfrpc.register(async function getIdentities() { tfrpc.register(async function getAllIdentities() { return ssb.getAllIdentities(); }); +tfrpc.register(async function following(ids, depth) { + return ssb.following(ids, depth); +}); tfrpc.register(async function getBroadcasts() { return ssb.getBroadcasts(); }); diff --git a/apps/ssb/tf-app.js b/apps/ssb/tf-app.js index 01d4fb9a..a018ad37 100644 --- a/apps/ssb/tf-app.js +++ b/apps/ssb/tf-app.js @@ -75,78 +75,6 @@ class TfElement extends LitElement { } } - async contacts_internal(id, last_row_id, following, max_row_id) { - let result = Object.assign({}, following[id] || {}); - result.following = result.following || {}; - result.blocking = result.blocking || {}; - let contacts = await tfrpc.rpc.query( - ` - SELECT content FROM messages - WHERE author = ? AND - rowid > ? AND - rowid <= ? AND - json_extract(content, '$.type') = 'contact' - ORDER BY sequence - `, - [id, last_row_id, max_row_id]); - for (let row of contacts) { - let contact = JSON.parse(row.content); - if (contact.following === true) { - result.following[contact.contact] = true; - } else if (contact.following === false) { - delete result.following[contact.contact]; - } else if (contact.blocking === true) { - result.blocking[contact.contact] = true; - } else if (contact.blocking === false) { - delete result.blocking[contact.contact]; - } - } - following[id] = result; - return result; - } - - async contact(id, last_row_id, following, max_row_id) { - return await this.contacts_internal(id, last_row_id, following, max_row_id); - } - - async following_deep_internal(ids, depth, blocking, last_row_id, following, max_row_id) { - let contacts = await Promise.all([...new Set(ids)].map(x => this.contact(x, last_row_id, following, max_row_id))); - let result = {}; - for (let i = 0; i < ids.length; i++) { - let id = ids[i]; - let contact = contacts[i]; - let all_blocking = Object.assign({}, contact.blocking, blocking); - let found = Object.keys(contact.following).filter(y => !all_blocking[y]); - let deeper = depth > 1 ? await this.following_deep_internal(found, depth - 1, all_blocking, last_row_id, following, max_row_id) : []; - result[id] = [id, ...found, ...deeper]; - } - return [...new Set(Object.values(result).flat())]; - } - - async following_deep(ids, depth, blocking) { - const k_cache_version = 5; - let cache = await tfrpc.rpc.databaseGet('following'); - cache = cache ? JSON.parse(cache) : {}; - if (cache.version !== k_cache_version) { - cache = { - version: k_cache_version, - following: {}, - last_row_id: 0, - }; - } - let max_row_id = (await tfrpc.rpc.query(` - SELECT MAX(rowid) AS max_row_id FROM messages - `, []))[0].max_row_id; - let result = await this.following_deep_internal(ids, depth, blocking, cache.last_row_id, cache.following, max_row_id); - cache.last_row_id = max_row_id; - let store = JSON.stringify(cache); - /* 2023-02-20: Exceeding message size. */ - //if (store.length < 512 * 1024) { - await tfrpc.rpc.databaseSet('following', store); - //} - return [result, cache.following]; - } - async fetch_about(ids, users) { const k_cache_version = 1; let cache = await tfrpc.rpc.databaseGet('about'); @@ -283,7 +211,8 @@ class TfElement extends LitElement { async load() { let whoami = this.whoami; let tags = this.load_recent_tags(); - let [following, users] = await this.following_deep([whoami], 2, {}); + let following = await tfrpc.rpc.following([whoami], 2); + let users = {}; users = await this.fetch_about(following.sort(), users); this.following = following; this.users = users;