Use ssb.following() in the ssb app.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4590 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
01ba90fdba
commit
7e02cb90f6
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🐌",
|
"emoji": "🐌",
|
||||||
"previous": "&HrGonbL2IZBtoP3zh1glMUO16+PZ4/t0KFTpkNMYoPI=.sha256"
|
"previous": "&fDu52QJE1dYO2lB/HBpQqoGnGR1b0j38JkGrqt2wHQA=.sha256"
|
||||||
}
|
}
|
@ -30,6 +30,9 @@ tfrpc.register(async function getIdentities() {
|
|||||||
tfrpc.register(async function getAllIdentities() {
|
tfrpc.register(async function getAllIdentities() {
|
||||||
return ssb.getAllIdentities();
|
return ssb.getAllIdentities();
|
||||||
});
|
});
|
||||||
|
tfrpc.register(async function following(ids, depth) {
|
||||||
|
return ssb.following(ids, depth);
|
||||||
|
});
|
||||||
tfrpc.register(async function getBroadcasts() {
|
tfrpc.register(async function getBroadcasts() {
|
||||||
return ssb.getBroadcasts();
|
return ssb.getBroadcasts();
|
||||||
});
|
});
|
||||||
|
@ -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) {
|
async fetch_about(ids, users) {
|
||||||
const k_cache_version = 1;
|
const k_cache_version = 1;
|
||||||
let cache = await tfrpc.rpc.databaseGet('about');
|
let cache = await tfrpc.rpc.databaseGet('about');
|
||||||
@ -283,7 +211,8 @@ class TfElement extends LitElement {
|
|||||||
async load() {
|
async load() {
|
||||||
let whoami = this.whoami;
|
let whoami = this.whoami;
|
||||||
let tags = this.load_recent_tags();
|
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);
|
users = await this.fetch_about(following.sort(), users);
|
||||||
this.following = following;
|
this.following = following;
|
||||||
this.users = users;
|
this.users = users;
|
||||||
|
Loading…
Reference in New Issue
Block a user