Fix fast-loading support

pull/2885/head
v-crispadvice 2023-07-14 13:16:56 +03:00
parent a4632726a8
commit 98fb9ff018
6 changed files with 176 additions and 176 deletions

View File

@ -1,4 +1,5 @@
1.0: Local cards data 1.00: Local cards data
1.1: Download cards data from Trello public board 1.10: Download cards data from Trello public board
1.2: Configuration instructions added and card layout optimized 1.20: Configuration instructions added and card layout optimized
1.3: Font size can be changed in Settings 1.30: Font size can be changed in Settings
1.31: Fix for fast-loading support

View File

@ -10,7 +10,7 @@ Configuration:
4. Add ".json" to the end of the Trello board URL and refresh page 4. Add ".json" to the end of the Trello board URL and refresh page
5. Find your list ID 5. Find your list ID
6. Save list ID to the "flashcards.settings.json" file on your watch, e.g.: 6. Save list ID to the "flashcards.settings.json" file on your watch, e.g.:
{"listId":"65942f7b27z68000996ddc00","fontSize":1,"cardWidth":9,"swipeGesture":0} {"listId":"65942f7b27z68000996ddc00","fontSize":1,"cardWidth":9,"swipeGesture":1}
7. Connect phone with Gadgetbridge to the watch 7. Connect phone with Gadgetbridge to the watch
8. Enable "Allow Internet Access" in Gadgetbridge 8. Enable "Allow Internet Access" in Gadgetbridge
9. On the watch go to Settings -> Apps -> Flash Cards -> Get from Trello 9. On the watch go to Settings -> Apps -> Flash Cards -> Get from Trello

View File

@ -2,17 +2,18 @@
* Copyright 2023 Crisp Advice * Copyright 2023 Crisp Advice
* We believe in Finnish * We believe in Finnish
*/ */
{
// Modules // Modules
var Layout = require("Layout"); let Layout = require("Layout");
var locale = require("locale"); let locale = require("locale");
var storage = require("Storage"); let storage = require("Storage");
// Global variables // Global variables
let SWAP_SIDE_BUZZ_MILLISECONDS = 50; const SWAP_SIDE_BUZZ_MILLISECONDS = 50;
let CARD_DATA_FILE = "flashcards.data.json"; const CARD_DATA_FILE = "flashcards.data.json";
let CARD_SETTINGS_FILE = "flashcards.settings.json"; const CARD_SETTINGS_FILE = "flashcards.settings.json";
let CARD_EMPTY = "no cards found"; const CARD_EMPTY = "no cards found";
let cards = []; let cards = [];
let cardIndex = 0; let cardIndex = 0;
let backSide = false; let backSide = false;
@ -25,11 +26,11 @@ let settings = Object.assign({
listId: "", listId: "",
fontSize: 1, fontSize: 1,
cardWidth: 9, cardWidth: 9,
swipeGesture: 0 swipeGesture: 1
}, storage.readJSON(CARD_SETTINGS_FILE, true) || {}); }, storage.readJSON(CARD_SETTINGS_FILE, true) || {});
// Cards data // Cards data
function wordWrap(textStr, maxLength) { let wordWrap = function (textStr, maxLength) {
if (maxLength == undefined) { if (maxLength == undefined) {
maxLength = settings.cardWidth; maxLength = settings.cardWidth;
} }
@ -55,7 +56,7 @@ function wordWrap(textStr, maxLength) {
return res + str; return res + str;
} }
function loadLocalCards() { let loadLocalCards = function() {
var cardsJSON = ""; var cardsJSON = "";
if (storage.read(CARD_DATA_FILE)) if (storage.read(CARD_DATA_FILE))
{ {
@ -64,7 +65,7 @@ function loadLocalCards() {
refreshCards(cardsJSON,false); refreshCards(cardsJSON,false);
} }
function refreshCards(cardsJSON,showMsg) let refreshCards = function(cardsJSON,showMsg)
{ {
cardIndex = 0; cardIndex = 0;
backSide = false; backSide = false;
@ -102,25 +103,25 @@ let cardLayout = new Layout( {
] ]
}, {lazy:true}); }, {lazy:true});
function drawCard() { let drawCard = function() {
cardLayout.card.label = cards[cardIndex][backSide ? 1 : 0]; cardLayout.card.label = cards[cardIndex][backSide ? 1 : 0];
cardLayout.clock.label = locale.time(new Date(),1); cardLayout.clock.label = locale.time(new Date(),1);
cardLayout.render(); cardLayout.render();
} }
function drawMessage(msg) { let drawMessage = function(msg) {
cardLayout.card.label = wordWrap(msg); cardLayout.card.label = wordWrap(msg);
cardLayout.render(); cardLayout.render();
console.log(msg); console.log(msg);
} }
function draw() { let draw = function() {
drawCard(); drawCard();
Bangle.drawWidgets(); Bangle.drawWidgets();
queueDraw(); queueDraw();
} }
function swipeCard(forward) let swipeCard = function(forward)
{ {
if(forward) { if(forward) {
cardIndex = (cardIndex + 1) % cards.length; cardIndex = (cardIndex + 1) % cards.length;
@ -132,21 +133,21 @@ function swipeCard(forward)
} }
// Handle a touch: swap card side // Handle a touch: swap card side
function handleTouch(zone, event) { let handleTouch = function(zone, event) {
backSide = !backSide; backSide = !backSide;
drawCard(); drawCard();
Bangle.buzz(SWAP_SIDE_BUZZ_MILLISECONDS); Bangle.buzz(SWAP_SIDE_BUZZ_MILLISECONDS);
} }
// Handle a stroke event: cycle cards // Handle a stroke event: cycle cards
function handleStroke(event) { let handleStroke = function(event) {
let first_x = event.xy[0]; let first_x = event.xy[0];
let last_x = event.xy[event.xy.length - 2]; let last_x = event.xy[event.xy.length - 2];
swipeCard((last_x - first_x) > 0); swipeCard((last_x - first_x) > 0);
} }
// Handle a drag event: cycle cards // Handle a drag event: cycle cards
function handleDrag(event) { let handleDrag = function(event) {
let isFingerReleased = (event.b === 0); let isFingerReleased = (event.b === 0);
if(isFingerReleased) { if(isFingerReleased) {
let isHorizontalDrag = (Math.abs(lastDragX) >= Math.abs(lastDragY)) && let isHorizontalDrag = (Math.abs(lastDragX) >= Math.abs(lastDragY)) &&
@ -162,14 +163,12 @@ function handleDrag(event) {
} }
// Ensure pressing the button goes to the launcher (by making this seem like a clock?) // Ensure pressing the button goes to the launcher (by making this seem like a clock?)
Bangle.setUI({mode:"clock"/*, remove:function() { Bangle.setUI({mode:"clock", remove:function() {
// Code to enable fast load. NOTE: this doesn't work on this app because all
// functions and vars are declared global: https://www.espruino.com/Bangle.js+Fast+Load
if (drawTimeout) clearTimeout(drawTimeout); if (drawTimeout) clearTimeout(drawTimeout);
drawTimeout = undefined; drawTimeout = undefined;
Bangle.removeListener("touch", handleTouch); Bangle.removeListener("touch", handleTouch);
if (settings.swipeGesture) { Bangle.removeListener("drag", handleDrag);} else { Bangle.removeListener("stroke", handleStroke); } if (settings.swipeGesture) { Bangle.removeListener("drag", handleDrag);} else { Bangle.removeListener("stroke", handleStroke); }
}*/}); }});
// initialize // initialize
cardLayout.update(); cardLayout.update();
@ -182,6 +181,6 @@ if (settings.swipeGesture) { Bangle.on("drag", handleDrag); } else { Bangle.on("
// On start: display the first card // On start: display the first card
g.clear(); g.clear();
draw(); draw();
}

View File

@ -1 +1 @@
{"listId":"","fontSize":1,"cardWidth":9,"swipeGesture":0} {"listId":"","fontSize":1,"cardWidth":9,"swipeGesture":1}

View File

@ -2,7 +2,7 @@
"id": "flashcards", "id": "flashcards",
"name": "Flash Cards", "name": "Flash Cards",
"shortName": "Flash Cards", "shortName": "Flash Cards",
"version": "1.3", "version": "1.31",
"description": "Flash cards based on public Trello board", "description": "Flash cards based on public Trello board",
"readme":"README.md", "readme":"README.md",
"screenshots" : [ { "url":"screenshot.png" }], "screenshots" : [ { "url":"screenshot.png" }],

View File

@ -10,7 +10,7 @@
listId: "", listId: "",
fontSize: 1, fontSize: 1,
cardWidth: 9, cardWidth: 9,
swipeGesture: 0 swipeGesture: 1
}, storage.readJSON(settingsFile, true) || {}); }, storage.readJSON(settingsFile, true) || {});
function writeSettings() { function writeSettings() {
@ -24,7 +24,7 @@
"< Back" : () => back(), "< Back" : () => back(),
/*LANG*/"Get from Trello": () => { /*LANG*/"Get from Trello": () => {
if (!storage.read(settingsFile)) { writeSettings();} if (!storage.read(settingsFile)) { writeSettings();}
E.showPrompt("Download cards?").then((v) => { E.showPrompt(/*LANG*/"Download cards?").then((v) => {
let delay = 500; let delay = 500;
if (v) { if (v) {
if (Bangle.http) if (Bangle.http)