Skip to content

Commit fa306ca

Browse files
authored
Merge pull request #12 from ssbc/apk_settings_frontend
Moving the storage of user settings from the frontend to the backend
2 parents 9967ac8 + 7a4d1f4 commit fa306ca

8 files changed

Lines changed: 120 additions & 194 deletions

File tree

android/tinySSB/app/src/main/assets/web/board_ui.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ function load_board_list() {
8888
var board = tremola.board[bid]
8989
var date = new Date(bidTimestamp[i][1])
9090
date = date.toDateString() + ' ' + date.toTimeString().substring(0, 5);
91-
if (board.forgotten && tremola.settings.hide_forgotten_boards)
91+
if (board.forgotten && tremola.settings.hide_forgotten_kanbans)
9292
continue
9393
var cl, mem, item, bg, row, badge, badgeId, cnt;
9494
cl = document.getElementById('lst:kanban');

android/tinySSB/app/src/main/assets/web/tremola.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -426,15 +426,15 @@
426426
<div class="settings">
427427
<div class="settingsText">Connect to Peers via BLE</div>
428428
<div style="float: right;"><label class="switch">
429-
<input id="ble" type="checkbox" onchange="toggle_changed(this);">
429+
<input id="ble_enabled" type="checkbox" onchange="toggle_changed(this);">
430430
<span class="slider round"></span></label></div>
431431
</div>
432432
<hr>
433433

434434
<div class="settings">
435435
<div class="settingsText">Connect to Peers via UDP Multicast</div>
436436
<div><label class="switch">
437-
<input id="udp_multicast" type="checkbox" onchange="toggle_changed(this);">
437+
<input id="udp_multicast_enabled" type="checkbox" onchange="toggle_changed(this);">
438438
<span class="slider round"></span>
439439
</label></div>
440440
</div>
@@ -443,7 +443,7 @@
443443
<div class="settings">
444444
<div class="settingsText">Connect to Pub via Websocket</div>
445445
<div style="float: right;"><label class="switch">
446-
<input id="websocket" type="checkbox" onchange="toggle_changed(this);">
446+
<input id="websocket_enabled" type="checkbox" onchange="toggle_changed(this);">
447447
<span class="slider round"></span></label></div>
448448
</div>
449449
<div id="container:settings_ws_url" class="websocket_url_settings" style="display:none;">
@@ -456,7 +456,7 @@
456456
<div class="settings">
457457
<div class="settingsText">Preview before sending</div>
458458
<div style="float: right;"><label class="switch">
459-
<input id="enable_preview" type="checkbox" onchange="toggle_changed(this);">
459+
<input id="show_chat_preview" type="checkbox" onchange="toggle_changed(this);">
460460
<span class="slider round"></span></label></div>
461461
</div>
462462
<hr>
@@ -472,7 +472,7 @@
472472
<div class="settings">
473473
<div class="settingsText">Hide forgotten Kanban Boards</div>
474474
<div style="float: right;"><label class="switch">
475-
<input id="hide_forgotten_boards" type="checkbox" onchange="toggle_changed(this);">
475+
<input id="hide_forgotten_kanbans" type="checkbox" onchange="toggle_changed(this);">
476476
<span class="slider round"></span></label></div>
477477
</div>
478478
<hr>
@@ -496,7 +496,7 @@
496496
<div class="settings">
497497
<div class="settingsText">Background map</div>
498498
<div style="float: right;"><label class="switch">
499-
<input id="background_map" type="checkbox" onchange="toggle_changed(this);">
499+
<input id="show_background_map" type="checkbox" onchange="toggle_changed(this);">
500500
<span class="slider round"></span></label></div>
501501
</div>
502502
<hr>

android/tinySSB/app/src/main/assets/web/tremola.js

Lines changed: 15 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var colors = ["#d9ceb2", "#99b2b7", "#e6cba5", "#ede3b4", "#8b9e9b", "#bd7578",
1616
var curr_img_candidate = null;
1717
var pubs = []
1818
var wants = {}
19+
var loaded_settings = {} // the settings provided bz the backend, will overwrite tremola.settings after initialization
1920

2021
var restream = false // whether the backend is currently restreaming all posts
2122

@@ -856,7 +857,7 @@ function resetTremola() { // wipes browser-side content
856857
"contacts": {},
857858
"profile": {},
858859
"id": myId,
859-
"settings": get_default_settings(),
860+
"settings": {},
860861
"board": {}
861862
}
862863
var n = recps2nm([myId])
@@ -921,63 +922,6 @@ function b2f_ble_disabled() {
921922
//ble_status = "disabled"
922923
}
923924

924-
/*
925-
var want = {} // all received want vectors, id: [[want vector], timestamp], want vectors older than 90 seconds are discarded
926-
var max_want = [] // current max vector
927-
var old_curr = [] // own want vector at the time when the maximum want vector was last updated
928-
929-
function b2f_want_update(identifier, wantVector) {
930-
931-
console.log("b2f received want:", wantVector, "from: ", identifier)
932-
933-
// remove old want vectors
934-
var deleted = false;
935-
for (var id in want) {
936-
var ts = want[id][1]
937-
if(Date.now() - ts > 90000) {
938-
console.log("removed want of", id)
939-
delete want[id]
940-
deleted = true
941-
}
942-
943-
}
944-
945-
// if the want vector didn't change, no further updates are required
946-
if(identifier in want) {
947-
if( equalArrays(want[identifier][0], wantVector)) {
948-
console.log("update only")
949-
want[identifier][1] = Date.now()
950-
if(!deleted) //if a want vector was previously removed, the max_want needs to be recalculated otherwise it is just an update without an effect
951-
return
952-
}
953-
}
954-
955-
want[identifier] = [wantVector, Date.now()]
956-
957-
// calculate new max want vector
958-
var all_vectors = Object.values(want).map(val => val[0])
959-
var new_max_want = all_vectors.reduce((accumulator, curr) => accumulator.len >= curr.len ? accumulator : curr) //return want vector with most entries
960-
961-
for (var vec of all_vectors) {
962-
for(var i in vec) {
963-
if (vec[i] > new_max_want[i])
964-
new_max_want[i] = vec[i]
965-
}
966-
}
967-
968-
// update
969-
if (!equalArrays(max_want,new_max_want)) {
970-
old_curr = want['me'][0]
971-
max_want = new_max_want
972-
console.log("new max")
973-
}
974-
975-
refresh_connection_progressbar()
976-
977-
console.log("max:", max_want)
978-
}
979-
*/
980-
981925
function b2f_local_peer_remaining_updates(identifier, remaining) {
982926
//TODO
983927
}
@@ -1195,6 +1139,11 @@ function b2f_new_event(e) { // incoming SSB log event: we get map with three ent
11951139
}
11961140
}
11971141

1142+
// backend callback method when calling backend("settings:get")
1143+
function b2f_get_settings(settings) {
1144+
tremola.settings = settings
1145+
}
1146+
11981147
function b2f_new_contact(fid) {
11991148
if ((fid in tremola.contacts)) // do not overwrite existing entry
12001149
return
@@ -1232,7 +1181,7 @@ function b2f_new_image_blob(ref) {
12321181
overlayIsActive = true;
12331182
}
12341183

1235-
function b2f_initialize(id) {
1184+
function b2f_initialize(id, settings) {
12361185
myId = id
12371186
if (window.localStorage.tremola) {
12381187
tremola = JSON.parse(window.localStorage.getItem('tremola'));
@@ -1244,11 +1193,13 @@ function b2f_initialize(id) {
12441193
if (tremola == null) {
12451194
resetTremola();
12461195
console.log("reset tremola")
1196+
if (typeof Android == 'undefined')
1197+
tremola.settings = BrowserOnlySettings // browser-only testing
12471198
}
12481199
if (typeof Android == 'undefined')
12491200
console.log("loaded ", JSON.stringify(tremola))
1250-
if (!('settings' in tremola))
1251-
tremola.settings = {}
1201+
else
1202+
tremola.settings = JSON.parse(settings)
12521203
var nm, ref;
12531204
for (nm in tremola.settings)
12541205
setSetting(nm, tremola.settings[nm])
@@ -1261,4 +1212,7 @@ function b2f_initialize(id) {
12611212
// load_chat("ALL");
12621213
}
12631214

1215+
1216+
1217+
12641218
// --- eof

android/tinySSB/app/src/main/assets/web/tremola_settings.js

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,23 @@
22

33
"use strict";
44

5-
function get_default_settings() {
6-
return {
7-
'enable_preview': false,
8-
'background_map': true,
9-
'websocket': true,
10-
'show_shortnames': true,
11-
'hide_forgotten_conv': true,
12-
'hide_forgotten_contacts': true,
13-
'udp_multicast': true,
14-
'ble': true,
15-
'websocket_url': "ws://meet.dmi.unibas.ch:8989"
16-
}
5+
6+
// These default settings are only used for browser-only testing
7+
// Normally, these settings below WILL BE IGNORED and loaded via the provided backend.
8+
const BrowserOnlySettings = {
9+
'show_chat_preview': false,
10+
'show_background_map': true,
11+
'websocket_enabled': true,
12+
'show_shortnames': true,
13+
'hide_forgotten_conv': true,
14+
'hide_forgotten_contacts': true,
15+
'hide_forgotten_kanbans': true,
16+
'udp_multicast_enabled': true,
17+
'ble_enabled': true,
18+
'websocket_url': "ws://meet.dmi.unibas.ch:8989"
1719
}
1820

21+
// button/toggle handler for boolean settings; settingID is determined by the id of the html object that emitted the event (e.id)
1922
function toggle_changed(e) {
2023
// console.log("toggle ", e.id);
2124
tremola.settings[e.id] = e.checked;
@@ -24,12 +27,14 @@ function toggle_changed(e) {
2427
applySetting(e.id, e.checked);
2528
}
2629

27-
function getSetting(nm) {
28-
return document.getElementById(nm).checked
30+
// getter
31+
function getSetting(settingID) {
32+
return tremola.settings[settingID]
2933
}
3034

35+
// frontend handler when settings have changed
3136
function applySetting(nm, val) {
32-
if (nm == 'background_map') {
37+
if (nm == 'show_background_map') {
3338
if (val)
3439
document.body.style.backgroundImage = "url('img/splash-as-background.jpg')";
3540
else
@@ -38,16 +43,17 @@ function applySetting(nm, val) {
3843
load_chat_list();
3944
} else if (nm == 'hide_forgotten_contacts') {
4045
load_contact_list();
41-
} else if (nm == 'websocket') {
46+
} else if (nm == 'websocket_enabled') {
4247
if (val)
4348
document.getElementById("container:settings_ws_url").style.display = 'flex'
4449
else
4550
document.getElementById("container:settings_ws_url").style.display = 'none'
4651
}
4752
}
4853

54+
// setter, this will also save the given settingID and its value in the backend
4955
function setSetting(nm, val) {
50-
// console.log("setting", nm, val)
56+
console.log("setting", nm, val)
5157
if (nm == "websocket_url") {
5258
document.getElementById("settings_urlInput").value = val
5359
return
@@ -56,20 +62,13 @@ function setSetting(nm, val) {
5662
document.getElementById(nm).checked = val;
5763
}
5864

59-
/* async */
65+
// calls the backend to wipe everything, including the ID
6066
function settings_wipe() {
6167
closeOverlay();
62-
backend("wipe"); // will not return
63-
/*
64-
window.localStorage.setItem("tremola", "null");
65-
backend("ready"); // will call initialize()
66-
await new Promise(resolve => setTimeout(resolve, 500));
67-
// resetTremola();
68-
menu_redraw();
69-
setScenario('chats');
70-
*/
68+
backend("wipe"); // will not return, because of app restart
7169
}
7270

71+
// button handler for websocket url textfield
7372
function btn_setWebsocketUrl() {
7473
var new_url = document.getElementById("settings_urlInput").value
7574

android/tinySSB/app/src/main/assets/web/tremola_ui.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ function closeOverlay() {
267267
function showPreview() {
268268
var draft = escapeHTML(document.getElementById('draft').value);
269269
if (draft.length == 0) return;
270-
if (!getSetting("enable_preview")) {
270+
if (!getSetting("show_chat_preview")) {
271271
new_text_post(draft);
272272
return;
273273
}

0 commit comments

Comments
 (0)