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:
		| @@ -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(); | ||||
| }); | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user