master
Martin Zwigl 2025-02-23 21:17:27 +01:00
parent e522bdb1c2
commit a2b59b5765
1 changed files with 21 additions and 24 deletions

View File

@ -1,54 +1,51 @@
(function(back) {
const SETTINGS_FILE = "coin_info.settings.json";
// Initialize with default settings...
// TODO: retrieve from upload-storage
const token_options = ['bitcoin', 'ethereum', 'tether'];
let settings = {'tokens':token_options, 'tokenSelected':['bitcoin'], 'getRateMin':60}
// ...and overwrite them with any saved values
// This way saved values are preserved if a new version adds more settings
const storage = require('Storage');
settings = Object.assign(settings, storage.readJSON(SETTINGS_FILE, 1)||{});
// Default settings with sorted tokens
let settings = Object.assign({
// TODO: MZw - retrieve from upload-storage
tokens: ['bitcoin', 'ethereum', 'tether'],
tokenSelected: ['bitcoin'],
getRateMin: 60
}, storage.readJSON(SETTINGS_FILE, 1) || {});
function save() {
storage.write(SETTINGS_FILE, settings);
}
function createMultiSelectMenu() {
function createMenu() {
const menu = {
'': { 'title': 'Crpyto-Coin Info' },
'': { 'title': 'Crypto-Coin Info' },
'< Back': () => Bangle.showClock()
};
// Dynamic checkbox creation
settings.tokens.forEach((token, index) => {
settings.tokens.sort().forEach(token => {
menu[token] = {
value: settings.tokenSelected.includes(token),
onchange: v => {
if (v) {
settings.tokenSelected.push(token);
} else {
settings.tokenSelected = settings.tokenSelected.filter(f => f !== token);
}
settings.tokenSelected = v
? [...new Set([...settings.tokenSelected, token])] // Prevent duplicates
: settings.tokenSelected.filter(t => t !== token);
save();
}
};
});
// update time
menu['Req. Rate in Min'] = {
value: !!settings.getRateMin,
menu['Refresh Rate (min)'] = {
value: settings.getRateMin,
min: 1,
max: 1440,
onchange: v => {
settings.getRateMin = v;
save();
}
}
};
E.showMenu(menu);
return menu;
}
Bangle.setUI({
mode: 'custom',
btn: createMultiSelectMenu
});
E.showMenu(createMenu());
})