ssb: Move mentions into the channels sidebar.
Some checks failed
Build Tilde Friends / Build-All (push) Has been cancelled
Some checks failed
Build Tilde Friends / Build-All (push) Has been cancelled
This commit is contained in:
parent
405bddcde0
commit
d4e75c1dec
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🐌",
|
"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_news from './tf-news.js';
|
||||||
import * as tf_profile from './tf-profile.js';
|
import * as tf_profile from './tf-profile.js';
|
||||||
import * as tf_reactions_modal from './tf-reactions-modal.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 from './tf-tab-news.js';
|
||||||
import * as tf_tab_news_feed from './tf-tab-news-feed.js';
|
import * as tf_tab_news_feed from './tf-tab-news-feed.js';
|
||||||
import * as tf_tab_search from './tf-tab-search.js';
|
import * as tf_tab_search from './tf-tab-search.js';
|
||||||
|
@ -100,8 +100,6 @@ class TfElement extends LitElement {
|
|||||||
this.tab = 'search';
|
this.tab = 'search';
|
||||||
} else if (this.hash === '#connections') {
|
} else if (this.hash === '#connections') {
|
||||||
this.tab = 'connections';
|
this.tab = 'connections';
|
||||||
} else if (this.hash === '#mentions') {
|
|
||||||
this.tab = 'mentions';
|
|
||||||
} else if (this.hash.startsWith('#sql=')) {
|
} else if (this.hash.startsWith('#sql=')) {
|
||||||
this.tab = 'query';
|
this.tab = 'query';
|
||||||
} else {
|
} else {
|
||||||
@ -255,7 +253,15 @@ class TfElement extends LitElement {
|
|||||||
SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages
|
SELECT '' AS channel, MAX(messages.rowid) AS rowid FROM messages
|
||||||
JOIN json_each(?2) AS following ON messages.author = following.value
|
JOIN json_each(?2) AS following ON messages.author = following.value
|
||||||
WHERE messages.content ->> 'type' = 'post'
|
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')) ?? '{}');
|
this.channels_unread = JSON.parse((await tfrpc.rpc.databaseGet('unread')) ?? '{}');
|
||||||
let start_time = new Date();
|
let start_time = new Date();
|
||||||
users = await this.fetch_about(Object.keys(following).sort(), users);
|
users = await this.fetch_about(Object.keys(following).sort(), users);
|
||||||
@ -311,14 +317,6 @@ class TfElement extends LitElement {
|
|||||||
.broadcasts=${this.broadcasts}
|
.broadcasts=${this.broadcasts}
|
||||||
></tf-tab-connections>
|
></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') {
|
} else if (this.tab === 'search') {
|
||||||
return html`
|
return html`
|
||||||
<tf-tab-search
|
<tf-tab-search
|
||||||
@ -350,8 +348,6 @@ class TfElement extends LitElement {
|
|||||||
await tfrpc.rpc.setHash('#');
|
await tfrpc.rpc.setHash('#');
|
||||||
} else if (tab === 'connections') {
|
} else if (tab === 'connections') {
|
||||||
await tfrpc.rpc.setHash('#connections');
|
await tfrpc.rpc.setHash('#connections');
|
||||||
} else if (tab === 'mentions') {
|
|
||||||
await tfrpc.rpc.setHash('#mentions');
|
|
||||||
} else if (tab === 'query') {
|
} else if (tab === 'query') {
|
||||||
await tfrpc.rpc.setHash('#sql=');
|
await tfrpc.rpc.setHash('#sql=');
|
||||||
}
|
}
|
||||||
@ -374,7 +370,6 @@ class TfElement extends LitElement {
|
|||||||
const k_tabs = {
|
const k_tabs = {
|
||||||
'📰': 'news',
|
'📰': 'news',
|
||||||
'📡': 'connections',
|
'📡': 'connections',
|
||||||
'@': 'mentions',
|
|
||||||
'🔍': 'search',
|
'🔍': 'search',
|
||||||
'👩💻': 'query',
|
'👩💻': '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() {
|
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) {
|
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(
|
let r = await tfrpc.rpc.query(
|
||||||
`
|
`
|
||||||
WITH mine AS (SELECT rowid, id, previous, author, sequence, timestamp, hash, json(content) AS content, signature
|
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) {
|
async decrypt(messages) {
|
||||||
console.log('decrypt');
|
|
||||||
let result = [];
|
let result = [];
|
||||||
for (let message of messages) {
|
for (let message of messages) {
|
||||||
let content;
|
let content;
|
||||||
|
@ -149,7 +149,7 @@ class TfTabNewsElement extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let profile = this.hash.startsWith('#@')
|
let profile = this.hash.startsWith('#@') && this.hash != '#@'
|
||||||
? html`<tf-profile
|
? html`<tf-profile
|
||||||
class="tf-profile"
|
class="tf-profile"
|
||||||
id=${this.hash.substring(1)}
|
id=${this.hash.substring(1)}
|
||||||
@ -181,6 +181,7 @@ class TfTabNewsElement extends LitElement {
|
|||||||
undefined}
|
undefined}
|
||||||
<div class="w3-bar-item w3-theme-d2">Channels</div>
|
<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}>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`
|
${this.channels.map(x => html`
|
||||||
<a
|
<a
|
||||||
href=${'#' + encodeURIComponent('#' + x)}
|
href=${'#' + encodeURIComponent('#' + x)}
|
||||||
|
Loading…
Reference in New Issue
Block a user