forked from cory/tildefriends
		
	ssb: Move mentions into the channels sidebar.
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| { | ||||
| 	"type": "tildefriends-app", | ||||
| 	"emoji": "🐌", | ||||
| 	"previous": "&eqdlS92vzTkZUzuGNj+PjgiLQC+X6o61Xh4RTb8r1KM=.sha256" | ||||
| 	"previous": "&onuy7/nH00Er+ujPI0ghlCOpRdDkuwL9nY2/WocLxTg=.sha256" | ||||
| } | ||||
|   | ||||
| @@ -8,7 +8,6 @@ import * as tf_compose from './tf-compose.js'; | ||||
| import * as tf_news from './tf-news.js'; | ||||
| import * as tf_profile from './tf-profile.js'; | ||||
| import * as tf_reactions_modal from './tf-reactions-modal.js'; | ||||
| import * as tf_tab_mentions from './tf-tab-mentions.js'; | ||||
| import * as tf_tab_news from './tf-tab-news.js'; | ||||
| import * as tf_tab_news_feed from './tf-tab-news-feed.js'; | ||||
| import * as tf_tab_search from './tf-tab-search.js'; | ||||
|   | ||||
| @@ -100,8 +100,6 @@ class TfElement extends LitElement { | ||||
| 			this.tab = 'search'; | ||||
| 		} else if (this.hash === '#connections') { | ||||
| 			this.tab = 'connections'; | ||||
| 		} else if (this.hash === '#mentions') { | ||||
| 			this.tab = 'mentions'; | ||||
| 		} else if (this.hash.startsWith('#sql=')) { | ||||
| 			this.tab = 'query'; | ||||
| 		} else { | ||||
| @@ -255,7 +253,15 @@ class TfElement extends LitElement { | ||||
| 			SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages | ||||
| 			JOIN json_each(?2) AS following ON messages.author = following.value | ||||
| 			WHERE messages.content ->> 'type' = 'post' | ||||
| 		`, [JSON.stringify(this.channels), JSON.stringify(Object.keys(following))]); | ||||
| 			UNION | ||||
| 			SELECT '@' AS channel, MAX(messages.rowid) AS rowid FROM messages_fts(?3) | ||||
| 			JOIN messages ON messages.rowid = messages_fts.rowid | ||||
| 			JOIN json_each(?2) AS following ON messages.author = following.value | ||||
| 		`, [ | ||||
| 			JSON.stringify(this.channels), | ||||
| 			JSON.stringify(Object.keys(following)), | ||||
| 			'"' + this.whoami.replace('"', '""') + '"', | ||||
| 		]); | ||||
| 		this.channels_unread = JSON.parse((await tfrpc.rpc.databaseGet('unread')) ?? '{}'); | ||||
| 		let start_time = new Date(); | ||||
| 		users = await this.fetch_about(Object.keys(following).sort(), users); | ||||
| @@ -311,14 +317,6 @@ class TfElement extends LitElement { | ||||
| 					.broadcasts=${this.broadcasts} | ||||
| 				></tf-tab-connections> | ||||
| 			`; | ||||
| 		} else if (this.tab === 'mentions') { | ||||
| 			return html` | ||||
| 				<tf-tab-mentions | ||||
| 					.following=${this.following} | ||||
| 					whoami=${this.whoami} | ||||
| 					.users="${this.users}}" | ||||
| 				></tf-tab-mentions> | ||||
| 			`; | ||||
| 		} else if (this.tab === 'search') { | ||||
| 			return html` | ||||
| 				<tf-tab-search | ||||
| @@ -350,8 +348,6 @@ class TfElement extends LitElement { | ||||
| 			await tfrpc.rpc.setHash('#'); | ||||
| 		} else if (tab === 'connections') { | ||||
| 			await tfrpc.rpc.setHash('#connections'); | ||||
| 		} else if (tab === 'mentions') { | ||||
| 			await tfrpc.rpc.setHash('#mentions'); | ||||
| 		} else if (tab === 'query') { | ||||
| 			await tfrpc.rpc.setHash('#sql='); | ||||
| 		} | ||||
| @@ -374,7 +370,6 @@ class TfElement extends LitElement { | ||||
| 		const k_tabs = { | ||||
| 			'📰': 'news', | ||||
| 			'📡': 'connections', | ||||
| 			'@': 'mentions', | ||||
| 			'🔍': 'search', | ||||
| 			'👩💻': 'query', | ||||
| 		}; | ||||
|   | ||||
| @@ -1,78 +0,0 @@ | ||||
| import {LitElement, html, unsafeHTML} from './lit-all.min.js'; | ||||
| import * as tfrpc from '/static/tfrpc.js'; | ||||
| import {styles} from './tf-styles.js'; | ||||
|  | ||||
| class TfTabMentionsElement extends LitElement { | ||||
| 	static get properties() { | ||||
| 		return { | ||||
| 			whoami: {type: String}, | ||||
| 			users: {type: Object}, | ||||
| 			following: {type: Array}, | ||||
| 			expanded: {type: Object}, | ||||
| 			messages: {type: Array}, | ||||
| 		}; | ||||
| 	} | ||||
|  | ||||
| 	static styles = styles; | ||||
|  | ||||
| 	constructor() { | ||||
| 		super(); | ||||
| 		let self = this; | ||||
| 		this.whoami = null; | ||||
| 		this.users = {}; | ||||
| 		this.following = []; | ||||
| 		this.expanded = {}; | ||||
| 		this.messages = []; | ||||
| 	} | ||||
|  | ||||
| 	async load() { | ||||
| 		console.log('Loading...', this.whoami); | ||||
| 		let results = await tfrpc.rpc.query( | ||||
| 			` | ||||
| 				SELECT messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature | ||||
| 				FROM messages_fts(?) | ||||
| 				JOIN messages ON messages.rowid = messages_fts.rowid | ||||
| 				JOIN json_each(?) AS following ON messages.author = following.value | ||||
| 				WHERE messages.author != ? | ||||
| 				ORDER BY timestamp DESC limit 20 | ||||
| 			`, | ||||
| 			[ | ||||
| 				'"' + this.whoami.replace('"', '""') + '"', | ||||
| 				JSON.stringify(this.following), | ||||
| 				this.whoami, | ||||
| 			] | ||||
| 		); | ||||
| 		console.log('Done.'); | ||||
| 		this.messages = results; | ||||
| 	} | ||||
|  | ||||
| 	on_expand(event) { | ||||
| 		if (event.detail.expanded) { | ||||
| 			let expand = {}; | ||||
| 			expand[event.detail.id] = true; | ||||
| 			this.expanded = Object.assign({}, this.expanded, expand); | ||||
| 		} else { | ||||
| 			delete this.expanded[event.detail.id]; | ||||
| 			this.expanded = Object.assign({}, this.expanded); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	render() { | ||||
| 		let self = this; | ||||
| 		if (!this.loading) { | ||||
| 			this.loading = true; | ||||
| 			this.load(); | ||||
| 		} | ||||
| 		return html` | ||||
| 			<tf-news | ||||
| 				id="news" | ||||
| 				whoami=${this.whoami} | ||||
| 				.messages=${this.messages} | ||||
| 				.users=${this.users} | ||||
| 				.expanded=${this.expanded} | ||||
| 				@tf-expand=${this.on_expand} | ||||
| 			></tf-news> | ||||
| 		`; | ||||
| 	} | ||||
| } | ||||
| customElements.define('tf-tab-mentions', TfTabMentionsElement); | ||||
| @@ -36,11 +36,30 @@ class TfTabNewsFeedElement extends LitElement { | ||||
| 	} | ||||
|  | ||||
| 	channel() { | ||||
| 		return this.hash.startsWith('##') ? this.hash.substring(2) : ''; | ||||
| 		return this.hash.startsWith('##') ? this.hash.substring(2) : this.hash.substring(1); | ||||
| 	} | ||||
|  | ||||
| 	async fetch_messages(start_time, end_time) { | ||||
| 		if (this.hash.startsWith('#@')) { | ||||
| 		if (this.hash == '#@') { | ||||
| 			let r = await tfrpc.rpc.query( | ||||
| 				` | ||||
| 					SELECT messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature | ||||
| 					FROM messages_fts(?1) | ||||
| 					JOIN messages ON messages.rowid = messages_fts.rowid | ||||
| 					JOIN json_each(?2) AS following ON messages.author = following.value | ||||
| 					WHERE | ||||
| 						messages.author != ?1 AND | ||||
| 						messages.timestamp > ?3 AND | ||||
| 						messages.timestamp < ?4 | ||||
| 					ORDER BY timestamp DESC limit 20 | ||||
| 				`, [ | ||||
| 					'"' + this.whoami.replace('"', '""') + '"', | ||||
| 					JSON.stringify(this.following), | ||||
| 					start_time, | ||||
| 					end_time, | ||||
| 				]); | ||||
| 			return r; | ||||
| 		} else if (this.hash.startsWith('#@')) { | ||||
| 			let r = await tfrpc.rpc.query( | ||||
| 				` | ||||
| 					WITH mine AS (SELECT rowid, id, previous, author, sequence, timestamp, hash, json(content) AS content, signature | ||||
| @@ -177,7 +196,6 @@ class TfTabNewsFeedElement extends LitElement { | ||||
| 	} | ||||
|  | ||||
| 	async decrypt(messages) { | ||||
| 		console.log('decrypt'); | ||||
| 		let result = []; | ||||
| 		for (let message of messages) { | ||||
| 			let content; | ||||
|   | ||||
| @@ -149,7 +149,7 @@ class TfTabNewsElement extends LitElement { | ||||
| 	} | ||||
|  | ||||
| 	render() { | ||||
| 		let profile = this.hash.startsWith('#@') | ||||
| 		let profile = this.hash.startsWith('#@') && this.hash != '#@' | ||||
| 			? html`<tf-profile | ||||
| 					class="tf-profile" | ||||
| 					id=${this.hash.substring(1)} | ||||
| @@ -181,6 +181,7 @@ class TfTabNewsElement extends LitElement { | ||||
| 					undefined} | ||||
| 				<div class="w3-bar-item w3-theme-d2">Channels</div> | ||||
| 				<a href="#" class="w3-bar-item w3-button" style=${this.hash == '#' ? 'font-weight: bold' : undefined}>general ${this.unread_status('')}</a> | ||||
| 				<a href="#@" class="w3-bar-item w3-button" style=${this.hash == '#@' ? 'font-weight: bold' : undefined}>@mentions ${this.unread_status('@')}</a> | ||||
| 				${this.channels.map(x => html` | ||||
| 					<a | ||||
| 						href=${'#' + encodeURIComponent('#' + x)} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user