mirror of https://github.com/espruino/BangleApps
252 lines
9.4 KiB
JavaScript
252 lines
9.4 KiB
JavaScript
(function (back) {
|
|
var loader = require('folderlaunch-configLoad.js');
|
|
var storage = require('Storage');
|
|
var textinput = require('textinput');
|
|
var config = loader.getConfig();
|
|
var changed = false;
|
|
var hiddenAppsMenu = function () {
|
|
var menu = {
|
|
'': {
|
|
'title': 'Hide?',
|
|
'back': showMainMenu
|
|
}
|
|
};
|
|
var onchange = function (value, appId) {
|
|
if (value && !config.hidden.includes(appId))
|
|
config.hidden.push(appId);
|
|
else if (!value && config.hidden.includes(appId))
|
|
config.hidden = config.hidden.filter(function (item) { return item != appId; });
|
|
changed = true;
|
|
};
|
|
onchange;
|
|
for (var app_1 in config.apps) {
|
|
var appInfo = storage.readJSON(app_1 + '.info', false);
|
|
menu[appInfo.name] = {
|
|
value: config.hidden.includes(app_1),
|
|
onchange: eval("(value) => { onchange(value, \"".concat(app_1, "\"); }"))
|
|
};
|
|
}
|
|
E.showMenu(menu);
|
|
};
|
|
var getAppInfo = function (id) {
|
|
return storage.readJSON(id + '.info', false);
|
|
};
|
|
var showFolderMenu = function (path) {
|
|
var folder = config.rootFolder;
|
|
for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {
|
|
var folderName = path_1[_i];
|
|
try {
|
|
folder = folder.folders[folderName];
|
|
}
|
|
catch (_a) {
|
|
E.showAlert('BUG: Nonexistent folder ' + path);
|
|
}
|
|
}
|
|
var back = function () {
|
|
if (path.length) {
|
|
path.pop();
|
|
showFolderMenu(path);
|
|
}
|
|
else
|
|
showMainMenu();
|
|
};
|
|
var menu = {
|
|
'': {
|
|
'title': path.length ? path[path.length - 1] : 'Root folder',
|
|
'back': back
|
|
},
|
|
'New subfolder': function () {
|
|
textinput.input({ text: '' }).then(function (result) {
|
|
if (result && !Object.keys(folder.folders).includes(result)) {
|
|
folder.folders[result] = {
|
|
folders: {},
|
|
apps: []
|
|
};
|
|
changed = true;
|
|
path.push(result);
|
|
showFolderMenu(path);
|
|
}
|
|
else {
|
|
E.showAlert('No folder created').then(function () {
|
|
showFolderMenu(path);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
'Move app here': function () {
|
|
var menu = {
|
|
'': {
|
|
'title': 'Select app',
|
|
'back': function () {
|
|
showFolderMenu(path);
|
|
}
|
|
}
|
|
};
|
|
var mover = function (appId) {
|
|
var folder = config.rootFolder;
|
|
for (var _i = 0, _a = config.apps[appId].folder; _i < _a.length; _i++) {
|
|
var folderName = _a[_i];
|
|
folder = folder.folders[folderName];
|
|
}
|
|
folder.apps = folder.apps.filter(function (item) { return item != appId; });
|
|
config.apps[appId].folder = path.slice();
|
|
folder = config.rootFolder;
|
|
for (var _b = 0, path_2 = path; _b < path_2.length; _b++) {
|
|
var folderName = path_2[_b];
|
|
folder = folder.folders[folderName];
|
|
}
|
|
folder.apps.push(appId);
|
|
changed = true;
|
|
showFolderMenu(path);
|
|
};
|
|
mover;
|
|
E.showMessage('Loading apps...');
|
|
for (var _i = 0, _a = Object.keys(config.apps)
|
|
.filter(function (item) { return !folder.apps.includes(item); })
|
|
.map(function (item) { return item + '.info'; })
|
|
.sort(loader.infoFileSorter)
|
|
.map(function (item) { return item.split('.info')[0]; }); _i < _a.length; _i++) {
|
|
var appId = _a[_i];
|
|
menu[getAppInfo(appId).name] = eval("() => { mover(\"".concat(appId, "\"); }"));
|
|
}
|
|
E.showMenu(menu);
|
|
}
|
|
};
|
|
var switchToFolder = function (subfolder) {
|
|
path.push(subfolder);
|
|
showFolderMenu(path);
|
|
};
|
|
switchToFolder;
|
|
for (var _b = 0, _c = Object.keys(folder.folders); _b < _c.length; _b++) {
|
|
var subfolder = _c[_b];
|
|
menu[subfolder] = eval("() => { switchToFolder(\"".concat(subfolder, "\") }"));
|
|
}
|
|
if (folder.apps.length)
|
|
menu['View apps'] = function () {
|
|
var menu = {
|
|
'': {
|
|
'title': path[path.length - 1],
|
|
'back': function () { showFolderMenu(path); }
|
|
}
|
|
};
|
|
for (var _i = 0, _a = folder.apps; _i < _a.length; _i++) {
|
|
var appId = _a[_i];
|
|
menu[storage.readJSON(appId + '.info', false).name] = function () { };
|
|
}
|
|
E.showMenu(menu);
|
|
};
|
|
if (path.length)
|
|
menu['Delete folder'] = function () {
|
|
var apps = folder.apps;
|
|
var subfolders = folder.folders;
|
|
var toDelete = path.pop();
|
|
folder = config.rootFolder;
|
|
for (var _i = 0, path_3 = path; _i < path_3.length; _i++) {
|
|
var folderName = path_3[_i];
|
|
folder = folder.folders[folderName];
|
|
}
|
|
for (var _a = 0, apps_1 = apps; _a < apps_1.length; _a++) {
|
|
var appId = apps_1[_a];
|
|
config.apps[appId].folder.pop();
|
|
folder.apps.push(appId);
|
|
}
|
|
for (var _b = 0, _c = Object.keys(subfolders); _b < _c.length; _b++) {
|
|
var subfolder = _c[_b];
|
|
folder.folders[subfolder] = subfolders[subfolder];
|
|
}
|
|
delete folder.folders[toDelete];
|
|
changed = true;
|
|
showFolderMenu(path);
|
|
};
|
|
E.showMenu(menu);
|
|
};
|
|
var save = function () {
|
|
if (changed) {
|
|
E.showMessage('Saving...');
|
|
config.hash = 0;
|
|
loader.cleanAndSave(config);
|
|
changed = false;
|
|
}
|
|
};
|
|
E.on('kill', save);
|
|
var showMainMenu = function () {
|
|
E.showMenu({
|
|
'': {
|
|
'title': 'Folder launcher',
|
|
'back': function () {
|
|
save();
|
|
back();
|
|
}
|
|
},
|
|
'Show clocks': {
|
|
value: !!config.showClocks,
|
|
onchange: function (value) {
|
|
config.showClocks = value;
|
|
changed = true;
|
|
}
|
|
},
|
|
'Show launchers': {
|
|
value: !!config.showLaunchers,
|
|
onchange: function (value) {
|
|
config.showLaunchers = value;
|
|
changed = true;
|
|
}
|
|
},
|
|
'Disable vibration': {
|
|
value: !!config.disableVibration,
|
|
onchange: function (value) {
|
|
config.disableVibration = value;
|
|
changed = true;
|
|
}
|
|
},
|
|
'Hidden apps': hiddenAppsMenu,
|
|
'Display': function () {
|
|
E.showMenu({
|
|
'': {
|
|
'title': 'Display',
|
|
'back': showMainMenu
|
|
},
|
|
'Rows': {
|
|
value: config.display.rows,
|
|
min: 1,
|
|
onchange: function (value) {
|
|
config.display.rows = value;
|
|
changed = true;
|
|
}
|
|
},
|
|
'Show icons?': {
|
|
value: config.display.icon,
|
|
onchange: function (value) {
|
|
config.display.icon = value;
|
|
changed = true;
|
|
}
|
|
},
|
|
'Font size': {
|
|
value: config.display.font,
|
|
min: 0,
|
|
format: function (value) { return (value ? value : 'Icon only'); },
|
|
onchange: function (value) {
|
|
config.display.font = value;
|
|
changed = true;
|
|
}
|
|
}
|
|
});
|
|
},
|
|
'Timeout': {
|
|
value: config.timeout,
|
|
format: function (value) { return value ? "".concat(value / 1000, " sec") : 'None'; },
|
|
min: 0,
|
|
step: 1000,
|
|
onchange: function (value) {
|
|
config.timeout = value;
|
|
changed = true;
|
|
}
|
|
},
|
|
'Folder management': function () {
|
|
showFolderMenu([]);
|
|
}
|
|
});
|
|
};
|
|
showMainMenu();
|
|
})
|