From 052663efbe7ceb9dfaf5f272aafd86ca7b7c73d9 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sat, 28 Jun 2025 13:47:58 -0400 Subject: [PATCH] ssb: Proof of concept to try to stay connected to a handful of peers. #130 --- apps/ssb.json | 2 +- apps/ssb/tf-app.js | 46 ++++++++++++++++++++++++++++++++++------- apps/ssb/tf-message.js | 6 +++++- apps/welcome/index.html | 3 ++- docs/usage.md | 1 + src/ssb.connections.c | 22 +++++++++++++++++--- src/util.js.c | 4 ++++ 7 files changed, 70 insertions(+), 14 deletions(-) diff --git a/apps/ssb.json b/apps/ssb.json index 96e68d18..9cfe1d7c 100644 --- a/apps/ssb.json +++ b/apps/ssb.json @@ -1,5 +1,5 @@ { "type": "tildefriends-app", "emoji": "🦀", - "previous": "&fHj5cygP9tDGnJRTFZes1kywnjetkTH9z74qFy8nhXg=.sha256" + "previous": "&lOCyez82jwCUs8R/Ynx2nBK598+qDZ7RhGnWOaNQO9U=.sha256" } diff --git a/apps/ssb/tf-app.js b/apps/ssb/tf-app.js index 35d1b6ba..fca0fe5d 100644 --- a/apps/ssb/tf-app.js +++ b/apps/ssb/tf-app.js @@ -23,6 +23,8 @@ class TfElement extends LitElement { url: {type: String}, private_messages: {type: Array}, recent_reactions: {type: Array}, + is_administrator: {type: Boolean}, + stay_connected: {type: Boolean}, }; } @@ -73,6 +75,10 @@ class TfElement extends LitElement { async initial_load() { let whoami = await tfrpc.rpc.getActiveIdentity(); let ids = (await tfrpc.rpc.getIdentities()) || []; + this.is_administrator = await tfrpc.rpc.isAdministrator(); + this.stay_connected = + this.is_administrator && + (await tfrpc.rpc.globalSettingsGet('stay_connected')); this.url = await tfrpc.rpc.url(); this.whoami = whoami ?? (ids.length ? ids[0] : undefined); this.guest = !this.whoami?.length; @@ -658,6 +664,18 @@ class TfElement extends LitElement { tfrpc.rpc.sync(); } + async toggle_stay_connected() { + let stay_connected = await tfrpc.rpc.globalSettingsGet('stay_connected'); + let new_stay_connected = !this.stay_connected; + try { + if (new_stay_connected != stay_connected) { + await tfrpc.rpc.globalSettingsSet('stay_connected', new_stay_connected); + } + } finally { + this.stay_connected = await tfrpc.rpc.globalSettingsGet('stay_connected'); + } + } + render() { let self = this; @@ -680,14 +698,26 @@ class TfElement extends LitElement { class="w3-bar w3-theme-l1" style="position: static; top: 0; z-index: 10" > - + ${this.is_administrator + ? html` + + + ` + : undefined} ${Object.entries(k_tabs).map( ([k, v]) => html`