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