BangleApps/apps/folderlaunch/app.js

213 lines
7.6 KiB
JavaScript
Raw Normal View History

{
2023-05-13 11:59:33 +00:00
var loader = require('folderlaunch-configLoad.js');
var storage_1 = require('Storage');
var FOLDER_ICON_1 = require("heatshrink").decompress(atob("mEwwMA///wAJCAoPAAongAonwAon4Aon8Aon+Aon/AooA/AH4A/AFgA="));
2023-05-13 11:59:33 +00:00
var config_1 = loader.getConfig();
var timeout_1;
var resetTimeout_1 = function () {
if (timeout_1) {
clearTimeout(timeout_1);
}
if (config_1.timeout != 0) {
timeout_1 = setTimeout(function () {
Bangle.showClock();
}, config_1.timeout);
}
};
var folderPath_1 = [];
var getFolder_1 = function (folderPath) {
var result = config_1.rootFolder;
for (var _i = 0, folderPath_2 = folderPath; _i < folderPath_2.length; _i++) {
var folderName = folderPath_2[_i];
result = result.folders[folderName];
}
nPages_1 = Math.ceil((result.apps.length + Object.keys(result.folders).length) / (config_1.display.rows * config_1.display.rows));
return result;
};
var folder_1 = getFolder_1(folderPath_1);
var getFontSize_1 = function (length, maxWidth, minSize, maxSize) {
var size = Math.floor(maxWidth / length);
size *= (20 / 12);
if (size < minSize)
return minSize;
else if (size > maxSize)
return maxSize;
else
return Math.floor(size);
};
var grid_1 = [];
for (var x = 0; x < config_1.display.rows; x++) {
grid_1.push([]);
for (var y = 0; y < config_1.display.rows; y++) {
grid_1[x].push({
type: 'empty',
id: ''
});
}
}
var render_1 = function () {
var gridSize = config_1.display.rows * config_1.display.rows;
var startIndex = page_1 * gridSize;
for (var i = 0; i < gridSize; i++) {
var y = Math.floor(i / config_1.display.rows);
var x = i % config_1.display.rows;
var folderIndex = startIndex + i;
var appIndex = folderIndex - Object.keys(folder_1.folders).length;
if (folderIndex < Object.keys(folder_1.folders).length) {
grid_1[x][y].type = 'folder';
grid_1[x][y].id = Object.keys(folder_1.folders)[folderIndex];
}
else if (appIndex < folder_1.apps.length) {
grid_1[x][y].type = 'app';
grid_1[x][y].id = folder_1.apps[appIndex];
}
else
grid_1[x][y].type = 'empty';
}
var squareSize = (g.getHeight() - 24) / config_1.display.rows;
if (!config_1.display.icon && !config_1.display.font)
config_1.display.font = 12;
g.clearRect(0, 24, g.getWidth(), g.getHeight())
.reset()
.setFontAlign(0, -1);
var empty = true;
for (var x = 0; x < config_1.display.rows; x++) {
for (var y = 0; y < config_1.display.rows; y++) {
var entry = grid_1[x][y];
var icon = void 0;
var text = void 0;
var fontSize = void 0;
switch (entry.type) {
case 'app':
var app_1 = storage_1.readJSON(entry.id + '.info', false);
icon = storage_1.read(app_1.icon);
text = app_1.name;
empty = false;
fontSize = config_1.display.font;
break;
case 'folder':
icon = FOLDER_ICON_1;
text = entry.id;
empty = false;
fontSize = config_1.display.font ? config_1.display.font : 12;
break;
default:
continue;
}
var iconSize = config_1.display.icon ? Math.max(0, squareSize - fontSize) : 0;
var iconScale = iconSize / 48;
var posX = 12 + (x * squareSize);
var posY = 24 + (y * squareSize);
if (config_1.display.icon && iconSize != 0)
try {
g.drawImage(icon, posX + (squareSize - iconSize) / 2, posY, { scale: iconScale });
}
catch (error) {
console.log("Failed to draw icon for ".concat(text, ": ").concat(error));
console.log(icon);
}
if (fontSize)
g.setFont('Vector', getFontSize_1(text.length, squareSize, 6, squareSize - iconSize))
.drawString(text, posX + (squareSize / 2), posY + iconSize);
}
}
if (empty)
2023-05-13 11:59:33 +00:00
E.showMessage('Folder is empty. Swipe from left, back button, or BTN1 to go back.');
if (nPages_1 > 1) {
var barSize = (g.getHeight() - 24) / nPages_1;
var barTop = 24 + (page_1 * barSize);
g.fillRect(g.getWidth() - 8, barTop, g.getWidth() - 4, barTop + barSize);
}
};
var onTouch = function (_button, xy) {
var x = Math.floor((xy.x - 12) / ((g.getWidth() - 24) / config_1.display.rows));
if (x < 0)
x = 0;
else if (x >= config_1.display.rows)
x = config_1.display.rows - 1;
var y = Math.floor((xy.y - 24) / ((g.getHeight() - 24) / config_1.display.rows));
if (y < 0)
y = 0;
else if (y >= config_1.display.rows)
y = config_1.display.rows - 1;
var entry = grid_1[x][y];
switch (entry.type) {
case "app":
2023-06-14 19:44:27 +00:00
buzz_1();
2023-05-13 11:59:33 +00:00
var infoFile = storage_1.readJSON(entry.id + '.info', false);
load(infoFile.src);
break;
case "folder":
2023-06-14 19:44:27 +00:00
buzz_1();
resetTimeout_1();
page_1 = 0;
folderPath_1.push(entry.id);
folder_1 = getFolder_1(folderPath_1);
render_1();
break;
default:
resetTimeout_1();
break;
}
};
var page_1 = 0;
var nPages_1;
var onSwipe = function (lr, ud) {
if (lr == 1 && ud == 0) {
onBackButton_1();
return;
}
else if (ud == 1) {
resetTimeout_1();
if (page_1 == 0) {
2023-06-14 19:44:27 +00:00
buzz_1(200);
return;
}
else
page_1--;
}
else if (ud == -1) {
resetTimeout_1();
if (page_1 == nPages_1 - 1) {
2023-06-14 19:44:27 +00:00
buzz_1(200);
return;
}
else
page_1++;
}
render_1();
};
var onBackButton_1 = function () {
2023-06-14 19:44:27 +00:00
buzz_1();
if (folderPath_1.length == 0)
Bangle.showClock();
else {
folderPath_1.pop();
folder_1 = getFolder_1(folderPath_1);
resetTimeout_1();
page_1 = 0;
render_1();
}
};
2023-06-14 19:44:27 +00:00
var buzz_1 = function (length, strength) {
if (length === void 0) { length = undefined; }
if (strength === void 0) { strength = undefined; }
if (!config_1.disableVibration) {
Bangle.buzz(length, strength);
}
};
Bangle.loadWidgets();
Bangle.drawWidgets();
Bangle.setUI({
mode: 'custom',
back: onBackButton_1,
btn: onBackButton_1,
swipe: onSwipe,
touch: onTouch,
remove: function () { if (timeout_1)
clearTimeout(timeout_1); }
});
resetTimeout_1();
render_1();
}