From 48601f2dde8a1d30751e887ef2ad9276b3548770 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Fri, 17 Dec 2021 14:08:42 +0100 Subject: [PATCH 001/217] Create app.js --- apps/miniclock/app.js | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 apps/miniclock/app.js diff --git a/apps/miniclock/app.js b/apps/miniclock/app.js new file mode 100644 index 000000000..9fdbab985 --- /dev/null +++ b/apps/miniclock/app.js @@ -0,0 +1,55 @@ +const digits = [ +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVqlVVVVVVVVVVVVVaqqqqpVVVVVVVVVVWqqqqqqqVVVVVVVVVWqqqAKqqpVVVVVVVVaqgAAAACqpVVVVVVVaqAAAAAACqlVVVVVVaoAAAAAAACqVVVVVVaoAAAAAAAAKpVVVVVaoAAAAAAAAAqlVVVVaoAAAAAAAAACqVVVVWoAAAAAAAAAAKlVVVWoAAAAAAAAAAAqVVVWqAAAAAAAAAAAKpVVVqAAAAACgAAAAAqVVVagAAAAKqgAAAAKlVVagAAAAqqqgAAAAqVVWoAAAAKpaoAAAAKlVVqAAAAKlVagAAAAqVVqAAAACpVWoAAAAKlVagAAACpVVagAAACpVWoAAAAqVVWoAAAAqVVqAAAAqVVVagAAAKlVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVagAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVWoAAACpVqAAAAKlVVVqAAAAqVagAAAKlVVVagAAAKlWoAAACpVVVWoAAACpVqAAAAqVVVVqAAAAqVagAAAKlVVVagAAAKlWoAAACpVVVWoAAACpVqAAAAqVVVVqAAAAqVagAAACpVVVagAAAKlWoAAAAqVVVWoAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVagAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlVqAAAAqVVVagAAACpVagAAACpVVWoAAACpVWoAAAAqVVWoAAAAqVVqAAAAKlVVqAAAAKlVagAAAAqVVqAAAAKlVVqAAAAKpVqgAAACpVVagAAAAqqqgAAAAqVVVqAAAACqqgAAAAKlVVagAAAACqAAAAAKlVVWoAAAAAAAAAAACpVVVagAAAAAAAAAACpVVVWqAAAAAAAAAACqVVVVagAAAAAAAAAAqVVVVVqAAAAAAAAAAqVVVVVaoAAAAAAAAAqlVVVVVqgAAAAAAAAqlVVVVVWqgAAAAAAAqlVVVVVVaqAAAAAACqlVVVVVVVaqgAAAAqqlVVVVVVVVqqqqqqqqVVVVVVVVVVqqqqqqpVVVVVVVVVVVaqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVaqqqVVVVVVVVVVVVVqqqqqVVVVVVVVVVVWqqqqqpVVVVVVVVVVaqgAAAqVVVVVVVVVVaqAAAACpVVVVVVVVVqoAAAAAqVVVVVVVVVqoAAAAAKlVVVVVVVWqgAAAAACpVVVVVVVaqgAAAAAAqVVVVVVVaqAAAAAAAKlVVVVVVaoAAAAAAACpVVVVVVqoAAAAAAAAqVVVVVVaoAAAAAAAAKlVVVVVagAAAAAAAACpVVVVVWoAAAAAAAAAqVVVVVVqAAAAAAAAAKlVVVVVagAAAAAAAACpVVVVVWoAAAAAAAAAqVVVVVVqAAAAAAAAAKlVVVVVagAAAgAAAACpVVVVVWoAACogAAAAqVVVVVVagAKqoAAAAKlVVVVVWqqqqagAAACpVVVVVVaqqpWoAAAAqVVVVVVVaqlVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVaqqqAAAAAqqqpVVVWqqqqgAAAAKqqqpVVWqqqqAAAAAAKqqqlVVqgAAAAAAAAAAACpVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVWoAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWqAAAAAAAAAAAACqVVaqqqqqqqqqqqqqqVVVqqqqqqqqqqqqqqVVVWqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVWqVVVVVVVVVVVVVaqqqqqlVVVVVVVVVaqqqqqqqqVVVVVVVVqqqqoAqqqqVVVVVVWqqgAAAAAKqpVVVVVaqgAAAAAAAAqpVVVVaqAAAAAAAAACqlVVVWoAAAAAAAAAACpVVVWoAAAAAAAAAAAKlVVVqAAAAAAAAAAACqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAAqVVWoAAAKqqAAAAAAKlVVagACqqqqAAAAACpVVWqqqqqqqqAAAAAqVVVaqqqlVVqgAAAAKlVVVaqpVVVVqAAAACpVVVVVVVVVVagAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVqAAAACpVVVVVVVVVVagAAAAqVVVVVVVVVVagAAAAqVVVVVVVVVVaoAAAAKlVVVVVVVVVaoAAAACpVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACqVVVVVVVVVWoAAAAAqVVVVVVVVVWqAAAAAqVVVVVVVVVWqAAAAAqlVVVVVVVVWqAAAAAKlVVVVVVVVWqAAAAAKlVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAqpVVVVVVVVWqAAAAACpVVVVVVVVWqAAAAAKlVVVVVVVVVqAAAAAACqqqqpVVVVqAAAAAAKqqqqqpVVVqgAAAAAAKqqqqqpVVagAAAAAAAAAAACqVVWoAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVWoAAAAAAAAAAAACpVVqAAAAAAAAAAAAAqVVaoAAAAAAAAAAAAqVVVqqqqqqqqqqqqqqlVVWqqqqqqqqqqqqqlVVVaqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVapVVVVVVVVVVVVVaqqqqqlVVVVVVVVVaqqqqqqqqVVVVVVVWqqqqgCqqqpVVVVVVaqqgAAAAAKqpVVVVVaqgAAAAAAACqpVVVVaoAAAAAAAAACqlVVVaoAAAAAAAAAACqVVVWoAAAAAAAAAAAKlVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAAqVVVqAAAKqqgAAAAAKlVVaoAKqqqqgAAAACpVVVqqqqqqqqAAAAAqVVVWqqqlVVaoAAAAKlVVVaqlVVVVqAAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVaoAAAAqVVVVVVVVaqqqAAAAKlVVVVVVaqqqoAAAAKlVVVVVVaqqqgAAAAKpVVVVVVaqgAAAAAAKpVVVVVVaoAAAAAAAKpVVVVVVWoAAAAAAACpVVVVVVVqAAAAAAACpVVVVVVVagAAAAAAAqVVVVVVVWoAAAAAAACpVVVVVVVqAAAAAAAAqpVVVVVVagAAAAAAACqlVVVVVWoAAAAAAAACqVVVVVVaoAAAAAAAAKpVVVVVWqqqqgAAAAAqVVVVVVWqqqqgAAAACpVVVVVVaqqqqgAAAAqVVVVVVVVVVaqAAAAKlVVVVVVVVVVagAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVlVVVVVVqAAAAKlVVaqqVVVVVqAAAACpVVaqqqpVVWqgAAAAqVVaqKqqqqqqgAAAAKlVaoAAqqqqqAAAAACpVaoAAACqqoAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAAKpVVqAAAAAAAAAAAACpVVagAAAAAAAAAAAKpVVVqAAAAAAAAAAAKqVVVaqAAAAAAAAAAKpVVVVqqAAAAAAAACqpVVVVVqqoAAAAACqqpVVVVVWqqqqqqqqqqlVVVVVVVqqqqqqqqpVVVVVVVVVWqqqqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVaqqlVVVVVVVVVVVVVqqqqlVVVVVVVVVVVVqqqqqVVVVVVVVVVVVqgAAKpVVVVVVVVVVVqgAAAqVVVVVVVVVVVqgAAACpVVVVVVVVVVqgAAAAqVVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVaoAAAAAqVVVVVVVVVWoAAAAAKlVVVVVVVVWoAAAAACpVVVVVVVVWqAAAAAAqVVVVVVVVVqAAAAAAKlVVVVVVVVqAAAAAACpVVVVVVVVqgAAAAAAqVVVVVVVVagAAAAAAKlVVVVVVVagAAAAAACpVVVVVVVaoAAAAAAAqVVVVVVVaoAAAAAAAKlVVVVVVWoAAAAAAACpVVVVVVWoAAAAAAAAqVVVVVVWqAAAAAAAAKlVVVVVVqAAAAAAAACpVVVVVVqAAAAAAAAAqVVVVVVqgAAAAAAAAKlVVVVVagAAAgAAAACpVVVVVagAACogAAAAqVVVVVaoAACqoAAAAKlVVVVWoAAAqagAAACpVVVVWoAAAqWoAAAAqVVVVWqAAAqlqAAAAKlVVVVqAAAKlagAAACpVVVVqAAAKlWoAAAAqVVVVqgAAKpVqAAAAKlVVVagAACpVagAAACpVVVagAACpVWoAAAAqVVVaoAAAqVVqAAAAKlVVWoAAACqqqAAAAAqpVVqAAAAqqqgAAAAKqpVqAAAAAqqAAAAAAKqpagAAAAAAAAAAAAACqWoAAAAAAAAAAAAAACpqAAAAAAAAAAAAAAAqagAAAAAAAAAAAAAAKmoAAAAAAAAAAAAAACpqAAAAAAAAAAAAAAAqagAAAAAAAAAAAAAAKlqAAAAAAAAAAAAAACpaqAAAAAAAAAAAAACpVqqqqqqqgAAAAACqqVVqqqqqqqgAAAAKqqVVVqqqqqqoAAAACqpVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVVqAAACpVVVVVVVVVVVagAAAqVVVVVVVVVVVVqgACqVVVVVVVVVVVVaqqqqlVVVVVVVVVVVVaqqqVVVVVVVVVVVVVVqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVaqqqqqqqqpVVVVVVaqqqqqqqqqqqlVVVVaqqqqqqqqqqqqVVVVaqgAAAAAAAACqpVVVaoAAAAAAAAAAAqlVVWoAAAAAAAAAAACpVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAACpVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAKqVVVWoAAAACqqqqqqqlVVVqAAAAKqqqqqqqVVVVagAAACqqqqqqlVVVVWoAAACpVVVVVVVVVVVqAAAAqVVVVVVVVVVVagAAAKlVVVVVVVVVVWoAAACpVVVVVVVVVVVqAAAAqVVVVVVVVVVVagAAACqqqqqVVVVVVWoAAAAqqqqqqlVVVVVqAAAAAqqqqqqlVVVVagAAAAAAAAAqqVVVVWoAAAAAAAAAAKpVVVVqAAAAAAAAAAAqlVVVagAAAAAAAAAACqVVVWoAAAAAAAAAAAKpVVVqAAAAAAAAAAAAqlVVagAAAAAAAAAAACpVVWoAAAAAAAAAAAAKlVVqAAAAAAAAAAAACpVVagAAAACoAAAAAAKlVWoAAACqqqAAAAACpVVqAAAKqqqqAAAAAqVVWqgqqqpWqoAAAAKlVVqqqqpVVVqAAAACpVVWqqqlVVVWoAAAAqVVVVaVVVVVVqAAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAAKlVVWqpVVVVVagAAACpVVaqqqVVVVaoAAAAqVVaqqqqlVVqoAAAAKlVWoACqqqqqoAAAACpVWoAAAqqqqgAAAAAqVVqAAAAKqqAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAACpVVqAAAAAAAAAAAACpVVagAAAAAAAAAAACqVVVqAAAAAAAAAAACqVVVaoAAAAAAAAAAKqVVVVqgAAAAAAAAAKqVVVVWqoAAAAAAAAqpVVVVVaqqgAAAAAqqpVVVVVVaqqqqqqqqqlVVVVVVVWqqqqqqqqVVVVVVVVVVaqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVqVVVVVVVVVVVVVVqqqqqpVVVVVVVVVVqqqqqqqqVVVVVVVVWqqqqAqqqqlVVVVVVWqqAAAAACqqlVVVVVaqAAAAAAAAqpVVVVVaqAAAAAAAAAKlVVVVaoAAAAAAAAACqVVVVqoAAAAAAAAAAKlVVVaoAAAAAAAAAACpVVVagAAAAAAAAAAAqVVVaoAAAAAAAAAAAKlVVaoAAAAAAAAAAACpVVWoAAAAAAAAAAAAqVVWoAAAAACqqqAAAqVVVqAAAAAKqqqqoAqlVVqAAAAAqqqqqqqqlVVagAAAAqpVVVqqqlVVagAAAAqlVVVVWqVVVWoAAAAqlVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAAKlVVVVVVVVVVagAAACpVaqqqVVVVVWoAAAAqVqqqqqVVVVVqAAAAqWqqqqqqVVVVagAAAImqgAAAqpVVVWoAAAAoqAAAAAqlVVVqAAAAIqAAAAACqlVVqAAAAAIAAAAAAKpVVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAACqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAAqVWoAAAAAAAAAAAAAKlVqAAAAAACqgAAAACpVagAAAAAKqqgAAAAKlWoAAAAAKqqqAAAACpVagAAAACpVaoAAAAqVWoAAAACpVVqAAAAKlVqAAAAAqVVWoAAACpVagAAAAqVVVqAAAAKlWoAAAAKlVVagAAACpVqAAAACpVVWoAAAAqVagAAAAqVVVqAAAAKlVqAAAAKlVVagAAAKlVagAAACpVVWoAAACpVWoAAAAKlVVqAAAAqVVagAAACpVVqAAAAKlVWoAAAAKlVqgAAACpVVqAAAACqqqgAAAAqVVWoAAAAKqqgAAAAqVVVqAAAAAKqAAAAAKlVVWoAAAAAAAAAAAKlVVVqgAAAAAAAAAACpVVVWoAAAAAAAAAACpVVVVagAAAAAAAAACqVVVVWqAAAAAAAAACqVVVVVaqAAAAAAAACqVVVVVVqoAAAAAAACqVVVVVVVqoAAAAAAKqVVVVVVVWqqAAAACqqVVVVVVVVWqqqqqqqpVVVVVVVVVWqqqqqqlVVVVVVVVVVVqqqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqlVVVVqqqqqqqqqqqqqqVVVqqqqqqqqqqqqqqpVVqqAAAAAAAAAAAKqlVqgAAAAAAAAAAAACqVagAAAAAAAAAAAAAKlWoAAAAAAAAAAAAAAqVqAAAAAAAAAAAAAAKlagAAAAAAAAAAAAACpWoAAAAAAAAAAAAAAqVqAAAAAAAAAAAAAAKlagAAAAAAAAAAAAACpWqAAAAAAAAAAAAAAqVaqgAAAAAAAAAAAAqVVqqqqqqqqAAAAAAKlVWqqqqqqqqAAAAACpVVVaqqqqqqAAAAACpVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqgAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAACqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVagAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAAKpVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVWqAAAAAqVVVVVVVVVVqAAAAAqlVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVWoAAAAKpVVVVVVVVVVqAAAACpVVVVVVVVVVqAAAACpVVVVVVVVVVWoAAACqVVVVVVVVVVVqAAACqVVVVVVVVVVVaoAACqVVVVVVVVVVVVqqqqqVVVVVVVVVVVVWqqqqVVVVVVVVVVVVVWqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVqVVVVVVVVVVVVVWqqqqqpVVVVVVVVVVqqqqqqqqlVVVVVVVWqqqqAqqqqlVVVVVVaqoAAAAACqqVVVVVVaqAAAAAAAAKqVVVVVaoAAAAAAAAAqpVVVVaoAAAAAAAAAAqlVVVaoAAAAAAAAAACqVVVaoAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVWoAAAAAAAAAAAAKlVVqAAAAAAAAAAAAAqVVagAAAACqqAAAAAKlVagAAAAKqqqAAAACpVWoAAAAKqqqoAAAAqVVqAAAAKpVVqAAAAKlVagAAACpVVWoAAAAqVWoAAACpVVVqAAAAKlVqAAAAqVVVagAAAKlVagAAAKlVVWoAAACpVWoAAACpVVVqAAAAqVVagAAAKlVVagAAAKlVWoAAACqVVagAAACpVVqAAAAKqqqoAAACpVVWoAAAAqqqoAAAAqVVVqgAAAAqqgAAAAqVVVWqAAAAAAAAAAAqlVVVaoAAAAAAAAAAqlVVVVqAAAAAAAAAAqlVVVVWoAAAAAAAAAKlVVVVVqAAAAAAAAAKlVVVVVqAAAAAAAAAAKlVVVVqgAAAAAAAAAKqVVVWqgAAAAAAAAAAKpVVVqgAAAAAAAAAAAqlVVqAAAAAAAAAAAACqVVqgAAAAKqqAAAAAKlVagAAAAqqqqAAAAAqVWoAAAAqqqqqAAAAKlWoAAAAqlVVqoAAACpVqAAAAKlVVVqAAAAKlagAAAKlVVVWoAAACpWoAAACpVVVVqAAAAqVqAAACpVVVVagAAAKlqAAAAKlVVVWoAAACpagAAACpVVVVqAAAAqVqAAAAKlVVVqAAAAKlagAAACqVVWqgAAACpWoAAAAKqqqqgAAAAqVqAAAAAqqqqAAAAAKlagAAAAAqqoAAAAAKlVqAAAAAAAAAAAAACpVagAAAAAAAAAAAACpVVqAAAAAAAAAAAAAqVVaoAAAAAAAAAAAAqVVVqgAAAAAAAAAAAqlVVWqAAAAAAAAAACqlVVVaqAAAAAAAAACqlVVVVqqAAAAAAAAKqVVVVVVqqoAAAAAKqqVVVVVVVqqqqqqqqqpVVVVVVVVqqqqqqqqlVVVVVVVVVWqqqqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVValVVVVVVVVVVVVVWqqqqqVVVVVVVVVVVqqqqqqqVVVVVVVVVWqqqgKqqqVVVVVVVVWqoAAAAAqqVVVVVVVaqAAAAAAAqpVVVVVVaqAAAAAAAAqpVVVVVaoAAAAAAAACqVVVVVWoAAAAAAAAACpVVVVWoAAAAAAAAAAqlVVVWqAAAAAAAAAACqVVVVqAAAAAAAAAAAKpVVVqAAAAAAAAAAAAqVVVagAAAAKqgAAAACpVVagAAAAqqqgAAAAqVVWoAAAAKqqoAAAACpVVqAAAAKlVagAAAAqVVqAAAAKpVWqAAAAKlVagAAACpVVagAAACpVWoAAACpVVVqAAAAKlVqAAAAqVVVagAAACpVagAAAKlVVWoAAAAqVWoAAACpVVVqAAAACpVqAAAAqVVVagAAAAqVagAAACpVVagAAAAKlWoAAAAqVVWoAAAACpVqAAAACpVWoAAAAAqVagAAAAqlWqAAAAAKlVqAAAACqqqAAAAACpVagAAAAKqqAAAAAAqVWoAAAAAKoAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVagAAAAAAAAAAAAKlVWqAAAAAAAAAAAACpVVagAAAAAACAAAAAqVVVqAAAAAAKiAAAAKlVVaqAAAAAKigAAACpVVVqoAAAAKpiAAAAqVVVVqoAAAqpagAAAKlVVVWqqqqqpagAAACpVVVVWqqqqlWoAAACpVVVVVWqqqVVqAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVqgAAACpVVVVVVVVVVqgAAACpVVVaqlVVVVqgAAAAqVVVqqqqVVWqgAAAAKlVVqqqqqqqqgAAAAKlVVagAKqqqqAAAAACpVVagAAAqqoAAAAACpVVWoAAAAAAAAAAACqVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAqVVVWoAAAAAAAAAAAqlVVVqAAAAAAAAAAAqlVVVagAAAAAAAAAAqlVVVWoAAAAAAAAACqlVVVVagAAAAAAAACqlVVVVWqoAAAAAAAqqVVVVVVaqqAAAAAKqqVVVVVVVaqqqqqqqqpVVVVVVVVWqqqqqqqVVVVVVVVVVVqqqqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 25 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqlVVVVWqqqlVVVWqqqqlVVWqgAKqVVWqAAAKlVWqAAAAqVVqAAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAACpVWqAAAAqVVagAAAqlVVqgAAqlVVaqqqqlVVVaqqqlVVVVaqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqVVVVVqqqqVVVWqqqqpVVVqgAAqlVVqAAACqVVqgAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAqVVagAAAKlVWqAAAKlVVaqACqpVVVqqqqpVVVWqqqlVVVVVqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV "))} +]; + +var drawTimeout, savedOptions; + +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + +function draw() { + var x = g.getWidth()/2; + var y = g.getHeight()/2-31; + //print(y); + g.reset(); + var date = new Date(); + var timeStr = require("locale").time(date,1); + // draw time + g.clearRect(0,y,g.getWidth()-1,y+73+24+18); + //use custom font spacing for overlapping digits + g.drawImage(digits[parseInt(date.getHours()/10)],0,y); + g.drawImage(digits[parseInt(date.getHours()%10)],37,y); + g.drawImage(digits[10],74,y); + g.drawImage(digits[parseInt(date.getMinutes()/10)],86,y); + g.drawImage(digits[parseInt(date.getMinutes()%10)],123,y); + // Draw day of the week + y += 73; + g.setFontAlign(0,-1).setFont("Teletext10x18Ascii"); + g.drawString(require("locale").dow(date).toUpperCase(),x,y); + // Draw Date + y += 24; + g.drawString(require('locale').date(new Date(),1),x,y); + queueDraw(); +} + +require("FontTeletext10x18Ascii").add(Graphics); +Bangle.setUI("clock"); +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +draw(); From 806f4280365842879f0480357d8cd46520bcaa55 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Fri, 17 Dec 2021 14:55:34 +0100 Subject: [PATCH 002/217] Update apps.json --- apps.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 109324fb6..f01d55004 100644 --- a/apps.json +++ b/apps.json @@ -5026,5 +5026,16 @@ "data": [ {"name":"circlesclock.json"} ] - } + }, + { "id": "miniclock", + "name": "Minimalist Clock", + "shortName" : "Minimalist Clock", + "icon": "app.png", + "description": "A Minimalist clockface with large Digits.", + "tags": "clock", + "storage": [ + {"name":"myappid.app.js","url":"app.js"}, + {"name":"myappid.img","url":"app-icon.js","evaluate":true} + ], +} ] From 8dd11ff68f8f9e36c4be65dc372cc2e39cfc5f2a Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Fri, 17 Dec 2021 14:58:17 +0100 Subject: [PATCH 003/217] Create app-icon.js --- apps/miniclock/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/miniclock/app-icon.js diff --git a/apps/miniclock/app-icon.js b/apps/miniclock/app-icon.js new file mode 100644 index 000000000..debedb27e --- /dev/null +++ b/apps/miniclock/app-icon.js @@ -0,0 +1 @@ +var img = require("heatshrink").decompress(atob("2GwgI74HIUB/4AC8AWNwAVTgNAAQIYBAANgCZUcuEAkAVRkWYgMQCqWokEICqMe1ERFaUC5EIK6RtBgqDGvyZMgSvCCqLbDFc2AK6mAQanwV6mIgDbTxEBFaUiFYJXSj3wgKDC/4AC8CvMQoIVUAH4A/AH4A/AH4A/AH4A/AD0eAokDwAECvgRF//ggEP//8BIn+AYMfBQsD//4BwIAB4AJBg4FDAYIVEh/AvkHBAMPGAImB4EH+EDEQN/Coc/gEcBwIGBBoMAnwCB/kHBQMPLosOBwUAvwCBvAYCh5SCGwUB+AVBBwQ+BBIYnBEAQHDDIUGAwRqBwEBEYUH3gKCEgRFCgwOCVYStDgYgDnhsDCoJsCG4KABCoQ9DPoLKECoxoCAoI2DhwCBDgQVEgHgBgQbCYIaGEK4gVBHARdCPAYGBDgQVFuAVIAgIXBCoVwCok4EgPggZDB/4VHvEP/4jBmAVBj/wHgQKBLgMGCoc8///JAMwmDvBvAVBg+D4AVGj/8SIUwI4M4ngOBg6GCCosPBAIVEOAIOBAIIMCCogDCsDkBDANwhizBAIIVCNogVEv4VBsEOCotgCoNUCosB/IVDhkAAIIVBuEDwP8CorkBCoUGCo/n9gVDQYK6BMoYTBIIcwZQOMCof/MAQVDK4q5BvweBCoLbCCoanBCYMGV4QVBJAQVBj4JBEYYVBYoUDCpE8AwIVI4+ACo94AwYVDI4MD/4LBCozsBCpEA/wVIbIJBGga6CAAM4CpJ7CCoRUBCrEYCpEPCogECFZJtCg7xCCoXgCpq8BCocA+AVDYpMB+AVEXIQVInwKC/4VED4MBqAVHh4SCn4VEjxgBLQIVGg//J4M4CoPgD4WAh+wCo4AB/CkBCokH+F+UwJ8CCoqMBjg5BsA1D/gTBCpDOBCosGn/gFYLUCCo8MBoUOfAIKBDoQVJEgI5BCozgCCoUCCoaGCuALBAIMBOoQVEj4GBnDbBMYM4jkAvxvB4AXCj/8O4X+TIMD4ClBnDZB//gj+ACoSJBCoP4v4+Bg+ATgMf/EB84hCgIXBXwIABCQLxBg6yCj/wGIN/CAMDFoYbBLoSICKgIABGIIEEC4IVCDISSCCogDCAgQVEEAaqEXQgICgYFCCoigBCpEeGQgVGBQYVET4IrEK4ppDCol4CpaVBNoz6BCob3DB4UHAwUPPgYHBQYbuBAYUPAIIGCj4vDAYI2DgF8AYU/wEeAwU9F4UfFALXEA4f/8E8j41C/gDBvwRC/4ADHYMf+P9/EP8EH+F/wEHJ4d/CwgABwF/+EDAoPAh4DBHoYAEj4tCPwV//xJCAYIA/AH4A/AHMP/n/gfw/kA4AABCsMMCAfDCssP4H/CQXDmEzNpoVUIIgVB+AHBCs3DhgABCso+B/gVlAFg6EdxgVWdwPAmEMgfwgYCBn4CBOBAVUgY5BCoM8SoMDAQPD5kMngVchnAgYWB5gGBHYMM5nAAQIVcCQLwCNoQCC5j3BQZIVVmBCBH4SdBgAWBZ4oVYh/8CoX/54FBBAM/AQLRBCracDJAgOICrgA/AH4A/AH4A/AH4A/AH4AJA")) From 670608ea2487d361748787225228d27ec1876bf2 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Fri, 17 Dec 2021 14:58:51 +0100 Subject: [PATCH 004/217] Update app-icon.js --- apps/miniclock/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/miniclock/app-icon.js b/apps/miniclock/app-icon.js index debedb27e..38b19c29a 100644 --- a/apps/miniclock/app-icon.js +++ b/apps/miniclock/app-icon.js @@ -1 +1 @@ -var img = require("heatshrink").decompress(atob("2GwgI74HIUB/4AC8AWNwAVTgNAAQIYBAANgCZUcuEAkAVRkWYgMQCqWokEICqMe1ERFaUC5EIK6RtBgqDGvyZMgSvCCqLbDFc2AK6mAQanwV6mIgDbTxEBFaUiFYJXSj3wgKDC/4AC8CvMQoIVUAH4A/AH4A/AH4A/AH4A/AD0eAokDwAECvgRF//ggEP//8BIn+AYMfBQsD//4BwIAB4AJBg4FDAYIVEh/AvkHBAMPGAImB4EH+EDEQN/Coc/gEcBwIGBBoMAnwCB/kHBQMPLosOBwUAvwCBvAYCh5SCGwUB+AVBBwQ+BBIYnBEAQHDDIUGAwRqBwEBEYUH3gKCEgRFCgwOCVYStDgYgDnhsDCoJsCG4KABCoQ9DPoLKECoxoCAoI2DhwCBDgQVEgHgBgQbCYIaGEK4gVBHARdCPAYGBDgQVFuAVIAgIXBCoVwCok4EgPggZDB/4VHvEP/4jBmAVBj/wHgQKBLgMGCoc8///JAMwmDvBvAVBg+D4AVGj/8SIUwI4M4ngOBg6GCCosPBAIVEOAIOBAIIMCCogDCsDkBDANwhizBAIIVCNogVEv4VBsEOCotgCoNUCosB/IVDhkAAIIVBuEDwP8CorkBCoUGCo/n9gVDQYK6BMoYTBIIcwZQOMCof/MAQVDK4q5BvweBCoLbCCoanBCYMGV4QVBJAQVBj4JBEYYVBYoUDCpE8AwIVI4+ACo94AwYVDI4MD/4LBCozsBCpEA/wVIbIJBGga6CAAM4CpJ7CCoRUBCrEYCpEPCogECFZJtCg7xCCoXgCpq8BCocA+AVDYpMB+AVEXIQVInwKC/4VED4MBqAVHh4SCn4VEjxgBLQIVGg//J4M4CoPgD4WAh+wCo4AB/CkBCokH+F+UwJ8CCoqMBjg5BsA1D/gTBCpDOBCosGn/gFYLUCCo8MBoUOfAIKBDoQVJEgI5BCozgCCoUCCoaGCuALBAIMBOoQVEj4GBnDbBMYM4jkAvxvB4AXCj/8O4X+TIMD4ClBnDZB//gj+ACoSJBCoP4v4+Bg+ATgMf/EB84hCgIXBXwIABCQLxBg6yCj/wGIN/CAMDFoYbBLoSICKgIABGIIEEC4IVCDISSCCogDCAgQVEEAaqEXQgICgYFCCoigBCpEeGQgVGBQYVET4IrEK4ppDCol4CpaVBNoz6BCob3DB4UHAwUPPgYHBQYbuBAYUPAIIGCj4vDAYI2DgF8AYU/wEeAwU9F4UfFALXEA4f/8E8j41C/gDBvwRC/4ADHYMf+P9/EP8EH+F/wEHJ4d/CwgABwF/+EDAoPAh4DBHoYAEj4tCPwV//xJCAYIA/AH4A/AHMP/n/gfw/kA4AABCsMMCAfDCssP4H/CQXDmEzNpoVUIIgVB+AHBCs3DhgABCso+B/gVlAFg6EdxgVWdwPAmEMgfwgYCBn4CBOBAVUgY5BCoM8SoMDAQPD5kMngVchnAgYWB5gGBHYMM5nAAQIVcCQLwCNoQCC5j3BQZIVVmBCBH4SdBgAWBZ4oVYh/8CoX/54FBBAM/AQLRBCracDJAgOICrgA/AH4A/AH4A/AH4A/AH4AJA")) +require("heatshrink").decompress(atob("2GwgI74HIUB/4AC8AWNwAVTgNAAQIYBAANgCZUcuEAkAVRkWYgMQCqWokEICqMe1ERFaUC5EIK6RtBgqDGvyZMgSvCCqLbDFc2AK6mAQanwV6mIgDbTxEBFaUiFYJXSj3wgKDC/4AC8CvMQoIVUAH4A/AH4A/AH4A/AH4A/AD0eAokDwAECvgRF//ggEP//8BIn+AYMfBQsD//4BwIAB4AJBg4FDAYIVEh/AvkHBAMPGAImB4EH+EDEQN/Coc/gEcBwIGBBoMAnwCB/kHBQMPLosOBwUAvwCBvAYCh5SCGwUB+AVBBwQ+BBIYnBEAQHDDIUGAwRqBwEBEYUH3gKCEgRFCgwOCVYStDgYgDnhsDCoJsCG4KABCoQ9DPoLKECoxoCAoI2DhwCBDgQVEgHgBgQbCYIaGEK4gVBHARdCPAYGBDgQVFuAVIAgIXBCoVwCok4EgPggZDB/4VHvEP/4jBmAVBj/wHgQKBLgMGCoc8///JAMwmDvBvAVBg+D4AVGj/8SIUwI4M4ngOBg6GCCosPBAIVEOAIOBAIIMCCogDCsDkBDANwhizBAIIVCNogVEv4VBsEOCotgCoNUCosB/IVDhkAAIIVBuEDwP8CorkBCoUGCo/n9gVDQYK6BMoYTBIIcwZQOMCof/MAQVDK4q5BvweBCoLbCCoanBCYMGV4QVBJAQVBj4JBEYYVBYoUDCpE8AwIVI4+ACo94AwYVDI4MD/4LBCozsBCpEA/wVIbIJBGga6CAAM4CpJ7CCoRUBCrEYCpEPCogECFZJtCg7xCCoXgCpq8BCocA+AVDYpMB+AVEXIQVInwKC/4VED4MBqAVHh4SCn4VEjxgBLQIVGg//J4M4CoPgD4WAh+wCo4AB/CkBCokH+F+UwJ8CCoqMBjg5BsA1D/gTBCpDOBCosGn/gFYLUCCo8MBoUOfAIKBDoQVJEgI5BCozgCCoUCCoaGCuALBAIMBOoQVEj4GBnDbBMYM4jkAvxvB4AXCj/8O4X+TIMD4ClBnDZB//gj+ACoSJBCoP4v4+Bg+ATgMf/EB84hCgIXBXwIABCQLxBg6yCj/wGIN/CAMDFoYbBLoSICKgIABGIIEEC4IVCDISSCCogDCAgQVEEAaqEXQgICgYFCCoigBCpEeGQgVGBQYVET4IrEK4ppDCol4CpaVBNoz6BCob3DB4UHAwUPPgYHBQYbuBAYUPAIIGCj4vDAYI2DgF8AYU/wEeAwU9F4UfFALXEA4f/8E8j41C/gDBvwRC/4ADHYMf+P9/EP8EH+F/wEHJ4d/CwgABwF/+EDAoPAh4DBHoYAEj4tCPwV//xJCAYIA/AH4A/AHMP/n/gfw/kA4AABCsMMCAfDCssP4H/CQXDmEzNpoVUIIgVB+AHBCs3DhgABCso+B/gVlAFg6EdxgVWdwPAmEMgfwgYCBn4CBOBAVUgY5BCoM8SoMDAQPD5kMngVchnAgYWB5gGBHYMM5nAAQIVcCQLwCNoQCC5j3BQZIVVmBCBH4SdBgAWBZ4oVYh/8CoX/54FBBAM/AQLRBCracDJAgOICrgA/AH4A/AH4A/AH4A/AH4AJA")) From 425501f7a7cd4ef7f3f3608a1c426089c4a347ee Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Fri, 17 Dec 2021 15:01:18 +0100 Subject: [PATCH 005/217] Update apps.json --- apps.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps.json b/apps.json index f01d55004..9bd426bd3 100644 --- a/apps.json +++ b/apps.json @@ -5036,6 +5036,5 @@ "storage": [ {"name":"myappid.app.js","url":"app.js"}, {"name":"myappid.img","url":"app-icon.js","evaluate":true} - ], -} + ]} ] From c93bbe4fb8362617541e1300558caf209c44e271 Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 15:40:22 -0500 Subject: [PATCH 006/217] Corrected magnetic field Z negative encoding --- apps/sensible/sensible.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js index 3da39998e..e7e07a71b 100644 --- a/apps/sensible/sensible.js +++ b/apps/sensible/sensible.js @@ -196,8 +196,8 @@ function encodeMagServiceData() { if(yEncoded < 0) { yEncoded += 0x10000; } - if(yEncoded < 0) { - yEncoded += 0x10000; + if(zEncoded < 0) { + zEncoded += 0x10000; } let x = [ xEncoded & 0xff, (xEncoded >> 8) & 0xff ]; From 43f2252bbf74500d95a0cee8a4bf25fea3166a56 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Fri, 17 Dec 2021 21:54:02 +0100 Subject: [PATCH 007/217] messages: don't buzz during Quiet Mode --- apps.json | 2 +- apps/messages/ChangeLog | 1 + apps/messages/app.js | 2 +- apps/messages/lib.js | 5 +++-- apps/messages/widget.js | 1 + 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..e37bfd908 100644 --- a/apps.json +++ b/apps.json @@ -77,7 +77,7 @@ { "id": "messages", "name": "Messages", - "version": "0.14", + "version": "0.15", "description": "App to display notifications from iOS and Gadgetbridge", "icon": "app.png", "type": "app", diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index 94848a26c..76407cb45 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -21,3 +21,4 @@ Add 'Delete All' option to message options Now update correctly when 'require("messages").clearAll()' is called 0.14: Hide widget when all unread notifications are dismissed from phone +0.15: Don't buzz when Quiet Mode is active diff --git a/apps/messages/app.js b/apps/messages/app.js index 79009e77e..eb066acb9 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -52,7 +52,7 @@ var MESSAGES = require("Storage").readJSON("messages.json",1)||[]; if (!Array.isArray(MESSAGES)) MESSAGES=[]; var onMessagesModified = function(msg) { // TODO: if new, show this new one - if (msg && msg.new) { + if (msg && msg.new && !((require('Storage').readJSON('setting.json', 1) || {}).quiet)) { if (WIDGETS["messages"]) WIDGETS["messages"].buzz(); else Bangle.buzz(); } diff --git a/apps/messages/lib.js b/apps/messages/lib.js index b3cb7d9d4..32dff78ba 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -43,7 +43,8 @@ exports.pushMessage = function(event) { // otherwise load messages/show widget var loadMessages = Bangle.CLOCK || event.important; // first, buzz - if (loadMessages && global.WIDGETS && WIDGETS.messages) + var quiet = (require('Storage').readJSON('setting.json',1)||{}).quiet; + if (!quiet && loadMessages && global.WIDGETS && WIDGETS.messages) WIDGETS.messages.buzz(); // after a delay load the app, to ensure we have all the messages if (exports.messageTimeout) clearTimeout(exports.messageTimeout); @@ -51,7 +52,7 @@ exports.pushMessage = function(event) { exports.messageTimeout = undefined; // if we're in a clock or it's important, go straight to messages app if (loadMessages) return load("messages.app.js"); - if (!global.WIDGETS || !WIDGETS.messages) return Bangle.buzz(); // no widgets - just buzz to let someone know + if (!quiet && (!global.WIDGETS || !WIDGETS.messages)) return Bangle.buzz(); // no widgets - just buzz to let someone know WIDGETS.messages.show(); }, 500); } diff --git a/apps/messages/widget.js b/apps/messages/widget.js index f01d22ec7..e831e5b68 100644 --- a/apps/messages/widget.js +++ b/apps/messages/widget.js @@ -26,6 +26,7 @@ WIDGETS["messages"]={area:"tl",width:0,draw:function() { WIDGETS["messages"].width=0; Bangle.drawWidgets(); },buzz:function() { + if ((require('Storage').readJSON('setting.json',1)||{}).quiet) return; // never buzz during Quiet Mode let v = (require('Storage').readJSON("messages.settings.json", true) || {}).vibrate || "."; function b() { var c = v[0]; From 00116b760ce493afd50c1fa474e778ce89a9756f Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 16:28:30 -0500 Subject: [PATCH 008/217] Refactored byte array conversions for efficiency and readability --- apps/sensible/sensible.js | 76 ++++++++++++++------------------------- 1 file changed, 26 insertions(+), 50 deletions(-) diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js index e7e07a71b..e3a9df847 100644 --- a/apps/sensible/sensible.js +++ b/apps/sensible/sensible.js @@ -130,21 +130,9 @@ function transmitUpdatedSensorData() { // Encode the bar service data to fit in a Bluetooth PDU function encodeBarServiceData() { - let tEncoded = Math.round(bar.temperature * 100); - let pEncoded = Math.round(bar.pressure * 100); - let eEncoded = Math.round(bar.altitude * 100); - - if(bar.temperature < 0) { - tEncoded += 0x10000; - } - if(bar.altitude < 0) { - eEncoded += 0x1000000; - } - - let t = [ tEncoded & 0xff, (tEncoded >> 8) & 0xff ]; - let p = [ pEncoded & 0xff, (pEncoded >> 8) & 0xff, (pEncoded >> 16) & 0xff, - (pEncoded >> 24) & 0xff ]; - let e = [ eEncoded & 0xff, (eEncoded >> 8) & 0xff, (eEncoded >> 16) & 0xff ]; + let t = toByteArray(Math.round(bar.temperature * 100), 2, true); + let p = toByteArray(Math.round(bar.pressure * 100), 4, false); + let e = toByteArray(Math.round(bar.altitude * 100), 3, true); return [ 0x02, 0x01, 0x06, // Flags @@ -157,24 +145,10 @@ function encodeBarServiceData() { // Encode the GPS service data using the Location and Speed characteristic function encodeGpsServiceData() { - let latEncoded = Math.round(gps.lat * 10000000); - let lonEncoded = Math.round(gps.lon * 10000000); - let hEncoded = Math.round(gps.course * 100); - let sEncoded = Math.round(1000 * gps.speed / 36); - - if(gps.lat < 0) { - latEncoded += 0x100000000; - } - if(gps.lon < 0) { - lonEncoded += 0x100000000; - } - - let s = [ sEncoded & 0xff, (sEncoded >> 8) & 0xff ]; - let lat = [ latEncoded & 0xff, (latEncoded >> 8) & 0xff, - (latEncoded >> 16) & 0xff, (latEncoded >> 24) & 0xff ]; - let lon = [ lonEncoded & 0xff, (lonEncoded >> 8) & 0xff, - (lonEncoded >> 16) & 0xff, (lonEncoded >> 24) & 0xff ]; - let h = [ hEncoded & 0xff, (hEncoded >> 8) & 0xff ]; + let s = toByteArray(Math.round(1000 * gps.speed / 36), 2, false); + let lat = toByteArray(Math.round(gps.lat * 10000000), 4, true); + let lon = toByteArray(Math.round(gps.lon * 10000000), 4, true); + let h = toByteArray(Math.round(gps.course * 100), 2, false); return [ 0x02, 0x01, 0x06, // Flags @@ -186,23 +160,9 @@ function encodeGpsServiceData() { // Encode the mag service data using the magnetic flux density 3D characteristic function encodeMagServiceData() { - let xEncoded = mag.x; // TODO: units??? - let yEncoded = mag.y; - let zEncoded = mag.z; - - if(xEncoded < 0) { - xEncoded += 0x10000; - } - if(yEncoded < 0) { - yEncoded += 0x10000; - } - if(zEncoded < 0) { - zEncoded += 0x10000; - } - - let x = [ xEncoded & 0xff, (xEncoded >> 8) & 0xff ]; - let y = [ yEncoded & 0xff, (yEncoded >> 8) & 0xff ]; - let z = [ zEncoded & 0xff, (zEncoded >> 8) & 0xff ]; + let x = toByteArray(mag.x, 2, true); + let y = toByteArray(mag.y, 2, true); + let z = toByteArray(mag.z, 2, true); return [ 0x02, 0x01, 0x06, // Flags @@ -211,6 +171,22 @@ function encodeMagServiceData() { } +// Convert the given value to a little endian byte array +function toByteArray(value, numberOfBytes, isSigned) { + let byteArray = new Array(numberOfBytes); + + if(isSigned && (value < 0)) { + value += 1 << (numberOfBytes * 8); + } + + for(let index = 0; index < numberOfBytes; index++) { + byteArray[index] = (value >> (index * 8)) & 0xff; + } + + return byteArray; +} + + // Update acceleration Bangle.on('accel', function(newAcc) { acc = newAcc; From 37504ec5533e2d04081b0dd42355f779cc81e2f2 Mon Sep 17 00:00:00 2001 From: Marco Heiming Date: Fri, 17 Dec 2021 22:36:34 +0100 Subject: [PATCH 009/217] Circles clock v0.03 --- apps.json | 3 ++- apps/circlesclock/ChangeLog | 1 + apps/circlesclock/app.js | 28 +++++++++++++++++----------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..8bdc54276 100644 --- a/apps.json +++ b/apps.json @@ -5029,9 +5029,10 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.02", + "version":"0.03", "description": "A clock with circles for different data at the bottom in a probably familiar style", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "dependencies": {"widpedom":"app"}, "type": "clock", "tags": "clock", diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog index fa2139fff..c0aa4e2f8 100644 --- a/apps/circlesclock/ChangeLog +++ b/apps/circlesclock/ChangeLog @@ -1,2 +1,3 @@ 0.01: New clock 0.02: Fix icon & add battery warn functionality +0.03: Theming support & minor fixes diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 7607fa71f..57b46bb8d 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -18,8 +18,8 @@ function loadSettings() { }; } -const colorFg = '#fff'; -const colorBg = '#000'; +const colorFg = g.theme.dark ? '#fff' : '#000'; +const colorBg = g.theme.dark ? '#000' : '#fff'; const colorGrey = '#808080'; const colorRed = '#ff0000'; const colorGreen = '#00ff00'; @@ -73,7 +73,7 @@ function drawSteps() { g.setColor(colorGrey); g.fillCircle(w1, h3, radiusOuter); - const stepGoal = settings.stepGoal; + const stepGoal = settings.stepGoal || 10000; if (stepGoal > 0) { let percent = steps / stepGoal; if (stepGoal < steps) percent = 1; @@ -97,7 +97,7 @@ function drawHeartRate() { g.setColor(colorGrey); g.fillCircle(w2, h3, radiusOuter); - if (hrtValue != undefined) { + if (hrtValue != undefined && hrtValue > 0) { const percent = hrtValue / settings.maxHR; drawGauge(w2, h3, percent, colorRed); } @@ -156,7 +156,6 @@ function radians(a) { return a * Math.PI / 180; } - function drawGauge(cx, cy, percent, color) { let offset = 30; let end = 300; @@ -166,15 +165,16 @@ function drawGauge(cx, cy, percent, color) { if (percent > 1) percent = 1; var startrot = -offset; - var endrot = startrot - ((end - offset) * percent); + var endrot = startrot - ((end - offset) * percent) - 15; g.setColor(color); + const size = 4; // draw gauge - for (i = startrot; i > endrot; i -= 4) { + for (i = startrot; i > endrot - size; i -= size) { x = cx + r * Math.sin(radians(i)); y = cy + r * Math.cos(radians(i)); - g.fillCircle(x, y, 4); + g.fillCircle(x, y, size); } } @@ -201,6 +201,10 @@ function getSteps() { Bangle.on('lock', function(isLocked) { if (!isLocked) { Bangle.setHRMPower(1, "watch"); + if (hrtValue == undefined) { + hrtValue = '...'; + drawHeartRate(); + } } else { Bangle.setHRMPower(0, "watch"); } @@ -225,9 +229,11 @@ Bangle.loadWidgets(); * so we will blank out the draw() functions of each widget and change the * area to the top bar doesn't get cleared. */ -for (let wd of WIDGETS) { - wd.draw = () => {}; - wd.area = ""; +if (typeof WIDGETS === "object") { + for (let wd of WIDGETS) { + wd.draw = () => {}; + wd.area = ""; + } } loadSettings(); setInterval(draw, 60000); From 904e3e39f0351df81be63bbd1da9eb6cb2ac06f3 Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 16:43:33 -0500 Subject: [PATCH 010/217] Added GPS elevation (altitude) to location and speed service --- apps/sensible/sensible.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js index e3a9df847..0529bf30b 100644 --- a/apps/sensible/sensible.js +++ b/apps/sensible/sensible.js @@ -148,12 +148,14 @@ function encodeGpsServiceData() { let s = toByteArray(Math.round(1000 * gps.speed / 36), 2, false); let lat = toByteArray(Math.round(gps.lat * 10000000), 4, true); let lon = toByteArray(Math.round(gps.lon * 10000000), 4, true); + let e = toByteArray(Math.round(gps.alt * 100), 3, true); let h = toByteArray(Math.round(gps.course * 100), 2, false); return [ - 0x02, 0x01, 0x06, // Flags - 0x11, 0x16, 0x67, 0x2a, 0x95, 0x02, s[0], s[1], lat[0], lat[1], lat[2], - lat[3], lon[0], lon[1], lon[2], lon[3], h[0], h[1] // Location and Speed + 0x02, 0x01, 0x06, // Flags + 0x14, 0x16, 0x67, 0x2a, 0x9d, 0x02, s[0], s[1], lat[0], lat[1], lat[2], + lat[3], lon[0], lon[1], lon[2], lon[3], e[0], e[1], e[2], h[0], h[1] + // Location and Speed ]; } From 6a1c14088364b3a2f7f522f41eb2359f4bbb388d Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 16:47:53 -0500 Subject: [PATCH 011/217] Use dynamic advertising interval based on number of distinct packets --- apps/sensible/sensible.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js index 0529bf30b..ec972e368 100644 --- a/apps/sensible/sensible.js +++ b/apps/sensible/sensible.js @@ -124,7 +124,8 @@ function transmitUpdatedSensorData() { isNewMagData = false; } - NRF.setAdvertising(data, { showName: false, interval: 200 }); + let interval = 1000 / data.length; + NRF.setAdvertising(data, { showName: false, interval: interval }); } From 4aaccb87d54c1ac024d859ea7c3ed863e6a942cf Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 16:50:23 -0500 Subject: [PATCH 012/217] Corrected pressure resolution --- apps/sensible/sensible.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js index ec972e368..d5cfd033b 100644 --- a/apps/sensible/sensible.js +++ b/apps/sensible/sensible.js @@ -132,7 +132,7 @@ function transmitUpdatedSensorData() { // Encode the bar service data to fit in a Bluetooth PDU function encodeBarServiceData() { let t = toByteArray(Math.round(bar.temperature * 100), 2, true); - let p = toByteArray(Math.round(bar.pressure * 100), 4, false); + let p = toByteArray(Math.round(bar.pressure * 10), 4, false); let e = toByteArray(Math.round(bar.altitude * 100), 3, true); return [ From 8f6823694785694b029f1d20ea16b418ff4f5272 Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 16:53:45 -0500 Subject: [PATCH 013/217] Corrected pressure resolution for real this time! --- apps/sensible/sensible.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sensible/sensible.js b/apps/sensible/sensible.js index d5cfd033b..73c348556 100644 --- a/apps/sensible/sensible.js +++ b/apps/sensible/sensible.js @@ -132,7 +132,7 @@ function transmitUpdatedSensorData() { // Encode the bar service data to fit in a Bluetooth PDU function encodeBarServiceData() { let t = toByteArray(Math.round(bar.temperature * 100), 2, true); - let p = toByteArray(Math.round(bar.pressure * 10), 4, false); + let p = toByteArray(Math.round(bar.pressure * 1000), 4, false); let e = toByteArray(Math.round(bar.altitude * 100), 3, true); return [ From 0dce0afbbe25e87f3e8a7ca5524ffade99d7455e Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Fri, 17 Dec 2021 16:56:20 -0500 Subject: [PATCH 014/217] Version bump --- apps.json | 2 +- apps/sensible/ChangeLog | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e5e9f8f02..f5be04136 100644 --- a/apps.json +++ b/apps.json @@ -4652,7 +4652,7 @@ "id": "sensible", "name": "SensiBLE", "shortName": "SensiBLE", - "version": "0.04", + "version": "0.05", "description": "Collect, display and advertise real-time sensor data.", "icon": "sensible.png", "screenshots": [ diff --git a/apps/sensible/ChangeLog b/apps/sensible/ChangeLog index c50431f51..33e44b70c 100644 --- a/apps/sensible/ChangeLog +++ b/apps/sensible/ChangeLog @@ -2,3 +2,4 @@ 0.02: Corrected variable initialisation 0.03: Advertise app name, added screenshots 0.04: Advertise bar, GPS, HRM and mag services +0.05: Refactored for efficiency, corrected sensor value inaccuracies \ No newline at end of file From 7ad29b48b4bbf224bfa96e8d3f7625089b2398c3 Mon Sep 17 00:00:00 2001 From: Kristoffer Sall-Storgaard Date: Fri, 17 Dec 2021 23:11:41 +0100 Subject: [PATCH 015/217] Disable screen turn on on bluetooth status change --- apps/widbt/widget.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/widbt/widget.js b/apps/widbt/widget.js index 88be3d5c9..c7ef8c0ad 100644 --- a/apps/widbt/widget.js +++ b/apps/widbt/widget.js @@ -7,7 +7,6 @@ WIDGETS["bluetooth"]={area:"tr",width:15,draw:function() { g.drawImage(atob("CxQBBgDgFgJgR4jZMawfAcA4D4NYybEYIwTAsBwDAA=="),2+this.x,2+this.y); },changed:function() { WIDGETS["bluetooth"].draw(); - Bangle.setLCDPower(1); // turn screen on }}; NRF.on('connect',WIDGETS["bluetooth"].changed); NRF.on('disconnect',WIDGETS["bluetooth"].changed); From b0dbe1d7d56052a870131342d0e17ad1f132f90e Mon Sep 17 00:00:00 2001 From: Kristoffer Sall-Storgaard Date: Fri, 17 Dec 2021 23:13:34 +0100 Subject: [PATCH 016/217] Disable screen turn on on bluetooth status change --- apps/widbt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/widbt/ChangeLog b/apps/widbt/ChangeLog index 7aa96ce5c..4c2132122 100644 --- a/apps/widbt/ChangeLog +++ b/apps/widbt/ChangeLog @@ -4,3 +4,4 @@ 0.05: Make Bluetooth widget thinner, and when on a bright theme use light grey for disabled color 0.06: Tweaking colors for dark/light themes and low bpp screens 0.07: Memory usage improvements +0.08: Disable LCD on, on bluetooth status change From 8a2fbc47bd8486a4aadf5f96ca1b1abbeca0044c Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 09:56:14 +0100 Subject: [PATCH 017/217] Update apps.json --- apps.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps.json b/apps.json index 9bd426bd3..60de1672f 100644 --- a/apps.json +++ b/apps.json @@ -5027,14 +5027,14 @@ {"name":"circlesclock.json"} ] }, - { "id": "miniclock", - "name": "Minimalist Clock", - "shortName" : "Minimalist Clock", + { "id": "contourclock", + "name": "Contour Clock", + "shortName" : "Contour Clock", "icon": "app.png", - "description": "A Minimalist clockface with large Digits.", + "description": "A Minimalist clockface with large Digits. Looks best with the dark theme", "tags": "clock", "storage": [ - {"name":"myappid.app.js","url":"app.js"}, - {"name":"myappid.img","url":"app-icon.js","evaluate":true} + {"name":"contourclock.app.js","url":"app.js"}, + {"name":"contourclock.img","url":"app-icon.js","evaluate":true} ]} ] From 79e5a6e0a06edb390db9c7145aca12b34b4b6379 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 09:57:17 +0100 Subject: [PATCH 018/217] Create app-icon.js --- apps/contourclock/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/contourclock/app-icon.js diff --git a/apps/contourclock/app-icon.js b/apps/contourclock/app-icon.js new file mode 100644 index 000000000..38b19c29a --- /dev/null +++ b/apps/contourclock/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("2GwgI74HIUB/4AC8AWNwAVTgNAAQIYBAANgCZUcuEAkAVRkWYgMQCqWokEICqMe1ERFaUC5EIK6RtBgqDGvyZMgSvCCqLbDFc2AK6mAQanwV6mIgDbTxEBFaUiFYJXSj3wgKDC/4AC8CvMQoIVUAH4A/AH4A/AH4A/AH4A/AD0eAokDwAECvgRF//ggEP//8BIn+AYMfBQsD//4BwIAB4AJBg4FDAYIVEh/AvkHBAMPGAImB4EH+EDEQN/Coc/gEcBwIGBBoMAnwCB/kHBQMPLosOBwUAvwCBvAYCh5SCGwUB+AVBBwQ+BBIYnBEAQHDDIUGAwRqBwEBEYUH3gKCEgRFCgwOCVYStDgYgDnhsDCoJsCG4KABCoQ9DPoLKECoxoCAoI2DhwCBDgQVEgHgBgQbCYIaGEK4gVBHARdCPAYGBDgQVFuAVIAgIXBCoVwCok4EgPggZDB/4VHvEP/4jBmAVBj/wHgQKBLgMGCoc8///JAMwmDvBvAVBg+D4AVGj/8SIUwI4M4ngOBg6GCCosPBAIVEOAIOBAIIMCCogDCsDkBDANwhizBAIIVCNogVEv4VBsEOCotgCoNUCosB/IVDhkAAIIVBuEDwP8CorkBCoUGCo/n9gVDQYK6BMoYTBIIcwZQOMCof/MAQVDK4q5BvweBCoLbCCoanBCYMGV4QVBJAQVBj4JBEYYVBYoUDCpE8AwIVI4+ACo94AwYVDI4MD/4LBCozsBCpEA/wVIbIJBGga6CAAM4CpJ7CCoRUBCrEYCpEPCogECFZJtCg7xCCoXgCpq8BCocA+AVDYpMB+AVEXIQVInwKC/4VED4MBqAVHh4SCn4VEjxgBLQIVGg//J4M4CoPgD4WAh+wCo4AB/CkBCokH+F+UwJ8CCoqMBjg5BsA1D/gTBCpDOBCosGn/gFYLUCCo8MBoUOfAIKBDoQVJEgI5BCozgCCoUCCoaGCuALBAIMBOoQVEj4GBnDbBMYM4jkAvxvB4AXCj/8O4X+TIMD4ClBnDZB//gj+ACoSJBCoP4v4+Bg+ATgMf/EB84hCgIXBXwIABCQLxBg6yCj/wGIN/CAMDFoYbBLoSICKgIABGIIEEC4IVCDISSCCogDCAgQVEEAaqEXQgICgYFCCoigBCpEeGQgVGBQYVET4IrEK4ppDCol4CpaVBNoz6BCob3DB4UHAwUPPgYHBQYbuBAYUPAIIGCj4vDAYI2DgF8AYU/wEeAwU9F4UfFALXEA4f/8E8j41C/gDBvwRC/4ADHYMf+P9/EP8EH+F/wEHJ4d/CwgABwF/+EDAoPAh4DBHoYAEj4tCPwV//xJCAYIA/AH4A/AHMP/n/gfw/kA4AABCsMMCAfDCssP4H/CQXDmEzNpoVUIIgVB+AHBCs3DhgABCso+B/gVlAFg6EdxgVWdwPAmEMgfwgYCBn4CBOBAVUgY5BCoM8SoMDAQPD5kMngVchnAgYWB5gGBHYMM5nAAQIVcCQLwCNoQCC5j3BQZIVVmBCBH4SdBgAWBZ4oVYh/8CoX/54FBBAM/AQLRBCracDJAgOICrgA/AH4A/AH4A/AH4A/AH4AJA")) From f408e7d3b5b68ba3668c37effe046a59cb8be3f4 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 09:57:56 +0100 Subject: [PATCH 019/217] Create app.js --- apps/contourclock/app.js | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 apps/contourclock/app.js diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js new file mode 100644 index 000000000..9fdbab985 --- /dev/null +++ b/apps/contourclock/app.js @@ -0,0 +1,55 @@ +const digits = [ +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVqlVVVVVVVVVVVVVaqqqqpVVVVVVVVVVWqqqqqqqVVVVVVVVVWqqqAKqqpVVVVVVVVaqgAAAACqpVVVVVVVaqAAAAAACqlVVVVVVaoAAAAAAACqVVVVVVaoAAAAAAAAKpVVVVVaoAAAAAAAAAqlVVVVaoAAAAAAAAACqVVVVWoAAAAAAAAAAKlVVVWoAAAAAAAAAAAqVVVWqAAAAAAAAAAAKpVVVqAAAAACgAAAAAqVVVagAAAAKqgAAAAKlVVagAAAAqqqgAAAAqVVWoAAAAKpaoAAAAKlVVqAAAAKlVagAAAAqVVqAAAACpVWoAAAAKlVagAAACpVVagAAACpVWoAAAAqVVWoAAAAqVVqAAAAqVVVagAAAKlVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVagAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVWoAAACpVqAAAAKlVVVqAAAAqVagAAAKlVVVagAAAKlWoAAACpVVVWoAAACpVqAAAAqVVVVqAAAAqVagAAAKlVVVagAAAKlWoAAACpVVVWoAAACpVqAAAAqVVVVqAAAAqVagAAACpVVVagAAAKlWoAAAAqVVVWoAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVagAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlVqAAAAqVVVagAAACpVagAAACpVVWoAAACpVWoAAAAqVVWoAAAAqVVqAAAAKlVVqAAAAKlVagAAAAqVVqAAAAKlVVqAAAAKpVqgAAACpVVagAAAAqqqgAAAAqVVVqAAAACqqgAAAAKlVVagAAAACqAAAAAKlVVWoAAAAAAAAAAACpVVVagAAAAAAAAAACpVVVWqAAAAAAAAAACqVVVVagAAAAAAAAAAqVVVVVqAAAAAAAAAAqVVVVVaoAAAAAAAAAqlVVVVVqgAAAAAAAAqlVVVVVWqgAAAAAAAqlVVVVVVaqAAAAAACqlVVVVVVVaqgAAAAqqlVVVVVVVVqqqqqqqqVVVVVVVVVVqqqqqqpVVVVVVVVVVVaqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVaqqqVVVVVVVVVVVVVqqqqqVVVVVVVVVVVWqqqqqpVVVVVVVVVVaqgAAAqVVVVVVVVVVaqAAAACpVVVVVVVVVqoAAAAAqVVVVVVVVVqoAAAAAKlVVVVVVVWqgAAAAACpVVVVVVVaqgAAAAAAqVVVVVVVaqAAAAAAAKlVVVVVVaoAAAAAAACpVVVVVVqoAAAAAAAAqVVVVVVaoAAAAAAAAKlVVVVVagAAAAAAAACpVVVVVWoAAAAAAAAAqVVVVVVqAAAAAAAAAKlVVVVVagAAAAAAAACpVVVVVWoAAAAAAAAAqVVVVVVqAAAAAAAAAKlVVVVVagAAAgAAAACpVVVVVWoAACogAAAAqVVVVVVagAKqoAAAAKlVVVVVWqqqqagAAACpVVVVVVaqqpWoAAAAqVVVVVVVaqlVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVaqqqAAAAAqqqpVVVWqqqqgAAAAKqqqpVVWqqqqAAAAAAKqqqlVVqgAAAAAAAAAAACpVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVWoAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWqAAAAAAAAAAAACqVVaqqqqqqqqqqqqqqVVVqqqqqqqqqqqqqqVVVWqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVWqVVVVVVVVVVVVVaqqqqqlVVVVVVVVVaqqqqqqqqVVVVVVVVqqqqoAqqqqVVVVVVWqqgAAAAAKqpVVVVVaqgAAAAAAAAqpVVVVaqAAAAAAAAACqlVVVWoAAAAAAAAAACpVVVWoAAAAAAAAAAAKlVVVqAAAAAAAAAAACqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAAqVVWoAAAKqqAAAAAAKlVVagACqqqqAAAAACpVVWqqqqqqqqAAAAAqVVVaqqqlVVqgAAAAKlVVVaqpVVVVqAAAACpVVVVVVVVVVagAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVqAAAACpVVVVVVVVVVagAAAAqVVVVVVVVVVagAAAAqVVVVVVVVVVaoAAAAKlVVVVVVVVVaoAAAACpVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACqVVVVVVVVVWoAAAAAqVVVVVVVVVWqAAAAAqVVVVVVVVVWqAAAAAqlVVVVVVVVWqAAAAAKlVVVVVVVVWqAAAAAKlVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAqpVVVVVVVVWqAAAAACpVVVVVVVVWqAAAAAKlVVVVVVVVVqAAAAAACqqqqpVVVVqAAAAAAKqqqqqpVVVqgAAAAAAKqqqqqpVVagAAAAAAAAAAACqVVWoAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVWoAAAAAAAAAAAACpVVqAAAAAAAAAAAAAqVVaoAAAAAAAAAAAAqVVVqqqqqqqqqqqqqqlVVWqqqqqqqqqqqqqlVVVaqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVapVVVVVVVVVVVVVaqqqqqlVVVVVVVVVaqqqqqqqqVVVVVVVWqqqqgCqqqpVVVVVVaqqgAAAAAKqpVVVVVaqgAAAAAAACqpVVVVaoAAAAAAAAACqlVVVaoAAAAAAAAAACqVVVWoAAAAAAAAAAAKlVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAAqVVVqAAAKqqgAAAAAKlVVaoAKqqqqgAAAACpVVVqqqqqqqqAAAAAqVVVWqqqlVVaoAAAAKlVVVaqlVVVVqAAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVaoAAAAqVVVVVVVVaqqqAAAAKlVVVVVVaqqqoAAAAKlVVVVVVaqqqgAAAAKpVVVVVVaqgAAAAAAKpVVVVVVaoAAAAAAAKpVVVVVVWoAAAAAAACpVVVVVVVqAAAAAAACpVVVVVVVagAAAAAAAqVVVVVVVWoAAAAAAACpVVVVVVVqAAAAAAAAqpVVVVVVagAAAAAAACqlVVVVVWoAAAAAAAACqVVVVVVaoAAAAAAAAKpVVVVVWqqqqgAAAAAqVVVVVVWqqqqgAAAACpVVVVVVaqqqqgAAAAqVVVVVVVVVVaqAAAAKlVVVVVVVVVVagAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVlVVVVVVqAAAAKlVVaqqVVVVVqAAAACpVVaqqqpVVWqgAAAAqVVaqKqqqqqqgAAAAKlVaoAAqqqqqAAAAACpVaoAAACqqoAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAAKpVVqAAAAAAAAAAAACpVVagAAAAAAAAAAAKpVVVqAAAAAAAAAAAKqVVVaqAAAAAAAAAAKpVVVVqqAAAAAAAACqpVVVVVqqoAAAAACqqpVVVVVWqqqqqqqqqqlVVVVVVVqqqqqqqqpVVVVVVVVVWqqqqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVaqqlVVVVVVVVVVVVVqqqqlVVVVVVVVVVVVqqqqqVVVVVVVVVVVVqgAAKpVVVVVVVVVVVqgAAAqVVVVVVVVVVVqgAAACpVVVVVVVVVVqgAAAAqVVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVaoAAAAAqVVVVVVVVVWoAAAAAKlVVVVVVVVWoAAAAACpVVVVVVVVWqAAAAAAqVVVVVVVVVqAAAAAAKlVVVVVVVVqAAAAAACpVVVVVVVVqgAAAAAAqVVVVVVVVagAAAAAAKlVVVVVVVagAAAAAACpVVVVVVVaoAAAAAAAqVVVVVVVaoAAAAAAAKlVVVVVVWoAAAAAAACpVVVVVVWoAAAAAAAAqVVVVVVWqAAAAAAAAKlVVVVVVqAAAAAAAACpVVVVVVqAAAAAAAAAqVVVVVVqgAAAAAAAAKlVVVVVagAAAgAAAACpVVVVVagAACogAAAAqVVVVVaoAACqoAAAAKlVVVVWoAAAqagAAACpVVVVWoAAAqWoAAAAqVVVVWqAAAqlqAAAAKlVVVVqAAAKlagAAACpVVVVqAAAKlWoAAAAqVVVVqgAAKpVqAAAAKlVVVagAACpVagAAACpVVVagAACpVWoAAAAqVVVaoAAAqVVqAAAAKlVVWoAAACqqqAAAAAqpVVqAAAAqqqgAAAAKqpVqAAAAAqqAAAAAAKqpagAAAAAAAAAAAAACqWoAAAAAAAAAAAAAACpqAAAAAAAAAAAAAAAqagAAAAAAAAAAAAAAKmoAAAAAAAAAAAAAACpqAAAAAAAAAAAAAAAqagAAAAAAAAAAAAAAKlqAAAAAAAAAAAAAACpaqAAAAAAAAAAAAACpVqqqqqqqgAAAAACqqVVqqqqqqqgAAAAKqqVVVqqqqqqoAAAACqpVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVVqAAACpVVVVVVVVVVVagAAAqVVVVVVVVVVVVqgACqVVVVVVVVVVVVaqqqqlVVVVVVVVVVVVaqqqVVVVVVVVVVVVVVqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVaqqqqqqqqpVVVVVVaqqqqqqqqqqqlVVVVaqqqqqqqqqqqqVVVVaqgAAAAAAAACqpVVVaoAAAAAAAAAAAqlVVWoAAAAAAAAAAACpVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAACpVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAKqVVVWoAAAACqqqqqqqlVVVqAAAAKqqqqqqqVVVVagAAACqqqqqqlVVVVWoAAACpVVVVVVVVVVVqAAAAqVVVVVVVVVVVagAAAKlVVVVVVVVVVWoAAACpVVVVVVVVVVVqAAAAqVVVVVVVVVVVagAAACqqqqqVVVVVVWoAAAAqqqqqqlVVVVVqAAAAAqqqqqqlVVVVagAAAAAAAAAqqVVVVWoAAAAAAAAAAKpVVVVqAAAAAAAAAAAqlVVVagAAAAAAAAAACqVVVWoAAAAAAAAAAAKpVVVqAAAAAAAAAAAAqlVVagAAAAAAAAAAACpVVWoAAAAAAAAAAAAKlVVqAAAAAAAAAAAACpVVagAAAACoAAAAAAKlVWoAAACqqqAAAAACpVVqAAAKqqqqAAAAAqVVWqgqqqpWqoAAAAKlVVqqqqpVVVqAAAACpVVWqqqlVVVWoAAAAqVVVVaVVVVVVqAAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAAKlVVWqpVVVVVagAAACpVVaqqqVVVVaoAAAAqVVaqqqqlVVqoAAAAKlVWoACqqqqqoAAAACpVWoAAAqqqqgAAAAAqVVqAAAAKqqAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAACpVVqAAAAAAAAAAAACpVVagAAAAAAAAAAACqVVVqAAAAAAAAAAACqVVVaoAAAAAAAAAAKqVVVVqgAAAAAAAAAKqVVVVWqoAAAAAAAAqpVVVVVaqqgAAAAAqqpVVVVVVaqqqqqqqqqlVVVVVVVWqqqqqqqqVVVVVVVVVVaqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVqVVVVVVVVVVVVVVqqqqqpVVVVVVVVVVqqqqqqqqVVVVVVVVWqqqqAqqqqlVVVVVVWqqAAAAACqqlVVVVVaqAAAAAAAAqpVVVVVaqAAAAAAAAAKlVVVVaoAAAAAAAAACqVVVVqoAAAAAAAAAAKlVVVaoAAAAAAAAAACpVVVagAAAAAAAAAAAqVVVaoAAAAAAAAAAAKlVVaoAAAAAAAAAAACpVVWoAAAAAAAAAAAAqVVWoAAAAACqqqAAAqVVVqAAAAAKqqqqoAqlVVqAAAAAqqqqqqqqlVVagAAAAqpVVVqqqlVVagAAAAqlVVVVWqVVVWoAAAAqlVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAAKlVVVVVVVVVVagAAACpVaqqqVVVVVWoAAAAqVqqqqqVVVVVqAAAAqWqqqqqqVVVVagAAAImqgAAAqpVVVWoAAAAoqAAAAAqlVVVqAAAAIqAAAAACqlVVqAAAAAIAAAAAAKpVVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAACqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAAqVWoAAAAAAAAAAAAAKlVqAAAAAACqgAAAACpVagAAAAAKqqgAAAAKlWoAAAAAKqqqAAAACpVagAAAACpVaoAAAAqVWoAAAACpVVqAAAAKlVqAAAAAqVVWoAAACpVagAAAAqVVVqAAAAKlWoAAAAKlVVagAAACpVqAAAACpVVWoAAAAqVagAAAAqVVVqAAAAKlVqAAAAKlVVagAAAKlVagAAACpVVWoAAACpVWoAAAAKlVVqAAAAqVVagAAACpVVqAAAAKlVWoAAAAKlVqgAAACpVVqAAAACqqqgAAAAqVVWoAAAAKqqgAAAAqVVVqAAAAAKqAAAAAKlVVWoAAAAAAAAAAAKlVVVqgAAAAAAAAAACpVVVWoAAAAAAAAAACpVVVVagAAAAAAAAACqVVVVWqAAAAAAAAACqVVVVVaqAAAAAAAACqVVVVVVqoAAAAAAACqVVVVVVVqoAAAAAAKqVVVVVVVWqqAAAACqqVVVVVVVVWqqqqqqqpVVVVVVVVVWqqqqqqlVVVVVVVVVVVqqqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqlVVVVqqqqqqqqqqqqqqVVVqqqqqqqqqqqqqqpVVqqAAAAAAAAAAAKqlVqgAAAAAAAAAAAACqVagAAAAAAAAAAAAAKlWoAAAAAAAAAAAAAAqVqAAAAAAAAAAAAAAKlagAAAAAAAAAAAAACpWoAAAAAAAAAAAAAAqVqAAAAAAAAAAAAAAKlagAAAAAAAAAAAAACpWqAAAAAAAAAAAAAAqVaqgAAAAAAAAAAAAqVVqqqqqqqqAAAAAAKlVWqqqqqqqqAAAAACpVVVaqqqqqqAAAAACpVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqgAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAACqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVagAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAAKpVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVWqAAAAAqVVVVVVVVVVqAAAAAqlVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVWoAAAAKpVVVVVVVVVVqAAAACpVVVVVVVVVVqAAAACpVVVVVVVVVVWoAAACqVVVVVVVVVVVqAAACqVVVVVVVVVVVaoAACqVVVVVVVVVVVVqqqqqVVVVVVVVVVVVWqqqqVVVVVVVVVVVVVWqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVqVVVVVVVVVVVVVWqqqqqpVVVVVVVVVVqqqqqqqqlVVVVVVVWqqqqAqqqqlVVVVVVaqoAAAAACqqVVVVVVaqAAAAAAAAKqVVVVVaoAAAAAAAAAqpVVVVaoAAAAAAAAAAqlVVVaoAAAAAAAAAACqVVVaoAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVWoAAAAAAAAAAAAKlVVqAAAAAAAAAAAAAqVVagAAAACqqAAAAAKlVagAAAAKqqqAAAACpVWoAAAAKqqqoAAAAqVVqAAAAKpVVqAAAAKlVagAAACpVVWoAAAAqVWoAAACpVVVqAAAAKlVqAAAAqVVVagAAAKlVagAAAKlVVWoAAACpVWoAAACpVVVqAAAAqVVagAAAKlVVagAAAKlVWoAAACqVVagAAACpVVqAAAAKqqqoAAACpVVWoAAAAqqqoAAAAqVVVqgAAAAqqgAAAAqVVVWqAAAAAAAAAAAqlVVVaoAAAAAAAAAAqlVVVVqAAAAAAAAAAqlVVVVWoAAAAAAAAAKlVVVVVqAAAAAAAAAKlVVVVVqAAAAAAAAAAKlVVVVqgAAAAAAAAAKqVVVWqgAAAAAAAAAAKpVVVqgAAAAAAAAAAAqlVVqAAAAAAAAAAAACqVVqgAAAAKqqAAAAAKlVagAAAAqqqqAAAAAqVWoAAAAqqqqqAAAAKlWoAAAAqlVVqoAAACpVqAAAAKlVVVqAAAAKlagAAAKlVVVWoAAACpWoAAACpVVVVqAAAAqVqAAACpVVVVagAAAKlqAAAAKlVVVWoAAACpagAAACpVVVVqAAAAqVqAAAAKlVVVqAAAAKlagAAACqVVWqgAAACpWoAAAAKqqqqgAAAAqVqAAAAAqqqqAAAAAKlagAAAAAqqoAAAAAKlVqAAAAAAAAAAAAACpVagAAAAAAAAAAAACpVVqAAAAAAAAAAAAAqVVaoAAAAAAAAAAAAqVVVqgAAAAAAAAAAAqlVVWqAAAAAAAAAACqlVVVaqAAAAAAAAACqlVVVVqqAAAAAAAAKqVVVVVVqqoAAAAAKqqVVVVVVVqqqqqqqqqpVVVVVVVVqqqqqqqqlVVVVVVVVVWqqqqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVValVVVVVVVVVVVVVWqqqqqVVVVVVVVVVVqqqqqqqVVVVVVVVVWqqqgKqqqVVVVVVVVWqoAAAAAqqVVVVVVVaqAAAAAAAqpVVVVVVaqAAAAAAAAqpVVVVVaoAAAAAAAACqVVVVVWoAAAAAAAAACpVVVVWoAAAAAAAAAAqlVVVWqAAAAAAAAAACqVVVVqAAAAAAAAAAAKpVVVqAAAAAAAAAAAAqVVVagAAAAKqgAAAACpVVagAAAAqqqgAAAAqVVWoAAAAKqqoAAAACpVVqAAAAKlVagAAAAqVVqAAAAKpVWqAAAAKlVagAAACpVVagAAACpVWoAAACpVVVqAAAAKlVqAAAAqVVVagAAACpVagAAAKlVVWoAAAAqVWoAAACpVVVqAAAACpVqAAAAqVVVagAAAAqVagAAACpVVagAAAAKlWoAAAAqVVWoAAAACpVqAAAACpVWoAAAAAqVagAAAAqlWqAAAAAKlVqAAAACqqqAAAAACpVagAAAAKqqAAAAAAqVWoAAAAAKoAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVagAAAAAAAAAAAAKlVWqAAAAAAAAAAAACpVVagAAAAAACAAAAAqVVVqAAAAAAKiAAAAKlVVaqAAAAAKigAAACpVVVqoAAAAKpiAAAAqVVVVqoAAAqpagAAAKlVVVWqqqqqpagAAACpVVVVWqqqqlWoAAACpVVVVVWqqqVVqAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVqgAAACpVVVVVVVVVVqgAAACpVVVaqlVVVVqgAAAAqVVVqqqqVVWqgAAAAKlVVqqqqqqqqgAAAAKlVVagAKqqqqAAAAACpVVagAAAqqoAAAAACpVVWoAAAAAAAAAAACqVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAqVVVWoAAAAAAAAAAAqlVVVqAAAAAAAAAAAqlVVVagAAAAAAAAAAqlVVVWoAAAAAAAAACqlVVVVagAAAAAAAACqlVVVVWqoAAAAAAAqqVVVVVVaqqAAAAAKqqVVVVVVVaqqqqqqqqpVVVVVVVVWqqqqqqqVVVVVVVVVVVqqqqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, +{width : 25 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqlVVVVWqqqlVVVWqqqqlVVWqgAKqVVWqAAAKlVWqAAAAqVVqAAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAACpVWqAAAAqVVagAAAqlVVqgAAqlVVaqqqqlVVVaqqqlVVVVaqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqVVVVVqqqqVVVWqqqqpVVVqgAAqlVVqAAACqVVqgAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAqVVagAAAKlVWqAAAKlVVaqACqpVVVqqqqpVVVWqqqlVVVVVqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV "))} +]; + +var drawTimeout, savedOptions; + +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + +function draw() { + var x = g.getWidth()/2; + var y = g.getHeight()/2-31; + //print(y); + g.reset(); + var date = new Date(); + var timeStr = require("locale").time(date,1); + // draw time + g.clearRect(0,y,g.getWidth()-1,y+73+24+18); + //use custom font spacing for overlapping digits + g.drawImage(digits[parseInt(date.getHours()/10)],0,y); + g.drawImage(digits[parseInt(date.getHours()%10)],37,y); + g.drawImage(digits[10],74,y); + g.drawImage(digits[parseInt(date.getMinutes()/10)],86,y); + g.drawImage(digits[parseInt(date.getMinutes()%10)],123,y); + // Draw day of the week + y += 73; + g.setFontAlign(0,-1).setFont("Teletext10x18Ascii"); + g.drawString(require("locale").dow(date).toUpperCase(),x,y); + // Draw Date + y += 24; + g.drawString(require('locale').date(new Date(),1),x,y); + queueDraw(); +} + +require("FontTeletext10x18Ascii").add(Graphics); +Bangle.setUI("clock"); +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +draw(); From f30ec77662ff9d80f4470c1608529a6729d6d4ec Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 09:58:14 +0100 Subject: [PATCH 020/217] Delete apps/miniclock directory --- apps/miniclock/app-icon.js | 1 - apps/miniclock/app.js | 55 -------------------------------------- 2 files changed, 56 deletions(-) delete mode 100644 apps/miniclock/app-icon.js delete mode 100644 apps/miniclock/app.js diff --git a/apps/miniclock/app-icon.js b/apps/miniclock/app-icon.js deleted file mode 100644 index 38b19c29a..000000000 --- a/apps/miniclock/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("2GwgI74HIUB/4AC8AWNwAVTgNAAQIYBAANgCZUcuEAkAVRkWYgMQCqWokEICqMe1ERFaUC5EIK6RtBgqDGvyZMgSvCCqLbDFc2AK6mAQanwV6mIgDbTxEBFaUiFYJXSj3wgKDC/4AC8CvMQoIVUAH4A/AH4A/AH4A/AH4A/AD0eAokDwAECvgRF//ggEP//8BIn+AYMfBQsD//4BwIAB4AJBg4FDAYIVEh/AvkHBAMPGAImB4EH+EDEQN/Coc/gEcBwIGBBoMAnwCB/kHBQMPLosOBwUAvwCBvAYCh5SCGwUB+AVBBwQ+BBIYnBEAQHDDIUGAwRqBwEBEYUH3gKCEgRFCgwOCVYStDgYgDnhsDCoJsCG4KABCoQ9DPoLKECoxoCAoI2DhwCBDgQVEgHgBgQbCYIaGEK4gVBHARdCPAYGBDgQVFuAVIAgIXBCoVwCok4EgPggZDB/4VHvEP/4jBmAVBj/wHgQKBLgMGCoc8///JAMwmDvBvAVBg+D4AVGj/8SIUwI4M4ngOBg6GCCosPBAIVEOAIOBAIIMCCogDCsDkBDANwhizBAIIVCNogVEv4VBsEOCotgCoNUCosB/IVDhkAAIIVBuEDwP8CorkBCoUGCo/n9gVDQYK6BMoYTBIIcwZQOMCof/MAQVDK4q5BvweBCoLbCCoanBCYMGV4QVBJAQVBj4JBEYYVBYoUDCpE8AwIVI4+ACo94AwYVDI4MD/4LBCozsBCpEA/wVIbIJBGga6CAAM4CpJ7CCoRUBCrEYCpEPCogECFZJtCg7xCCoXgCpq8BCocA+AVDYpMB+AVEXIQVInwKC/4VED4MBqAVHh4SCn4VEjxgBLQIVGg//J4M4CoPgD4WAh+wCo4AB/CkBCokH+F+UwJ8CCoqMBjg5BsA1D/gTBCpDOBCosGn/gFYLUCCo8MBoUOfAIKBDoQVJEgI5BCozgCCoUCCoaGCuALBAIMBOoQVEj4GBnDbBMYM4jkAvxvB4AXCj/8O4X+TIMD4ClBnDZB//gj+ACoSJBCoP4v4+Bg+ATgMf/EB84hCgIXBXwIABCQLxBg6yCj/wGIN/CAMDFoYbBLoSICKgIABGIIEEC4IVCDISSCCogDCAgQVEEAaqEXQgICgYFCCoigBCpEeGQgVGBQYVET4IrEK4ppDCol4CpaVBNoz6BCob3DB4UHAwUPPgYHBQYbuBAYUPAIIGCj4vDAYI2DgF8AYU/wEeAwU9F4UfFALXEA4f/8E8j41C/gDBvwRC/4ADHYMf+P9/EP8EH+F/wEHJ4d/CwgABwF/+EDAoPAh4DBHoYAEj4tCPwV//xJCAYIA/AH4A/AHMP/n/gfw/kA4AABCsMMCAfDCssP4H/CQXDmEzNpoVUIIgVB+AHBCs3DhgABCso+B/gVlAFg6EdxgVWdwPAmEMgfwgYCBn4CBOBAVUgY5BCoM8SoMDAQPD5kMngVchnAgYWB5gGBHYMM5nAAQIVcCQLwCNoQCC5j3BQZIVVmBCBH4SdBgAWBZ4oVYh/8CoX/54FBBAM/AQLRBCracDJAgOICrgA/AH4A/AH4A/AH4A/AH4AJA")) diff --git a/apps/miniclock/app.js b/apps/miniclock/app.js deleted file mode 100644 index 9fdbab985..000000000 --- a/apps/miniclock/app.js +++ /dev/null @@ -1,55 +0,0 @@ -const digits = [ -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVqlVVVVVVVVVVVVVaqqqqpVVVVVVVVVVWqqqqqqqVVVVVVVVVWqqqAKqqpVVVVVVVVaqgAAAACqpVVVVVVVaqAAAAAACqlVVVVVVaoAAAAAAACqVVVVVVaoAAAAAAAAKpVVVVVaoAAAAAAAAAqlVVVVaoAAAAAAAAACqVVVVWoAAAAAAAAAAKlVVVWoAAAAAAAAAAAqVVVWqAAAAAAAAAAAKpVVVqAAAAACgAAAAAqVVVagAAAAKqgAAAAKlVVagAAAAqqqgAAAAqVVWoAAAAKpaoAAAAKlVVqAAAAKlVagAAAAqVVqAAAACpVWoAAAAKlVagAAACpVVagAAACpVWoAAAAqVVWoAAAAqVVqAAAAqVVVagAAAKlVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVagAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVWoAAACpVqAAAAKlVVVqAAAAqVagAAAKlVVVagAAAKlWoAAACpVVVWoAAACpVqAAAAqVVVVqAAAAqVagAAAKlVVVagAAAKlWoAAACpVVVWoAAACpVqAAAAqVVVVqAAAAqVagAAACpVVVagAAAKlWoAAAAqVVVWoAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlWoAAAAqVVVagAAACpVqAAAAKlVVWoAAAAqVagAAACpVVVqAAAAKlVqAAAAqVVVagAAACpVagAAACpVVWoAAACpVWoAAAAqVVWoAAAAqVVqAAAAKlVVqAAAAKlVagAAAAqVVqAAAAKlVVqAAAAKpVqgAAACpVVagAAAAqqqgAAAAqVVVqAAAACqqgAAAAKlVVagAAAACqAAAAAKlVVWoAAAAAAAAAAACpVVVagAAAAAAAAAACpVVVWqAAAAAAAAAACqVVVVagAAAAAAAAAAqVVVVVqAAAAAAAAAAqVVVVVaoAAAAAAAAAqlVVVVVqgAAAAAAAAqlVVVVVWqgAAAAAAAqlVVVVVVaqAAAAAACqlVVVVVVVaqgAAAAqqlVVVVVVVVqqqqqqqqVVVVVVVVVVqqqqqqpVVVVVVVVVVVaqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVaqqqVVVVVVVVVVVVVqqqqqVVVVVVVVVVVWqqqqqpVVVVVVVVVVaqgAAAqVVVVVVVVVVaqAAAACpVVVVVVVVVqoAAAAAqVVVVVVVVVqoAAAAAKlVVVVVVVWqgAAAAACpVVVVVVVaqgAAAAAAqVVVVVVVaqAAAAAAAKlVVVVVVaoAAAAAAACpVVVVVVqoAAAAAAAAqVVVVVVaoAAAAAAAAKlVVVVVagAAAAAAAACpVVVVVWoAAAAAAAAAqVVVVVVqAAAAAAAAAKlVVVVVagAAAAAAAACpVVVVVWoAAAAAAAAAqVVVVVVqAAAAAAAAAKlVVVVVagAAAgAAAACpVVVVVWoAACogAAAAqVVVVVVagAKqoAAAAKlVVVVVWqqqqagAAACpVVVVVVaqqpWoAAAAqVVVVVVVaqlVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVaqqqAAAAAqqqpVVVWqqqqgAAAAKqqqpVVWqqqqAAAAAAKqqqlVVqgAAAAAAAAAAACpVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVWoAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWqAAAAAAAAAAAACqVVaqqqqqqqqqqqqqqVVVqqqqqqqqqqqqqqVVVWqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVWqVVVVVVVVVVVVVaqqqqqlVVVVVVVVVaqqqqqqqqVVVVVVVVqqqqoAqqqqVVVVVVWqqgAAAAAKqpVVVVVaqgAAAAAAAAqpVVVVaqAAAAAAAAACqlVVVWoAAAAAAAAAACpVVVWoAAAAAAAAAAAKlVVVqAAAAAAAAAAACqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAAqVVWoAAAKqqAAAAAAKlVVagACqqqqAAAAACpVVWqqqqqqqqAAAAAqVVVaqqqlVVqgAAAAKlVVVaqpVVVVqAAAACpVVVVVVVVVVagAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVqAAAACpVVVVVVVVVVagAAAAqVVVVVVVVVVagAAAAqVVVVVVVVVVaoAAAAKlVVVVVVVVVaoAAAACpVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACqVVVVVVVVVWoAAAAAqVVVVVVVVVWqAAAAAqVVVVVVVVVWqAAAAAqlVVVVVVVVWqAAAAAKlVVVVVVVVWqAAAAAKlVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAKpVVVVVVVVWqAAAAAqpVVVVVVVVWqAAAAACpVVVVVVVVWqAAAAAKlVVVVVVVVVqAAAAAACqqqqpVVVVqAAAAAAKqqqqqpVVVqgAAAAAAKqqqqqpVVagAAAAAAAAAAACqVVWoAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVWoAAAAAAAAAAAACpVVqAAAAAAAAAAAAAqVVaoAAAAAAAAAAAAqVVVqqqqqqqqqqqqqqlVVWqqqqqqqqqqqqqlVVVaqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVapVVVVVVVVVVVVVaqqqqqlVVVVVVVVVaqqqqqqqqVVVVVVVWqqqqgCqqqpVVVVVVaqqgAAAAAKqpVVVVVaqgAAAAAAACqpVVVVaoAAAAAAAAACqlVVVaoAAAAAAAAAACqVVVWoAAAAAAAAAAAKlVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAAqVVVqAAAKqqgAAAAAKlVVaoAKqqqqgAAAACpVVVqqqqqqqqAAAAAqVVVWqqqlVVaoAAAAKlVVVaqlVVVVqAAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVaoAAAAqVVVVVVVVaqqqAAAAKlVVVVVVaqqqoAAAAKlVVVVVVaqqqgAAAAKpVVVVVVaqgAAAAAAKpVVVVVVaoAAAAAAAKpVVVVVVWoAAAAAAACpVVVVVVVqAAAAAAACpVVVVVVVagAAAAAAAqVVVVVVVWoAAAAAAACpVVVVVVVqAAAAAAAAqpVVVVVVagAAAAAAACqlVVVVVWoAAAAAAAACqVVVVVVaoAAAAAAAAKpVVVVVWqqqqgAAAAAqVVVVVVWqqqqgAAAACpVVVVVVaqqqqgAAAAqVVVVVVVVVVaqAAAAKlVVVVVVVVVVagAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVlVVVVVVqAAAAKlVVaqqVVVVVqAAAACpVVaqqqpVVWqgAAAAqVVaqKqqqqqqgAAAAKlVaoAAqqqqqAAAAACpVaoAAACqqoAAAAACpVWoAAAAAAAAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAAKpVVqAAAAAAAAAAAACpVVagAAAAAAAAAAAKpVVVqAAAAAAAAAAAKqVVVaqAAAAAAAAAAKpVVVVqqAAAAAAAACqpVVVVVqqoAAAAACqqpVVVVVWqqqqqqqqqqlVVVVVVVqqqqqqqqpVVVVVVVVVWqqqqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVaqqlVVVVVVVVVVVVVqqqqlVVVVVVVVVVVVqqqqqVVVVVVVVVVVVqgAAKpVVVVVVVVVVVqgAAAqVVVVVVVVVVVqgAAACpVVVVVVVVVVqgAAAAqVVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVaoAAAAAqVVVVVVVVVWoAAAAAKlVVVVVVVVWoAAAAACpVVVVVVVVWqAAAAAAqVVVVVVVVVqAAAAAAKlVVVVVVVVqAAAAAACpVVVVVVVVqgAAAAAAqVVVVVVVVagAAAAAAKlVVVVVVVagAAAAAACpVVVVVVVaoAAAAAAAqVVVVVVVaoAAAAAAAKlVVVVVVWoAAAAAAACpVVVVVVWoAAAAAAAAqVVVVVVWqAAAAAAAAKlVVVVVVqAAAAAAAACpVVVVVVqAAAAAAAAAqVVVVVVqgAAAAAAAAKlVVVVVagAAAgAAAACpVVVVVagAACogAAAAqVVVVVaoAACqoAAAAKlVVVVWoAAAqagAAACpVVVVWoAAAqWoAAAAqVVVVWqAAAqlqAAAAKlVVVVqAAAKlagAAACpVVVVqAAAKlWoAAAAqVVVVqgAAKpVqAAAAKlVVVagAACpVagAAACpVVVagAACpVWoAAAAqVVVaoAAAqVVqAAAAKlVVWoAAACqqqAAAAAqpVVqAAAAqqqgAAAAKqpVqAAAAAqqAAAAAAKqpagAAAAAAAAAAAAACqWoAAAAAAAAAAAAAACpqAAAAAAAAAAAAAAAqagAAAAAAAAAAAAAAKmoAAAAAAAAAAAAAACpqAAAAAAAAAAAAAAAqagAAAAAAAAAAAAAAKlqAAAAAAAAAAAAAACpaqAAAAAAAAAAAAACpVqqqqqqqgAAAAACqqVVqqqqqqqgAAAAKqqVVVqqqqqqoAAAACqpVVVVVVVVVagAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAACpVVVVVVVVVVVqAAACpVVVVVVVVVVVagAAAqVVVVVVVVVVVVqgACqVVVVVVVVVVVVaqqqqlVVVVVVVVVVVVaqqqVVVVVVVVVVVVVVqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVaqqqqqqqqpVVVVVVaqqqqqqqqqqqlVVVVaqqqqqqqqqqqqVVVVaqgAAAAAAAACqpVVVaoAAAAAAAAAAAqlVVWoAAAAAAAAAAACpVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVVqAAAAAAAAAAAAKlVVagAAAAAAAAAAAKlVVWoAAAAAAAAAAACpVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAKqVVVWoAAAACqqqqqqqlVVVqAAAAKqqqqqqqVVVVagAAACqqqqqqlVVVVWoAAACpVVVVVVVVVVVqAAAAqVVVVVVVVVVVagAAAKlVVVVVVVVVVWoAAACpVVVVVVVVVVVqAAAAqVVVVVVVVVVVagAAACqqqqqVVVVVVWoAAAAqqqqqqlVVVVVqAAAAAqqqqqqlVVVVagAAAAAAAAAqqVVVVWoAAAAAAAAAAKpVVVVqAAAAAAAAAAAqlVVVagAAAAAAAAAACqVVVWoAAAAAAAAAAAKpVVVqAAAAAAAAAAAAqlVVagAAAAAAAAAAACpVVWoAAAAAAAAAAAAKlVVqAAAAAAAAAAAACpVVagAAAACoAAAAAAKlVWoAAACqqqAAAAACpVVqAAAKqqqqAAAAAqVVWqgqqqpWqoAAAAKlVVqqqqpVVVqAAAACpVVWqqqlVVVWoAAAAqVVVVaVVVVVVqAAAACpVVVVVVVVVVWoAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAAKlVVWqpVVVVVagAAACpVVaqqqVVVVaoAAAAqVVaqqqqlVVqoAAAAKlVWoACqqqqqoAAAACpVWoAAAqqqqgAAAAAqVVqAAAAKqqAAAAAAqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAACpVVqAAAAAAAAAAAACpVVagAAAAAAAAAAACqVVVqAAAAAAAAAAACqVVVaoAAAAAAAAAAKqVVVVqgAAAAAAAAAKqVVVVWqoAAAAAAAAqpVVVVVaqqgAAAAAqqpVVVVVVaqqqqqqqqqlVVVVVVVWqqqqqqqqVVVVVVVVVVaqqqqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVqVVVVVVVVVVVVVVqqqqqpVVVVVVVVVVqqqqqqqqVVVVVVVVWqqqqAqqqqlVVVVVVWqqAAAAACqqlVVVVVaqAAAAAAAAqpVVVVVaqAAAAAAAAAKlVVVVaoAAAAAAAAACqVVVVqoAAAAAAAAAAKlVVVaoAAAAAAAAAACpVVVagAAAAAAAAAAAqVVVaoAAAAAAAAAAAKlVVaoAAAAAAAAAAACpVVWoAAAAAAAAAAAAqVVWoAAAAACqqqAAAqVVVqAAAAAKqqqqoAqlVVqAAAAAqqqqqqqqlVVagAAAAqpVVVqqqlVVagAAAAqlVVVVWqVVVWoAAAAqlVVVVVVVVVVqAAAAKlVVVVVVVVVVagAAAKlVVVVVVVVVVagAAACpVaqqqVVVVVWoAAAAqVqqqqqVVVVVqAAAAqWqqqqqqVVVVagAAAImqgAAAqpVVVWoAAAAoqAAAAAqlVVVqAAAAIqAAAAACqlVVqAAAAAIAAAAAAKpVVagAAAAAAAAAAAAKlVWoAAAAAAAAAAAACqVVqAAAAAAAAAAAAAKlVagAAAAAAAAAAAAAqVWoAAAAAAAAAAAAAKlVqAAAAAACqgAAAACpVagAAAAAKqqgAAAAKlWoAAAAAKqqqAAAACpVagAAAACpVaoAAAAqVWoAAAACpVVqAAAAKlVqAAAAAqVVWoAAACpVagAAAAqVVVqAAAAKlWoAAAAKlVVagAAACpVqAAAACpVVWoAAAAqVagAAAAqVVVqAAAAKlVqAAAAKlVVagAAAKlVagAAACpVVWoAAACpVWoAAAAKlVVqAAAAqVVagAAACpVVqAAAAKlVWoAAAAKlVqgAAACpVVqAAAACqqqgAAAAqVVWoAAAAKqqgAAAAqVVVqAAAAAKqAAAAAKlVVWoAAAAAAAAAAAKlVVVqgAAAAAAAAAACpVVVWoAAAAAAAAAACpVVVVagAAAAAAAAACqVVVVWqAAAAAAAAACqVVVVVaqAAAAAAAACqVVVVVVqoAAAAAAACqVVVVVVVqoAAAAAAKqVVVVVVVWqqAAAACqqVVVVVVVVWqqqqqqqpVVVVVVVVVWqqqqqqlVVVVVVVVVVVqqqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqlVVVVqqqqqqqqqqqqqqVVVqqqqqqqqqqqqqqpVVqqAAAAAAAAAAAKqlVqgAAAAAAAAAAAACqVagAAAAAAAAAAAAAKlWoAAAAAAAAAAAAAAqVqAAAAAAAAAAAAAAKlagAAAAAAAAAAAAACpWoAAAAAAAAAAAAAAqVqAAAAAAAAAAAAAAKlagAAAAAAAAAAAAACpWqAAAAAAAAAAAAAAqVaqgAAAAAAAAAAAAqVVqqqqqqqqAAAAAAKlVWqqqqqqqqAAAAACpVVVaqqqqqqAAAAACpVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqgAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAACqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVagAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAAKpVVVVVVVVVaoAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVWqAAAAAqVVVVVVVVVVqAAAAAqlVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVagAAAACpVVVVVVVVVWoAAAACpVVVVVVVVVWoAAAAAqVVVVVVVVVVqAAAAAqVVVVVVVVVVqAAAAAKlVVVVVVVVVagAAAAKlVVVVVVVVVWoAAAAKpVVVVVVVVVVqAAAACpVVVVVVVVVVqAAAACpVVVVVVVVVVWoAAACqVVVVVVVVVVVqAAACqVVVVVVVVVVVaoAACqVVVVVVVVVVVVqqqqqVVVVVVVVVVVVWqqqqVVVVVVVVVVVVVWqqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVqVVVVVVVVVVVVVWqqqqqpVVVVVVVVVVqqqqqqqqlVVVVVVVWqqqqAqqqqlVVVVVVaqoAAAAACqqVVVVVVaqAAAAAAAAKqVVVVVaoAAAAAAAAAqpVVVVaoAAAAAAAAAAqlVVVaoAAAAAAAAAACqVVVaoAAAAAAAAAAAKlVVWoAAAAAAAAAAAAqVVWoAAAAAAAAAAAAKlVVqAAAAAAAAAAAAAqVVagAAAACqqAAAAAKlVagAAAAKqqqAAAACpVWoAAAAKqqqoAAAAqVVqAAAAKpVVqAAAAKlVagAAACpVVWoAAAAqVWoAAACpVVVqAAAAKlVqAAAAqVVVagAAAKlVagAAAKlVVWoAAACpVWoAAACpVVVqAAAAqVVagAAAKlVVagAAAKlVWoAAACqVVagAAACpVVqAAAAKqqqoAAACpVVWoAAAAqqqoAAAAqVVVqgAAAAqqgAAAAqVVVWqAAAAAAAAAAAqlVVVaoAAAAAAAAAAqlVVVVqAAAAAAAAAAqlVVVVWoAAAAAAAAAKlVVVVVqAAAAAAAAAKlVVVVVqAAAAAAAAAAKlVVVVqgAAAAAAAAAKqVVVWqgAAAAAAAAAAKpVVVqgAAAAAAAAAAAqlVVqAAAAAAAAAAAACqVVqgAAAAKqqAAAAAKlVagAAAAqqqqAAAAAqVWoAAAAqqqqqAAAAKlWoAAAAqlVVqoAAACpVqAAAAKlVVVqAAAAKlagAAAKlVVVWoAAACpWoAAACpVVVVqAAAAqVqAAACpVVVVagAAAKlqAAAAKlVVVWoAAACpagAAACpVVVVqAAAAqVqAAAAKlVVVqAAAAKlagAAACqVVWqgAAACpWoAAAAKqqqqgAAAAqVqAAAAAqqqqAAAAAKlagAAAAAqqoAAAAAKlVqAAAAAAAAAAAAACpVagAAAAAAAAAAAACpVVqAAAAAAAAAAAAAqVVaoAAAAAAAAAAAAqVVVqgAAAAAAAAAAAqlVVWqAAAAAAAAAACqlVVVaqAAAAAAAAACqlVVVVqqAAAAAAAAKqVVVVVVqqoAAAAAKqqVVVVVVVqqqqqqqqqpVVVVVVVVqqqqqqqqlVVVVVVVVVWqqqqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 52 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVValVVVVVVVVVVVVVWqqqqqVVVVVVVVVVVqqqqqqqVVVVVVVVVWqqqgKqqqVVVVVVVVWqoAAAAAqqVVVVVVVaqAAAAAAAqpVVVVVVaqAAAAAAAAqpVVVVVaoAAAAAAAACqVVVVVWoAAAAAAAAACpVVVVWoAAAAAAAAAAqlVVVWqAAAAAAAAAACqVVVVqAAAAAAAAAAAKpVVVqAAAAAAAAAAAAqVVVagAAAAKqgAAAACpVVagAAAAqqqgAAAAqVVWoAAAAKqqoAAAACpVVqAAAAKlVagAAAAqVVqAAAAKpVWqAAAAKlVagAAACpVVagAAACpVWoAAACpVVVqAAAAKlVqAAAAqVVVagAAACpVagAAAKlVVWoAAAAqVWoAAACpVVVqAAAACpVqAAAAqVVVagAAAAqVagAAACpVVagAAAAKlWoAAAAqVVWoAAAACpVqAAAACpVWoAAAAAqVagAAAAqlWqAAAAAKlVqAAAACqqqAAAAACpVagAAAAKqqAAAAAAqVWoAAAAAKoAAAAAAKlVagAAAAAAAAAAAACpVWoAAAAAAAAAAAAAqVVagAAAAAAAAAAAAKlVWqAAAAAAAAAAAACpVVagAAAAAACAAAAAqVVVqAAAAAAKiAAAAKlVVaqAAAAAKigAAACpVVVqoAAAAKpiAAAAqVVVVqoAAAqpagAAAKlVVVWqqqqqpagAAACpVVVVWqqqqlWoAAACpVVVVVWqqqVVqAAAAqVVVVVVVVVVVqAAAAKlVVVVVVVVVVqgAAACpVVVVVVVVVVqgAAACpVVVaqlVVVVqgAAAAqVVVqqqqVVWqgAAAAKlVVqqqqqqqqgAAAAKlVVagAKqqqqAAAAACpVVagAAAqqoAAAAACpVVWoAAAAAAAAAAACqVVVqAAAAAAAAAAAAqVVVagAAAAAAAAAAAqVVVWoAAAAAAAAAAAqlVVVqAAAAAAAAAAAqlVVVagAAAAAAAAAAqlVVVWoAAAAAAAAACqlVVVVagAAAAAAAACqlVVVVWqoAAAAAAAqqVVVVVVaqqAAAAAKqqVVVVVVVaqqqqqqqqpVVVVVVVVWqqqqqqqVVVVVVVVVVVqqqqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU= "))}, -{width : 25 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqlVVVVWqqqlVVVWqqqqlVVWqgAKqVVWqAAAKlVWqAAAAqVVqAAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAACpVWqAAAAqVVagAAAqlVVqgAAqlVVaqqqqlVVVaqqqlVVVVaqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqVVVVVqqqqVVVWqqqqpVVVqgAAqlVVqAAACqVVqgAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAqVVagAAAKlVWqAAAKlVVaqACqpVVVqqqqpVVVWqqqlVVVVVqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV "))} -]; - -var drawTimeout, savedOptions; - -function queueDraw() { - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - draw(); - }, 60000 - (Date.now() % 60000)); -} - -function draw() { - var x = g.getWidth()/2; - var y = g.getHeight()/2-31; - //print(y); - g.reset(); - var date = new Date(); - var timeStr = require("locale").time(date,1); - // draw time - g.clearRect(0,y,g.getWidth()-1,y+73+24+18); - //use custom font spacing for overlapping digits - g.drawImage(digits[parseInt(date.getHours()/10)],0,y); - g.drawImage(digits[parseInt(date.getHours()%10)],37,y); - g.drawImage(digits[10],74,y); - g.drawImage(digits[parseInt(date.getMinutes()/10)],86,y); - g.drawImage(digits[parseInt(date.getMinutes()%10)],123,y); - // Draw day of the week - y += 73; - g.setFontAlign(0,-1).setFont("Teletext10x18Ascii"); - g.drawString(require("locale").dow(date).toUpperCase(),x,y); - // Draw Date - y += 24; - g.drawString(require('locale').date(new Date(),1),x,y); - queueDraw(); -} - -require("FontTeletext10x18Ascii").add(Graphics); -Bangle.setUI("clock"); -g.clear(); -Bangle.loadWidgets(); -Bangle.drawWidgets(); -draw(); From bccac2e2bb9d0ce2b9fd6a8319832c9e2713492c Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:10:37 +0100 Subject: [PATCH 021/217] Update app-icon.js --- apps/contourclock/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/app-icon.js b/apps/contourclock/app-icon.js index 38b19c29a..d7c3d5255 100644 --- a/apps/contourclock/app-icon.js +++ b/apps/contourclock/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("2GwgI74HIUB/4AC8AWNwAVTgNAAQIYBAANgCZUcuEAkAVRkWYgMQCqWokEICqMe1ERFaUC5EIK6RtBgqDGvyZMgSvCCqLbDFc2AK6mAQanwV6mIgDbTxEBFaUiFYJXSj3wgKDC/4AC8CvMQoIVUAH4A/AH4A/AH4A/AH4A/AD0eAokDwAECvgRF//ggEP//8BIn+AYMfBQsD//4BwIAB4AJBg4FDAYIVEh/AvkHBAMPGAImB4EH+EDEQN/Coc/gEcBwIGBBoMAnwCB/kHBQMPLosOBwUAvwCBvAYCh5SCGwUB+AVBBwQ+BBIYnBEAQHDDIUGAwRqBwEBEYUH3gKCEgRFCgwOCVYStDgYgDnhsDCoJsCG4KABCoQ9DPoLKECoxoCAoI2DhwCBDgQVEgHgBgQbCYIaGEK4gVBHARdCPAYGBDgQVFuAVIAgIXBCoVwCok4EgPggZDB/4VHvEP/4jBmAVBj/wHgQKBLgMGCoc8///JAMwmDvBvAVBg+D4AVGj/8SIUwI4M4ngOBg6GCCosPBAIVEOAIOBAIIMCCogDCsDkBDANwhizBAIIVCNogVEv4VBsEOCotgCoNUCosB/IVDhkAAIIVBuEDwP8CorkBCoUGCo/n9gVDQYK6BMoYTBIIcwZQOMCof/MAQVDK4q5BvweBCoLbCCoanBCYMGV4QVBJAQVBj4JBEYYVBYoUDCpE8AwIVI4+ACo94AwYVDI4MD/4LBCozsBCpEA/wVIbIJBGga6CAAM4CpJ7CCoRUBCrEYCpEPCogECFZJtCg7xCCoXgCpq8BCocA+AVDYpMB+AVEXIQVInwKC/4VED4MBqAVHh4SCn4VEjxgBLQIVGg//J4M4CoPgD4WAh+wCo4AB/CkBCokH+F+UwJ8CCoqMBjg5BsA1D/gTBCpDOBCosGn/gFYLUCCo8MBoUOfAIKBDoQVJEgI5BCozgCCoUCCoaGCuALBAIMBOoQVEj4GBnDbBMYM4jkAvxvB4AXCj/8O4X+TIMD4ClBnDZB//gj+ACoSJBCoP4v4+Bg+ATgMf/EB84hCgIXBXwIABCQLxBg6yCj/wGIN/CAMDFoYbBLoSICKgIABGIIEEC4IVCDISSCCogDCAgQVEEAaqEXQgICgYFCCoigBCpEeGQgVGBQYVET4IrEK4ppDCol4CpaVBNoz6BCob3DB4UHAwUPPgYHBQYbuBAYUPAIIGCj4vDAYI2DgF8AYU/wEeAwU9F4UfFALXEA4f/8E8j41C/gDBvwRC/4ADHYMf+P9/EP8EH+F/wEHJ4d/CwgABwF/+EDAoPAh4DBHoYAEj4tCPwV//xJCAYIA/AH4A/AHMP/n/gfw/kA4AABCsMMCAfDCssP4H/CQXDmEzNpoVUIIgVB+AHBCs3DhgABCso+B/gVlAFg6EdxgVWdwPAmEMgfwgYCBn4CBOBAVUgY5BCoM8SoMDAQPD5kMngVchnAgYWB5gGBHYMM5nAAQIVcCQLwCNoQCC5j3BQZIVVmBCBH4SdBgAWBZ4oVYh/8CoX/54FBBAM/AQLRBCracDJAgOICrgA/AH4A/AH4A/AH4A/AH4AJA")) +var img = require("heatshrink").decompress(atob("mEwghC/AH4A/AH4A5jHs51wlfs7ncqEAg/N5nc7cwvgLB7uACwME7tgg/B9cwgEJ9EA1wOChfs6wEBg3bAYOuyADB5ugG4VeqHTHwe9iAECjughYMD7pCB1UwhPA6sEqpMB40AnQLBgnQhhBBAAP5gEuxfAgHUz3e3ZMBA4ObvYDBC4NwxQ4B+oLBgXAhPt9EhgFtgHDgGZggXCg/t5sggH2gF8g3An1Qr1ggGcgG6gF+52QKYJEBhgXB/RoB71wzcAhVwgvmgFfQ4SDBEIIXDO4MAIQN9BINwrypB5oqCgFsCYIXD5nBAwMBju13siOwML/1AC4U82AXE4HNwWe6kD32yjoOB3vlgGt5uwgYFBC4kH5m28cA3dycwML65GB6MB6EA1MArWuC4Pb7eFxuwhfa7wuBhurfQI5B8C3Bg/qu4yB11Y3e3QYMgxoJBg94FYOd5obB48LSwenAYUA1cADYIAC7IEDg3ghQXDzswAYMp90QDIIACp2hAgWOZIPs5gAB5/8zOc9lb9fv7gLC53u3OZ3vWEIYA/AH4A/AH4A/AH4AsA=")) From 588e55a3f5d1575415f4e50b8f9af9d0c06ca0a3 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:10:57 +0100 Subject: [PATCH 022/217] Add files via upload --- apps/contourclock/contour_apploader.png | Bin 0 -> 15659 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/contourclock/contour_apploader.png diff --git a/apps/contourclock/contour_apploader.png b/apps/contourclock/contour_apploader.png new file mode 100644 index 0000000000000000000000000000000000000000..9e263152c7f43a0c8fb1e1b476ad2f5496c5a9b3 GIT binary patch literal 15659 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 DyUl?1 literal 0 HcmV?d00001 From 0b6b6a60ac343d9352b1269198281d47f164abb5 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:13:31 +0100 Subject: [PATCH 023/217] Delete contour_apploader.png --- apps/contourclock/contour_apploader.png | Bin 15659 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/contourclock/contour_apploader.png diff --git a/apps/contourclock/contour_apploader.png b/apps/contourclock/contour_apploader.png deleted file mode 100644 index 9e263152c7f43a0c8fb1e1b476ad2f5496c5a9b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15659 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 DyUl?1 From 269e3e4831b1d57897f9aa4e3813be55f0ef02cf Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:13:52 +0100 Subject: [PATCH 024/217] Add files via upload --- apps/contourclock/app.png | Bin 0 -> 10662 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/contourclock/app.png diff --git a/apps/contourclock/app.png b/apps/contourclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..4c31cc007a190e93fb4ed970dc0176c2ef56ad4a GIT binary patch literal 10662 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 M07*qoM6N<$f@jW2LjV8( literal 0 HcmV?d00001 From 3b469d305459a8c29950e3b92413f264e642cde4 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:16:40 +0100 Subject: [PATCH 025/217] Update apps.json --- apps.json | 60 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/apps.json b/apps.json index 60de1672f..47022306c 100644 --- a/apps.json +++ b/apps.json @@ -5007,34 +5007,36 @@ ] }, { "id": "circlesclock", - "name": "Circles clock", - "shortName":"Circles clock", - "version":"0.01", - "description": "A clock with circles for different data at the bottom in a probably familiar style", - "icon": "app.png", - "dependencies": {"widpedom":"app"}, - "type": "clock", - "tags": "clock", - "supports" : ["BANGLEJS2"], - "allow_emulator":true, - "readme": "README.md", - "storage": [ - {"name":"circlesclock.app.js","url":"app.js"}, - {"name":"circlesclock.img","url":"app-icon.js","evaluate":true}, - {"name":"circlesclock.settings.js","url":"settings.js"} - ], - "data": [ - {"name":"circlesclock.json"} - ] - }, + "name": "Circles clock", + "shortName":"Circles clock", + "version":"0.01", + "description": "A clock with circles for different data at the bottom in a probably familiar style", + "icon": "app.png", + "dependencies": {"widpedom":"app"}, + "type": "clock", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "allow_emulator":true, + "readme": "README.md", + "storage": [ + {"name":"circlesclock.app.js","url":"app.js"}, + {"name":"circlesclock.img","url":"app-icon.js","evaluate":true}, + {"name":"circlesclock.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"circlesclock.json"} + ] + }, { "id": "contourclock", - "name": "Contour Clock", - "shortName" : "Contour Clock", - "icon": "app.png", - "description": "A Minimalist clockface with large Digits. Looks best with the dark theme", - "tags": "clock", - "storage": [ - {"name":"contourclock.app.js","url":"app.js"}, - {"name":"contourclock.img","url":"app-icon.js","evaluate":true} - ]} + "name": "Contour Clock", + "shortName" : "Contour Clock", + "icon": "app.png", + "description": "A Minimalist clockface with large Digits. Looks best with the dark theme", + "screenshots" : [ { url:"screenshot.png" } ] + "tags": "clock", + "storage": [ + {"name":"contourclock.app.js","url":"app.js"}, + {"name":"contourclock.img","url":"app-icon.js","evaluate":true} + ] + } ] From 808a5f58faf63a97e4d14845346c8227a37f01df Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:17:59 +0100 Subject: [PATCH 026/217] Add files via upload --- apps/contourclock/screenshot.png | Bin 0 -> 15659 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/contourclock/screenshot.png diff --git a/apps/contourclock/screenshot.png b/apps/contourclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9e263152c7f43a0c8fb1e1b476ad2f5496c5a9b3 GIT binary patch literal 15659 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 DyUl?1 literal 0 HcmV?d00001 From 680e24f92f6230c309c5a30b2f9ae2aa7def766c Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:19:43 +0100 Subject: [PATCH 027/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 47022306c..27dee60ca 100644 --- a/apps.json +++ b/apps.json @@ -5032,7 +5032,7 @@ "shortName" : "Contour Clock", "icon": "app.png", "description": "A Minimalist clockface with large Digits. Looks best with the dark theme", - "screenshots" : [ { url:"screenshot.png" } ] + "screenshots" : [{"url":"screenshot.png"}] "tags": "clock", "storage": [ {"name":"contourclock.app.js","url":"app.js"}, From 36898e33fcf03e492210ac0cb488510ff0c17ee0 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:30:48 +0100 Subject: [PATCH 028/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 27dee60ca..59403a294 100644 --- a/apps.json +++ b/apps.json @@ -5032,7 +5032,7 @@ "shortName" : "Contour Clock", "icon": "app.png", "description": "A Minimalist clockface with large Digits. Looks best with the dark theme", - "screenshots" : [{"url":"screenshot.png"}] + "screenshots" : [{"url":"screenshot.png"}], "tags": "clock", "storage": [ {"name":"contourclock.app.js","url":"app.js"}, From 212508b34cd684b98e34b1ab87509d627094097a Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:39:31 +0100 Subject: [PATCH 029/217] Update apps.json --- apps.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps.json b/apps.json index 59403a294..c1e7fc7a0 100644 --- a/apps.json +++ b/apps.json @@ -5030,10 +5030,14 @@ { "id": "contourclock", "name": "Contour Clock", "shortName" : "Contour Clock", + "version":"0.01", "icon": "app.png", "description": "A Minimalist clockface with large Digits. Looks best with the dark theme", "screenshots" : [{"url":"screenshot.png"}], "tags": "clock", + "allow_emulator":true, + "supports" : ["BANGLEJS2"], + "type": "clock", "storage": [ {"name":"contourclock.app.js","url":"app.js"}, {"name":"contourclock.img","url":"app-icon.js","evaluate":true} From 65da3f1233ffb8144e57ee121c15e5a4ae07a844 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:53:38 +0100 Subject: [PATCH 030/217] Update app-icon.js --- apps/contourclock/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/app-icon.js b/apps/contourclock/app-icon.js index d7c3d5255..3cf7105bd 100644 --- a/apps/contourclock/app-icon.js +++ b/apps/contourclock/app-icon.js @@ -1 +1 @@ -var img = require("heatshrink").decompress(atob("mEwghC/AH4A/AH4A5jHs51wlfs7ncqEAg/N5nc7cwvgLB7uACwME7tgg/B9cwgEJ9EA1wOChfs6wEBg3bAYOuyADB5ugG4VeqHTHwe9iAECjughYMD7pCB1UwhPA6sEqpMB40AnQLBgnQhhBBAAP5gEuxfAgHUz3e3ZMBA4ObvYDBC4NwxQ4B+oLBgXAhPt9EhgFtgHDgGZggXCg/t5sggH2gF8g3An1Qr1ggGcgG6gF+52QKYJEBhgXB/RoB71wzcAhVwgvmgFfQ4SDBEIIXDO4MAIQN9BINwrypB5oqCgFsCYIXD5nBAwMBju13siOwML/1AC4U82AXE4HNwWe6kD32yjoOB3vlgGt5uwgYFBC4kH5m28cA3dycwML65GB6MB6EA1MArWuC4Pb7eFxuwhfa7wuBhurfQI5B8C3Bg/qu4yB11Y3e3QYMgxoJBg94FYOd5obB48LSwenAYUA1cADYIAC7IEDg3ghQXDzswAYMp90QDIIACp2hAgWOZIPs5gAB5/8zOc9lb9fv7gLC53u3OZ3vWEIYA/AH4A/AH4A/AH4AsA=")) +require("heatshrink").decompress(atob("mEwghC/AH4A/AH4A5jHs51wlfs7ncqEAg/N5nc7cwvgLB7uACwME7tgg/B9cwgEJ9EA1wOChfs6wEBg3bAYOuyADB5ugG4VeqHTHwe9iAECjughYMD7pCB1UwhPA6sEqpMB40AnQLBgnQhhBBAAP5gEuxfAgHUz3e3ZMBA4ObvYDBC4NwxQ4B+oLBgXAhPt9EhgFtgHDgGZggXCg/t5sggH2gF8g3An1Qr1ggGcgG6gF+52QKYJEBhgXB/RoB71wzcAhVwgvmgFfQ4SDBEIIXDO4MAIQN9BINwrypB5oqCgFsCYIXD5nBAwMBju13siOwML/1AC4U82AXE4HNwWe6kD32yjoOB3vlgGt5uwgYFBC4kH5m28cA3dycwML65GB6MB6EA1MArWuC4Pb7eFxuwhfa7wuBhurfQI5B8C3Bg/qu4yB11Y3e3QYMgxoJBg94FYOd5obB48LSwenAYUA1cADYIAC7IEDg3ghQXDzswAYMp90QDIIACp2hAgWOZIPs5gAB5/8zOc9lb9fv7gLC53u3OZ3vWEIYA/AH4A/AH4A/AH4AsA=")) From 3c343304d88d86cc5acdcf463adffea45ff5c526 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:56:09 +0100 Subject: [PATCH 031/217] Update app.js --- apps/contourclock/app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index 9fdbab985..3ce28f94f 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -12,7 +12,7 @@ const digits = [ {width : 25 , height : 86 , bpp : 2, transparent : 1, buffer : E.toArrayBuffer(atob(" VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqlVVVVWqqqlVVVWqqqqlVVWqgAKqVVWqAAAKlVWqAAAAqVVqAAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAACpVWqAAAAqVVagAAAqlVVqgAAqlVVaqqqqlVVVaqqqlVVVVaqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqVVVVVqqqqVVVWqqqqpVVVqgAAqlVVqAAACqVVqgAAAKlVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAKlVqAAAACpVagAAAAqVWoAAAAqVVagAAAKlVWqAAAKlVVaqACqpVVVqqqqpVVVWqqqlVVVVVqpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV "))} ]; -var drawTimeout, savedOptions; +var drawTimeout; function queueDraw() { if (drawTimeout) clearTimeout(drawTimeout); @@ -25,7 +25,6 @@ function queueDraw() { function draw() { var x = g.getWidth()/2; var y = g.getHeight()/2-31; - //print(y); g.reset(); var date = new Date(); var timeStr = require("locale").time(date,1); From 95ad90e11b46ef112b3ce1ba6525dca53a9f7822 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 18 Dec 2021 11:15:40 +0100 Subject: [PATCH 032/217] Update app-icon.js --- apps/contourclock/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/contourclock/app-icon.js b/apps/contourclock/app-icon.js index 3cf7105bd..01f3ef69f 100644 --- a/apps/contourclock/app-icon.js +++ b/apps/contourclock/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwghC/AH4A/AH4A5jHs51wlfs7ncqEAg/N5nc7cwvgLB7uACwME7tgg/B9cwgEJ9EA1wOChfs6wEBg3bAYOuyADB5ugG4VeqHTHwe9iAECjughYMD7pCB1UwhPA6sEqpMB40AnQLBgnQhhBBAAP5gEuxfAgHUz3e3ZMBA4ObvYDBC4NwxQ4B+oLBgXAhPt9EhgFtgHDgGZggXCg/t5sggH2gF8g3An1Qr1ggGcgG6gF+52QKYJEBhgXB/RoB71wzcAhVwgvmgFfQ4SDBEIIXDO4MAIQN9BINwrypB5oqCgFsCYIXD5nBAwMBju13siOwML/1AC4U82AXE4HNwWe6kD32yjoOB3vlgGt5uwgYFBC4kH5m28cA3dycwML65GB6MB6EA1MArWuC4Pb7eFxuwhfa7wuBhurfQI5B8C3Bg/qu4yB11Y3e3QYMgxoJBg94FYOd5obB48LSwenAYUA1cADYIAC7IEDg3ghQXDzswAYMp90QDIIACp2hAgWOZIPs5gAB5/8zOc9lb9fv7gLC53u3OZ3vWEIYA/AH4A/AH4A/AH4AsA=")) +require("heatshrink").decompress(atob("mEwgJC/ABsH4/wv/H/EMlkMsF4hkYmEEwEwg0gmHCwEh4VAmPi/0j8Vkkcj4MjkU8kckocx4UEmPMoUQgkEEYNGnAFBnEGxFwg0Ek/jzFh8UEkEjkOikUcnFH8MiFIM3wnA8PisEwhnAkECAoMc4EYgk///3//n/Cl/AFYA=")) From 85ee6a1f73675944bc618042f5ca523634a0b006 Mon Sep 17 00:00:00 2001 From: Marco Heiming Date: Sun, 19 Dec 2021 00:10:22 +0100 Subject: [PATCH 033/217] Load step goal from pedometer widget (as fallback) --- apps/circlesclock/app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 57b46bb8d..c409c1e32 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -7,15 +7,19 @@ const powerIcon = heatshrink.decompress(atob("h0OwYQNsAED7AEDmwEDtu2AgUbtuABwXbB const powerIconGreen = heatshrink.decompress(atob("h0OwYQNkAEDpAEDiQEDkmSAgUJkmABwVJBIUEyVAAoYOCgEBFIgODABI")); const powerIconRed = heatshrink.decompress(atob("h0OwYQNoAEDyAEDkgEDpIFDiVJBweSAgUJkmAAoYZDgQpEBwYAJA")); -const SETTINGS_FILE = "circlesclock.json"; let settings; function loadSettings() { - settings = require("Storage").readJSON(SETTINGS_FILE, 1) || { + settings = require("Storage").readJSON("circlesclock.json", 1) || { 'maxHR': 200, 'stepGoal': 10000, 'batteryWarn': 30 }; + // Load step goal from pedometer widget as fallback + if (settings.stepGoal == undefined) { + const d = require('Storage').readJSON("wpedom.json", 1) || {}; + settings.stepGoal = d != undefined && d.settings != undefined ? d.settings.goal : 10000; + } } const colorFg = g.theme.dark ? '#fff' : '#000'; From 9faaca321476bd283ee841ce162f65b37b249a4c Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 11:38:27 +0100 Subject: [PATCH 034/217] Performance improvements: Render left side + lines. Also new designed colors. --- apps/lcars/bg_large.png | Bin 11003 -> 0 bytes apps/lcars/bg_left.png | Bin 0 -> 795 bytes apps/lcars/bg_small.png | Bin 8753 -> 0 bytes apps/lcars/lcars.app.js | 121 +++++++++++++++++++++++++++++----------- 4 files changed, 89 insertions(+), 32 deletions(-) delete mode 100644 apps/lcars/bg_large.png create mode 100644 apps/lcars/bg_left.png delete mode 100644 apps/lcars/bg_small.png diff --git a/apps/lcars/bg_large.png b/apps/lcars/bg_large.png deleted file mode 100644 index 56590e87891ec7908e31984aebc50db7ce8b3e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11003 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 SvI(%(E+8wZBvCGA;Qt@rL=Hy) diff --git a/apps/lcars/bg_left.png b/apps/lcars/bg_left.png new file mode 100644 index 0000000000000000000000000000000000000000..91c2bb6f7b7f83376ff41b83632819f239358246 GIT binary patch literal 795 zcmV+$1LXXPP)Lu@Z};XF?e>1+Kn$_>ce=9Pi+wv|?prf!_UgoA*PqAR;0Q5z%b*wr#QIW|?7DXB`WO z%tr&|L5E%C#LQ2Gh*GsW#jLp5NE($b9rB=*a#ddue-I}cpM(`96HM6pf*hi&({4!# zMnqIzE`A7dh_+UHE+@9(jS&b)WnUrf;lz`gzuxi#RaLe{Ro#&k>|I5LbwO22-LBT& z%>Wz1-c(obJ#qa0$E^Y@ldu~lk?60fImZnV#jPx=>v@_Mp5#Unu#tv_i~{G~Z(NOI zG5vxo9PUoQUio}kCq3`sdd!7sTDWhhu5Onh=IrWPhzwpU;R25w4SpG{tjt-f_GcQ3>bghM!iN9H z!jV;@SAT8oA$M`hSV}M=qNuKCYg%|ZCD?KX{QiPtC83d&V9R;k*r;0O<}SKjtq-?~ Z{RF94z^`^=I%EI<002ovPDHLkV1n^vZ1eyC literal 0 HcmV?d00001 diff --git a/apps/lcars/bg_small.png b/apps/lcars/bg_small.png deleted file mode 100644 index ea3a756888509f49fdb11944cf1318fadb0d30a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8753 zcmZvAbx>VF^X0=K*u$OR4#C}mTX6T_?(Xic4}w1|!5tp%79hAo@Zj#YeBbV`YPV|t zn4X$5bMNgwHGQgYM=L8zqkba%1ONa~Wo0B(Kjzwxk%`;SDtBIA-QE1V9aUO3;k3|siGfd*DDM@FCPyQ`a% z#JD<^FSxN#uB^Qs&ldtX|Iku)`?DKWi9EaRJbSbt8rfwz5?yW`qGsk1y@MY5d$!mp z-yb806uX!Y-qw9HIv1NDxE#0>o)S9O79{==5ll=G*V_BkFEqmA-WrC3+yYLMjiE~? ze$|sZ>Gt|=vs^9f{OA3srTDK`eeL%!(uYl$16m?ZamXr04!%fSzm+f6F2=)p%-=z= z0y_&F8&2WLW#FHlZu?%l!=KVxDVh@={)(0kGISOxTM>-MHJ6^gT2? z@D6HCd%wnKJp=uRVOXd|vWgRf?bxLxq!SW5c%#Qk&GN57AF0Q%NzypjRzPS2mHQ#-lHpoB34(g`&Wv^|NGQ zC7UNcn9!eVg{RtWQ#?`VcC94S(3dD|DvB~*&@4?w`bR(nlEQC6^9&tJy-B7dlfiUN z!}_sb74|0fktCig-s3FoXLlDXr}K_Afq%I?eJ4IESqpf3#aBq}Rw0);rOa7+{g#d# zmJ|{d^}WqvW|6ANQ_EjIl8xETGE?0I9nP7yva%e^dZ2H1`kqmDXQ>-r{diA3h=ZJU zZ}Ej5cRim*FP2`d@shUJE8E+^EF(bM3&f?R@qjgw6@Mx6_*S%6pFGzJv^T=Tr*8ZF z2H@`Bx?21czx(%7ihba;BZS_5Wdh3_qOTguX2#`NHmdJBg)=r%Z~EisWn#SffhN1b z5o9H<4JxpWpo7?-(e{DgB)EK=!j%pFQq9t$QoF^V%FQpBGl|f7yjY`-{+1?o*!Fzr zp5LInYJl@7p>TOc+KpMVmRHUwTxOLmk-(ghRHNHCsOm0DF{7A7?sj@Em`I!od%+DP z^&>CPeE{pwS?5v?Ls9^^D6to%mw)K4NQnQ_s;K zNw~+*JZv4T1Yi2ZdlC74tGHcc;ad1+Hd$lA&z3lk>0lMMD^5weyXK`NoM*9=tkI{^ zCv+s*KVv%j>ko4l=ozEeR#B6=1uPYc*x`lZlC*uzv!+so%BLvb&ct2RK$+SoEnW@7eyYY zItbeWKj~i|jKB#Y!EACwS*@1xh`KuNswF-#p-*$T!5&ZrmzPYUg4k7}3P*<&EIX{# zY(-P5;2Kw{$t#0YPyLYy$Mc*~Z1(*g+C4SizD_fF;wGT1Ylg{^k6ivqn|n<{Ji~ew zCPR})E2P<5qoA57mTU|nJN_7wKhFy;=*^Ti#uZJSq?km5etDiQZ3+H+6(Xd<&@(d-F_coBb&(|xm3;bY`km~?cj(c zdV`@6f~GozKU>$;jB+fadtCC-A$n7z?toL^O%65Gwne zlxnUV#6E(!MO?J(cg(d*K_GiE+}k1h1Pnb|w2$ z_Aub+ER{(;W)Gh4EBA$^$J8YJrCP*}-PZ^9%SgI;4{1X4?sC%!rIsT1aZ&nRZucok z?5*TARipJ+h66JA*kd3A(JxXg6s(uEz0xBBmGTiK27p%%N;mGaeBD1{P&k}FY3rX) zobAlaCw4gHF*5ht6zrPdWc!3Qzn7h@Zz$uj@!dFpVdYv88_fD-FO*$v^6k&?Po0e zAxb?0fR@h!A2&}{9*hsU@~Yael87@#BFXDb53)Zz%`U^WZ`IeqMr1a8!d6f|s!NfC z8|qp+Q5vt)-5b6q>Q4unQ6>xU;SmX*@5tRKL#H90~^5zwX!^oV%;VV+gT^U8U33`?#_d#N5 z!MG61AR%a)UGFSf>(C5_Y`wEMxdFrxsm>Vtn<}T1?PQnZoDd zG58mL3Pg_}3=8S>vy?iFk!17lNRo&_(e|52PmO>3AfG z*et&N%{r7IH7%OT4B1NFWN_FDMv|kH*B={`-uzKW+P@R=I0y9v%nN+nO62*yDfn`! zbIpSu=(q4P(f>K03sH_ioOMR4mE}LZ|5V50fC@@vqv{{``i5smk^dk67d4f!nA3d zsHcpJ-<+j~SG_9FMLGRnTV=_?0g*1OHaqrBZDu^ETD)Y61c>jxUGwY5?!VmcDqlz$ zLY>^Fm|pE@uOq3yT2XFqkwGa_F#Qp!EEV`P4(BqWXPkB3dv987q(YE<9vxx}3AffH z0!ZF&kd-r=LstSzL!sR^E5X>kTGG=+OvpY1nB35q1)e(hS>j-n`y;^mMv;?d={JUs zqASW`*69J=KC9rcH96L^-&_uyR3>Q2m>M{%gezJ8Wil>SZNM!qu_PNSTWgm)yo5^^ zE&ZGHaRLnkWf&jCQsEmk(vW{+f_v>?A2i+j(1Eg{W#GJ+_lyTIX0aDtxp|@GKEfJ$ z@bT8)7+mW4W-8qJ%F0I^IrCjl2Tg|i#$$RasZ)Jmc;h;~7r2I6z&-9wNeI|Cf zKft^Z(f4w|DZ2Y5(QdVb2v)XFCf~_glO4bXRW0nS_Ap6B8S*Q4K2XW3G z27*VHhV9sQvr8za-RSmjhfBbxTvlrMm3|M)<%oB+*2Rg+>Y`M=r!!7|j*<(jY=BKD zaf1Vd(om+ww(DBGvNR9-MUZ(-(BjQM_yt*SY!nb^U*ADQlh{Bx#wpmrBb9aKbWVFN z<()q#MBQLZG+fusa`8Q9m6I^L#hFg4yrg3~zQ(Jn8Pb4rKR0(DF)P&eCAch>^St7v zbtKaH?eDYeNp^MabXi2knmeA~F$?NmVH6zf034_Kthhy^y}R4JaM9yYVps?{Y6vM; zkpWw`JjC+IfA&?rFl~na^WZY&j8#IZ@17~a=A2M$eHNr$K`6I?NmAvzs9UNYWL=TD z1!n)x3P#~QQ#i_Cq7^yFvOq9h=5snj<5k8^_Oi49?opLNMruQXg+^Z2Gg>w`XyT;~+evg>8X==BjV+K#Lt>k?pN0_B`^)H>1y=Hfs z(b~*#6s$Ef(vc!vQ=IHgotQ`XL{rleoyE~mBlF~+Y&qEy%>rYv?;TYB7*kYm>8U32 zEk+6WsmA}d}T$9^5VJ#kgN^n_OX`(m!`sHP(tpPtZtQ#Y=xfa(~@e#u4xi}Snw%oHP z%XO$}aEO|`=>nuyW&Se2-rUgk?m%<@maRsUyUYd|F)!If2yOl1yr)jKM8n1;@r_bU zgh{vjQOU?BsO@#|epq|SqLZinnSG>EiNky0Upn{u6iK+o*-o~JCs8xA5V=ek55L;| zyl>grrVn;#k-y9RYq146_~&6m9tF559CBvYF(Ia1cm{r?C9>=8d|$yJE<8fzfl*Rv z*>bdMZ!I}mNIa9Gc3K56epUK&TOs+4g|>wz4Dpauvr}2?~m>mo^vDT-JSfpFXvQw5C4U~g^ zq`6pp?pmA}5?&SC^QJJDk-x2Xb;)ZVeeNqG-^+i>CYMCB5se~<)Zm;u! zlr>kLx=9qDtbW|a>Y8Y8(|4yFMEsdN zjKfK$je-Qh6X)j>$<1R8_BFR%4^9C6upt+VLkwp4)oeF^Zl+KBh05fie(1e#dMlA6 zI>3=0xby5+=NQpUn}RHDy@ViZWpK-1l2OUM7T2p~TOJ6EELzp@$khQ;xmOTPNW450 zd0b4l|Jggyu1b>APY;Wm@rf1}6VuKLdMJXoVLo2$v@oi&G-(-sZ2mr+fm}CGPS+cN z^rVMW9_I$3l>D@B@u%&{AJ0ZoP9nQ9*Jp!7O>yG9@)On~*$>&p3iSCQ$90-%P%d@= z(p8&FnUqE`6^eI34ELJA*C%S0iO)fZVs}nzkm9ps7U>Ji*NqXE$~%S~zfOkOt@g2# z0*Qk}?zg43-5ay4U*u(r*95%EnZdtvJTtm$jtaJhCl~*nU-PNWp~7AfSux2uLJ);` z+8b64FMKpLy4>GcS61UluTP$uczuaZQ%4ms@JUxK^CNj9IFy+09a_ij?jhK}g@2r~ z1%Vth1Sb7Wnm@B2vmQn3g?Z&(EXej&A}kz@lO_# z=@%s)G*T-m!in@q+6ETKguBUrn!;3^`s(TmY#-1ec@!pGhDvXxw?1P< zBg1X}2`H-CAW0cuVL=FLnlYtRgrn&JS#-A2cef<_rbM)3V zsHc3C3_ReQ;$s8=r;+0;Xcr`CMNb8Zu>^<3xaLr) zs+7jx!slMxLhVHy-%-%+K6xa-d1M&Iq36bS3pT?B{F(;B26sxL2L!<(feKz9>&5;qJh z1uJ4xBRUFc5--L4`q5qQY27mlAY<`srrLrF^6cUpxJWsL?${Y^x={0$ozZrE{zl9o z&}T@!3difQ%@lkW}=My>rZqXXd(D|~Ojlh9o3kx*5m!{+roBi7Z^OU}v~ z1RZ>by$kCBaaakEh4^?MP_ZuMr0RbW+qNt}Qk75pQaBC~Cm#;4+ zB_+(;+nc|QbfL2G*;<=+qZP)>>nof63MV!$ZV?y^BP=W|^X=Q<;cVH~-rgWU?VVY_ z75MGjx2WjoV7eGyj}!du?QK@u1t!1CK|Fx*?MdIw;p}Z73qAc;J3FS3kPu~cbyxt1 z(;AaSzcpxg*9;!?gtvh%`~WyRJF{|dkg~9#*`N3kS=042X58((Go&+LEd^%#sHxP{ zLO~$>;^N|ht}ar!63h?(y$(wiwpuNRQ26N&ygA~O?jWpy~SN}Uon=c_Q4wI9Ula!x71yI|BgM&NNN+J>TQZ_oycDe5( zvHc+b?;xHL=kwEYgJqrTfg(WE%#2D^RW(lfDsGU7S}!!9qz>0t=`B_I9lfBS0Dz3g zBJn|84IV8614AVXxz7j36x`ek+rlL!B~fv45;{5r6ciM3hIo&IHNM>+gptJ*(VeZg zw=DX%x3>>I&o3=4**<^V?jpJv6M6aAXWg^@Ubzu*k}9I<_W9A;wJNfv2;e} zGuNXzdO%P`1*2w-;RGS*sT2$bFIJe8W+>`1l9TstADf$-m;d?&QDa$iof-ZhMy_OL zH#${VkextKNa*?1mDGC|qqQw7(9BU=8`Oo??YT1H@LEbS8n9(FiM#brtKDn&9l&A$ z2@47WJUl&RuS=KBlJoMmDxJE!yBD^$;(!1C-N}Qy1Iw^Vb7$EyfAH<~c|x%TDI{oN zK@;qM5)yJCcPHPnUU`uG9@^@%_X!#r8c0H7?~%`CyU^3yTe#RvNJLcU_vnI+gY*6I zYHwt0jQx|dpI^r^;C^m|i;HXM99mG_Y;5>*APN8x6;)D7Dq__CBawWBf*I-Qd!sNY zZ)}NOTwRlMa^mjpJVIYN3FAl4l@t|+z=^`2{!ZpjqOjhM`kr@2hJ-)^dXT?#1i>NW z;-8vYyTJ!-Z<{Fm;GVF0j{F=D)zKjsYX6ZbAa?VZ>E_eb78pRl%cZp4Qf)9)Y1eAA zJ<*2{ZEbA@=j0HBfr-R?GbYPU_c0B=_UjOw?iZ5>g+55k>o!% zO+jhR}Q=LR0NUi_WEGt0*2yI|st zxa#M~h=`;2fU`9|1rRF~2?>dntt|{-Zed}2D4yu!4fDt-C}DIlAA!JM_Xr^`&f9Q} zjgMFPIKbK(L%w)UiT+37Dk_i}(m&ZW5z3X+FY3f(WZ=%t&u=|k?mV2epR>9jsaG0x zlLiL|YrYEL8`oz`fqRq4#cwFj*N?sNn03P@Cl#q^Xb6Q&DySXl}-p&t&29sydjA@9Pt*SoMFsU97X5 zB3)Wtb%iYro?Tmuo0(Cq)NT4?Ihm7Ox!$rFK$M)E-0E>k2%`W~R$eaC-Tc*tQM0nv zCQuPPT`&Z|f~gc4-z^(Ru7c5b-4jXS+TSfOOH8qc@q2ns{Ih=BP8A=2g=G3)_-#P z_I%g=T?Kpkan*j!uDbVpo&T<}B$N!1j_CnGPKktbDX*0u&u{~4`718Iel#QVGl~{b zMN%t25m=D+rlJ@K3-u}T`^5!{#h3dPt)PlkI`HWc#vA?wKumjin9^xw1su~2q&>tJAL{w7u2WnxI*29(GBC7J0_XF@0$2OImif<28Z zS1q-}nQ5VBVtDMT)!hn!ID+w=`Kuaui8J%m{}4s zv>EglO_`rn709{wYk9m1ERkYEghfV_wXymMpgL2w{wZ{DZtfPJ9sbFl%Lu-SED5ha zp>N6Y41$(+K@%&4VEEX*V z3mxJ{b@d53p*~cA5I-Rs6jYMDvM*B5vXb^m>{+DWP1`2>H*85krbS`Yjn0{a3GqfL z%2D0=@remu1Fc9b4GpX3cW`LsEo-O$LQ4y{sbbuC6~6>i@t*CRC1zWkqp29(>8Zop z>-TT*h^pz5*)4F)r;f+hd%r+%a9}2MP!k3QXzzelHuSx^(#&hr1M1GzrBAK5H$@@Z zx*bxRxJ9i8|L}O>)GEL)H?uU~%&orBHSwRS&8u08Ql~fYSXgNx>P(<#5)JJHj&P0E zSptO>14d!s%#~5 zd_~#H;Anhf3V0AHi-)y}3Z}*^bb?V^$o7-Z9m6t9&y+&izG)6DfSH5@g|#k>%p@op zisr-o_mTgasQ<425BNVjA0RyFfA8QMe}JT99^QL6vVmp)|mYS-2Z;~d{{BFvJPesukL=1=R~94AjrLlGZmOKNw)C+5B2|w z|G&(bJp(-D+oH7oz9ZB-2QlicQd!Hu0=L<6gyfo0FY;zM{-s!9lZvbnD90Jse3Z=k z`tE2VM&0DHrjwueJf;#pz=;v44v#k-|G$nXCr@JlT(M=h!zMqx0POt`PdAM@VCE zT!jO8e2$DhOpd~i+6>s-IzNfQNlv{izsGMC7$IXHm_4gV^i+sxgd`{;XYG0}w d{ug{DGTvApj)Nu6|M3e2kd;)Fs1`F0`Clx8!}$OJ diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 859e999a5..1f6448bb4 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -17,15 +17,29 @@ for (const key in saved_settings) { } let hrmValue = 0; +/* + * Colors to use + */ +let cBlue = "#0094FF"; +let cOrange = "#FF9900"; +let cPurple = "#FF00DC"; +let cWhite = "#FFFFFF"; + /* * Requirements and globals */ const locale = require('locale'); -var backgroundImage = { - width : 176, height : 151, bpp : 3, - transparent : 2, - buffer : require("heatshrink").decompress(atob("AAdx48cATsAg4daIAX3799ATv2wEFDrUAgNHQDyDghaAeQcJKG86D4gRKGgAA4jxKFuBB5iaDF6BB5ZwyD6QAYCC4CD/Qf6Dzg/gQf8H/iD/n//wCD9gP///wQfpBKQf6D4h5BB/yD8jl/IIIABjiD5n4/DAAWAQe8B//8QYfHj//PAaDzHwICCAAP4gYCBQep6DIIYFBRgKD1j/+gB9BQYYKBn/gQen/+BBFQAUH/iDzGoZBHJoOAQeRBDj5BHj6PB0WKlACDJQIAofYZBFBAZBBAGMHPQZB8QYZAEIIcDIOiDI/hB3QZBBFjlx44CDuBBpg4DCIJEfIIPnz15AQeAQeH8gIDBGoJBCnnz54CDZ1UHPQMHIIUAIIKD3II6MBQYQCCQeI1B+BBC/BKCBASGCQeK5B/xBC4BKEn/gAoKDyj//45BFj/xZYSDzgF/IAP+JQrLCQecAgKDBF4cHQYKJDQecAn6EBAAiJEQeZBB/jICAAMcvwMDQevgQwR0CIIiDzgP/BA1/4CD3nAHGhyD3ABqD0ABiD/Qf4ADjiD/gEnQYuQQf6D7gaDFzxB5gFzQYnz4BB5hyDFATfkEoIdagEBQYoCcgEHDrReBhKDhwEBQbYABjiD/AH4A/AH4AGiFx48cATsAg4daIIWSpMkATuQEbkAgJfbQckJQDyDhZxQA1gRKFpBA4gEQQYtwIPMSQYtAIPKADQfqADAQRA5Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4A/AH4A/AH4A/AFkcuPHAQdAIPOSpMkAQaD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4A/AH4A/AH4A/AGUcuPHAQdwIPOSpMkAQaD/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf6D/Qf4AciSDFoCD/QfcCQYtIIPMAQYoC6gEJQYgC6gEBQf7HCQf4ABiiD9")) +var backgroundImage = { + width : 27, height : 176, bpp : 3, + transparent : 0, + buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) +} + +var logo = { + width : 56, height : 56, bpp : 1, + transparent : 0, + buffer : require("heatshrink").decompress(atob("AAUEAwsOAwseAwsfAws/AwtzwAGEuIGF8PgAocH8H4AwcP4H+FAnAv4cDveAufAAwXzwFxEYUB4cAmFwAwMDw8AnE4F4UGgEYjBmCM4McjgGEhhxCBQUMC4IYBAwMOg4GBnAfBgwGCmAtBg8DAwxUBuEwIIIGDJIMDwYGCsAGBwIGBsAGBgIGDMoMB4IGIuB6C4YGBuIGJ8YGBmOAgPgsYJBAwMH+AGCneAh84u4GBjeAPAIGCcgM4hk+YQQ5BhwGE8EHninCgPAgYGCgxzBge4AwSPBgLnCVwQGEU4MH/gGCn+An98AwV///+AwUMuP/+AwChngJwIGCh52CjxaCPIIfBAxICBJIIXEAAb+CACA")) } var iconEarth = { @@ -91,10 +105,10 @@ Graphics.prototype.setFontAntonioSmall = function(scale) { } Graphics.prototype.setFontAntonioLarge = function(scale) { - // Actual height 34 (34 - 1) - g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAADwAAAAAeAAAAADwAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAD+AAAAH/wAAAP/+AAAf/+AAA//8AAB//4AAD//wAAD//gAAAf/AAAAD+AAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAB////gA/////AP////8D/////wfAAAA+DwAAADweAAAAeDwAAADwf////+D/////wP////8Af///+AAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAOAAAAADwAAAAAeAAAAAHgAAAAB/////wf////+D/////wf////+D/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAPwH/4AP+B//AH/wf/4D/+D4AB/9weAAf4ODwAP8BweAP/AOD///gBwP//wAOA//4ABwB/4AAOAAAAAAAAAAAAAAAAAAAAB8AA/gA/gAH/AP8AA/8D/gAH/wfAHAA+DwA4ADweAHgAeDwB8ADwf7/+H+D/////gP/9//8A//H/+AA/AH/AAAAAAAAAAAAAAAAAABwAAAAD+AAAAD/wAAAH/+AAAH/5wAAH/wOAAP/gBwAP/gAOAD/////wf////+D/////wf////+AAAABwAAAAAOAAAAABwAAAAAAAAAAAAAAAAAAeAD//4D/Af//Af8D//4D/wf//Af+DwPAADweB4AAeDwPAADweB///+DwP///weA///8DwD//+AAAA/8AAAAAAAAAAAAAAAAAAAAAA////AA/////AP////8D/////wfgPAB+DwB4ADweAOAAeDwBwADwf+PAA+D/x///wP+H//8A/wf//AAAA//gAAAAAAAAAAAAADgAAAAAeAAAAADwAAAAAeAAAD+DwAAP/weAA//+DwA///weB///8Dx//8AAf//wAAD//gAAAf/AAAAD/AAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAD/wf/wB//v//AP////8D/////weAPwAeDwA8ADwcAHAAeDwB8ADwf////+D/////wP/9//8A//H//AA/AD/AAAAAAAAAAAAAAAAAAAAAD//gfAA///D/AP//8f8D///j/weAA8A+DwADgDweAAcAeDwAHgDwf////+B/////gP////8Af///+AAP//4AAAAAAAAAAAAAAAAAAAAAAD4AfAAAfAD4AAD4AfAAAfAD4AAD4AfAAAAAAAAAAAAAA=="), 46, atob("Cg4QEBAQEBAQEBAQCQ=="), 39+(scale<<8)+(1<<16)); -} + // Actual height 39 (39 - 1) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); +} /* * Draw watch face */ @@ -135,6 +149,25 @@ function printData(key, y){ } } +function drawHoriztonatlBgLine(color, x1, x2, y, h){ + g.setColor(color); + + for(var i=0; i{ // Show launcher when middle button pressed Bangle.setUI("clock"); -// Load widgets - needed by draw Bangle.loadWidgets(); +/* + * we are not drawing the widgets as we are taking over the whole screen + * so we will blank out the draw() functions of each widget and change the + * area to the top bar doesn't get cleared. + */ +for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} // Clear the screen once, at startup and draw clock g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(); draw(); // After drawing the watch face, we can draw the widgets -Bangle.drawWidgets(); \ No newline at end of file +// Bangle.drawWidgets(); \ No newline at end of file From a6d87a561c1aa9d05f453490d5845b9094ef5309 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 12:06:20 +0100 Subject: [PATCH 035/217] Minor improvements --- apps/lcars/lcars.app.js | 154 +++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 79 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 1f6448bb4..4bf73057b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -43,48 +43,41 @@ var logo = { } var iconEarth = { - text: "EARTH", width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) } var iconSaturn = { - text: "SATURN", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA")) } var iconMoon = { - text: "MOON", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA==")) } var iconMars = { - text: "MARS", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA==")) } var iconSatellite = { - text: "GPS ON", width : 50, height : 50, bpp : 3, transparent : 2, buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) } var iconAlarm = { - text: "TIMER", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) } var iconCharging = { - text: "CHARGE", width : 50, height : 50, bpp : 3, transparent : 5, buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A")) @@ -100,15 +93,15 @@ var iconNoBattery = { // Font to use: // Graphics.prototype.setFontAntonioSmall = function(scale) { - // Actual height 18 (17 - 0) - g.setFontCustom(atob("AAAAAAAAAAAAAAAf4Mf/sYAMAAAAAAfgAfAAAAAfgAeAAAAAAiAAj8H/4fyEAv8f/gfiAAgAAAAD54H98eOPHn8Hz8AhwAAAP8Af+AYGAYCAf+AP8MAB8AHwA+AD4AfAAcf4A/8AwMAwMA/8Af4AAAAAwGD8f/8f8MY/cfz4PD8AHMAAAfAAeAAAAAAAAP/+f//YADAAAQABYADf//P/+AAAAAANAAPAAfwAfgAPAANAAAAAAEAAEAA/AA/AAEAAEAAAAAAZAAfAAYAAAAIAAIAAIAAIAAAAAAAAAMAAMAAAAAAAAEAB8Af4H+AfwAcAAAAAP/4f/8YAMf/8f/8H/wAAAAAAEAAMAAf/8f/8f/8AAAAAAAAAHgcfh8cH8YPMf8MPwEAAAAAAOB4eB8YYMY4Mf/8Pn4AAAAAgAHwA/wPwwf/8f/8AAwAAgAAAf54f58ZwMZwMY/8Qf4AAAAAAP/4f/8YYMYYMff8HP4AAAQAAYAAYD8Y/8f/AfgAcAAAAAAAAPv4f/8YYMY8Mf/8Pn4AAAAAAP94f98YGMcMMf/8H/wAAAAAABgwBgwAAAAAABgABg/Bg8AAAAEAAOAAbAA7gAxgBwwASAAbAAbAAbAAbAASAAAAAxwA5gAbAAPAAOAAAAPAAfHcYPcf8Af4AHgAAAAAAAB/gH/wOA4Y/MZ/sbAsbBkb/MZ/sOBsH/AAAAAAMAP8f/4fwwf4wH/8AH8AAMAAAf/8f/8YYMYYMf/8P/4ADgAAAP/4f/8YAMYAMfj8Pj4AAAAAAf/8f/8YAMYAMf/8P/4B/AAAAf/8f/8YMMYMMYIMAAAAAAf/8f/8YYAYYAYYAAAAAAAP/4f/8YAMYIMfP8Pv8AAAAAAf/8f/8AMAAMAf/8f/8f/8AAAAAAf/8f/8AAAAAAAD4AB8AAMf/8f/4f/gAAAAAAf/8f/8A+AD/gfj4eA8QAEAAAf/8f/8AAMAAMAAMAAAf/8f/8f8AB/wAB8AP8P/Af/8f/8AAAAAAf/8f/8HwAA+AAPwf/8f/8AAAAAAP/4f/8YAMYAMf/8P/4AAAAAAf/8f/8YGAYGAf8AP8ABAAAAAf/w//4wAYwAc//+f/yAAAAAAf/8f/8YMAYMAf/8f/8DA8CAAPj4fz8Y4MeeMfP8HD4YAAYAAf/8f/8YAAQAAAAAf/4f/8AAMAAMf/8f/4AAAYAAf4AP/4AP8AP8f/4fwAQAAYAAf8AP/8AD8D/8f8Af8AD/8AD8f/8f8AAAAQAEeB8P/4B/AP/4fA8QAEYAAfAAP4AB/8H/8fwAcAAAAMYD8Y/8f/MfwMcAMAAAf/+f//YADYADAAAAAAfAAf8AB/wAH8AAMQACYADf//f//AAAAA"), 32, atob("BAUHCAcTCAQFBQgGBAYFBggICAgICAgICAgEBQYGBggNCAgICAcHCAkECAgGCwkICAgIBwYICAwHBwYGBgY="), 18+(scale<<8)+(1<<16)); + // Actual height 20 (19 - 0) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAA//mP/5gAAAAAAAAAAAAA/gAMAAAAAA/gAPAAAEIIBP+H/8D+IYBP+H/8D+IABCAAwIAfnwP8+PHh448eP3+B4fAAAAAAAH/AD/4AwGAMBgD/4Af8GAAPgAPgAfgAfAAfAA+AAOP/AH/4BgGAYBgH/4A/8AAAAAAAAAQAA/B+f4/+GMPhjv/4/h8Dg/gAcYwAAPwADgAAAAAAAAB//8///sAAaAACAAAMAAb//+f//AAAAAAAbAAGwAA4AA/wADgABsAAbAAAAAAAgAAMAAPwAD8AAMAADAAAAAAAAAAHAAB/AAOAAAAAAAAMAADAAAwAAMAACAAAAAAAAAABgAAYAAAAAAAAA4AD+AP+A/4A/gAOAAAAAAAAAH//j//8wADMAAz//8f/+AAAAAAAMAADAABgAA//+P//gAAAAAAAAAAAAAfgfP4fzAfswfDP/gx/gMAAAHgPj4D8wMDMHAz//8f3+AAEAAAAADwAH8APzA/AwP//j//4AAwAAAD/Hw/x+MwBjOAYz/+Mf/AAAAAAAH//j//8wYDMGAz9/8fP+AAcDAAAwAAMAfjB/4z/wP+AD4AAwAAAAOB/f4///MHAzBwM///H9/gAAAAAAH/Pj/78wGDMBgz//8f/+AAAAAAADhwA4cAAAAAAAAAAAAAADh/A4fgAAAAOAAHwABsAA7gAccAGDAAAAANgADYAA2AANgADYAA2AAAAAAAABgwAccADuAAbAAHwAA4AAAAHwAD8c4/POMHAD/wAfwAAAAAAAAD/wD//B4B4Y/HMf8zMBMyATMwczP+M4BzHwcgf+AA+AAAAAAD4A/+P/8D+DA/4wH/+AB/4AAeAAAAAAA//+P//jBgYwYGP//j//4PH4AAAAAAAf/+P//zgAcwADP4fz+P4Ph8AAAAAAA//+P//jAAYwAGPADj//4P/4AAAAAAA//+P//jBgYwYGMGBgAAAAAAP//j//4wYAMGADBgAAAAAAAA//w///PAHzAQM4MHP7/x+/8AAAAAAD//4//+AGAABgAAYAP//j//4AAAAAAAAAA//+P//gAAAAAAAAAAAHwAB+AABgAAY//+P//AAAAAAAAAAD//4//+APgAf+Afj8PgPjAAYAAAAAAD//4//+AABgAAYAAGAAAAAAA//+P//j/gAD/wAB/gAP4B/4P/AD//4//+AAAAAAAAAAP//j//4P4AAfwAA/g//+P//gAAAAAAAAAA//g//+PAHjAAY4AOP//h//wAAAAAAD//4//+MDADAwA4cAP/AB/gAAAAAAAA//g//+PAHjAAc4APv//5//yAAAAAAD//4//+MGADBgA48AP//h+f4AAAAAAB+Pw/z+MOBjBwY/P+Hx/AAHgwAAMAAD//4//+MAADAAAAAAP//D//4AAOAABgAA4//+P//AAAAwAAP8AD//AA/+AAfgP/4//gPwAAAAA+AAP/4Af/4AD+A//j/wA/wAD/+AA/4B/+P/+D+AAAAAMADj8P4P/4A/4B//w+A+MABgAAA4AAPwAB/gAB/+A//j/gA+AAMAAAAAYwB+MH/jf+Y/8GPwBjAAAAAAP//7//+wABsAAYAAAAAAPAAD/gAH/gAD/gAD4AACAAADAAGwABv//7//+AAAA=="), 32, atob("BQUHCAgVCQQFBQkHBQcFBwgICAgICAgICAgFBQcHBwgPCQkJCQcHCQoFCQkHDQoJCQkJCAYJCQ0ICAcGBwY="), 20+(scale<<8)+(1<<16)); } Graphics.prototype.setFontAntonioLarge = function(scale) { // Actual height 39 (39 - 1) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); - } + /* * Draw watch face */ @@ -128,21 +121,21 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); g.drawString("BAT:", 30, y); - g.drawString(bat+ "%", 68, y); + g.drawString(bat+ "%", 70, y); } else if(key == "Steps"){ var steps = getSteps(); g.drawString("STEP:", 30, y); - g.drawString(steps, 68, y); + g.drawString(steps, 70, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); g.drawString("TEMP:", 30, y); - g.drawString(temperature + "C", 69, y); + g.drawString(temperature + "C", 70, y); } else if(key == "HRM"){ g.drawString("HRM:", 30, y); - g.drawString(hrmValue, 69, y); + g.drawString(hrmValue, 70, y); } else { g.drawString("NOT FOUND", 30, y); @@ -158,15 +151,41 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ } -Bangle.on('lock', function(isLocked) { +function drawLogo(){ if(Bangle.isLocked()){ - g.setColor(cPurple); + g.setColor(cWhite); } else { g.setColor(cBlue); } g.drawImage(logo, 120, 10); -}); +} +function drawState(){ + g.setColor(cOrange); + var bat = E.getBattery(); + var timeInMinutes = getCurrentTimeInMinutes(); + + var iconImg = + isAlarmEnabled() ? iconAlarm : + Bangle.isCharging() ? iconCharging : + bat < 30 ? iconNoBattery : + Bangle.isGPSOn() ? iconSatellite : + timeInMinutes % 4 == 0 ? iconSaturn : + timeInMinutes % 4 == 1 ? iconMars : + timeInMinutes % 4 == 2 ? iconMoon : + iconEarth; + g.drawImage(iconImg, 120, 120); + + // Alarm within symbol + g.setFontAlign(-1, -1, 0); + g.setFontAntonioSmall(); + g.drawString("STATUS", 123, 97); + if(isAlarmEnabled() > 0){ + g.setFontAlign(0, 0, 0); + g.setColor(cWhite); + g.drawString(getAlarmMinutes(), 120+25, 120+25+1); + } +} function draw(){ @@ -181,28 +200,22 @@ function draw(){ g.drawImage(backgroundImage, 0, 0); drawHoriztonatlBgLine(cBlue, 35, 120, 0, 4); drawHoriztonatlBgLine(cBlue, 130, 176, 0, 4); - drawHoriztonatlBgLine(cPurple, 35, 120, 81, 3); - drawHoriztonatlBgLine(cPurple, 130, 176, 81, 3); - drawHoriztonatlBgLine(cOrange, 35, 120, 87, 3); - drawHoriztonatlBgLine(cOrange, 130, 176, 87, 3); - drawHoriztonatlBgLine(cOrange, 35, 176, 173, 3); + drawHoriztonatlBgLine(cPurple, 35, 110, 81, 3); + drawHoriztonatlBgLine(cPurple, 120, 176, 81, 3); + drawHoriztonatlBgLine(cOrange, 35, 110, 87, 3); + drawHoriztonatlBgLine(cOrange, 120, 176, 87, 3); + drawHoriztonatlBgLine(cOrange, 20, 176, 172, 4); // Draw logo - if(Bangle.isLocked()){ - g.setColor(cPurple); - } else { - g.setColor(cBlue); - } - g.drawImage(logo, 120, 10); - + drawLogo(); // Write time - g.setColor(cBlue); + g.setColor(cWhite); g.setFontAlign(-1,-1, 0); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 25, 12); + g.drawString(timeStr, 28, 12); // Write date g.setColor(cPurple); @@ -210,43 +223,22 @@ function draw(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 30, 60); - g.setColor("#FFFFFF"); + g.drawString(dayStr, 35, 60); // Draw data - g.setColor(cOrange); - printData(settings.dataRow1, 98); - printData(settings.dataRow2, 121); - printData(settings.dataRow3, 144); + g.setColor(cWhite); + printData(settings.dataRow1, 97); + printData(settings.dataRow2, 122); + printData(settings.dataRow3, 147); - // Draw symbol - g.setColor(cOrange); - var bat = E.getBattery(); - var timeInMinutes = getCurrentTimeInMinutes(); - - var iconImg = - isAlarmEnabled() ? iconAlarm : - Bangle.isCharging() ? iconCharging : - bat < 30 ? iconNoBattery : - Bangle.isGPSOn() ? iconSatellite : - timeInMinutes % 4 == 0 ? iconSaturn : - timeInMinutes % 4 == 1 ? iconMars : - timeInMinutes % 4 == 2 ? iconMoon : - iconEarth; - g.drawImage(iconImg, 115, 115); - - // Alarm within symbol - g.setFontAlign(0,0,0); - g.setFontAntonioSmall(); - g.drawString(iconImg.text, 115+25, 105); - if(isAlarmEnabled() > 0){ - g.drawString(getAlarmMinutes(), 115+25, 115+25); - } + // Draw state + drawState(); // Queue draw in one minute queueDraw(); } + /* * Step counter via widget */ @@ -265,12 +257,6 @@ function stepsWidget() { return undefined; } -/* - * HRM Listener - */ -Bangle.on('HRM', function (hrm) { - hrmValue = hrm.bpm; -}); /* * Handle alarm @@ -314,8 +300,29 @@ function handleAlarm(){ /* - * Swipe to set an alarm + * Listeners */ +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); + +Bangle.on('lock', function(isLocked) { + drawLogo(); +}); + +Bangle.on('charging',function(charging) { + drawState(); +}); + +Bangle.on('HRM', function (hrm) { + hrmValue = hrm.bpm; +}); + Bangle.on('swipe',function(dir) { // Increase alarm if(dir == -1){ @@ -342,22 +349,11 @@ Bangle.on('swipe',function(dir) { Storage.writeJSON(SETTINGS_FILE, settings); }); - /* - * Stop updates when LCD is off, restart when on + * Lets start widgets, listen for btn etc. */ -Bangle.on('lcdPower',on=>{ - if (on) { - draw(); // draw immediately, queue redraw - } else { // stop draw timer - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - } -}); - // Show launcher when middle button pressed Bangle.setUI("clock"); - Bangle.loadWidgets(); /* * we are not drawing the widgets as we are taking over the whole screen From a2afacfca0fd070b4c06f47458e1414fc094e1ba Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 12:22:36 +0100 Subject: [PATCH 036/217] Minor performance improvements (no logo) --- apps/lcars/lcars.app.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 4bf73057b..025220798 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -36,12 +36,6 @@ var backgroundImage = { buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) } -var logo = { - width : 56, height : 56, bpp : 1, - transparent : 0, - buffer : require("heatshrink").decompress(atob("AAUEAwsOAwseAwsfAws/AwtzwAGEuIGF8PgAocH8H4AwcP4H+FAnAv4cDveAufAAwXzwFxEYUB4cAmFwAwMDw8AnE4F4UGgEYjBmCM4McjgGEhhxCBQUMC4IYBAwMOg4GBnAfBgwGCmAtBg8DAwxUBuEwIIIGDJIMDwYGCsAGBwIGBsAGBgIGDMoMB4IGIuB6C4YGBuIGJ8YGBmOAgPgsYJBAwMH+AGCneAh84u4GBjeAPAIGCcgM4hk+YQQ5BhwGE8EHninCgPAgYGCgxzBge4AwSPBgLnCVwQGEU4MH/gGCn+An98AwV///+AwUMuP/+AwChngJwIGCh52CjxaCPIIfBAxICBJIIXEAAb+CACA")) -} - var iconEarth = { width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) @@ -151,17 +145,18 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ } -function drawLogo(){ +function drawLock(){ + g.setFontAntonioSmall(); + g.setColor(cWhite); if(Bangle.isLocked()){ - g.setColor(cWhite); - } else { - g.setColor(cBlue); + g.setColor(cOrange); } - g.drawImage(logo, 120, 10); + g.drawString("LCARS", 130, 15); + g.drawString("BJS-2", 130, 35); } function drawState(){ - g.setColor(cOrange); + g.setColor(cWhite); var bat = E.getBattery(); var timeInMinutes = getCurrentTimeInMinutes(); @@ -207,7 +202,7 @@ function draw(){ drawHoriztonatlBgLine(cOrange, 20, 176, 172, 4); // Draw logo - drawLogo(); + drawLock(); // Write time g.setColor(cWhite); @@ -218,7 +213,7 @@ function draw(){ g.drawString(timeStr, 28, 12); // Write date - g.setColor(cPurple); + g.setColor(cWhite); g.setFontAntonioSmall(); var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); @@ -312,7 +307,7 @@ Bangle.on('lcdPower',on=>{ }); Bangle.on('lock', function(isLocked) { - drawLogo(); + drawLock(); }); Bangle.on('charging',function(charging) { From 3dd4351567f14f5ed787b77ed5795c9d5965dde9 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 12:54:13 +0100 Subject: [PATCH 037/217] Minor changes --- apps/lcars/lcars.app.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 025220798..84d12953e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -114,25 +114,25 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); - g.drawString("BAT:", 30, y); + g.drawString("BAT:", 28, y); g.drawString(bat+ "%", 70, y); } else if(key == "Steps"){ var steps = getSteps(); - g.drawString("STEP:", 30, y); + g.drawString("STEP:", 28, y); g.drawString(steps, 70, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); - g.drawString("TEMP:", 30, y); + g.drawString("TMP:", 28, y); g.drawString(temperature + "C", 70, y); } else if(key == "HRM"){ - g.drawString("HRM:", 30, y); + g.drawString("HRM:", 28, y); g.drawString(hrmValue, 70, y); } else { - g.drawString("NOT FOUND", 30, y); + g.drawString("NOT FOUND", 28, y); } } @@ -147,12 +147,13 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ function drawLock(){ g.setFontAntonioSmall(); - g.setColor(cWhite); - if(Bangle.isLocked()){ - g.setColor(cOrange); - } + g.setColor(cOrange); + g.clearRect(120, 10, g.getWidth(), 80); g.drawString("LCARS", 130, 15); - g.drawString("BJS-2", 130, 35); + g.drawString("B-JS2", 130, 35); + if(Bangle.isLocked()){ + g.drawString("LOCK", 130, 55); + } } function drawState(){ @@ -206,11 +207,10 @@ function draw(){ // Write time g.setColor(cWhite); - g.setFontAlign(-1,-1, 0); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 28, 12); + g.drawString(timeStr, 25, 12); // Write date g.setColor(cWhite); @@ -218,7 +218,7 @@ function draw(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 35, 60); + g.drawString(dayStr, 28, 60); // Draw data g.setColor(cWhite); From 1b92b2bbc4f7bf9cdb2a51e9f99e47d40626ab37 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 13:01:58 +0100 Subject: [PATCH 038/217] New version --- apps.json | 2 +- apps/lcars/ChangeLog | 3 ++- apps/lcars/README.md | 7 ++++--- apps/lcars/lcars.app.js | 8 ++++---- apps/lcars/lcars.png | Bin 1823 -> 1840 bytes apps/lcars/screenshot.png | Bin 2921 -> 5139 bytes 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..028127859 100644 --- a/apps.json +++ b/apps.json @@ -4487,7 +4487,7 @@ "name": "LCARS Clock", "shortName":"LCARS", "icon": "lcars.png", - "version":"0.07", + "version":"0.08", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "Library Computer Access Retrieval System (LCARS) clock.", diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index c5f8187b7..f30ae4707 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -4,4 +4,5 @@ 0.04: Inluded LCARS Logo. 0.05: Additional icons for (1) charging and (2) bat < 30%. 0.06: Fix - Alarm disabled, if clock was closed. -0.07: Added settings to adjust data that is shown for each row. \ No newline at end of file +0.07: Added settings to adjust data that is shown for each row. +0.08: Smaller background for faster rendering. Full screen mode. \ No newline at end of file diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 15009e838..31cb81341 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,14 +1,15 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, its necessary to install +Note: To display the steps, its necessary (but still optional) to install the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). ## Features * LCARS Style watch face - * Shows satate (charging, out of battery etc.) - * SHows data that can be configured (steps, HRM, temperature etc.) + * Shows different states (charging, out of battery, GPS on etc.) + * Shows customizable data (steps, HRM, battery, temperature etc.) * Swipe left/right to activate an alarm + * Full-screen mode ## Icons diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 84d12953e..8ac1dfe14 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -170,7 +170,7 @@ function drawState(){ timeInMinutes % 4 == 1 ? iconMars : timeInMinutes % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 120, 120); + g.drawImage(iconImg, 120, 118); // Alarm within symbol g.setFontAlign(-1, -1, 0); @@ -179,7 +179,7 @@ function drawState(){ if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 120+25, 120+25+1); + g.drawString(getAlarmMinutes(), 120+25, 118+25+1); } } @@ -200,7 +200,7 @@ function draw(){ drawHoriztonatlBgLine(cPurple, 120, 176, 81, 3); drawHoriztonatlBgLine(cOrange, 35, 110, 87, 3); drawHoriztonatlBgLine(cOrange, 120, 176, 87, 3); - drawHoriztonatlBgLine(cOrange, 20, 176, 172, 4); + drawHoriztonatlBgLine(cOrange, 20, 176, 171, 5); // Draw logo drawLock(); @@ -218,7 +218,7 @@ function draw(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 28, 60); + g.drawString(dayStr, 28, 58); // Draw data g.setColor(cWhite); diff --git a/apps/lcars/lcars.png b/apps/lcars/lcars.png index 167352ef4bd6db8c6de6bc845396944af7bcc040..9264f93f21be2ea0c39faabab767f88da6d4ad43 100644 GIT binary patch delta 1809 zcmV+s2k!Wv4zLc8G=JwwL_t(&fz6p~P!v}d$A8l^vk(+Z1hmT4RktMSSVk#jVI}c{ zNUHW>_#jn2Qc)ZbU0mG3#qiLq#R_PG5s0QrkO-~`WJ@#;E%QO*qeKiME4mViPzx)T zf@FP-ykwZ!4`y1L>6vMUp4$Cab$@{J%RXZ3ADGj%l0)lH?uY6V^!m+UP78=0hV~4D6+kL`7&jt7gdR?S_w^k z{})bcUk=l!Pp7r5YSeL6nSs51AC5>oKwDcIdv+fib!=5;U~=xyxp(j0h{sKuG>MMR zOQVYI(F}apzmKRdmN6!6Ec{X9k$8a4&Q3xX#FCL-;(yV27{LsDI{q_COG`O-?wrF* zN-Y=+2IAx6+4|=g#bewiaK!&_?Ao=9mX?-L3sj1LfB=$`lE}_k@7C630*lKdsi~=P zI#>_{ugwO)lqpjvC@5e>>;mT+gpZ7j#8w1NTYn%UFq5XHCZ0WerjmSE zv}h51AN7-wk-?ZTVQq~KdAZG2gyf2jj&`se z&E@a!FY&)(#R>I?c>VJ?uvjc2xnaWw@+rF7!N2>^tlYkhEVFsq)fb{XKW z9a%2>M+;Z8yL|a_@&5Mh+W-iyt*s)taDU-Kw*f9(xZt@u1?cYXcG@>@-aH3R=;`SZ z8~*DIY7>)#G%-(MXa9S)peFc`!} zU0t0^$8sygNa5$_$IzH^sIRY=3b3r6P?=j_xH>4L*EnO;o$%Xxx3>fFNr;S_BeHX^XAQw>IPu$ z+_^kIFhJqlk3_C$VKEC9IR8u@{vdz%)o&Rb92DDY*Se3|>*5lUv*L2^oZig*ouIZrx%-U4H^8DJhcE zzO=M7iJitqi`aXltQw=yDA^|J^?EjM-i%(aCoeD0t)OYsrqP!9Z?|^C;gkF`oKzkeUI+02tCPq138=yW=CIvs(5flQn@k;#)MJN-cp#V=<> z)7sjK4cDuh&SmdU7=Qj5yK?192k`(YTi;URP7!i)a#*v*@i=EV6qV4UM~}q&(9lpm z|GV>}KDDrV&98`xisE=>gG)O_Ghkopf`Wqh$F)o@f!^L;GBY#X8~zWVXchW@#(x2Ym$Z{xh~>!u015yANkvXXu0mjfanhH5 delta 1791 zcmVXOMeaKpD>tb0K0#?jIy#a zTr1jOuownQAmwQdN=s+nd__eCp7k9wNF0MCP~~iaq@*MYmzVrbaXKGwYIk6Y1a`><8huqR#ukA{?yb|PUCT!z(;99OiycG zm6b{*e!a1tvwxVJB~Yk(j{5p~R<;ixKEzvg*__1XEP-?9&go=-^5jWQ;&PHe-e{-V zA6Fe@G8q(;XBQlslLRhYxS-cKkw~=Q*gSm(T~TzQq@)Co9zDXy$cWy-dwYA4ohN{= zuP@%VKcklqBesXRGAkt{5()0yxkKBexB{Qg$KJhrVShZ$ey`A)!0#60NK8ybTU*D5|wSx(QFxb}s04FCWh(scE%C@W5z(igh@5b^Y zUonbbxpF0hLLnYJcmQ*AbI!yH1Ok|vno_vV&Q1gb1fZ@lMC~|Q0`YZs5D^i9v9U1< zzhT1$On+YkniKy)v|9|Co0~B_Jj{`NVBNZP7|R_;baXTg*umRL8+iBbT@GZ=K`xggb0~vs7k>ucfLJW1Ow+o$Iuzg9LK#OU@aEPY z85xP|UlcM1%N)wUqOrm^0Dyar^ddMm{$;7skfMWc$>qx#g7rfb#NklJM~GK*p9#je)qH zK7X@NDwRkdOr!DJ#{F^V&>^xdm&?)fJQ@H%oT#N{9UmXBHPEY9uNEj(J#OB-$;hXy z7g45CQBe^9fSAA5J2*HX$asgw00~Xp9D~(C)7SO$^CO>IT3P@A#FHmaNOJAkwORw* zyLV52bu6IiaJYK)Y8pq3j*gOz#fukf4S(?X@nijz>42k^k&L{ptu2istgWrdMsIJg zR_BJC|Fckc{_5%Jp>YJC&nFvIRaF`tGp!K1!ra^(^J6lhy1JT?zkmNe`OM?ZTxEz& zn>LZ8LZLvC><8MwSxBW)U9?hQVq${BhYw>UdlZe||Be0o_p7xXA0KDr=kF6hNOZD?rFRW|@&)v8sPxH5?!H(n&U^ba$zW)1ypGmAH0HaZwRn4bdnkSx!vWiaT5Y4= ziH4`ACyj4vYQnxhLJ<)WL8oi?v;pXOs zR-t~E|Ks&>lv5@}q>&NA!^7dSj9!1DT`9Ys20)lF0uK)lodmeLy6P?d#9znN-tcT} zY><{IWLHiei_+we8*y2%DS9uF#&O7GH(r>7@&1y*XbVO1Ml^R7fM0ZOHk zwRn4bdxVCDLUeu_mX?+PfcExwt>g5njRJtNu`xDp-i*4sIt&a9=zl!k)YKFLfdJm# z-dOIGLg|Z&ib7mm9Qyh+%$?U@m4LN<4vkAlNPvZD47P2Z<5WZny1Tm}m&@_;e4IXg8hAT*(#tutm~5QAc=3XK76=4*-;>*-78ClO?SPMu51f|Y&}hf% z3(PEaGe27Ju0I#9jwSp)DMP1Bvkj{+Ff=p-f*=qV)z5(}Zow)6g+hUt82X(5KY-N~ h`q-yLyU~Aye*r)QY$kz4$b$d?002ovPDHLkV1n#zTzmik diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index d74635f64c385138e0b08b685db984ef3387f0a9..768c4a172e33f1cc478bc14a13400688af7bbbb2 100644 GIT binary patch literal 5139 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 BpU(gQ literal 2921 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 Date: Sun, 19 Dec 2021 13:10:49 +0100 Subject: [PATCH 039/217] Create app.js --- apps/andark/app.js | 110 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 apps/andark/app.js diff --git a/apps/andark/app.js b/apps/andark/app.js new file mode 100644 index 000000000..92d2bb7e3 --- /dev/null +++ b/apps/andark/app.js @@ -0,0 +1,110 @@ +const c={"x":g.getWidth()/2,"y":g.getHeight()/2}; +let zahlpos=[]; + +function zeiger(len,dia,tim){ + const x =c.x+ Math.cos(tim)*len/2, + y =c.y + Math.sin(tim)*len/2, + d={"d":3,"x":dia/2*Math.cos(tim+Math.PI/2),"y":dia/2*Math.sin(tim+Math.PI/2)}, + pol=[c.x-d.x,c.y-d.y,c.x+d.x,c.y+d.y,x+d.x,y+d.y,x-d.x,y-d.y]; + return pol; + +} + +function draw(){ + const d=new Date(); + let m=d.getMinutes(), h=d.getHours(), s=d.getSeconds(); + //draw black rectangle in the middle to clear screen from scale and hands + g.setColor(0,0,0); + g.fillRect(10,10,2*c.x-10,2*c.x-10); + g.setColor(1,1,1); + + if(h>12){ + h=h-12; + } + //calculates the position of the minute, second and hour hand + h=2*Math.PI/12*(h+m/60)-Math.PI/2; + //more accurate + //m=2*Math.PI/60*(m+s/60)-Math.PI/2; + m=2*Math.PI/60*(m)-Math.PI/2; + + s=2*Math.PI/60*s-Math.PI/2; + g.setFontAlign(0,0); + g.setFont("Vector",10); + let dateStr = " "+require("locale").date(d)+" "; + g.drawString(dateStr, c.x, c.y+20, true); + // g.drawString(d.getDate(),1.4*c.x,c.y,true); + g.drawString(Math.round(E.getBattery()/5)*5+"%",c.x,c.y+40,true); + drawlet(); + g.setColor(1,0,0); + const hz = zeiger(100,5,h); + g.fillPoly(hz,true); + g.setColor(1,1,1); + const minz = zeiger(150,5,m); + g.fillPoly(minz,true); + const sekz = zeiger(150,2,s); + g.fillPoly(sekz,true); + g.fillCircle(c.x,c.y,4); + + +} +//draws the scale once the app is startet +function drawScale(){ + for(let i=-14;i<47;i++){ + const win=i*2*Math.PI/60; + let d=2; + if(i%5==0){d=5;} + g.fillPoly(zeiger(300,d,win),true); + g.setColor(0,0,0); + g.fillRect(10,10,2*c.x-10,2*c.x-10); + g.setColor(1,1,1); + } +} + +//draws the numbers on the screen + +function drawlet(){ + g.setFont("Vector",20); + for(let i = 0;i<12;i++){ + g.drawString(zahlpos[i][0],zahlpos[i][1],zahlpos[i][2]); + } +} +//calcultes the Position of the numbers when app starts and saves them in an array +function setlet(){ + let sk=1; + for(let i=-10;i<50;i+=5){ + let win=i*2*Math.PI/60; + let xsk =c.x+2+Math.cos(win)*(c.x-10), + ysk =c.y+2+Math.sin(win)*(c.x-10); + if(sk==3){xsk-=10;} + if(sk==6){ysk-=10;} + if(sk==9){xsk+=10;} + if(sk==12){ysk+=10;} + if(sk==10){xsk+=3;} + zahlpos.push([sk,xsk,ysk]); + sk+=1; + } +} +setlet(); +// Clear the screen once, at startup +g.setBgColor(0,0,0); +g.clear(); +drawScale(); +draw(); +let secondInteraval= setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on + +Bangle.on('lcdPower',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (on) { + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately + }else{ + } +}); + +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +//Bangle.loadWidgets(); +//Bangle.drawWidgets(); From 27f68461c97a4b44540fd6835aaabe42b404f609 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:14:04 +0100 Subject: [PATCH 040/217] Add files via upload --- apps/andark/app_icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/andark/app_icon.js diff --git a/apps/andark/app_icon.js b/apps/andark/app_icon.js new file mode 100644 index 000000000..b213fe5c8 --- /dev/null +++ b/apps/andark/app_icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgIEBoUAiAKCgUCBQUEColEAYUQhAmKCwgeCAAcCgEDjwEBkEAg8TBocNgYFDh8GAYMDxkPjEA8EAwkHJgIcBAoPfAoYWCBYYFIgfvAoX4FYRJEAp9gAomYNAOAArPwAogAC4AFiRoIFJLgIFJuADCg//Q4U//4FDj4FEAAV4Aoi0CSxBsCA==")) \ No newline at end of file From ae1a0008c948dca1443cea5a91b8cf477f57fb68 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:15:14 +0100 Subject: [PATCH 041/217] Update app.js --- apps/andark/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/andark/app.js b/apps/andark/app.js index 92d2bb7e3..cf248d462 100644 --- a/apps/andark/app.js +++ b/apps/andark/app.js @@ -35,10 +35,10 @@ function draw(){ // g.drawString(d.getDate(),1.4*c.x,c.y,true); g.drawString(Math.round(E.getBattery()/5)*5+"%",c.x,c.y+40,true); drawlet(); - g.setColor(1,0,0); + //g.setColor(1,0,0); const hz = zeiger(100,5,h); g.fillPoly(hz,true); - g.setColor(1,1,1); + // g.setColor(1,1,1); const minz = zeiger(150,5,m); g.fillPoly(minz,true); const sekz = zeiger(150,2,s); From 47ea22a5fdc6985f7f79b86bc203b1a070092132 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:19:19 +0100 Subject: [PATCH 042/217] Create README.md --- apps/andark/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 apps/andark/README.md diff --git a/apps/andark/README.md b/apps/andark/README.md new file mode 100644 index 000000000..00c80ea54 --- /dev/null +++ b/apps/andark/README.md @@ -0,0 +1,11 @@ +# Analog Clock + +## Features + +* second hand +* date +* battery percantage + +no widgets + +![image](image url "/andark_screen.png") From 0de8d137b3dda1a4cd9320714399e62b2da0746e Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:19:30 +0100 Subject: [PATCH 043/217] Add files via upload --- apps/andark/andark_screen.png | Bin 0 -> 3660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/andark/andark_screen.png diff --git a/apps/andark/andark_screen.png b/apps/andark/andark_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac54c1cd160a6f314f9d7b2bae433fdd36672b0 GIT binary patch literal 3660 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 e%?Zc0r|v)X{}o=3H&nR*0000 Date: Sun, 19 Dec 2021 13:22:17 +0100 Subject: [PATCH 044/217] Update README.md --- apps/andark/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/andark/README.md b/apps/andark/README.md index 00c80ea54..ff46c9bde 100644 --- a/apps/andark/README.md +++ b/apps/andark/README.md @@ -8,4 +8,4 @@ no widgets -![image](image url "/andark_screen.png") +![logo](https://github.com/HeiLaut/BangleApps/edit/master/apps/andark/andark_screen.png) From e29c3efb004eace481c82acbb80bb8aad19452fc Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:22:56 +0100 Subject: [PATCH 045/217] Update README.md --- apps/andark/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/andark/README.md b/apps/andark/README.md index ff46c9bde..3770c1017 100644 --- a/apps/andark/README.md +++ b/apps/andark/README.md @@ -5,7 +5,6 @@ * second hand * date * battery percantage +* no widgets -no widgets - -![logo](https://github.com/HeiLaut/BangleApps/edit/master/apps/andark/andark_screen.png) +![logo](andark_screen.png) From 80c420bd7682b814be94fee11b45cd7d2d98b674 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:25:31 +0100 Subject: [PATCH 046/217] Create add_to_apps.json --- apps/andark/add_to_apps.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 apps/andark/add_to_apps.json diff --git a/apps/andark/add_to_apps.json b/apps/andark/add_to_apps.json new file mode 100644 index 000000000..71b1fb747 --- /dev/null +++ b/apps/andark/add_to_apps.json @@ -0,0 +1,13 @@ +{ "id": "andark", + "name": "Analog Dark", + "shortName":"AnDark", + "version":"0.01", + "description": "analog clock face without disturbing widgets", + "tags": "", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"anrark.app.js","url":"app.js"}, + {"name":"andark.img","url":"app_icon.js ","evaluate":true} + ] +} From e990575bc1171c9c7d287f883711f68173614c80 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:26:18 +0100 Subject: [PATCH 047/217] Update apps.json --- apps.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e5e9f8f02..473f80142 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,18 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] - } + }, + { "id": "andark", + "name": "Analog Dark", + "shortName":"AnDark", + "version":"0.01", + "description": "analog clock face without disturbing widgets", + "tags": "", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"anrark.app.js","url":"app.js"}, + {"name":"andark.img","url":"app_icon.js ","evaluate":true} + ] +} ] From 1f525aed368e7a44e420eafd0c0caeaf6a2844f7 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:32:29 +0100 Subject: [PATCH 048/217] Update apps.json --- apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 473f80142..03991e87e 100644 --- a/apps.json +++ b/apps.json @@ -5068,7 +5068,8 @@ "shortName":"AnDark", "version":"0.01", "description": "analog clock face without disturbing widgets", - "tags": "", + "type": "clock", + "tags": "cloc", "supports" : ["BANGLEJS2"], "readme": "README.md", "storage": [ From d063566213d39b25d17eb3cfe09716b6ef88514d Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:33:40 +0100 Subject: [PATCH 049/217] Add files via upload --- apps/andark/andark_icon.png | Bin 0 -> 4002 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/andark/andark_icon.png diff --git a/apps/andark/andark_icon.png b/apps/andark/andark_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cded02071d3610f442f0ce327f01943a2c915753 GIT binary patch literal 4002 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 Date: Sun, 19 Dec 2021 13:34:32 +0100 Subject: [PATCH 050/217] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index 03991e87e..a80bb9791 100644 --- a/apps.json +++ b/apps.json @@ -5068,6 +5068,7 @@ "shortName":"AnDark", "version":"0.01", "description": "analog clock face without disturbing widgets", + "icon" "andark_icon.png", "type": "clock", "tags": "cloc", "supports" : ["BANGLEJS2"], From dd423ac511a858ce414bfb300f0b0c6850478ad0 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:36:18 +0100 Subject: [PATCH 051/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index a80bb9791..d0cf99977 100644 --- a/apps.json +++ b/apps.json @@ -5068,7 +5068,7 @@ "shortName":"AnDark", "version":"0.01", "description": "analog clock face without disturbing widgets", - "icon" "andark_icon.png", + "icon": "andark_icon.png", "type": "clock", "tags": "cloc", "supports" : ["BANGLEJS2"], From 605674b0357859a441a62b69c0b8c8fca0f23a61 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:36:45 +0100 Subject: [PATCH 052/217] Update apps.json --- apps.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps.json b/apps.json index d0cf99977..75f54f912 100644 --- a/apps.json +++ b/apps.json @@ -5068,9 +5068,8 @@ "shortName":"AnDark", "version":"0.01", "description": "analog clock face without disturbing widgets", - "icon": "andark_icon.png", "type": "clock", - "tags": "cloc", + "tags": "clock", "supports" : ["BANGLEJS2"], "readme": "README.md", "storage": [ From 93f4064e4c16f6c82a384dddb7999c099057470b Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:38:19 +0100 Subject: [PATCH 053/217] Update apps.json --- apps.json | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/apps.json b/apps.json index 75f54f912..e5e9f8f02 100644 --- a/apps.json +++ b/apps.json @@ -5062,19 +5062,5 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] - }, - { "id": "andark", - "name": "Analog Dark", - "shortName":"AnDark", - "version":"0.01", - "description": "analog clock face without disturbing widgets", - "type": "clock", - "tags": "clock", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"anrark.app.js","url":"app.js"}, - {"name":"andark.img","url":"app_icon.js ","evaluate":true} - ] -} + } ] From 44f12b7e1d0a0bc3ee200a7da243d51d8cc2b4ac Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:42:50 +0100 Subject: [PATCH 055/217] Update add_to_apps.json --- apps/andark/add_to_apps.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/andark/add_to_apps.json b/apps/andark/add_to_apps.json index 71b1fb747..57613f9d2 100644 --- a/apps/andark/add_to_apps.json +++ b/apps/andark/add_to_apps.json @@ -3,7 +3,9 @@ "shortName":"AnDark", "version":"0.01", "description": "analog clock face without disturbing widgets", - "tags": "", + "icon": "andark_icon.png", + "type": "clock", + "tags": "clock", "supports" : ["BANGLEJS2"], "readme": "README.md", "storage": [ From 67f362d2a56a91cfc0d7e50bf40a6c90da2dfd54 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:43:30 +0100 Subject: [PATCH 056/217] Update apps.json --- apps.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps.json b/apps.json index e5e9f8f02..842e559b5 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,20 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] + }, + { "id": "andark", + "name": "Analog Dark", + "shortName":"AnDark", + "version":"0.01", + "description": "analog clock face without disturbing widgets", + "icon": "andark_icon.png", + "type": "clock", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"anrark.app.js","url":"app.js"}, + {"name":"andark.img","url":"app_icon.js ","evaluate":true} + ] } ] From 028e9d0f6915acd78f9b388936f96373880f9080 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:45:54 +0100 Subject: [PATCH 057/217] Update apps.json --- apps.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps.json b/apps.json index 842e559b5..7374b63e9 100644 --- a/apps.json +++ b/apps.json @@ -5069,9 +5069,8 @@ "version":"0.01", "description": "analog clock face without disturbing widgets", "icon": "andark_icon.png", - "type": "clock", "tags": "clock", - "supports" : ["BANGLEJS2"], + "supports" : ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"anrark.app.js","url":"app.js"}, From f24dbc5c02365977566ed93f01254831b4b32bd5 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:52:31 +0100 Subject: [PATCH 058/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 7374b63e9..40b4ce0f9 100644 --- a/apps.json +++ b/apps.json @@ -5073,7 +5073,7 @@ "supports" : ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ - {"name":"anrark.app.js","url":"app.js"}, + {"name":"andark.app.js","url":"app.js"}, {"name":"andark.img","url":"app_icon.js ","evaluate":true} ] } From 3547fee48b88433c708336467dfe7fed0f8a26b3 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:57:34 +0100 Subject: [PATCH 059/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 40b4ce0f9..1ae374fd7 100644 --- a/apps.json +++ b/apps.json @@ -5066,7 +5066,7 @@ { "id": "andark", "name": "Analog Dark", "shortName":"AnDark", - "version":"0.01", + "version":"0.02", "description": "analog clock face without disturbing widgets", "icon": "andark_icon.png", "tags": "clock", From 4e347b591237587566539c106dae286d11d055a5 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 13:58:42 +0100 Subject: [PATCH 060/217] Create ChangeLog --- apps/andark/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/andark/ChangeLog diff --git a/apps/andark/ChangeLog b/apps/andark/ChangeLog new file mode 100644 index 000000000..872a4b407 --- /dev/null +++ b/apps/andark/ChangeLog @@ -0,0 +1 @@ +0.02: Rename app From 6f07a83bdd5caa25b2e71a11d67838cc2d764bd3 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 14:01:28 +0100 Subject: [PATCH 061/217] Update ChangeLog --- apps/andark/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/andark/ChangeLog b/apps/andark/ChangeLog index 872a4b407..5aecb0ff9 100644 --- a/apps/andark/ChangeLog +++ b/apps/andark/ChangeLog @@ -1 +1,2 @@ +0.01: Release 0.02: Rename app From 58f663aed9b8e221586bbc46e9f6c35154c2b95a Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 14:03:14 +0100 Subject: [PATCH 062/217] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index 1ae374fd7..28b3c2b1f 100644 --- a/apps.json +++ b/apps.json @@ -5069,6 +5069,7 @@ "version":"0.02", "description": "analog clock face without disturbing widgets", "icon": "andark_icon.png", + "type": "clock", "tags": "clock", "supports" : ["BANGLEJS","BANGLEJS2"], "readme": "README.md", From 485e4a9aae2b0c6ab443f1d49140881add04fd71 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 14:06:20 +0100 Subject: [PATCH 063/217] Update ChangeLog --- apps/andark/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/andark/ChangeLog b/apps/andark/ChangeLog index 5aecb0ff9..91bbd190f 100644 --- a/apps/andark/ChangeLog +++ b/apps/andark/ChangeLog @@ -1,2 +1,3 @@ 0.01: Release 0.02: Rename app +0.03: Add type "clock" From 3111e30040b552da0f2717eaa79a3f3ffe8ad2bc Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Sun, 19 Dec 2021 14:06:41 +0100 Subject: [PATCH 064/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 28b3c2b1f..5675c30d5 100644 --- a/apps.json +++ b/apps.json @@ -5066,7 +5066,7 @@ { "id": "andark", "name": "Analog Dark", "shortName":"AnDark", - "version":"0.02", + "version":"0.03", "description": "analog clock face without disturbing widgets", "icon": "andark_icon.png", "type": "clock", From f0cbe07d1dceab32de7b7be8e5174ccd6e92cfb3 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 19:52:05 +0100 Subject: [PATCH 066/217] Two screens --- apps/lcars/bg_right.png | Bin 0 -> 791 bytes apps/lcars/lcars.app.js | 185 ++++++++++++++++++++++++++++++------ apps/lcars/screenshot.png | Bin 5139 -> 4813 bytes apps/lcars/screenshot_2.png | Bin 0 -> 2671 bytes 4 files changed, 155 insertions(+), 30 deletions(-) create mode 100644 apps/lcars/bg_right.png create mode 100644 apps/lcars/screenshot_2.png diff --git a/apps/lcars/bg_right.png b/apps/lcars/bg_right.png new file mode 100644 index 0000000000000000000000000000000000000000..6e23a5d6ebc0687268a27c368507b63ed435d2b1 GIT binary patch literal 791 zcmV+y1L*vTP)u=77?@_KC=}5|wjz5wZD`KUTKmqT@jSO- z-kr~UXW!lZ&hG38gr$UnEH1q+^tPY>YBwfF1q1-z;&TavrJU^?Epi-7rrce>jIfk% z@4qZ$}v#kR_%l%g*pk2wJWfKa{RR1o0sbG8+742wST<^BmN#~wcL6$zAz#zwJe zwO;f;mWML|KF(pKyFDn@PMq5hF&77_q&I<)#~8 z8Z8%)laqEF^M597uOAPETpL0t`Ei^l7Q~1VBSwrEvE5)XO;h$~j@VT2X39=C9tycC zDtpIOVTCIz&nzpOZff#WRQ9f`f{f|bsuR)ZcSkQi0RYp~>ioJs0qo+$B9j<1cYHN^ z-}~gUW0+}bo*KPx+pTq!PyOksV3`O)_;r29J$#f@X2b%wez;su&vbPqfc})@egR7% V)8R{}8ms^S002ovPDHLkV1jhMZOi}w literal 0 HcmV?d00001 diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8ac1dfe14..96fe186c2 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -16,6 +16,9 @@ for (const key in saved_settings) { settings[key] = saved_settings[key] } let hrmValue = 0; +var stepsData = new Array(24).fill(0); +var hrmData = new Array(24).fill(0); + /* * Colors to use @@ -25,17 +28,29 @@ let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; +/* + * Position in lcars + */ +let lcarsViewPos = 0; +let drag; + /* * Requirements and globals */ const locale = require('locale'); -var backgroundImage = { +var bgLeft = { width : 27, height : 176, bpp : 3, transparent : 0, buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) } +var bgRight = { + width : 27, height : 176, bpp : 3, + transparent : 0, + buffer : require("heatshrink").decompress(atob("lmy5YCDBIUyBAmy5AJBhYUG2EAhgIFAQMAgQIGCgQABCg4ABEAwUNFI2AKZHAKZEgGRZTGOIUDQxJxGKH5Q/agwAnUP7y/KH4yGeVYAJrdt23bAQVABIMly1ZsoCCMgUWCIYCB6AJBhIRDAQNgBIMFEwlt2i1CEwmWrAJBgI7FtpGCHYuWKH5QxEwpQDlo7F0A7IqBZBEwo7BCIwCBJo53CJoxiCJpIAdgOmzVpAQR/CgAIEAQJ2CBAoCBBIMmCg1oD4QLGFQUCCjQ+CKYw+CKY4JCKYwoCGRMaGREJDoroCgwdFzBlLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJox/CgAA=")) +} + var iconEarth = { width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) @@ -86,7 +101,7 @@ var iconNoBattery = { // Font to use: // -Graphics.prototype.setFontAntonioSmall = function(scale) { +Graphics.prototype.setFontAntonioMedium = function(scale) { // Actual height 20 (19 - 0) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAA//mP/5gAAAAAAAAAAAAA/gAMAAAAAA/gAPAAAEIIBP+H/8D+IYBP+H/8D+IABCAAwIAfnwP8+PHh448eP3+B4fAAAAAAAH/AD/4AwGAMBgD/4Af8GAAPgAPgAfgAfAAfAA+AAOP/AH/4BgGAYBgH/4A/8AAAAAAAAAQAA/B+f4/+GMPhjv/4/h8Dg/gAcYwAAPwADgAAAAAAAAB//8///sAAaAACAAAMAAb//+f//AAAAAAAbAAGwAA4AA/wADgABsAAbAAAAAAAgAAMAAPwAD8AAMAADAAAAAAAAAAHAAB/AAOAAAAAAAAMAADAAAwAAMAACAAAAAAAAAABgAAYAAAAAAAAA4AD+AP+A/4A/gAOAAAAAAAAAH//j//8wADMAAz//8f/+AAAAAAAMAADAABgAA//+P//gAAAAAAAAAAAAAfgfP4fzAfswfDP/gx/gMAAAHgPj4D8wMDMHAz//8f3+AAEAAAAADwAH8APzA/AwP//j//4AAwAAAD/Hw/x+MwBjOAYz/+Mf/AAAAAAAH//j//8wYDMGAz9/8fP+AAcDAAAwAAMAfjB/4z/wP+AD4AAwAAAAOB/f4///MHAzBwM///H9/gAAAAAAH/Pj/78wGDMBgz//8f/+AAAAAAADhwA4cAAAAAAAAAAAAAADh/A4fgAAAAOAAHwABsAA7gAccAGDAAAAANgADYAA2AANgADYAA2AAAAAAAABgwAccADuAAbAAHwAA4AAAAHwAD8c4/POMHAD/wAfwAAAAAAAAD/wD//B4B4Y/HMf8zMBMyATMwczP+M4BzHwcgf+AA+AAAAAAD4A/+P/8D+DA/4wH/+AB/4AAeAAAAAAA//+P//jBgYwYGP//j//4PH4AAAAAAAf/+P//zgAcwADP4fz+P4Ph8AAAAAAA//+P//jAAYwAGPADj//4P/4AAAAAAA//+P//jBgYwYGMGBgAAAAAAP//j//4wYAMGADBgAAAAAAAA//w///PAHzAQM4MHP7/x+/8AAAAAAD//4//+AGAABgAAYAP//j//4AAAAAAAAAA//+P//gAAAAAAAAAAAHwAB+AABgAAY//+P//AAAAAAAAAAD//4//+APgAf+Afj8PgPjAAYAAAAAAD//4//+AABgAAYAAGAAAAAAA//+P//j/gAD/wAB/gAP4B/4P/AD//4//+AAAAAAAAAAP//j//4P4AAfwAA/g//+P//gAAAAAAAAAA//g//+PAHjAAY4AOP//h//wAAAAAAD//4//+MDADAwA4cAP/AB/gAAAAAAAA//g//+PAHjAAc4APv//5//yAAAAAAD//4//+MGADBgA48AP//h+f4AAAAAAB+Pw/z+MOBjBwY/P+Hx/AAHgwAAMAAD//4//+MAADAAAAAAP//D//4AAOAABgAA4//+P//AAAAwAAP8AD//AA/+AAfgP/4//gPwAAAAA+AAP/4Af/4AD+A//j/wA/wAD/+AA/4B/+P/+D+AAAAAMADj8P4P/4A/4B//w+A+MABgAAA4AAPwAB/gAB/+A//j/gA+AAMAAAAAYwB+MH/jf+Y/8GPwBjAAAAAAP//7//+wABsAAYAAAAAAPAAD/gAH/gAD/gAD4AACAAADAAGwABv//7//+AAAA=="), 32, atob("BQUHCAgVCQQFBQkHBQcFBwgICAgICAgICAgFBQcHBwgPCQkJCQcHCQoFCQkHDQoJCQkJCAYJCQ0ICAcGBwY="), 20+(scale<<8)+(1<<16)); } @@ -146,9 +161,9 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ function drawLock(){ - g.setFontAntonioSmall(); + g.setFontAntonioMedium(); g.setColor(cOrange); - g.clearRect(120, 10, g.getWidth(), 80); + g.clearRect(120, 10, g.getWidth(), 75); g.drawString("LCARS", 130, 15); g.drawString("B-JS2", 130, 35); if(Bangle.isLocked()){ @@ -174,7 +189,7 @@ function drawState(){ // Alarm within symbol g.setFontAlign(-1, -1, 0); - g.setFontAntonioSmall(); + g.setFontAntonioMedium(); g.drawString("STATUS", 123, 97); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); @@ -183,23 +198,16 @@ function drawState(){ } } -function draw(){ - - // First handle alarm to show this correctly afterwards - handleAlarm(); - - // Next draw the watch face - g.reset(); - g.clearRect(0, 0, g.getWidth(), g.getHeight()); +function drawPosition0(){ // Draw background image - g.drawImage(backgroundImage, 0, 0); - drawHoriztonatlBgLine(cBlue, 35, 120, 0, 4); + g.drawImage(bgLeft, 0, 0); + drawHoriztonatlBgLine(cBlue, 25, 120, 0, 4); drawHoriztonatlBgLine(cBlue, 130, 176, 0, 4); - drawHoriztonatlBgLine(cPurple, 35, 110, 81, 3); - drawHoriztonatlBgLine(cPurple, 120, 176, 81, 3); - drawHoriztonatlBgLine(cOrange, 35, 110, 87, 3); - drawHoriztonatlBgLine(cOrange, 120, 176, 87, 3); + drawHoriztonatlBgLine(cPurple, 20, 70, 80, 4); + drawHoriztonatlBgLine(cPurple, 80, 176, 80, 4); + drawHoriztonatlBgLine(cOrange, 35, 110, 87, 4); + drawHoriztonatlBgLine(cOrange, 120, 176, 87, 4); drawHoriztonatlBgLine(cOrange, 20, 176, 171, 5); // Draw logo @@ -214,7 +222,7 @@ function draw(){ // Write date g.setColor(cWhite); - g.setFontAntonioSmall(); + g.setFontAntonioMedium(); var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); @@ -228,6 +236,65 @@ function draw(){ // Draw state drawState(); +} + +function drawPosition1(){ + // Draw background image + g.drawImage(bgRight, 149, 0); + drawHoriztonatlBgLine(cBlue, 0, 140, 0, 4); + drawHoriztonatlBgLine(cPurple, 0, 80, 80, 4); + drawHoriztonatlBgLine(cPurple, 90, 150, 80, 4); + drawHoriztonatlBgLine(cOrange, 0, 50, 87, 4); + drawHoriztonatlBgLine(cOrange, 60, 140, 87, 4); + drawHoriztonatlBgLine(cOrange, 0, 150, 171, 5); + + // Draw steps bars + g.setColor(cWhite); + + // HRM + require("graph").drawBar(g, hrmData, { + axes : true, + gridx : 4, + gridy : 50, + width : 140, + height : 50, + x: 5, + y: 25 + }); + + // Steps + require("graph").drawBar(g, stepsData, { + axes : true, + gridx : 4, + gridy : 2500, + width : 140, + height : 50, + x: 5, + y: 115 + }); + + g.setFontAntonioMedium(); + g.drawString("HRM", 123, 7); + g.drawString("STEPS", 116, 94); +} + +function draw(){ + // First handle alarm to show this correctly afterwards + handleAlarm(); + + // Handle steps for graph data + handleSteps(); + + // Next draw the watch face + g.reset(); + g.clearRect(0, 0, g.getWidth(), g.getHeight()); + + // Draw current lcars position + if(lcarsViewPos == 0){ + drawPosition0(); + } else if (lcarsViewPos == 1) { + drawPosition1(); + } // Queue draw in one minute queueDraw(); @@ -240,7 +307,7 @@ function draw(){ function getSteps() { if (stepsWidget() !== undefined) return stepsWidget().getSteps(); - return "???"; + return 0; } function stepsWidget() { @@ -252,6 +319,15 @@ function stepsWidget() { return undefined; } +function handleSteps(){ + var current_h = (new Date()).getHours(); + if(current_h == 0){ + stepsData[current_h] = getSteps(); + } else { + stepsData[current_h] = getSteps() - stepsData[current_h-1]; + } +} + /* * Handle alarm @@ -315,19 +391,68 @@ Bangle.on('charging',function(charging) { }); Bangle.on('HRM', function (hrm) { + var current_h = (new Date()).getHours(); + hrmValue = hrm.bpm; + hrmData[current_h] = (hrmData[current_h] + hrmValue) / 2 }); -Bangle.on('swipe',function(dir) { - // Increase alarm - if(dir == -1){ - if(isAlarmEnabled()){ - settings.alarm += 5; - } else { - settings.alarm = getCurrentTimeInMinutes() + 5; - } + +function increaseAlarm(){ + if(isAlarmEnabled()){ + settings.alarm += 5; + } else { + settings.alarm = getCurrentTimeInMinutes() + 5; } + Storage.writeJSON(SETTINGS_FILE, settings); +} + + +function decreaseAlarm(){ + if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ + settings.alarm -= 5; + } else { + settings.alarm = -1; + } + + Storage.writeJSON(SETTINGS_FILE, settings); +} + + +// Thanks to the app "gbmusic" for this code to detect swipes in all 4 directions. +Bangle.on("drag", e => { + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + + // Horizontal swipe + if (Math.abs(dx)>Math.abs(dy)+10) { + if(dx > 0){ + lcarsViewPos = 0; + } else { + lcarsViewPos = 1; + } + + // Vertical swipe + } else if (Math.abs(dy)>Math.abs(dx)+10) { + if(dy > 0){ + decreaseAlarm(); + } else { + increaseAlarm(); + } + } + + draw(); + } +}); + + +/*Bangle.on('swipe',function(dir) { + + // Decrease alarm if(dir == +1){ if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ @@ -342,7 +467,7 @@ Bangle.on('swipe',function(dir) { // Update alarm state Storage.writeJSON(SETTINGS_FILE, settings); -}); +});*/ /* * Lets start widgets, listen for btn etc. diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 768c4a172e33f1cc478bc14a13400688af7bbbb2..98bf50546ab06532dbee2dcb58524a138c9ed9f2 100644 GIT binary patch delta 4809 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
Dt*ApQ z5T6g=3&nv8NHilL0QNZ4N~?j$ViBoqbo#v-fF*5@>RswzWX)qsh=CfII#^raaLge6 z%>t$8c{G5L@+7->+HDOUtqycxdf8T!AkwUR>C`J@JQ=t-Q5;Q0C$@(3m9pE1n@}fXWiWvNC0=6 zFbf!IfdueK>u25F78tS<*WKzYAT98=z>u>LY5lZ7lm&({uoOSlc4W9`(gh>MKu9ng zF{X961UdA>wP}Vp^0SRkJGTCd*ta#!5C-;w^x3&$K-y6Yz$I_1fqzQARsgs5wYR-T z<=<~1lR#bW=zctX_PR14ibS|R4Pjtps}kL3rvS6wbZ&KQFMzpo9*7-U+Z&Oum2s_n z5pCONvn!nkMo%^MybarGygLF|vz2roB+Wy?+-iR*-?9w+>~IvrSvpmFuC*bmebJyW zWkRPWj+7NcHL&OXFn9y5n?zFwW z0Q>#@i>)11et#P6K-+mK2EHnQC22y#Yuw_J11gnI*4x;qGh5SDSbSmXWX4Sf2CwOF zW#AqFOYA!v1Aj#wYUTtOxbEu@^Md)M!FekNZe=KmF)hhK9XH}89<9&f=K))H+9-3E z-z`R`ns^{49JNOLBDBds}USv?HAAIz!1Teg>f z;>?uM4Q-5=GXacP>4s^3K+R11n_0Ls4kZvl-hb%WBQD?>3dHOQV8lu{Nz=l_KMYK5 z#cVrEXCGS5L<|8ix?^RvagG)`-6a?CmgYEZTI!Mf9=E zWqpou*MGc1HE8#lTd%)zaoj0G?6y z4szz8&F3v-UrXwHCTRH{+3+>vJqCU!?te%CBfz$%`&9ufYF+Ex?$?W)W%=~}w=gbc z;vzvDw_AFK#ZnqrTHH})Y-M20uxObc=bVvNym?32WN2;|38~RjZWf_jP6M+IV!pde z({apQ(s0_ib!z7pERvCD1TbadVnaC^QC%wqYTnu}Xq3Y3GzwPEn0L~^5}4}g9|j!V)CfHPOWUv%16vFY zJK&x0?f|y5YwL5bAGGw#GO%<2$74KhBZEdt=xTk&MI2(2FD53MmLA~wl7A7MQ3k7R zLm1d<)Rmrdp}8xy@65JbfpLE&#N(;F-y0*H|MuLpeWoL_u5~Ps47`pnZ`qR}8u*r$ z&Q2d@uvjw?a?ry0rqok3E~O8mredYm>CJ; zC`Qk6VrIrw?f7#qM1nX@PC~5;nk)5-z1So{oFKjuNVNcidNWT{bYd1`WIN}REAZ7) j3Fi5n8xb14`k?*~5mv6K=tf)E00000NkvXXu0mjfVF)RR delta 5138 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 Date: Sun, 19 Dec 2021 19:54:40 +0100 Subject: [PATCH 067/217] Minor fixes --- apps/lcars/lcars.app.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 96fe186c2..7afa05b7f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -161,6 +161,10 @@ function drawHoriztonatlBgLine(color, x1, x2, y, h){ function drawLock(){ + if(lcarsViewPos != 0){ + return; + } + g.setFontAntonioMedium(); g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); @@ -172,6 +176,10 @@ function drawLock(){ } function drawState(){ + if(lcarsViewPos != 0){ + return; + } + g.setColor(cWhite); var bat = E.getBattery(); var timeInMinutes = getCurrentTimeInMinutes(); @@ -438,6 +446,10 @@ Bangle.on("drag", e => { // Vertical swipe } else if (Math.abs(dy)>Math.abs(dx)+10) { + if(lcarsViewPos != 0){ + return; + } + if(dy > 0){ decreaseAlarm(); } else { From 75948ee04ade00344c7fe5a743ae5a559102ed14 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 19:56:34 +0100 Subject: [PATCH 068/217] Updated readme --- apps/lcars/README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 31cb81341..d84ada29b 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -8,8 +8,18 @@ the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). * LCARS Style watch face * Shows different states (charging, out of battery, GPS on etc.) * Shows customizable data (steps, HRM, battery, temperature etc.) - * Swipe left/right to activate an alarm - * Full-screen mode + * Change between multiple screens via swipe left/right. + * Display 24h graphs for steps + hrm. + * Swipe up/down to activate an alarm. + * Full-screen mode. + +## Screenshot of multiple screens +Access via swipe left/ right + +![](screenshot.png) +![](screenshot_2.png) + + ## Icons
Icons made by Smashicons, Freepik from www.flaticon.com
From bb05677ded21def2936304b601a95358dd3bf95b Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 19:57:55 +0100 Subject: [PATCH 069/217] Updated changelog --- apps/lcars/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/ChangeLog b/apps/lcars/ChangeLog index f30ae4707..c171ec3d4 100644 --- a/apps/lcars/ChangeLog +++ b/apps/lcars/ChangeLog @@ -5,4 +5,4 @@ 0.05: Additional icons for (1) charging and (2) bat < 30%. 0.06: Fix - Alarm disabled, if clock was closed. 0.07: Added settings to adjust data that is shown for each row. -0.08: Smaller background for faster rendering. Full screen mode. \ No newline at end of file +0.08: Support for multiple screens. 24h graph for steps + HRM. Fullscreen Mode. \ No newline at end of file From c2f3a4614501a3521fa9d954642092a275c0a58f Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:00:52 +0100 Subject: [PATCH 070/217] Minor change for HRM --- apps/lcars/lcars.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 7afa05b7f..6fa42f0c3 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -263,7 +263,7 @@ function drawPosition1(){ require("graph").drawBar(g, hrmData, { axes : true, gridx : 4, - gridy : 50, + gridy : 100, width : 140, height : 50, x: 5, From e1b8d8c6693825e7d8fe24df1fbe2d809ea0a0dd Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:07:28 +0100 Subject: [PATCH 071/217] Set data to zero at 00:00 --- apps/lcars/lcars.app.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 6fa42f0c3..123a8448e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -293,6 +293,13 @@ function draw(){ // Handle steps for graph data handleSteps(); + // Clear data + var current = new Date(); + if(current.getHours() == 0 && current.getMinutes() == 0){ + stepsData = new Array(24).fill(0); + hrmData = new Array(24).fill(0); + } + // Next draw the watch face g.reset(); g.clearRect(0, 0, g.getWidth(), g.getHeight()); From 6203407e1392e3e7b74e10200c4ea07eba59825b Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:09:49 +0100 Subject: [PATCH 072/217] Removed comments. --- apps/lcars/lcars.app.js | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 123a8448e..7815ff025 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -469,25 +469,6 @@ Bangle.on("drag", e => { }); -/*Bangle.on('swipe',function(dir) { - - - // Decrease alarm - if(dir == +1){ - if(isAlarmEnabled() && (settings.alarm-5 > getCurrentTimeInMinutes())){ - settings.alarm -= 5; - } else { - settings.alarm = -1; - } - } - - // Update UI - draw(); - - // Update alarm state - Storage.writeJSON(SETTINGS_FILE, settings); -});*/ - /* * Lets start widgets, listen for btn etc. */ From d34cdfbe136429d45e16f0ffbd3fce077b7a2994 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 20:56:52 +0100 Subject: [PATCH 073/217] Compute HRM hour average --- apps/lcars/lcars.app.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 7815ff025..8e6da3f88 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -15,10 +15,12 @@ let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings; for (const key in saved_settings) { settings[key] = saved_settings[key] } -let hrmValue = 0; + var stepsData = new Array(24).fill(0); var hrmData = new Array(24).fill(0); - +let hrmValue = 0; +var hrmValueAvg = 0; +var hrmValueCount = 0; /* * Colors to use @@ -406,10 +408,17 @@ Bangle.on('charging',function(charging) { }); Bangle.on('HRM', function (hrm) { - var current_h = (new Date()).getHours(); + var current = new Date(); hrmValue = hrm.bpm; - hrmData[current_h] = (hrmData[current_h] + hrmValue) / 2 + hrmValueAvg += hrmValue; + hrmValueCount += 1; + hrmData[current_h.getHours()] = hrmValueAvg / hrmValueCount; + + if(current.getMinutes() == 0){ + hrmValueAvg = 0; + hrmValueCount = 0; + } }); From 2bc8c672e01645a6834cdd5e0e39e230723bb94f Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 21:09:26 +0100 Subject: [PATCH 074/217] Dynamically select y range of graphs --- apps/lcars/lcars.app.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8e6da3f88..ae2927ae8 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -262,10 +262,13 @@ function drawPosition1(){ g.setColor(cWhite); // HRM + var maxHrm = Math.max.apply(Math, hrmData); + var gridy = (parseInt(maxHrm / 50)-1) * 50; + gridy = gridy <= 0 ? 50 : gridy; require("graph").drawBar(g, hrmData, { axes : true, gridx : 4, - gridy : 100, + gridy : gridy, width : 140, height : 50, x: 5, @@ -273,10 +276,13 @@ function drawPosition1(){ }); // Steps + var maxSteps = Math.max.apply(Math, stepsData); + var gridy = (parseInt(maxSteps / 1000)-1) * 1000; + gridy = gridy <= 0 ? 1000 : gridy; require("graph").drawBar(g, stepsData, { axes : true, gridx : 4, - gridy : 2500, + gridy : gridy, width : 140, height : 50, x: 5, @@ -284,8 +290,8 @@ function drawPosition1(){ }); g.setFontAntonioMedium(); - g.drawString("HRM", 123, 7); - g.drawString("STEPS", 116, 94); + g.drawString("HRM", 122, 9); + g.drawString("STEPS", 114, 96); } function draw(){ @@ -413,7 +419,7 @@ Bangle.on('HRM', function (hrm) { hrmValue = hrm.bpm; hrmValueAvg += hrmValue; hrmValueCount += 1; - hrmData[current_h.getHours()] = hrmValueAvg / hrmValueCount; + hrmData[current.getHours()] = hrmValueAvg / hrmValueCount; if(current.getMinutes() == 0){ hrmValueAvg = 0; From 4cc822cafb9be795a8f5484c581045e43a17a039 Mon Sep 17 00:00:00 2001 From: crazysaem Date: Sun, 19 Dec 2021 20:59:30 +0000 Subject: [PATCH 075/217] ptlaunch: Improve pattern detection code readability by PaddeK --- apps.json | 2 +- apps/ptlaunch/ChangeLog | 3 +- apps/ptlaunch/README.md | 7 ++ apps/ptlaunch/app.js | 216 ++++++++-------------------------------- apps/ptlaunch/boot.js | 183 +++++++++------------------------- 5 files changed, 99 insertions(+), 312 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..125d8609e 100644 --- a/apps.json +++ b/apps.json @@ -4861,7 +4861,7 @@ "id": "ptlaunch", "name": "Pattern Launcher", "shortName": "Pattern Launcher", - "version": "0.11", + "version": "0.12", "description": "Directly launch apps from the clock screen with custom patterns.", "icon": "app.png", "screenshots": [{"url":"manage_patterns_light.png"}], diff --git a/apps/ptlaunch/ChangeLog b/apps/ptlaunch/ChangeLog index 23031cff3..8cfa77113 100644 --- a/apps/ptlaunch/ChangeLog +++ b/apps/ptlaunch/ChangeLog @@ -2,4 +2,5 @@ 0.02: Turn on lcd when launching an app if the lock screen was disabled in the settings 0.03: Make tap to confirm new pattern more reliable. Also allow for easier creation of single circle patterns. 0.10: Improve the management of existing patterns: Draw the linked pattern on the left hand side of the app name within a scroller, similar to the default launcher. Slighlty clean up the code to make it less horrible. -0.11: Respect theme colors. Fix: Do not pollute global space with internal variables ans functions in boot.js \ No newline at end of file +0.11: Respect theme colors. Fix: Do not pollute global space with internal variables ans functions in boot.js +0.12: Improve pattern detection code readability by PaddeK http://forum.espruino.com/profiles/117930/ \ No newline at end of file diff --git a/apps/ptlaunch/README.md b/apps/ptlaunch/README.md index 7cc39e3d6..c16110f94 100644 --- a/apps/ptlaunch/README.md +++ b/apps/ptlaunch/README.md @@ -58,3 +58,10 @@ Make sure the watch is unlocked before you start drawing. If this bothers you, y 3) I have done all that and still nothing happens! Please note that drawing on the clock screen will not visually show the pattern you drew. It will start the app as soon as the pattern was recognized - this might take 1 or 2 seconds! If still nothing happens, that might be a bug, sorry! + + +## Authors + +Initial creation: [crazysaem](https://github.com/crazysaem) + +Improve pattern detection code readability: [PaddeK](http://forum.espruino.com/profiles/117930/) diff --git a/apps/ptlaunch/app.js b/apps/ptlaunch/app.js index 062cc3c62..5a2fcf228 100644 --- a/apps/ptlaunch/app.js +++ b/apps/ptlaunch/app.js @@ -114,7 +114,6 @@ var showMainMenu = () => { E.showMenu(mainmenu); }; -var positions = []; var recognizeAndDrawPattern = () => { return new Promise((resolve) => { E.showMenu(); @@ -137,148 +136,53 @@ var recognizeAndDrawPattern = () => { setWatch(() => finishHandler(), BTN); setTimeout(() => Bangle.on("tap", finishHandler), 250); - positions = []; + var positions = []; + var getPattern = (positions) => { + var circles = [ + { x: 25, y: 25, i: 0 }, + { x: 87, y: 25, i: 1 }, + { x: 150, y: 25, i: 2 }, + { x: 25, y: 87, i: 3 }, + { x: 87, y: 87, i: 4 }, + { x: 150, y: 87, i: 5 }, + { x: 25, y: 150, i: 6 }, + { x: 87, y: 150, i: 7 }, + { x: 150, y: 150, i: 8 }, + ]; + return positions.reduce((pattern, p, i, arr) => { + var idx = circles.findIndex((c) => { + var dx = p.x > c.x ? p.x - c.x : c.x - p.x; + if (dx > CIRCLE_RADIUS) { + return false; + } + var dy = p.y > c.y ? p.y - c.y : c.y - p.y; + if (dy > CIRCLE_RADIUS) { + return false; + } + if (dx + dy <= CIRCLE_RADIUS) { + return true; + } + return dx * dx + dy * dy <= CIRCLE_RADIUS_2; + }); + if (idx >= 0) { + pattern += circles[idx].i; + circles.splice(idx, 1); + } + if (circles.length === 0) { + arr.splice(1); + } + return pattern; + }, ""); + }; var dragHandler = (position) => { - log(position); positions.push(position); - - debounce().then(() => { - if (isFinished) { - return; - } - - // This might actually be a 'tap' event. - // Use this check in addition to the actual tap handler to make it more reliable - if (pattern.length > 0 && positions.length === 2) { - if ( - positions[0].x === positions[1].x && - positions[0].y === positions[1].y - ) { - finishHandler(); - positions = []; - return; - } - } - - E.showMessage("Calculating..."); - var t0 = Date.now(); - - log(positions.length); - - var circlesClone = cloneCirclesArray(); - pattern = []; - - var step = Math.floor(positions.length / 100) + 1; - - var p, a, b, circle; - - for (var i = 0; i < positions.length; i += step) { - p = positions[i]; - - circle = circlesClone[0]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(0, 1); - } - } - - circle = circlesClone[1]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(1, 1); - } - } - - circle = circlesClone[2]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(2, 1); - } - } - - circle = circlesClone[3]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(3, 1); - } - } - - circle = circlesClone[4]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(4, 1); - } - } - - circle = circlesClone[5]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(5, 1); - } - } - - circle = circlesClone[6]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(6, 1); - } - } - circle = circlesClone[7]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(7, 1); - } - } - - circle = circlesClone[8]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circlesClone.splice(8, 1); - } - } - } - var tx = Date.now(); - log(tx - t0); - positions = []; - var t1 = Date.now(); - log(t1 - t0); - - log("pattern:"); - log(pattern); - - log("redrawing"); + if (position.b === 0 || positions.length >= 200) { + pattern = getPattern(positions).split(""); g.clear(); drawCirclesWithPattern(pattern); - }); + positions = []; + } }; - Bangle.on("drag", dragHandler); }); }; @@ -461,18 +365,6 @@ var getStoredPatternsArray = () => { var CIRCLE_RADIUS = 25; var CIRCLE_RADIUS_2 = CIRCLE_RADIUS * CIRCLE_RADIUS; -var CIRCLES = [ - { x: 25, y: 25, i: 0 }, - { x: 87, y: 25, i: 1 }, - { x: 150, y: 25, i: 2 }, - { x: 25, y: 87, i: 3 }, - { x: 87, y: 87, i: 4 }, - { x: 150, y: 87, i: 5 }, - { x: 25, y: 150, i: 6 }, - { x: 87, y: 150, i: 7 }, - { x: 150, y: 150, i: 8 }, -]; - var drawCircle = (circle, drawBuffer, scale) => { if (!drawBuffer) { drawBuffer = g; @@ -563,16 +455,6 @@ var drawCirclesWithPattern = (pattern, options) => { g.drawImage(image, offset.x, offset.y); }; -var cloneCirclesArray = () => { - var circlesClone = Array(CIRCLES.length); - - for (var i = 0; i < CIRCLES.length; i++) { - circlesClone[i] = CIRCLES[i]; - } - - return circlesClone; -}; - ////// // misc lib functions ////// @@ -583,20 +465,6 @@ var log = (message) => { } }; -var debounceTimeoutId; -var debounce = (delay) => { - if (debounceTimeoutId) { - clearTimeout(debounceTimeoutId); - } - - return new Promise((resolve) => { - debounceTimeoutId = setTimeout(() => { - debounceTimeoutId = undefined; - resolve(); - }, delay || 500); - }); -}; - ////// // run main function ////// diff --git a/apps/ptlaunch/boot.js b/apps/ptlaunch/boot.js index 6fbd3ca41..19a8f16cb 100644 --- a/apps/ptlaunch/boot.js +++ b/apps/ptlaunch/boot.js @@ -5,131 +5,54 @@ console.log(JSON.stringify(message)); } }; - + var storedPatterns; + var CIRCLE_RADIUS = 25; + var CIRCLE_RADIUS_2 = Math.pow(CIRCLE_RADIUS, 2); var positions = []; + var getPattern = (positions) => { + var circles = [ + { x: 25, y: 25, i: 0 }, + { x: 87, y: 25, i: 1 }, + { x: 150, y: 25, i: 2 }, + { x: 25, y: 87, i: 3 }, + { x: 87, y: 87, i: 4 }, + { x: 150, y: 87, i: 5 }, + { x: 25, y: 150, i: 6 }, + { x: 87, y: 150, i: 7 }, + { x: 150, y: 150, i: 8 }, + ]; + return positions.reduce((pattern, p, i, arr) => { + var idx = circles.findIndex((c) => { + var dx = p.x > c.x ? p.x - c.x : c.x - p.x; + if (dx > CIRCLE_RADIUS) { + return false; + } + var dy = p.y > c.y ? p.y - c.y : c.y - p.y; + if (dy > CIRCLE_RADIUS) { + return false; + } + if (dx + dy <= CIRCLE_RADIUS) { + return true; + } + return dx * dx + dy * dy <= CIRCLE_RADIUS_2; + }); + if (idx >= 0) { + pattern += circles[idx].i; + circles.splice(idx, 1); + } + if (circles.length === 0) { + arr.splice(1); + } + return pattern; + }, ""); + }; var dragHandler = (position) => { positions.push(position); - - debounce().then(() => { - log(positions.length); - - var CIRCLE_RADIUS = 25; - var CIRCLE_RADIUS_2 = CIRCLE_RADIUS * CIRCLE_RADIUS; - - var circles = [ - { x: 25, y: 25, i: 0 }, - { x: 87, y: 25, i: 1 }, - { x: 150, y: 25, i: 2 }, - { x: 25, y: 87, i: 3 }, - { x: 87, y: 87, i: 4 }, - { x: 150, y: 87, i: 5 }, - { x: 25, y: 150, i: 6 }, - { x: 87, y: 150, i: 7 }, - { x: 150, y: 150, i: 8 }, - ]; - var pattern = []; - - var step = Math.floor(positions.length / 100) + 1; - - var p, a, b, circle; - - for (var i = 0; i < positions.length; i += step) { - p = positions[i]; - - circle = circles[0]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(0, 1); - } - } - - circle = circles[1]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(1, 1); - } - } - - circle = circles[2]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(2, 1); - } - } - - circle = circles[3]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(3, 1); - } - } - - circle = circles[4]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(4, 1); - } - } - - circle = circles[5]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(5, 1); - } - } - - circle = circles[6]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(6, 1); - } - } - circle = circles[7]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(7, 1); - } - } - - circle = circles[8]; - if (circle) { - a = p.x - circle.x; - b = p.y - circle.y; - if (CIRCLE_RADIUS_2 - (a * a + b * b) >= 0) { - pattern.push(circle.i); - circles.splice(8, 1); - } - } - } - positions = []; - - pattern = pattern.join(""); - + if (position.b === 0 || positions.length >= 200) { + var pattern = getPattern(positions); + log(pattern); + if (pattern) { if (storedPatterns[pattern]) { var app = storedPatterns[pattern].app; @@ -139,27 +62,15 @@ Bangle.setLCDPower(true); } } - + Bangle.removeListener("drag", dragHandler); load(app.src); } } } - }); - }; - - var debounceTimeoutId; - var debounce = (delay) => { - if (debounceTimeoutId) { - clearTimeout(debounceTimeoutId); + + positions = []; } - - return new Promise((resolve) => { - debounceTimeoutId = setTimeout(() => { - debounceTimeoutId = undefined; - resolve(); - }, delay || 500); - }); }; var sui = Bangle.setUI; From 3dde7126adf0c09fed5c87d4f8604618603802f3 Mon Sep 17 00:00:00 2001 From: crazysaem Date: Sun, 19 Dec 2021 21:11:38 +0000 Subject: [PATCH 076/217] ptlaunch: Improve pattern rendering by HughB --- apps.json | 2 +- apps/ptlaunch/ChangeLog | 3 ++- apps/ptlaunch/README.md | 34 ++++++++++++++++++---------------- apps/ptlaunch/app.js | 22 +++++++++++++++++++--- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/apps.json b/apps.json index 125d8609e..ddf4e2026 100644 --- a/apps.json +++ b/apps.json @@ -4861,7 +4861,7 @@ "id": "ptlaunch", "name": "Pattern Launcher", "shortName": "Pattern Launcher", - "version": "0.12", + "version": "0.13", "description": "Directly launch apps from the clock screen with custom patterns.", "icon": "app.png", "screenshots": [{"url":"manage_patterns_light.png"}], diff --git a/apps/ptlaunch/ChangeLog b/apps/ptlaunch/ChangeLog index 8cfa77113..68b7d3e1c 100644 --- a/apps/ptlaunch/ChangeLog +++ b/apps/ptlaunch/ChangeLog @@ -3,4 +3,5 @@ 0.03: Make tap to confirm new pattern more reliable. Also allow for easier creation of single circle patterns. 0.10: Improve the management of existing patterns: Draw the linked pattern on the left hand side of the app name within a scroller, similar to the default launcher. Slighlty clean up the code to make it less horrible. 0.11: Respect theme colors. Fix: Do not pollute global space with internal variables ans functions in boot.js -0.12: Improve pattern detection code readability by PaddeK http://forum.espruino.com/profiles/117930/ \ No newline at end of file +0.12: Improve pattern detection code readability by PaddeK http://forum.espruino.com/profiles/117930/ +0.13: Improve pattern rendering by HughB http://forum.espruino.com/profiles/167235/ \ No newline at end of file diff --git a/apps/ptlaunch/README.md b/apps/ptlaunch/README.md index c16110f94..5ef1e82dd 100644 --- a/apps/ptlaunch/README.md +++ b/apps/ptlaunch/README.md @@ -29,39 +29,41 @@ Then launch the linked apps directly from the clock screen by simply drawing the ## Detailed Steps From the main menu you can: + - Add a new pattern and link it to an app (first entry) - - To create a new pattern first select "Add Pattern" - - Now draw any pattern you like, this will later launch the linked app from the clock screen - - You can also draw a single-circle pattern (meaning a single tap on one circle) instead of drawing a 'complex' pattern - - If you don't like the pattern, simply re-draw it. The previous pattern will be discarded. - - If you are happy with the pattern tap on screen or press the button to continue - - Now select the app you want to launch with the pattern. - - Note, you can bind multiple patterns to the same app. + - To create a new pattern first select "Add Pattern" + - Now draw any pattern you like, this will later launch the linked app from the clock screen + - You can also draw a single-circle pattern (meaning a single tap on one circle) instead of drawing a 'complex' pattern + - If you don't like the pattern, simply re-draw it. The previous pattern will be discarded. + - If you are happy with the pattern tap on screen or press the button to continue + - Now select the app you want to launch with the pattern. + - Note, you can bind multiple patterns to the same app. - Manage created patterns (second entry) - - To manage your patterns first select "Manage Patterns" - - You will now see a scrollabe list of patterns + linked apps - - If you want to deletion a pattern (and unlink the app) simply tap on it, and confirm the deletion + - To manage your patterns first select "Manage Patterns" + - You will now see a scrollabe list of patterns + linked apps + - If you want to deletion a pattern (and unlink the app) simply tap on it, and confirm the deletion - Disable the lock screen on the clock screen from the settings (third entry) - - To launch the app from the pattern on the clock screen the watch must be unlocked. - - If this annoys you, you can disable the lock on the clock screen from the setting here + - To launch the app from the pattern on the clock screen the watch must be unlocked. + - If this annoys you, you can disable the lock on the clock screen from the setting here ## FAQ -1) Nothing happens when I draw on the clock screen! +1. Nothing happens when I draw on the clock screen! Please double-check if you actually have a pattern linked to an app. -2) I have a pattern linked to an app and still nothing happens when I draw on the clock screen! +2. I have a pattern linked to an app and still nothing happens when I draw on the clock screen! Make sure the watch is unlocked before you start drawing. If this bothers you, you can permanently disable the watch-lock from within the Pattern Launcher app (via the Settings). -3) I have done all that and still nothing happens! +3. I have done all that and still nothing happens! Please note that drawing on the clock screen will not visually show the pattern you drew. It will start the app as soon as the pattern was recognized - this might take 1 or 2 seconds! If still nothing happens, that might be a bug, sorry! - ## Authors Initial creation: [crazysaem](https://github.com/crazysaem) Improve pattern detection code readability: [PaddeK](http://forum.espruino.com/profiles/117930/) + +Improve pattern rendering: [HughB](http://forum.espruino.com/profiles/167235/) diff --git a/apps/ptlaunch/app.js b/apps/ptlaunch/app.js index 5a2fcf228..88739ddb7 100644 --- a/apps/ptlaunch/app.js +++ b/apps/ptlaunch/app.js @@ -365,6 +365,18 @@ var getStoredPatternsArray = () => { var CIRCLE_RADIUS = 25; var CIRCLE_RADIUS_2 = CIRCLE_RADIUS * CIRCLE_RADIUS; +var CIRCLES = [ + { x: 25, y: 25, i: 0 }, + { x: 87, y: 25, i: 1 }, + { x: 150, y: 25, i: 2 }, + { x: 25, y: 87, i: 3 }, + { x: 87, y: 87, i: 4 }, + { x: 150, y: 87, i: 5 }, + { x: 25, y: 150, i: 6 }, + { x: 87, y: 150, i: 7 }, + { x: 150, y: 150, i: 8 }, +]; + var drawCircle = (circle, drawBuffer, scale) => { if (!drawBuffer) { drawBuffer = g; @@ -380,7 +392,8 @@ var drawCircle = (circle, drawBuffer, scale) => { log("drawing circle"); log({ x: x, y: y, r: r }); - drawBuffer.drawCircle(x, y, r); + drawBuffer.setColor(0); + drawBuffer.fillCircle(x, y, r); }; var cachedCirclesDrawings = {}; @@ -425,8 +438,11 @@ var drawCirclesWithPattern = (pattern, options) => { { msb: true } ); - CIRCLES.forEach((circle) => drawCircle(circle, drawBuffer, scale)); + drawBuffer.setColor(1); + drawBuffer.fillRect(0, 0, drawBuffer.getWidth(), drawBuffer.getHeight()); + CIRCLES.forEach((circle) => drawCircle(circle, drawBuffer, scale)); + drawBuffer.setColor(1); drawBuffer.setFontAlign(0, 0); drawBuffer.setFont("Vector", 40 * scale); pattern.forEach((circleIndex, patternIndex) => { @@ -437,12 +453,12 @@ var drawCirclesWithPattern = (pattern, options) => { circle.y * scale ); }); - image = { width: drawBuffer.getWidth(), height: drawBuffer.getHeight(), bpp: 1, buffer: drawBuffer.buffer, + palette: new Uint16Array([g.theme.fg, g.theme.bg], 0, 1), }; if (enableCaching) { From 2c2f07c6bec06e45fc73870d819634e88aee7645 Mon Sep 17 00:00:00 2001 From: crazysaem Date: Sun, 19 Dec 2021 21:14:14 +0000 Subject: [PATCH 077/217] ptlaunch: remove tap to confirm pattern since its pretty unreliable. always use button instead --- apps/ptlaunch/README.md | 2 +- apps/ptlaunch/app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ptlaunch/README.md b/apps/ptlaunch/README.md index 5ef1e82dd..cf75315a9 100644 --- a/apps/ptlaunch/README.md +++ b/apps/ptlaunch/README.md @@ -35,7 +35,7 @@ From the main menu you can: - Now draw any pattern you like, this will later launch the linked app from the clock screen - You can also draw a single-circle pattern (meaning a single tap on one circle) instead of drawing a 'complex' pattern - If you don't like the pattern, simply re-draw it. The previous pattern will be discarded. - - If you are happy with the pattern tap on screen or press the button to continue + - If you are happy with the pattern press the button to continue - Now select the app you want to launch with the pattern. - Note, you can bind multiple patterns to the same app. - Manage created patterns (second entry) diff --git a/apps/ptlaunch/app.js b/apps/ptlaunch/app.js index 88739ddb7..5db3a335b 100644 --- a/apps/ptlaunch/app.js +++ b/apps/ptlaunch/app.js @@ -134,7 +134,7 @@ var recognizeAndDrawPattern = () => { resolve(pattern.join("")); }; setWatch(() => finishHandler(), BTN); - setTimeout(() => Bangle.on("tap", finishHandler), 250); + // setTimeout(() => Bangle.on("tap", finishHandler), 250); var positions = []; var getPattern = (positions) => { From f6a5bc563ec884cf54f7677a7b8d0480ad39aacb Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:22:28 +0100 Subject: [PATCH 078/217] Use health library to display data. --- apps/lcars/lcars.app.js | 55 +++++++++++++++++++----------------- apps/lcars/screenshot_2.png | Bin 2671 -> 2802 bytes 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index ae2927ae8..53849e840 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -17,10 +17,7 @@ for (const key in saved_settings) { } var stepsData = new Array(24).fill(0); -var hrmData = new Array(24).fill(0); let hrmValue = 0; -var hrmValueAvg = 0; -var hrmValueCount = 0; /* * Colors to use @@ -260,29 +257,43 @@ function drawPosition1(){ // Draw steps bars g.setColor(cWhite); + let health; - // HRM - var maxHrm = Math.max.apply(Math, hrmData); - var gridy = (parseInt(maxHrm / 50)-1) * 50; - gridy = gridy <= 0 ? 50 : gridy; - require("graph").drawBar(g, hrmData, { + try { + health = require("health"); + } catch(ex) { + g.setFontAntonioMedium(); + g.drawString("MODULE HEALTH", 20, 110); + g.drawString("REQUIRED.", 20, 130); + g.drawString("MODULE HEALTH", 20, 20); + g.drawString("REQUIRED.", 20, 40); + return; + } + + // Plot HRM graph + var data = new Uint16Array(31); + var cnt = new Uint8Array(31); + health.readDailySummaries(new Date(), h=>{ + data[h.day]+=h.bpm; + if (h.bpm) cnt[h.day]++; + }); + require("graph").drawBar(g, data, { axes : true, gridx : 4, - gridy : gridy, + gridy : 100, width : 140, height : 50, x: 5, y: 25 }); - // Steps - var maxSteps = Math.max.apply(Math, stepsData); - var gridy = (parseInt(maxSteps / 1000)-1) * 1000; - gridy = gridy <= 0 ? 1000 : gridy; - require("graph").drawBar(g, stepsData, { + // Plot step graph + var data = new Uint16Array(31); + health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); + require("graph").drawBar(g, data, { axes : true, gridx : 4, - gridy : gridy, + gridy : 5, width : 140, height : 50, x: 5, @@ -290,8 +301,10 @@ function drawPosition1(){ }); g.setFontAntonioMedium(); + g.setColor(cWhite); g.drawString("HRM", 122, 9); - g.drawString("STEPS", 114, 96); + g.drawString("STEPS [K]", 90, 96); + } function draw(){ @@ -414,17 +427,7 @@ Bangle.on('charging',function(charging) { }); Bangle.on('HRM', function (hrm) { - var current = new Date(); - hrmValue = hrm.bpm; - hrmValueAvg += hrmValue; - hrmValueCount += 1; - hrmData[current.getHours()] = hrmValueAvg / hrmValueCount; - - if(current.getMinutes() == 0){ - hrmValueAvg = 0; - hrmValueCount = 0; - } }); diff --git a/apps/lcars/screenshot_2.png b/apps/lcars/screenshot_2.png index 8960ff8dffd4a45f0028e54fdd35db85149044ac..4501e52fa0a0fc2bebfff6f916eb8bcd9a89489a 100644 GIT binary patch literal 2802 zcmbtWXH-+$5%LDQ>9MROFiI+BJcf-~?tfEP8D{$R-< ztBrTFlAG4j*mwU~SIz3nsqoZ{#vHQ%;j($*ju{WOg}Uvn>p&Tg`gpgy})SzmgYxD!D4?3OmdiyBC- z@>g^rvP@E0X*CC{wd5AV>oHEEUf^cU-E*Mb09m>u?)M@YXxv;+Q~13)PDdkYHhPr| ze#6BlSNltp7V;F}<3nl|tEt+LRTo0u5C0r{D_S$%8q;}Jq8P^fVPKi*h~$R3Y>(?a z!Jz>uBao?f#Jw*0PDx=ix?3BQ&2XZ~L#KJ;B_GLNuYW2{KpAX?9eTPB`2iq&#T>hv z5;DZZ{MAMC1|Mt$ztXnV4=%3(<~KW~R4ptS=f`30ZcyqYSuf$sw*G`O+GP1uzv| zBQLBbJ{-sN(z&on86EcG(#G>o05nQ=-Vs22-OHNc?kh&K!srAMlNV|YP)Pf5&SdYA zAwcilP0(=A9*1LVU87S-51*!jM(A>R=xY_snY;m!An&@g2k3`vVdJV|h(y5u0qJ<> z4;nWL+Pt%glI%MXK{zy|+BcX87Xc@Bo)XJ!7?b@RAlf+qDd~7L@qizoroJ8h+cxkE zf3@G3@*@gVky2uSkSsJAh{&tWUG)Scg)pRzIKfX=9jI8)R=iVAdA3EJ;) zf1MFJtJh~K572|%0PSMPJJo@Iff1`X_N3TvO=_%Mt*0fcMRAR@!>jeA_V7aBylSKg z_7{^&c#@a8fL=N3j&3zFCf^GC<%aY=a`ye}4f+N%Zri+yvyrG^VImY_hrhz{cD#Ud zvO}Hz((X*AZpV5xB$2&*hi;EOHj(sO#iR&<-@D9IT^%$Tu|rsrI3PS|i79TId$VdCk0P!n`2 zHdEcCvm)R1Kn1Qz+sxx?B2%1SS4_?~`)XIgiRyYsJl}*8cZf6px#QjC*O4z$-l@yz zG`(O?pamB59iyR<>8t*_6qn__2*yGmRN2s4_}Ojm)X7=TVYS-+#q0P7x^FxuhPM5= zSl<<{moluHYFO42ZRCiVlBUd4)IK9AUSF6OW?rntMwEx0FHidC7qTV#1UkNJ zhib00pPXjZg*i1?w0t)A@dKZt zAA{-JLyqY2aV&c)JS(cz;xFH=F!wS-2<+p&Hr(9uW+*yz3MdDJiWTt>PE``ZdZrUY zVys7H4n7P`@4CA*OAD+Wc>ChoL{CYtzXfce9>{^UBPk={%8OQ%;QdGdq?0+yhzpX6 zh!mUT-sAZ6Z}Nmh*)vh#kOw9jRC!Zi;S}#RIC@H#T`g@&!qjnWu|8*1d7$mg)bh)9 z0d*YvrdD@Bl=NeTK3BG_AyvScALQ%i%L=lAbodf$d2~t!+2VFE27Ut!o-VNJ#|g6W zbmF!QgF8t~9cUc%uS(k+>w*mkpy2xt)B0W|C_5+rTHgIU!^ut6*`9kih&g#?$FG-# zsYhhOSm*Yi6J-NK@Bh++TA}$Z%U=M4Jwcyq7LRu8OGyf;U8O1$2@Ah^{9@Ps<@9!3fpu3Ja3aqg8gh@(xyYbcY&w59dxPu(v)@Wbe1~ zn0r9*6`FLx2ymwO9Retbh7>{yuk^=2#9PkYDyp%On4=VMVw)Wx{8QwDLO}$+#G(2n zfP!Nxg(-ky{yksSoNopwB0MBhYarkT=teKh!T|pgF04c2%*+R37`yWWce{R327WvC zgIKV^UTNoqSKe0WTiKiv!vKXU>{9$obYmDpGUef!D(CVF)24~9EVJU8OI z4*>3tf2GIk>!@@h0F3xZDi8Qy zo6qOHEo+uMPVLkJ3NYtmKdt15%Sy3J?u`|frP8;nQdeBokUf>4Deg)%pXN>2IpMDh{Sxn{U1ZdS4AN6a@&5{N(Y;dx#2)V@tk z#0;~Q+_q5aEZH}rEPcgtpFO7+?Y{H=SNoLU*_4`QIg8F>d_wE}_dZTL(_8O#Eefq*fjspXZikzS$M^v+od#HJ%#Yr zi1Kbus9-Y6@Xm^B?_pYKd`jSsZ8-~iO*2adV`fHCjK_lk!FXE z`EeCjd;4*dvicDAFBE@9fdB^LYY zY3?RBxy^>=4Pn3OIQ@I`Bd!%LWR)fi;-)E4Xid1A@F|JnNbojV-uonF(ZJGASZD$B zuTa2?9;ZucZ_;Uc#Qv$EjHlZwcz=4r#+P?kEnHShZ%e_gcG55|NoVd3^=p3ckn0!> zMGRjuy=WbJ@yAZ>(=iD@eypIR0(c=u2 ri=M5}A4v!*E73d#yqhL-`WJ#|7U#5e%Q9X3i3Lbj$1HQqDG~nwBr*|` delta 2649 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 Date: Sun, 19 Dec 2021 22:25:55 +0100 Subject: [PATCH 079/217] Updated readme --- apps/lcars/README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index d84ada29b..8c31d04e4 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,26 +1,30 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, its necessary (but still optional) to install +Note: To display the steps, its necessary to install the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). +To display the month graphs on screen 2, the health app is required. +Nevertheless, lcars can also be used, with limited functionality, without +installing those apps. + ## Features * LCARS Style watch face * Shows different states (charging, out of battery, GPS on etc.) * Shows customizable data (steps, HRM, battery, temperature etc.) * Change between multiple screens via swipe left/right. - * Display 24h graphs for steps + hrm. + * Display month graphs for steps + hrm on screen 2. * Swipe up/down to activate an alarm. * Full-screen mode. -## Screenshot of multiple screens -Access via swipe left/ right + +## Multiple screens support +Access different screens via swipe left/ right ![](screenshot.png) ![](screenshot_2.png) - ## Icons
Icons made by Smashicons, Freepik from www.flaticon.com
From 91a3b5feef9bcbfd965dc6ff3f8e2ab64ea620c1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:30:40 +0100 Subject: [PATCH 080/217] Updated readme. --- apps/lcars/README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 8c31d04e4..7c56f5481 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -9,13 +9,15 @@ installing those apps. ## Features - * LCARS Style watch face - * Shows different states (charging, out of battery, GPS on etc.) - * Shows customizable data (steps, HRM, battery, temperature etc.) - * Change between multiple screens via swipe left/right. - * Display month graphs for steps + hrm on screen 2. - * Swipe up/down to activate an alarm. - * Full-screen mode. + * LCARS Style watch face. + * Full screen mode - widgets are still loaded. + * Supports multiple screens with different data. + * [Screen 1] Date + Time + Lock status. + * [Screen 1] Shows randomly images of real planets. + * [Screen 1] Shows different states such as (charging, out of battery, GPS on etc.) + * [Screen 1] Swipe up/down to activate an alarm. + * [Screen 1] Shows 3 customizable datapoints on the first screen. + * [Screen 2] Display month graphs for steps + hrm on the second screen. ## Multiple screens support From 6252dc89828d2fec9f73e4733270dd1ee57b75d1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:42:47 +0100 Subject: [PATCH 081/217] Use health app also for steps overview. --- apps/lcars/README.md | 7 ++----- apps/lcars/lcars.app.js | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 7c56f5481..b7a692c96 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,11 +1,8 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, its necessary to install -the [Pedometer widget](https://banglejs.com/apps/#pedometer%20widget). -To display the month graphs on screen 2, the health app is required. -Nevertheless, lcars can also be used, with limited functionality, without -installing those apps. +Note: To display the steps, the health app is required. +If this app is not installed, the data will not be shown. ## Features diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 53849e840..8d86c09d1 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -271,14 +271,15 @@ function drawPosition1(){ } // Plot HRM graph - var data = new Uint16Array(31); - var cnt = new Uint8Array(31); + var data = new Uint16Array(32); + var cnt = new Uint8Array(32); health.readDailySummaries(new Date(), h=>{ data[h.day]+=h.bpm; if (h.bpm) cnt[h.day]++; }); require("graph").drawBar(g, data, { axes : true, + minx: 1, gridx : 4, gridy : 100, width : 140, @@ -288,10 +289,11 @@ function drawPosition1(){ }); // Plot step graph - var data = new Uint16Array(31); + var data = new Uint16Array(32); health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); require("graph").drawBar(g, data, { axes : true, + minx: 1, gridx : 4, gridy : 5, width : 140, @@ -341,9 +343,15 @@ function draw(){ * Step counter via widget */ function getSteps() { - if (stepsWidget() !== undefined) - return stepsWidget().getSteps(); - return 0; + var steps = 0 + try { + health = require("health"); + } catch(ex) { + return steps; + } + + health.readDay(new Date(), h=>steps+=h.steps); + return steps; } function stepsWidget() { From 23ac5310088c966892bf1b316dcd6bd9440c1a6c Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:49:18 +0100 Subject: [PATCH 082/217] Removed unused code. --- apps/lcars/lcars.app.js | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8d86c09d1..d63b2c743 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -16,9 +16,6 @@ for (const key in saved_settings) { settings[key] = saved_settings[key] } -var stepsData = new Array(24).fill(0); -let hrmValue = 0; - /* * Colors to use */ @@ -28,10 +25,11 @@ let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; /* - * Position in lcars + * Global lcars variables */ let lcarsViewPos = 0; let drag; +let hrmValue = 0; /* * Requirements and globals @@ -313,9 +311,6 @@ function draw(){ // First handle alarm to show this correctly afterwards handleAlarm(); - // Handle steps for graph data - handleSteps(); - // Clear data var current = new Date(); if(current.getHours() == 0 && current.getMinutes() == 0){ @@ -354,24 +349,6 @@ function getSteps() { return steps; } -function stepsWidget() { - if (WIDGETS.activepedom !== undefined) { - return WIDGETS.activepedom; - } else if (WIDGETS.wpedom !== undefined) { - return WIDGETS.wpedom; - } - return undefined; -} - -function handleSteps(){ - var current_h = (new Date()).getHours(); - if(current_h == 0){ - stepsData[current_h] = getSteps(); - } else { - stepsData[current_h] = getSteps() - stepsData[current_h-1]; - } -} - /* * Handle alarm From e8909dd57efa3a99ad2114c8582130cee3d02d88 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 19 Dec 2021 22:52:05 +0100 Subject: [PATCH 083/217] Minor design improvements. --- apps/lcars/lcars.app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index d63b2c743..9068868f0 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -165,10 +165,10 @@ function drawLock(){ g.setFontAntonioMedium(); g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); - g.drawString("LCARS", 130, 15); - g.drawString("B-JS2", 130, 35); + g.drawString("LCARS", 130, 12); + g.drawString("B-JS2", 130, 32); if(Bangle.isLocked()){ - g.drawString("LOCK", 130, 55); + g.drawString("LOCK", 130, 52); } } @@ -223,7 +223,7 @@ function drawPosition0(){ var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 25, 12); + g.drawString(timeStr, 25, 10); // Write date g.setColor(cWhite); @@ -231,7 +231,7 @@ function drawPosition0(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 28, 58); + g.drawString(dayStr, 28, 56); // Draw data g.setColor(cWhite); From d60e7c181620e9486457500ebaf7eedf66ed2f61 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 18:48:16 -0500 Subject: [PATCH 084/217] Create app.js --- apps/slimehunt/app.js | 341 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 apps/slimehunt/app.js diff --git a/apps/slimehunt/app.js b/apps/slimehunt/app.js new file mode 100644 index 000000000..255399072 --- /dev/null +++ b/apps/slimehunt/app.js @@ -0,0 +1,341 @@ +//Create constants +const GREEN_SLIME = 1; //Normal slime, is always neutral. +const PINK_SLIME = 2; //Can get angry +const GRAY_SLIME = 3; //Can be neutral, angry or erratic +const YELLOW_SLIME = 4; //Is always erratic +const PURPLE_SLIME = 5; //Is always angry + +//Initialize variables +var playerHP = 20; +var slimeHP = 3; +var slimeType = GREEN_SLIME; +var turn = 0; +var screenWidth = g.getWidth(); +var screenHeight = g.getHeight(); +var slimeState = 0; +var showBattleResult = false; +var dmgDealt = 0; +var playerDefence = 0; + +var refreshInterval; +var waitTime = 0; + +var highscore = 0; +var score = 0; + +var themeNote = 0; + +//Load files +var file = require("Storage").open("highscore.txt","r"); +highscore = file.readLine(); +if (highscore == undefined) highscore = 0; + +var greenSlime = require("Storage").read("slime.img"); +var pinkSlime = require("Storage").read("slimered.img"); +var graySlime = require("Storage").read("slimegray.img"); +var yellowSlime = require("Storage").read("slimeyellow.img"); +var purpleSlime = require("Storage").read("slimepurple.img"); + +//UI Stuff +function drawOpeningUI() { + g.clear(); + g.setFont("Vector",screenWidth/15); + g.setFontAlign(0,0); // center font + g.drawString("SLIME HUNT",screenWidth/2,screenHeight*0.1); + g.drawString("-SCORE TO BEAT-",screenWidth/2,screenHeight*0.3); + g.drawString("<><><> "+highscore+" <><><>",screenWidth/2,screenHeight*0.45); + g.setFont("Vector",screenWidth/20); + g.drawString("A Slime approches...",screenWidth/2,screenHeight*0.6); + wait(8,waitForBattle); +} + +function drawSlime() { + switch(slimeType) { + case GREEN_SLIME: + g.drawImage(greenSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); + break; + case PINK_SLIME: + g.drawImage(pinkSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); + break; + case GRAY_SLIME: + g.drawImage(graySlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); + break; + case YELLOW_SLIME: + g.drawImage(yellowSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); + break; + case PURPLE_SLIME: + g.drawImage(purpleSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); + break; + } +} + +function drawBattleUI() { + g.clear(); + g.setFont("Vector",screenWidth/8); + g.setFontAlign(0,0); // center font + g.drawString("SLIME HP: " + slimeHP,screenWidth/2,screenHeight*0.1); + g.setFont("Vector",screenWidth/20); + if (!showBattleResult) { + switch(slimeState) { + case 0: + g.drawString("The slime seems neutral...",screenWidth/2,screenHeight*0.25); + break; + case 1: + g.drawString("The slime seems angry...",screenWidth/2,screenHeight*0.25); + break; + case 2: + g.drawString("The slime seems eratic...",screenWidth/2,screenHeight*0.25); + break; + } + }else{ + var brString = (turn == 0 ? "The Slime loses " : "You lose "); + g.drawString(brString + dmgDealt + "HP!",screenWidth/2,screenHeight*0.25); + } + drawSlime(); + g.drawLine(0,screenHeight*0.72,screenWidth,screenHeight*0.72); + if (turn == 0) { + g.setFont("Vector",screenWidth/15); + g.drawString("Your HP is " + playerHP + ".",screenWidth/2,screenHeight*0.8); + g.setFont("Vector",screenWidth/20); + g.drawString("(B1) FIGHT\t|\t(B2) DEFEND\t|\t(B3) RUN",screenWidth/2,screenHeight*0.9); + } +} + +function win() { + wait(5,winTheme); + calcScore(slimeType); + showBattleResult = false; + g.clear(); + g.setFont("Vector",screenWidth/8); + g.setFontAlign(0,0); // center font + g.drawString("YOU WON!",screenWidth/2,screenHeight/2); + g.setFont("Vector",screenWidth/20); + g.drawString("Your score is << " + score + " >>",screenWidth/2,screenHeight*0.75); + g.drawString("Press (B3) to find another slime!",screenWidth/2,screenHeight*0.9); + turn = 0; + setWatch(run,BTN3); +} + +function lose() { + wait(5,loseTheme); + playerHP = 20; + showBattleResult = false; + g.clear(); + g.setFont("Vector",screenWidth/8); + g.setFontAlign(0,0); // center font + g.drawString("You lose...",screenWidth/2,screenHeight/2); + g.setFont("Vector",screenWidth/20); + g.drawString("Your score is << " + score + " >>",screenWidth/2,screenHeight*0.75); + g.drawString("Press (B3) to try again...",screenWidth/2,screenHeight*0.9); + score = 0; + turn = 0; + setWatch(run,BTN3); +} + +//Battle Stuff +function nextTurn() { + turn = (turn == 0 ? 1 : 0); +} + +function slimeFight() { + Bangle.beep(100, 500); + switch(slimeState) { + case 0: + dmgDealt = Math.floor(Math.random() * 2); + break; + case 1: + dmgDealt = Math.floor(Math.random() * 3) + 3; + break; + case 2: + dmgDealt = Math.floor(Math.random() * 6); + break; + } + dmgDealt = Math.max(0,dmgDealt - playerDefence); + playerHP -= dmgDealt; + slimeAI(); +} + +function fight() { + if (turn == 0 && waitTime <= 0) { + Bangle.beep(100, 1000); + dmgDealt = 1; + playerDefence = 0; + slimeHP -= dmgDealt; + showBattleResult = true; + drawBattleUI(); + wait(5,waitForTurn); + } +} + +function defend() { + if (turn == 0 && waitTime <= 0) { + dmgDealt = 0; + playerDefence = 3; + showBattleResult = true; + drawBattleUI(); + wait(5,waitForTurn); + } +} + +function run() { + if (turn == 0 && waitTime <= 0) { + showBattleResult = false; + Bangle.beep(200, 4000); + wait(3,waitForBattle); + } +} + + +function newBattle() { + showBattleResult = false; + slimeType = Math.floor(Math.random() * 5) + 1; + switch(slimeType) { + case GREEN_SLIME: + slimeHP = 3; + break; + case PINK_SLIME: + slimeHP = 3; + break; + case GRAY_SLIME: + slimeHP = 5; + break; + case YELLOW_SLIME: + slimeHP = 5; + break; + case PURPLE_SLIME: + slimeHP = 5; + break; + } + turn = 0; + battle(); + slimeAI(); + drawBattleUI(); +} + +function battle() { + setWatch(fight,BTN1); + setWatch(defend,BTN2); + setWatch(run,BTN3); +} + +function slimeAI() { + switch(slimeType) { + case GREEN_SLIME: + slimeState = 0; + break; + case PINK_SLIME: + slimeState = Math.floor(Math.random() * 2); + break; + case GRAY_SLIME: + slimeState = Math.floor(Math.random() * 3); + break; + case YELLOW_SLIME: + slimeState = 2; + break; + case PURPLE_SLIME: + slimeState = 1; + break; + } +} + + +//Timed transitions +function wait(duration,waitFunc) { + waitTime = duration; + if (!refreshInterval) + refreshInterval = setInterval(waitFunc, 500); +} + +function waitForTurn() { + waitTime--; + if (waitTime <= 0) { + clearInterval(refreshInterval); + refreshInterval = undefined; + nextTurn(); + if (playerHP > 0 && slimeHP > 0) { + if (turn == 1) { + slimeFight(); + wait(5,waitForTurn); + }else{ + showBattleResult = false; + battle(); + } + drawBattleUI(); + }else{ + if (playerHP <= 0) { + lose(); + } + if (slimeHP <= 0) { + win(); + } + } + } + Bangle.setLCDPower(1); +} + +function waitForBattle() { + waitTime--; + Bangle.beep(100, 1000); + if (waitTime <= 0) { + clearInterval(refreshInterval); + refreshInterval = undefined; + showBattleResult = false; + newBattle(); + } + Bangle.setLCDPower(1); +} + +function winTheme() { + waitTime--; + Bangle.beep(200, 100*themeNote); + themeNote++; + if (waitTime <= 0) { + themeNote = 0; + clearInterval(refreshInterval); + refreshInterval = undefined; + } + Bangle.setLCDPower(1); +} + +function loseTheme() { + waitTime--; + Bangle.beep(200, 600-(100*themeNote)); + themeNote++; + if (waitTime <= 0) { + themeNote = 0; + clearInterval(refreshInterval); + refreshInterval = undefined; + } + Bangle.setLCDPower(1); +} + +//Calculations +function calcScore(slimeType) { + switch(slimeType) { + case GREEN_SLIME: + score += 1; + break; + case PINK_SLIME: + score += 2; + break; + case GRAY_SLIME: + score += 2; + break; + case YELLOW_SLIME: + score += 5; + break; + case PURPLE_SLIME: + score += 10; + break; + } + if (score > highscore) { + file.erase(); + file = require("Storage").open("highscore.txt","w"); + file.write(score); + } +} + +//------------------------------------GAME STARTS HERE ----------------------------------------------- + +//Load opening UI +drawOpeningUI(); From 997f1aba741cba00b6131fe680785c4629ab03b6 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 18:52:45 -0500 Subject: [PATCH 085/217] Create app-icon.js --- apps/slimehunt/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/slimehunt/app-icon.js diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js new file mode 100644 index 000000000..b575aa4d6 --- /dev/null +++ b/apps/slimehunt/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) From dabc8225737843294235dab681a8598e5aa1fcba Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 18:56:14 -0500 Subject: [PATCH 086/217] Update apps.json --- apps.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps.json b/apps.json index fd2e14e60..7c9e1b524 100644 --- a/apps.json +++ b/apps.json @@ -4857,5 +4857,17 @@ {"name":"clicompleteclk.app.js","url":"app.js"}, {"name":"clicompleteclk.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "slimehunt", + "name": "Slime Hunt", + "shortName":"SlimeHunt", + "icon": "app.png", + "version":"0.01", + "description": "Fight against slimes in turn based combat, try to get the highscore!", + "tags": "RPG", + "storage": [ + {"name":"slimehunt.app.js","url":"app.js"}, + {"name":"slimehunt.img","url":"app-icon.js","evaluate":true} + ] } ] From 98b2721893fa28464da653269d4e4dcd937d7b16 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:01:27 -0500 Subject: [PATCH 087/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index b575aa4d6..793681814 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")); From a04f169d094afbfae5236b915d66870eabdb4352 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:04:20 -0500 Subject: [PATCH 088/217] Update apps.json --- apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 7c9e1b524..a8fbe2bfe 100644 --- a/apps.json +++ b/apps.json @@ -4864,7 +4864,8 @@ "icon": "app.png", "version":"0.01", "description": "Fight against slimes in turn based combat, try to get the highscore!", - "tags": "RPG", + "tags": "rpg", + "supports" : ["BANGLEJS"], "storage": [ {"name":"slimehunt.app.js","url":"app.js"}, {"name":"slimehunt.img","url":"app-icon.js","evaluate":true} From 869aa0f6dcee45f62926df029be3ec82c8cb6bd7 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:07:08 -0500 Subject: [PATCH 089/217] Update apps.json --- apps.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/apps.json b/apps.json index a8fbe2bfe..8a2513f33 100644 --- a/apps.json +++ b/apps.json @@ -4857,18 +4857,18 @@ {"name":"clicompleteclk.app.js","url":"app.js"}, {"name":"clicompleteclk.img","url":"app-icon.js","evaluate":true} ] -}, -{ "id": "slimehunt", - "name": "Slime Hunt", - "shortName":"SlimeHunt", - "icon": "app.png", - "version":"0.01", - "description": "Fight against slimes in turn based combat, try to get the highscore!", - "tags": "rpg", - "supports" : ["BANGLEJS"], - "storage": [ - {"name":"slimehunt.app.js","url":"app.js"}, - {"name":"slimehunt.img","url":"app-icon.js","evaluate":true} - ] -} + }, + { "id": "slimehunt", + "name": "Slime Hunt", + "shortName":"SlimeHunt", + "icon": "app.png", + "version":"0.01", + "description": "Fight against slimes in turn based combat, try to get the highscore!", + "tags": "rpg", + "supports" : ["BANGLEJS"], + "storage": [ + {"name":"slimehunt.app.js","url":"app.js"}, + {"name":"slimehunt.img","url":"app-icon.js","evaluate":true} + ] + } ] From 1d2433c3ae460b6178c9842c918a3268407d8de3 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:08:52 -0500 Subject: [PATCH 090/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 8a2513f33..44f1ca11e 100644 --- a/apps.json +++ b/apps.json @@ -4861,7 +4861,7 @@ { "id": "slimehunt", "name": "Slime Hunt", "shortName":"SlimeHunt", - "icon": "app.png", + "icon": "slime.png", "version":"0.01", "description": "Fight against slimes in turn based combat, try to get the highscore!", "tags": "rpg", From 5e30c0f51c9efc65cc585a96f9c8e54776b826c0 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:09:37 -0500 Subject: [PATCH 091/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index 793681814..b575aa4d6 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")); +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) From 2422474bab030c9af18c9aa0f8f95b124a7a2051 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:12:25 -0500 Subject: [PATCH 092/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index b575aa4d6..d38a9ad55 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) +E.toArrayBuffer(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA"))); From 55e9695b9dc1eff3a33f372c52da73735a5a9a34 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:13:53 -0500 Subject: [PATCH 093/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index d38a9ad55..1e2339e38 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA"))); +var img = require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) From d3997747da3e1b703dc61fc7f0002b4f8adbbc2e Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:16:56 -0500 Subject: [PATCH 094/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index 1e2339e38..b575aa4d6 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -var img = require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) From da5c6f5b001678d8b6398362888567faecb1e11b Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:18:32 -0500 Subject: [PATCH 095/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 44f1ca11e..8a2513f33 100644 --- a/apps.json +++ b/apps.json @@ -4861,7 +4861,7 @@ { "id": "slimehunt", "name": "Slime Hunt", "shortName":"SlimeHunt", - "icon": "slime.png", + "icon": "app.png", "version":"0.01", "description": "Fight against slimes in turn based combat, try to get the highscore!", "tags": "rpg", From 13d92ff26213e9786dd1c8d82e710edf9cf87e0d Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:19:33 -0500 Subject: [PATCH 097/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index b575aa4d6..d312bc76d 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) +E.toArrayBuffer(atob("MDCI/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v4AAAAAAAAAAAAAAAAAAAAA/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+AABhjIyMjIyMjIyMjIyMjIzXAAAA/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/gAAYYyMjIyMjIyMjIyMjIyMjIyMjIzXAP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+AGGMjIyMjIyMjIyMjIyMjIyMjIyMjIyM1wD+/v7+/v7+/v7+/v7+/v7+/v7+/v4AjIyMjIyMjIyMjIyMjIyMjIyMjNfXjIyMjNcA/v7+/v7+/v7+/v7+/v7+/v7+/gBhjIyMjIyMjIyMjIyMjIyMjIyMjIzX14yMjIwA/v7+/v7+/v7+/v7+/v7+/v7+/gCMjIyMjIyMjIyMjIyMjIyMjIyMjIyM19eMjIzXAP7+/v7+/v7+/v7+/v7+/v7+/gCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjNeMjIyMAP7+/v7+/v7+/v7+/v7+/v7+AGGMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQD+/v7+/v7+/v7+/v7+/v7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/g==")) From dd15188a59c7d7958606da5d13d738f71732dfca Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:20:52 -0500 Subject: [PATCH 098/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index d312bc76d..76b2a598f 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("MDCI/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v4AAAAAAAAAAAAAAAAAAAAA/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+AABhjIyMjIyMjIyMjIyMjIzXAAAA/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/gAAYYyMjIyMjIyMjIyMjIyMjIyMjIzXAP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+AGGMjIyMjIyMjIyMjIyMjIyMjIyMjIyM1wD+/v7+/v7+/v7+/v7+/v7+/v7+/v4AjIyMjIyMjIyMjIyMjIyMjIyMjNfXjIyMjNcA/v7+/v7+/v7+/v7+/v7+/v7+/gBhjIyMjIyMjIyMjIyMjIyMjIyMjIzX14yMjIwA/v7+/v7+/v7+/v7+/v7+/v7+/gCMjIyMjIyMjIyMjIyMjIyMjIyMjIyM19eMjIzXAP7+/v7+/v7+/v7+/v7+/v7+/gCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjNeMjIyMAP7+/v7+/v7+/v7+/v7+/v7+AGGMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAD+/v7+/v7+/v7+/v7+/v7+AGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQD+/v7+/v7+/v7+/v7+/v7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/g==")) +E.toArrayBuffer(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) From a2291e928efb0be0884e82f0a89b0e879721ac95 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:22:20 -0500 Subject: [PATCH 099/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index 76b2a598f..68d1abd03 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -E.toArrayBuffer(atob("mEwxH+AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AB8AABwtfsOMABnXGTYtQGQwuXFqYwZgAqT64wYLqowFF6iMWGAZgTF6wrBMCrsXAAwwQLy4v/F/FhADjwSADguQAH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AXA")) +require("heatshrink").decompress(atob("mEwwkBiIA/AH4A/AH4A/AH4AGgAAGCx8iAAsvgEBCyYAC+AWKiAWJGIIwKgQVI/4wLFxUv+UikBGUGAJIJLxgCBC5BeJAAhIIC/4XfiEAABjwKAH4A/AH4A/AH4A/AFI")) From 31563c13c8dcfe6c484a7f9557f0a1345c5efbab Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:24:56 -0500 Subject: [PATCH 100/217] Update app-icon.js --- apps/slimehunt/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app-icon.js b/apps/slimehunt/app-icon.js index 68d1abd03..36486cb8a 100644 --- a/apps/slimehunt/app-icon.js +++ b/apps/slimehunt/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwkBiIA/AH4A/AH4A/AH4AGgAAGCx8iAAsvgEBCyYAC+AWKiAWJGIIwKgQVI/4wLFxUv+UikBGUGAJIJLxgCBC5BeJAAhIIC/4XfiEAABjwKAH4A/AH4A/AH4A/AFI")) +require("heatshrink").decompress(atob("mEwxH+If4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH9bxgAM1gtsGTwtTGDVhFSPX64wZLqgwFF6iMVGAhgUF6owBMCzsWAAthL1AAGF/4vxrdhADVbeCQA/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4AFA")) From b8773d064635110095527ecdb9365eef04d54eab Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Mon, 20 Dec 2021 19:27:05 -0500 Subject: [PATCH 101/217] Add files via upload --- apps/slimehunt/app.png | Bin 0 -> 217 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/slimehunt/app.png diff --git a/apps/slimehunt/app.png b/apps/slimehunt/app.png new file mode 100644 index 0000000000000000000000000000000000000000..208e68f463b57658c478b548886bdb8315d8d702 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)I7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=y0_nJQHf`U-Zr;3EbjkDo|Nr@C-PfMKzXvG6S>O>_%)r2R2!t6$ zHM|;tg1(+Ejv*GOlO Date: Mon, 20 Dec 2021 19:30:45 -0500 Subject: [PATCH 102/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 8a2513f33..4ffda8624 100644 --- a/apps.json +++ b/apps.json @@ -4864,7 +4864,7 @@ "icon": "app.png", "version":"0.01", "description": "Fight against slimes in turn based combat, try to get the highscore!", - "tags": "rpg", + "tags": "rpg,slime", "supports" : ["BANGLEJS"], "storage": [ {"name":"slimehunt.app.js","url":"app.js"}, From f796bbfe5c1c90840092772df0d04fffd0f1986a Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Tue, 21 Dec 2021 12:24:28 +0100 Subject: [PATCH 103/217] Update apps.json --- apps.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps.json b/apps.json index 7c226818f..2a47d5d80 100644 --- a/apps.json +++ b/apps.json @@ -5061,6 +5061,8 @@ "storage": [ {"name":"contourclock.app.js","url":"app.js"}, {"name":"contourclock.img","url":"app-icon.js","evaluate":true} + ] + }, { "id": "ltherm", "name": "Localized Thermometer", From 9cc8afa833a615ee1a6edef2895faafda345f866 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 12:15:02 -0500 Subject: [PATCH 104/217] Create README.md --- apps/slimehunt/README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 apps/slimehunt/README.md diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md new file mode 100644 index 000000000..d64b44300 --- /dev/null +++ b/apps/slimehunt/README.md @@ -0,0 +1,40 @@ +<><><><>-SLIME HUNT-<><><><> + +Slime Hunt is a RPG turn-based style combat game where you fight slimes until your HP runs out. + +During each fight the player has 3 options, + +BTN1) FIGHT - Attacks the slime, dealing 1 hp worth of damage. + +BTN2) DEFEND - Defends against the slime, blocking 3 damage from the next slime attack. + +BTN3) RUN - Find a new slime to fight against. (This could change in the future!) + + + +There are currently 5 types of slime each with unique behavior. + +<><>-BEHAVIORS-<><> + +NEUTRAL - Slime deals 0-1 damage on it's next attack. + +ANGRY - Slime deals 3-5 damage on it's next attack. + +ERACTIC - Slime deals 0-5 damage on it's next attack. + + +<><>-SLIMES-<><> + +1. GREEN SLIME - Is always neutral. + +2. RED SLIME - Can be either neutral or angry. + +3. GRAY SLIME - Can be neutral, angry or eratic. + +4. YELLOW SLIME - Is always eratic. + +5. PURPLE SLIME - Is always angry. + + + +Created by Colton LaChance! From e1a0539bcf5b2b06be082b3c017c5aaea97fc0f5 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 12:15:46 -0500 Subject: [PATCH 105/217] Update README.md --- apps/slimehunt/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md index d64b44300..830e55d1b 100644 --- a/apps/slimehunt/README.md +++ b/apps/slimehunt/README.md @@ -2,6 +2,8 @@ Slime Hunt is a RPG turn-based style combat game where you fight slimes until your HP runs out. +The main goal is to beat your personal highscore! + During each fight the player has 3 options, BTN1) FIGHT - Attacks the slime, dealing 1 hp worth of damage. From c33ce67b567e58b4a90f983fb7dfda699ac967b1 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 12:16:00 -0500 Subject: [PATCH 106/217] Update README.md --- apps/slimehunt/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md index 830e55d1b..5bd404e55 100644 --- a/apps/slimehunt/README.md +++ b/apps/slimehunt/README.md @@ -4,6 +4,7 @@ Slime Hunt is a RPG turn-based style combat game where you fight slimes until yo The main goal is to beat your personal highscore! + During each fight the player has 3 options, BTN1) FIGHT - Attacks the slime, dealing 1 hp worth of damage. From 0bda621938454e5544ec296fc9a3b8ba6b39cf45 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 12:17:20 -0500 Subject: [PATCH 107/217] Update README.md --- apps/slimehunt/README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md index 5bd404e55..4cd6bc1ab 100644 --- a/apps/slimehunt/README.md +++ b/apps/slimehunt/README.md @@ -1,9 +1,10 @@ -<><><><>-SLIME HUNT-<><><><> +=========================<><><><>-SLIME HUNT-<><><><>======================== Slime Hunt is a RPG turn-based style combat game where you fight slimes until your HP runs out. The main goal is to beat your personal highscore! +=========================================================================== During each fight the player has 3 options, @@ -13,11 +14,11 @@ BTN2) DEFEND - Defends against the slime, blocking 3 damage from the next slime BTN3) RUN - Find a new slime to fight against. (This could change in the future!) - +=========================================================================== There are currently 5 types of slime each with unique behavior. -<><>-BEHAVIORS-<><> +============================<><>-BEHAVIORS-<><>============================ NEUTRAL - Slime deals 0-1 damage on it's next attack. @@ -26,7 +27,7 @@ ANGRY - Slime deals 3-5 damage on it's next attack. ERACTIC - Slime deals 0-5 damage on it's next attack. -<><>-SLIMES-<><> +============================<><>-SLIMES-<><>============================ 1. GREEN SLIME - Is always neutral. @@ -38,6 +39,6 @@ ERACTIC - Slime deals 0-5 damage on it's next attack. 5. PURPLE SLIME - Is always angry. - +=========================================================================== Created by Colton LaChance! From 4b011befa1622b07ce307763850a2b5a150d09ca Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 12:18:39 -0500 Subject: [PATCH 108/217] Update apps.json --- apps.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 4ffda8624..ed2b9a903 100644 --- a/apps.json +++ b/apps.json @@ -4865,7 +4865,8 @@ "version":"0.01", "description": "Fight against slimes in turn based combat, try to get the highscore!", "tags": "rpg,slime", - "supports" : ["BANGLEJS"], + "supports" : ["BANGLEJS"], + "readme": "README.md", "storage": [ {"name":"slimehunt.app.js","url":"app.js"}, {"name":"slimehunt.img","url":"app-icon.js","evaluate":true} From 7119eda34566b87ac40d64dab8e7b2036ef0cfd1 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:09:36 -0500 Subject: [PATCH 109/217] Update app.js --- apps/slimehunt/app.js | 344 +++++++++++++++++++++++++++++------------- 1 file changed, 240 insertions(+), 104 deletions(-) diff --git a/apps/slimehunt/app.js b/apps/slimehunt/app.js index 255399072..106b567c1 100644 --- a/apps/slimehunt/app.js +++ b/apps/slimehunt/app.js @@ -1,11 +1,26 @@ -//Create constants -const GREEN_SLIME = 1; //Normal slime, is always neutral. -const PINK_SLIME = 2; //Can get angry -const GRAY_SLIME = 3; //Can be neutral, angry or erratic -const YELLOW_SLIME = 4; //Is always erratic -const PURPLE_SLIME = 5; //Is always angry +//Create constants------------------------------------------------------------------ -//Initialize variables +//Slimes +const GREEN_SLIME = 1; //Normal slime, is always neutral. | 0% Item chance +const PINK_SLIME = 2; //Can get angry. | 10% Item chance +const GRAY_SLIME = 3; //Can be neutral, angry or erratic. | 20% Item chance +const YELLOW_SLIME = 4; //Is always erratic. | 50% Item chance +const PURPLE_SLIME = 5; //Is always angry. | 100% Item chance + +//Items +const ITEM_ATK_UP = 1; //Raises damage dealt by +1 for next battle +const ITEM_DEF_UP = 2; //Reduces all damage by +1 for next battle +const ITEM_HP_UP = 3; //Increases HP by 3 +const ITEM_BLOCK_UP = 4; //Raises defence when defending by from 3 to 5 for next battle +const ITEM_CRIT_UP = 5; //Gives attack a 20% chance to instantly KO slime for next battle + +//Base stats +const BASE_ATK = 1; +const BASE_DEF = 0; +const BASE_BLOCK = 3; +const BASE_CRIT = 0; + +//Initialize variables------------------------------------------------------------------ var playerHP = 20; var slimeHP = 3; var slimeType = GREEN_SLIME; @@ -16,6 +31,19 @@ var slimeState = 0; var showBattleResult = false; var dmgDealt = 0; var playerDefence = 0; +var playerItem = 0; +var critChance = 0; + +//Stats (Modifiers) +var statAtk = 1; +var statDef = 0; +var statBlock = 3; +var statCrit = 0; + +//Item vars +var itemName = ""; +var itemDesc = ""; +var itemChance = 0; var refreshInterval; var waitTime = 0; @@ -25,8 +53,8 @@ var score = 0; var themeNote = 0; -//Load files -var file = require("Storage").open("highscore.txt","r"); +//Load files------------------------------------------------------------------ +var file = require("Storage").open("highscore.txt", "r"); highscore = file.readLine(); if (highscore == undefined) highscore = 0; @@ -36,121 +64,150 @@ var graySlime = require("Storage").read("slimegray.img"); var yellowSlime = require("Storage").read("slimeyellow.img"); var purpleSlime = require("Storage").read("slimepurple.img"); -//UI Stuff +//UI Stuff------------------------------------------------------------------ function drawOpeningUI() { g.clear(); - g.setFont("Vector",screenWidth/15); - g.setFontAlign(0,0); // center font - g.drawString("SLIME HUNT",screenWidth/2,screenHeight*0.1); - g.drawString("-SCORE TO BEAT-",screenWidth/2,screenHeight*0.3); - g.drawString("<><><> "+highscore+" <><><>",screenWidth/2,screenHeight*0.45); - g.setFont("Vector",screenWidth/20); - g.drawString("A Slime approches...",screenWidth/2,screenHeight*0.6); - wait(8,waitForBattle); + g.setFont("Vector", screenWidth / 15); + g.setFontAlign(0, 0); // center font + g.drawString("SLIME HUNT", screenWidth / 2, screenHeight * 0.1); + g.drawString("-SCORE TO BEAT-", screenWidth / 2, screenHeight * 0.3); + g.drawString("<><><> " + highscore + " <><><>", screenWidth / 2, screenHeight * 0.45); + g.setFont("Vector", screenWidth / 20); + g.drawString("A Slime approches...", screenWidth / 2, screenHeight * 0.6); + wait(8, waitForBattle); } function drawSlime() { - switch(slimeType) { + switch (slimeType) { case GREEN_SLIME: - g.drawImage(greenSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); - break; + g.drawImage(greenSlime, screenWidth / 2, screenHeight / 2, { + scale: 4, + rotate: 0 + }); + break; case PINK_SLIME: - g.drawImage(pinkSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); - break; + g.drawImage(pinkSlime, screenWidth / 2, screenHeight / 2, { + scale: 4, + rotate: 0 + }); + break; case GRAY_SLIME: - g.drawImage(graySlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); - break; + g.drawImage(graySlime, screenWidth / 2, screenHeight / 2, { + scale: 4, + rotate: 0 + }); + break; case YELLOW_SLIME: - g.drawImage(yellowSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); - break; + g.drawImage(yellowSlime, screenWidth / 2, screenHeight / 2, { + scale: 4, + rotate: 0 + }); + break; case PURPLE_SLIME: - g.drawImage(purpleSlime,screenWidth/2,screenHeight/2,{scale:4,rotate:0}); - break; + g.drawImage(purpleSlime, screenWidth / 2, screenHeight / 2, { + scale: 4, + rotate: 0 + }); + break; } } function drawBattleUI() { g.clear(); - g.setFont("Vector",screenWidth/8); - g.setFontAlign(0,0); // center font - g.drawString("SLIME HP: " + slimeHP,screenWidth/2,screenHeight*0.1); - g.setFont("Vector",screenWidth/20); + g.setFont("Vector", screenWidth / 8); + g.setFontAlign(0, 0); // center font + g.drawString("SLIME HP: " + slimeHP, screenWidth / 2, screenHeight * 0.1); + g.setFont("Vector", screenWidth / 20); if (!showBattleResult) { - switch(slimeState) { + switch (slimeState) { case 0: - g.drawString("The slime seems neutral...",screenWidth/2,screenHeight*0.25); - break; + g.drawString("The slime seems neutral...", screenWidth / 2, screenHeight * 0.25); + break; case 1: - g.drawString("The slime seems angry...",screenWidth/2,screenHeight*0.25); - break; + g.drawString("The slime seems angry...", screenWidth / 2, screenHeight * 0.25); + break; case 2: - g.drawString("The slime seems eratic...",screenWidth/2,screenHeight*0.25); - break; + g.drawString("The slime seems eratic...", screenWidth / 2, screenHeight * 0.25); + break; } - }else{ + } else { var brString = (turn == 0 ? "The Slime loses " : "You lose "); - g.drawString(brString + dmgDealt + "HP!",screenWidth/2,screenHeight*0.25); + g.drawString(brString + dmgDealt + "HP!", screenWidth / 2, screenHeight * 0.25); } drawSlime(); - g.drawLine(0,screenHeight*0.72,screenWidth,screenHeight*0.72); + g.drawLine(0, screenHeight * 0.72, screenWidth, screenHeight * 0.72); if (turn == 0) { - g.setFont("Vector",screenWidth/15); - g.drawString("Your HP is " + playerHP + ".",screenWidth/2,screenHeight*0.8); - g.setFont("Vector",screenWidth/20); - g.drawString("(B1) FIGHT\t|\t(B2) DEFEND\t|\t(B3) RUN",screenWidth/2,screenHeight*0.9); + g.setFont("Vector", screenWidth / 15); + g.drawString("Your HP is " + playerHP + ".", screenWidth / 2, screenHeight * 0.8); + g.setFont("Vector", screenWidth / 20); + g.drawString("(B1) FIGHT\t|\t(B2) DEFEND\t|\t(B3) RUN", screenWidth / 2, screenHeight * 0.9); } } +//Win / lose functions------------------------------------------------------------------ function win() { - wait(5,winTheme); + wait(5, winTheme); calcScore(slimeType); showBattleResult = false; g.clear(); - g.setFont("Vector",screenWidth/8); - g.setFontAlign(0,0); // center font - g.drawString("YOU WON!",screenWidth/2,screenHeight/2); - g.setFont("Vector",screenWidth/20); - g.drawString("Your score is << " + score + " >>",screenWidth/2,screenHeight*0.75); - g.drawString("Press (B3) to find another slime!",screenWidth/2,screenHeight*0.9); + g.setFont("Vector", screenWidth / 8); + g.setFontAlign(0, 0); // center font + g.drawString("YOU WON!", screenWidth / 2, screenHeight * 0.1); + g.drawLine(0, screenHeight * 0.2, screenWidth, screenHeight * 0.2); + g.setFont("Vector", screenWidth / 12); + g.drawString((playerItem == 0 ? "No Item." : "GOT ITEM!"), screenWidth / 2, screenHeight * 0.27); + g.setFont("Vector", screenWidth / 15); + g.drawString((playerItem == 0 ? "" : "<><> " + itemName + " <><>"), screenWidth / 2, screenHeight * 0.40); + g.setFont("Vector", screenWidth / 20); + g.drawString((playerItem == 0 ? "" : itemDesc), screenWidth / 2, screenHeight * 0.52); + g.drawLine(0, screenHeight * 0.6, screenWidth, screenHeight * 0.6); + g.drawString("Your score is << " + score + " >>", screenWidth / 2, screenHeight * 0.75); + g.drawString("Press (B3) to find another slime!", screenWidth / 2, screenHeight * 0.9); turn = 0; - setWatch(run,BTN3); + setWatch(run, BTN3); } function lose() { - wait(5,loseTheme); + wait(5, loseTheme); playerHP = 20; showBattleResult = false; g.clear(); - g.setFont("Vector",screenWidth/8); - g.setFontAlign(0,0); // center font - g.drawString("You lose...",screenWidth/2,screenHeight/2); - g.setFont("Vector",screenWidth/20); - g.drawString("Your score is << " + score + " >>",screenWidth/2,screenHeight*0.75); - g.drawString("Press (B3) to try again...",screenWidth/2,screenHeight*0.9); + g.setFont("Vector", screenWidth / 8); + g.setFontAlign(0, 0); // center font + g.drawString("You lose...", screenWidth / 2, screenHeight * 0.1); + g.drawLine(0, screenHeight * 0.2, screenWidth, screenHeight * 0.2); + g.setFont("Vector", screenWidth / 12); + g.drawString((score > highscore ? "-NEW HIGHSCORE-" : "-SCORE TO BEAT-"), screenWidth / 2, screenHeight * 0.27); + g.setFont("Vector", screenWidth / 15); + g.drawString((score > highscore ? "<><> " + score + " <><>" : "<><> " + highscore + " <><>"), screenWidth / 2, screenHeight * 0.43); + g.drawLine(0, screenHeight * 0.6, screenWidth, screenHeight * 0.6); + g.setFont("Vector", screenWidth / 20); + g.drawString("Your score is << " + score + " >>", screenWidth / 2, screenHeight * 0.75); + g.drawString("Press (B3) to try again...", screenWidth / 2, screenHeight * 0.9); score = 0; turn = 0; - setWatch(run,BTN3); + setWatch(run, BTN3); } -//Battle Stuff +//Battle Stuff------------------------------------------------------------------ function nextTurn() { turn = (turn == 0 ? 1 : 0); } function slimeFight() { Bangle.beep(100, 500); - switch(slimeState) { + switch (slimeState) { case 0: dmgDealt = Math.floor(Math.random() * 2); - break; + break; case 1: dmgDealt = Math.floor(Math.random() * 3) + 3; - break; + break; case 2: dmgDealt = Math.floor(Math.random() * 6); - break; + break; } - dmgDealt = Math.max(0,dmgDealt - playerDefence); + dmgDealt = Math.max(0, dmgDealt - playerDefence); playerHP -= dmgDealt; slimeAI(); } @@ -158,22 +215,33 @@ function slimeFight() { function fight() { if (turn == 0 && waitTime <= 0) { Bangle.beep(100, 1000); - dmgDealt = 1; - playerDefence = 0; - slimeHP -= dmgDealt; + dmgDealt = statAtk; + playerDefence = statDef; + if (statCrit == 0) { + slimeHP -= dmgDealt; + }else{ + critChance = Math.floor(Math.random() * 100); + if (critChance >= 100-critStat) { + slimeHP = 0; + dmgDealt = 99; + }else{ + slimeHP -= dmgDealt; + } + critChance = 0; + } showBattleResult = true; drawBattleUI(); - wait(5,waitForTurn); + wait(5, waitForTurn); } } function defend() { if (turn == 0 && waitTime <= 0) { dmgDealt = 0; - playerDefence = 3; + playerDefence = statBlock + statDef; showBattleResult = true; drawBattleUI(); - wait(5,waitForTurn); + wait(5, waitForTurn); } } @@ -181,7 +249,7 @@ function run() { if (turn == 0 && waitTime <= 0) { showBattleResult = false; Bangle.beep(200, 4000); - wait(3,waitForBattle); + wait(3, waitForBattle); } } @@ -189,22 +257,23 @@ function run() { function newBattle() { showBattleResult = false; slimeType = Math.floor(Math.random() * 5) + 1; - switch(slimeType) { + useItem(); //Use item at start of new battle + switch (slimeType) { case GREEN_SLIME: slimeHP = 3; - break; + break; case PINK_SLIME: slimeHP = 3; - break; + break; case GRAY_SLIME: slimeHP = 5; - break; + break; case YELLOW_SLIME: slimeHP = 5; - break; + break; case PURPLE_SLIME: slimeHP = 5; - break; + break; } turn = 0; battle(); @@ -213,37 +282,87 @@ function newBattle() { } function battle() { - setWatch(fight,BTN1); - setWatch(defend,BTN2); - setWatch(run,BTN3); + setWatch(fight, BTN1); + setWatch(defend, BTN2); + setWatch(run, BTN3); } function slimeAI() { - switch(slimeType) { + switch (slimeType) { case GREEN_SLIME: slimeState = 0; - break; + break; case PINK_SLIME: slimeState = Math.floor(Math.random() * 2); - break; + break; case GRAY_SLIME: slimeState = Math.floor(Math.random() * 3); - break; + break; case YELLOW_SLIME: slimeState = 2; - break; + break; case PURPLE_SLIME: slimeState = 1; break; } } +//Items------------------------------------------------------------------ +function getItem() { + playerItem = Math.floor(Math.random() * 5) + 1; + switch (playerItem) { + case ITEM_ATK_UP: + itemName = "Attack Up"; + itemDesc = "+1 damage next battle."; + break; + case ITEM_DEF_UP: + itemName = "Defence Up"; + itemDesc = "+1 defence next battle."; + break; + case ITEM_HP_UP: + itemName = "HP Up"; + itemDesc = "+3 HP."; + break; + case ITEM_BLOCK_UP: + itemName = "Block Up"; + itemDesc = "+2 block on DEFEND next battle."; + break; + case ITEM_CRIT_UP: + itemName = "Critical Up"; + itemDesc = "20% chance to crit next battle."; + break; + } +} +function useItem() { + statAtk = BASE_ATK; + statDef = BASE_DEF; + statBlock = BASE_BLOCK; + statCrit = BASE_CRIT; + switch (playerItem) { + case ITEM_ATK_UP: + statAtk = 2; + break; + case ITEM_DEF_UP: + statDef = 1; + break; + case ITEM_HP_UP: + playerHP += 3; + break; + case ITEM_BLOCK_UP: + statBlock = 5; + break; + case ITEM_CRIT_UP: + statCrit = 20; + break; + } + playerItem = 0; +} -//Timed transitions -function wait(duration,waitFunc) { - waitTime = duration; - if (!refreshInterval) - refreshInterval = setInterval(waitFunc, 500); +//Timed transitions------------------------------------------------------------------ +function wait(duration, waitFunc) { + waitTime = duration; + if (!refreshInterval) + refreshInterval = setInterval(waitFunc, 500); } function waitForTurn() { @@ -255,13 +374,13 @@ function waitForTurn() { if (playerHP > 0 && slimeHP > 0) { if (turn == 1) { slimeFight(); - wait(5,waitForTurn); - }else{ + wait(5, waitForTurn); + } else { showBattleResult = false; battle(); } drawBattleUI(); - }else{ + } else { if (playerHP <= 0) { lose(); } @@ -287,54 +406,71 @@ function waitForBattle() { function winTheme() { waitTime--; - Bangle.beep(200, 100*themeNote); + Bangle.beep(200, 100 * themeNote); themeNote++; if (waitTime <= 0) { themeNote = 0; clearInterval(refreshInterval); refreshInterval = undefined; + setWatch(run, BTN3); } Bangle.setLCDPower(1); } function loseTheme() { waitTime--; - Bangle.beep(200, 600-(100*themeNote)); + Bangle.beep(200, 600 - (100 * themeNote)); themeNote++; if (waitTime <= 0) { themeNote = 0; clearInterval(refreshInterval); refreshInterval = undefined; + setWatch(run, BTN3); } Bangle.setLCDPower(1); } -//Calculations +//Calculations------------------------------------------------------------------ function calcScore(slimeType) { - switch(slimeType) { + switch (slimeType) { case GREEN_SLIME: score += 1; + //No items break; case PINK_SLIME: score += 2; + itemChance = Math.floor(Math.random() * 100); + if (itemChance >= 100 - 10) { //100 - ITEM CHANCE % + getItem(); + } break; case GRAY_SLIME: - score += 2; + score += 3; + itemChance = Math.floor(Math.random() * 100); + if (itemChance >= 100 - 25) { //100 - ITEM CHANCE % + getItem(); + } break; case YELLOW_SLIME: score += 5; + itemChance = Math.floor(Math.random() * 100); + if (itemChance >= 100 - 50) { //100 - ITEM CHANCE % + getItem(); + } break; case PURPLE_SLIME: score += 10; + getItem(); break; } if (score > highscore) { file.erase(); - file = require("Storage").open("highscore.txt","w"); + file = require("Storage").open("highscore.txt", "w"); file.write(score); } } + //------------------------------------GAME STARTS HERE ----------------------------------------------- //Load opening UI From 48105f82432143e84bcdfb957e2a3f546ed2ea74 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:14:31 -0500 Subject: [PATCH 110/217] Update README.md --- apps/slimehunt/README.md | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md index 4cd6bc1ab..201c32ab3 100644 --- a/apps/slimehunt/README.md +++ b/apps/slimehunt/README.md @@ -26,18 +26,36 @@ ANGRY - Slime deals 3-5 damage on it's next attack. ERACTIC - Slime deals 0-5 damage on it's next attack. +============================<><>-ITEMS-<><>============================ + +Attack Up ++1 damage next battle. + +Defence Up ++1 defence next battle, stacks with block. Setting defence to 4 when using DEFEND, and 1 otherwise. + +HP Up ++3 HP. + +Block Up ++2 block on DEFEND next battle, setting Defence to 5 when using DEFEND command. + +Critical Up +20% chance to crit next battle on each attack, instantly defeating the Slime. + +*****Using the RUN command causes you to lose your item!***** ============================<><>-SLIMES-<><>============================ -1. GREEN SLIME - Is always neutral. +1. GREEN SLIME - Is always neutral. | 0% chance of item. -2. RED SLIME - Can be either neutral or angry. +2. RED SLIME - Can be either neutral or angry. | 10% chance of item. -3. GRAY SLIME - Can be neutral, angry or eratic. +3. GRAY SLIME - Can be neutral, angry or eratic. | 20% chance of item. -4. YELLOW SLIME - Is always eratic. +4. YELLOW SLIME - Is always eratic. | 50% chance of item. -5. PURPLE SLIME - Is always angry. +5. PURPLE SLIME - Is always angry. | 100% chance of item. =========================================================================== From 9e131d2e7fa1db989e65e4cb29e74cba4cbeb01a Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:15:13 -0500 Subject: [PATCH 111/217] Update README.md --- apps/slimehunt/README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md index 201c32ab3..c22525403 100644 --- a/apps/slimehunt/README.md +++ b/apps/slimehunt/README.md @@ -28,20 +28,15 @@ ERACTIC - Slime deals 0-5 damage on it's next attack. ============================<><>-ITEMS-<><>============================ -Attack Up -+1 damage next battle. +Attack Up - +1 damage next battle. -Defence Up -+1 defence next battle, stacks with block. Setting defence to 4 when using DEFEND, and 1 otherwise. +Defence Up - +1 defence next battle, stacks with block. Setting defence to 4 when using DEFEND, and 1 otherwise. -HP Up -+3 HP. +HP Up - +3 HP. -Block Up -+2 block on DEFEND next battle, setting Defence to 5 when using DEFEND command. +Block Up - +2 block on DEFEND next battle, setting Defence to 5 when using DEFEND command. -Critical Up -20% chance to crit next battle on each attack, instantly defeating the Slime. +Critical Up - 20% chance to crit next battle on each attack, instantly defeating the Slime. *****Using the RUN command causes you to lose your item!***** From bd5bb54b6f6aedc77c16d698030073d62e3fe79d Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:17:45 -0500 Subject: [PATCH 112/217] Create ChangeLog --- apps/slimehunt/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/slimehunt/ChangeLog diff --git a/apps/slimehunt/ChangeLog b/apps/slimehunt/ChangeLog new file mode 100644 index 000000000..067add5a5 --- /dev/null +++ b/apps/slimehunt/ChangeLog @@ -0,0 +1 @@ +0.01: Public version is a go! From 7aedbaf07e430897e34fb09f309a2db475d39ad9 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:23:40 -0500 Subject: [PATCH 113/217] Update README.md --- apps/slimehunt/README.md | 68 ++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/apps/slimehunt/README.md b/apps/slimehunt/README.md index c22525403..84d8f2b16 100644 --- a/apps/slimehunt/README.md +++ b/apps/slimehunt/README.md @@ -1,57 +1,77 @@ -=========================<><><><>-SLIME HUNT-<><><><>======================== +<><><><>-SLIME HUNT-<><><><> -Slime Hunt is a RPG turn-based style combat game where you fight slimes until your HP runs out. +Slime Hunt is a RPG turn-based style combat game +where you fight slimes until your HP runs out. The main goal is to beat your personal highscore! -=========================================================================== +============================ During each fight the player has 3 options, -BTN1) FIGHT - Attacks the slime, dealing 1 hp worth of damage. +BTN1) FIGHT +- Attacks the slime, dealing 1 hp worth of damage. -BTN2) DEFEND - Defends against the slime, blocking 3 damage from the next slime attack. +BTN2) DEFEND +- Defends against the slime, blocking 3 damage from the next slime attack. -BTN3) RUN - Find a new slime to fight against. (This could change in the future!) +BTN3) RUN +- Find a new slime to fight against. (This could change in the future!) -=========================================================================== +============================ There are currently 5 types of slime each with unique behavior. -============================<><>-BEHAVIORS-<><>============================ +<><>-BEHAVIORS-<><> -NEUTRAL - Slime deals 0-1 damage on it's next attack. +1. NEUTRAL +- Slime deals 0-1 damage on it's next attack. -ANGRY - Slime deals 3-5 damage on it's next attack. +2. ANGRY +- Slime deals 3-5 damage on it's next attack. -ERACTIC - Slime deals 0-5 damage on it's next attack. +3. ERACTIC +- Slime deals 0-5 damage on it's next attack. -============================<><>-ITEMS-<><>============================ +<><>-ITEMS-<><> -Attack Up - +1 damage next battle. +1. Attack Up +- +1 damage next battle. -Defence Up - +1 defence next battle, stacks with block. Setting defence to 4 when using DEFEND, and 1 otherwise. +2. Defence Up +- +1 defence next battle, stacks with block. +Setting defence to 4 when using DEFEND, and 1 otherwise. -HP Up - +3 HP. +3. HP Up +- +3 HP. -Block Up - +2 block on DEFEND next battle, setting Defence to 5 when using DEFEND command. +4. Block Up +- +2 block on DEFEND next battle, +setting Defence to 5 when using DEFEND command. -Critical Up - 20% chance to crit next battle on each attack, instantly defeating the Slime. +5. Critical Up +- 20% chance to crit next battle on each attack, +instantly defeating the Slime. *****Using the RUN command causes you to lose your item!***** -============================<><>-SLIMES-<><>============================ +<><>-SLIMES-<><> -1. GREEN SLIME - Is always neutral. | 0% chance of item. +1. GREEN SLIME +- Is always neutral. | 0% chance of item. -2. RED SLIME - Can be either neutral or angry. | 10% chance of item. +2. RED SLIME +- Can be either neutral or angry. | 10% chance of item. -3. GRAY SLIME - Can be neutral, angry or eratic. | 20% chance of item. +3. GRAY SLIME +- Can be neutral, angry or eratic. | 20% chance of item. -4. YELLOW SLIME - Is always eratic. | 50% chance of item. +4. YELLOW SLIME +- Is always eratic. | 50% chance of item. -5. PURPLE SLIME - Is always angry. | 100% chance of item. +5. PURPLE SLIME +- Is always angry. | 100% chance of item. -=========================================================================== +============================ Created by Colton LaChance! From 6b58c98be081547324292179e421931195a8cb01 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:51:43 -0500 Subject: [PATCH 114/217] Update apps.json --- apps.json | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/apps.json b/apps.json index 85d861a4d..b7102b45f 100644 --- a/apps.json +++ b/apps.json @@ -4875,22 +4875,6 @@ ], "data": [{"name":"ptlaunch.patterns.json"}] }, - { "id": "clicompleteclk", - "name": "CLI complete clock", - "shortName":"CLI cmplt clock", - "version":"0.02", - "description": "Command line styled clock with lots of information", - "icon": "app.png", - "allow_emulator": true, - "type": "clock", - "tags": "clock,cli,command,bash,shell,weather,hrt", - "supports" : ["BANGLEJS", "BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"clicompleteclk.app.js","url":"app.js"}, - {"name":"clicompleteclk.img","url":"app-icon.js","evaluate":true} - ] - }, { "id": "slimehunt", "name": "Slime Hunt", "shortName":"SlimeHunt", From 8897c9aecc8d006a09f85915c970314d6cffc5ff Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 16:13:54 -0500 Subject: [PATCH 115/217] Update app.js --- apps/slimehunt/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/slimehunt/app.js b/apps/slimehunt/app.js index 106b567c1..547ea7356 100644 --- a/apps/slimehunt/app.js +++ b/apps/slimehunt/app.js @@ -221,7 +221,7 @@ function fight() { slimeHP -= dmgDealt; }else{ critChance = Math.floor(Math.random() * 100); - if (critChance >= 100-critStat) { + if (critChance >= 100-statCrit) { slimeHP = 0; dmgDealt = 99; }else{ From c8041295cdc29f441b2f59e6495be5e309547583 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 16:15:16 -0500 Subject: [PATCH 116/217] Update ChangeLog --- apps/slimehunt/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/slimehunt/ChangeLog b/apps/slimehunt/ChangeLog index 067add5a5..eb0cc5918 100644 --- a/apps/slimehunt/ChangeLog +++ b/apps/slimehunt/ChangeLog @@ -1 +1,2 @@ 0.01: Public version is a go! +0.02: Fixed bug where Critial Up wasn't letting player attack. From 5a2ca8219728f525fe0e3e6dd0f788bbd14f4d42 Mon Sep 17 00:00:00 2001 From: ColtJLaCh <91559845+ColtJLaCh@users.noreply.github.com> Date: Tue, 21 Dec 2021 16:32:32 -0500 Subject: [PATCH 117/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index b7102b45f..bc4b94522 100644 --- a/apps.json +++ b/apps.json @@ -4879,7 +4879,7 @@ "name": "Slime Hunt", "shortName":"SlimeHunt", "icon": "app.png", - "version":"0.01", + "version":"0.02", "description": "Fight against slimes in turn based combat, try to get the highscore!", "tags": "rpg,slime", "supports" : ["BANGLEJS"], From 3c510db6a8ee8f65a8b270be7f4feaa383a8693a Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:25:01 +0100 Subject: [PATCH 118/217] Create app.js --- apps/supf/app.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 apps/supf/app.js diff --git a/apps/supf/app.js b/apps/supf/app.js new file mode 100644 index 000000000..6f9d264a0 --- /dev/null +++ b/apps/supf/app.js @@ -0,0 +1,56 @@ +require("Font7x11Numeric7Seg").add(Graphics); + +function draw() { + var d = new Date(); + //d.setHours(22); + //d.setMinutes(22); + //d.setMonth(2); + var size = Math.floor(g.getWidth()/(7*6)); + var x = (g.getWidth()/2) - size*6, + y = (g.getHeight()/2) - size*7 - 0; + var y_dop = 70 - 0; + g.reset().clearRect(0,y,g.getWidth(),y+size*12+8); + g.setFont("7x11Numeric7Seg",size).setFontAlign(1,-1); + //g.drawString(d.getHours()+''+("0"+d.getMinutes()).substr(-2)+''+("0"+d.getSeconds()).substr(-2), x+size*28, y); + if (d.getHours() == '0') { + g.drawString('0'+d.getHours(), 58, y); + } + else { + g.drawString(d.getHours(), 58, y); + } + //g.setFontAlign(-1,-1); + g.setFont("7x11Numeric7Seg",size/2).setFontAlign(1,-1); + g.drawString(":",64,y_dop); + g.setFont("7x11Numeric7Seg",size).setFontAlign(1,-1); + g.drawString(("0"+d.getMinutes()).substr(-2),118,y); + g.setFont("7x11Numeric7Seg",size/2).setFontAlign(1,-1); + g.drawString(":",124,y_dop); + // draw seconds + g.setFont("7x11Numeric7Seg",size).setFontAlign(1,-1); + g.drawString(("0"+d.getSeconds()).substr(-2),178,y); + // date + g.setFont("6x8",size/2).setFontAlign(0,-1); + var s_date_string = d.getDate()+' '+require('locale').month(new Date()); + g.drawString(require('locale').dow(new Date()),g.getWidth()/2, y + size*16); + g.drawString(s_date_string,g.getWidth()/2, y + size*20); + g.drawString((d.getFullYear()),g.getWidth()/2, y + size*24); + +} +// Only update when display turns on +if (process.env.BOARD!="SMAQ3") // hack for Q3 which is always-on +Bangle.on('lcdPower', function(on) { + if (secondInterval) + clearInterval(secondInterval); + secondInterval = undefined; + if (on) + secondInterval = setInterval(draw, 1000); + draw(); +}); + +g.clear(); +var secondInterval = setInterval(draw, 1000); +draw(); +// Show launcher when button pressed +Bangle.setUI("clock"); +Bangle.loadWidgets(); +Bangle.drawWidgets(); From 519330adc09f895a155386c1f1cd9025eac036dd Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:33:32 +0100 Subject: [PATCH 119/217] Create app-icon.js --- apps/supf/app-icon.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 apps/supf/app-icon.js diff --git a/apps/supf/app-icon.js b/apps/supf/app-icon.js new file mode 100644 index 000000000..e05e934b2 --- /dev/null +++ b/apps/supf/app-icon.js @@ -0,0 +1,2 @@ +require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) +} From b753c119f180dd0845b7cb9704d96fcf615bc1af Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:39:11 +0100 Subject: [PATCH 120/217] Create supf.info --- apps/supf/supf.info | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/supf/supf.info diff --git a/apps/supf/supf.info b/apps/supf/supf.info new file mode 100644 index 000000000..c8b613049 --- /dev/null +++ b/apps/supf/supf.info @@ -0,0 +1 @@ +{"id":"supf","name":"Simple Clock with seconds and Date in custom language","type":"clock","src":"supf.app.js","icon":"supf.img","version":"0.01","tags":"clock","files":"supf.info,supf.app.js,app-icon.js"} From 71200f68216aeb3c31825d6de81042d7ab0a61f4 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:39:36 +0100 Subject: [PATCH 121/217] Create readme.md --- apps/supf/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/supf/readme.md diff --git a/apps/supf/readme.md b/apps/supf/readme.md new file mode 100644 index 000000000..0001ad69c --- /dev/null +++ b/apps/supf/readme.md @@ -0,0 +1 @@ +Simple Clock with seconds and Date in custom language From d3e914a9e14b3d3f4fbcf165f057dcb6cac920d4 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:46:38 +0100 Subject: [PATCH 122/217] Update apps.json --- apps.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps.json b/apps.json index e5e9f8f02..0ce8a78cd 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,22 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] + }, + { + "id": "supf", + "name": "supf Simple Clock with seconds and Date in custom language", + "shortName": "supf Clock", + "version": "0.01", + "description": "Displays the current temperature in localized units.", + "icon": "thermf.png", + "tags": "clock", + "supports": ["BANGLEJS2"], + "allow_emulator": true, + "readme": "README.md", + "storage": [ + {"name":"supf.app.js","url":"app.js"}, + {"name":"supf.img","url":"app-icon.js","evaluate":true}, + {"name":"supf.info","url":"supf.info","evaluate":true} + ] } ] From 1b5b3016c2394d3599765b9cd1eccdf5588e2391 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:11:42 +0100 Subject: [PATCH 123/217] Update app.js --- apps/supf/app.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/supf/app.js b/apps/supf/app.js index 6f9d264a0..d7a30aed9 100644 --- a/apps/supf/app.js +++ b/apps/supf/app.js @@ -2,26 +2,24 @@ require("Font7x11Numeric7Seg").add(Graphics); function draw() { var d = new Date(); - //d.setHours(22); - //d.setMinutes(22); - //d.setMonth(2); var size = Math.floor(g.getWidth()/(7*6)); var x = (g.getWidth()/2) - size*6, y = (g.getHeight()/2) - size*7 - 0; + // y variable for ':' var y_dop = 70 - 0; - g.reset().clearRect(0,y,g.getWidth(),y+size*12+8); + g.reset().clearRect(0,y,g.getWidth(),y+size*28); + // draw hours in 24h format g.setFont("7x11Numeric7Seg",size).setFontAlign(1,-1); - //g.drawString(d.getHours()+''+("0"+d.getMinutes()).substr(-2)+''+("0"+d.getSeconds()).substr(-2), x+size*28, y); - if (d.getHours() == '0') { + if (d.getHours().toString.length < 2) { g.drawString('0'+d.getHours(), 58, y); } else { g.drawString(d.getHours(), 58, y); } - //g.setFontAlign(-1,-1); g.setFont("7x11Numeric7Seg",size/2).setFontAlign(1,-1); g.drawString(":",64,y_dop); g.setFont("7x11Numeric7Seg",size).setFontAlign(1,-1); + // draw minutes g.drawString(("0"+d.getMinutes()).substr(-2),118,y); g.setFont("7x11Numeric7Seg",size/2).setFontAlign(1,-1); g.drawString(":",124,y_dop); @@ -30,9 +28,11 @@ function draw() { g.drawString(("0"+d.getSeconds()).substr(-2),178,y); // date g.setFont("6x8",size/2).setFontAlign(0,-1); - var s_date_string = d.getDate()+' '+require('locale').month(new Date()); + // draw name of day g.drawString(require('locale').dow(new Date()),g.getWidth()/2, y + size*16); - g.drawString(s_date_string,g.getWidth()/2, y + size*20); + // draw date and name of month + g.drawString(d.getDate()+' '+require('locale').month(new Date()),g.getWidth()/2, y + size*20); + // draw year g.drawString((d.getFullYear()),g.getWidth()/2, y + size*24); } From 9719b1277fc71801312358b1d9fda05c1a80e6c6 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:13:20 +0100 Subject: [PATCH 124/217] Update readme.md --- apps/supf/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/supf/readme.md b/apps/supf/readme.md index 0001ad69c..e4008556e 100644 --- a/apps/supf/readme.md +++ b/apps/supf/readme.md @@ -1 +1,2 @@ Simple Clock with seconds and Date in custom language +ATTENTION: requires Languages app From f5bcf45e36ae3fd152a45eace60ada7512b7b70c Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:22:36 +0100 Subject: [PATCH 125/217] Update supf.info --- apps/supf/supf.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/supf/supf.info b/apps/supf/supf.info index c8b613049..dc0a49a0d 100644 --- a/apps/supf/supf.info +++ b/apps/supf/supf.info @@ -1 +1 @@ -{"id":"supf","name":"Simple Clock with seconds and Date in custom language","type":"clock","src":"supf.app.js","icon":"supf.img","version":"0.01","tags":"clock","files":"supf.info,supf.app.js,app-icon.js"} +{"id":"supf","name":"Simple Clock with Date","type":"clock","src":"supf.app.js","icon":"supf.img","version":"0.01","tags":"clock","files":"supf.info,supf.app.js,app-icon.js"} From da33ef1cbed22cefdbd886af5acb2cdf950d68c5 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:25:29 +0100 Subject: [PATCH 126/217] Add files via upload --- apps/supf/screenshot_supf.png | Bin 0 -> 10477 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/supf/screenshot_supf.png diff --git a/apps/supf/screenshot_supf.png b/apps/supf/screenshot_supf.png new file mode 100644 index 0000000000000000000000000000000000000000..18e391f28287c45e6d12dafbc3da4ce2868c4cd2 GIT binary patch literal 10477 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 literal 0 HcmV?d00001 From bdc066ed79e96c211b9f27b33b82a9479eca5d64 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:26:49 +0100 Subject: [PATCH 127/217] Update readme.md --- apps/supf/readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/supf/readme.md b/apps/supf/readme.md index e4008556e..5b80152c3 100644 --- a/apps/supf/readme.md +++ b/apps/supf/readme.md @@ -1,2 +1,4 @@ -Simple Clock with seconds and Date in custom language +# Simple Clock with seconds and Date in custom language ATTENTION: requires Languages app + +![](screenshot_supf.png) From e4c8f3991385e681ac7c9764ae7b8d273ac785d3 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:27:52 +0100 Subject: [PATCH 128/217] Create ChangeLog --- apps/supf/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/supf/ChangeLog diff --git a/apps/supf/ChangeLog b/apps/supf/ChangeLog new file mode 100644 index 000000000..55ebb3e4b --- /dev/null +++ b/apps/supf/ChangeLog @@ -0,0 +1 @@ +0.01: New App From a5c69fba73310b484aff5d61ac49a30eb996ce9c Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:30:21 +0100 Subject: [PATCH 129/217] Add files via upload --- apps/supf/icon.png | Bin 0 -> 7090 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/supf/icon.png diff --git a/apps/supf/icon.png b/apps/supf/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca4d6140129667bdc4900b5a580a7ae189cec88 GIT binary patch literal 7090 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 Date: Wed, 22 Dec 2021 01:31:24 +0100 Subject: [PATCH 130/217] Create icon.js --- apps/supf/icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/supf/icon.js diff --git a/apps/supf/icon.js b/apps/supf/icon.js new file mode 100644 index 000000000..2b555d7d0 --- /dev/null +++ b/apps/supf/icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA"))} From 1192e0e2a7b7facf32c17324ccb4e8cff4a51c6f Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:31:59 +0100 Subject: [PATCH 131/217] Delete app-icon.js --- apps/supf/app-icon.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 apps/supf/app-icon.js diff --git a/apps/supf/app-icon.js b/apps/supf/app-icon.js deleted file mode 100644 index e05e934b2..000000000 --- a/apps/supf/app-icon.js +++ /dev/null @@ -1,2 +0,0 @@ -require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) -} From 85e3bf2584447c4816ea1beec382dc931e138ec7 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:37:49 +0100 Subject: [PATCH 132/217] Update apps.json --- apps.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps.json b/apps.json index 0ce8a78cd..6d51a941d 100644 --- a/apps.json +++ b/apps.json @@ -5063,21 +5063,22 @@ {"name":"ltherm.img","url":"icon.js","evaluate":true} ] }, - { + { "id": "supf", - "name": "supf Simple Clock with seconds and Date in custom language", - "shortName": "supf Clock", + "name": "Simple Clock with Date", + "shortName": "supf", "version": "0.01", - "description": "Displays the current temperature in localized units.", - "icon": "thermf.png", + "description": "Simple Clock with seconds and Date in custom language. \nATTENTION: requires Languages app", + "icon": "icon.png", + "screenshots": [{"url":"screenshot_supf.png"}], + "type": "clock", "tags": "clock", "supports": ["BANGLEJS2"], "allow_emulator": true, "readme": "README.md", "storage": [ {"name":"supf.app.js","url":"app.js"}, - {"name":"supf.img","url":"app-icon.js","evaluate":true}, - {"name":"supf.info","url":"supf.info","evaluate":true} + {"name":"supf.img","url":"icon.js","evaluate":true}, ] } ] From ad95c35a7e8bdd7e72b7c9d43f3a2ad90ca96843 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:39:36 +0100 Subject: [PATCH 133/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 6d51a941d..8d08a8bc2 100644 --- a/apps.json +++ b/apps.json @@ -5078,7 +5078,7 @@ "readme": "README.md", "storage": [ {"name":"supf.app.js","url":"app.js"}, - {"name":"supf.img","url":"icon.js","evaluate":true}, + {"name":"supf.img","url":"icon.js","evaluate":true} ] } ] From 15f622e0d815f04ca6fe72af86800c984454def9 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:45:05 +0100 Subject: [PATCH 134/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 8d08a8bc2..c25de913f 100644 --- a/apps.json +++ b/apps.json @@ -5068,7 +5068,7 @@ "name": "Simple Clock with Date", "shortName": "supf", "version": "0.01", - "description": "Simple Clock with seconds and Date in custom language. \nATTENTION: requires Languages app", + "description": "Simple Clock with seconds and Date in custom language. Install 'Languages' to get localized names.", "icon": "icon.png", "screenshots": [{"url":"screenshot_supf.png"}], "type": "clock", From 3626918d5a77f5ff579e5ea99fe545ec7d2af4b2 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 01:51:33 +0100 Subject: [PATCH 135/217] Rename readme.md to README.md --- apps/supf/{readme.md => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/supf/{readme.md => README.md} (100%) diff --git a/apps/supf/readme.md b/apps/supf/README.md similarity index 100% rename from apps/supf/readme.md rename to apps/supf/README.md From 8ae2de3f255fcb48a5bd2be3e6f9058b2f4b936c Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:00:26 +0100 Subject: [PATCH 136/217] Update icon.js --- apps/supf/icon.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/supf/icon.js b/apps/supf/icon.js index 2b555d7d0..e05e934b2 100644 --- a/apps/supf/icon.js +++ b/apps/supf/icon.js @@ -1 +1,2 @@ -require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA"))} +require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) +} From 9c3373f7093a56d90a5e1e031c9bda70cfaa952e Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:02:37 +0100 Subject: [PATCH 137/217] Update icon.js --- apps/supf/icon.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/supf/icon.js b/apps/supf/icon.js index e05e934b2..60df6e9c7 100644 --- a/apps/supf/icon.js +++ b/apps/supf/icon.js @@ -1,2 +1 @@ require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) -} From 705a0aa0cae13968097588b4a904bbec0ae25a59 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:10:55 +0100 Subject: [PATCH 138/217] Delete icon.js --- apps/supf/icon.js | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/supf/icon.js diff --git a/apps/supf/icon.js b/apps/supf/icon.js deleted file mode 100644 index 60df6e9c7..000000000 --- a/apps/supf/icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) From c07495cbb6b804f48259d37edc966e1279b83d56 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:13:05 +0100 Subject: [PATCH 139/217] Create icon.js --- apps/supf/icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/supf/icon.js diff --git a/apps/supf/icon.js b/apps/supf/icon.js new file mode 100644 index 000000000..60df6e9c7 --- /dev/null +++ b/apps/supf/icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) From c51098a6d0bdbfcade2fd7d373df625e7edc94ab Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:16:09 +0100 Subject: [PATCH 140/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index c25de913f..9d54f1d79 100644 --- a/apps.json +++ b/apps.json @@ -5066,7 +5066,7 @@ { "id": "supf", "name": "Simple Clock with Date", - "shortName": "supf", + "shortName": "supf Clock", "version": "0.01", "description": "Simple Clock with seconds and Date in custom language. Install 'Languages' to get localized names.", "icon": "icon.png", From 29780f398bf61d9ad4f53a272714785b69853db8 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:19:38 +0100 Subject: [PATCH 141/217] Delete supf.info --- apps/supf/supf.info | 1 - 1 file changed, 1 deletion(-) delete mode 100644 apps/supf/supf.info diff --git a/apps/supf/supf.info b/apps/supf/supf.info deleted file mode 100644 index dc0a49a0d..000000000 --- a/apps/supf/supf.info +++ /dev/null @@ -1 +0,0 @@ -{"id":"supf","name":"Simple Clock with Date","type":"clock","src":"supf.app.js","icon":"supf.img","version":"0.01","tags":"clock","files":"supf.info,supf.app.js,app-icon.js"} From 62fe33b42f5780170e1fc3d6dabe80d1724e4ed4 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 02:19:58 +0100 Subject: [PATCH 142/217] Update icon.js --- apps/supf/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/supf/icon.js b/apps/supf/icon.js index 60df6e9c7..c06a65409 100644 --- a/apps/supf/icon.js +++ b/apps/supf/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("iIA/AH4A/AEkQdbgcEDq46FgEBQX5HGACZbBDjQeCDrocbAH4A/AH4A1iIACAqYdkAQgIIARAAFiAdTgIdtgIdaR4wdZBAwdUPRodmcBbvRR4wFQDsYA/AH4A/AH4AJiAcbgMRDrcRAHxXdDrq2WWAIeaDg4A/AH4AwA")) +require("heatshrink").decompress(atob("ogA/AH4A/AElAdbgcEDq46FgEEQX5HGACZbBDjQeCDrocbAH4A/AH4A0gX/AAPzgEBAoX/BgIFDiEAn4FCkAdFgYXEDpQXBAocwDow4BHwIIDEAIdCHAIdDAQM/Dp4UBAQodxmYABDrK5DDrY7BmQdaPRAd4d6CPESo4ACDoQACDowXDHwMBDpI+Bn4jEAH4A/AH4A/AB9ADjcEogdbogA+K7oddWyywBDzQcHAH4A/AGAA=")) From 6cb5bd5da9df302d823bc460f0582a2faee2724e Mon Sep 17 00:00:00 2001 From: jeffyactive Date: Tue, 21 Dec 2021 22:08:05 -0500 Subject: [PATCH 143/217] Initial commit of DirAct app --- apps.json | 17 ++ apps/diract/ChangeLog | 1 + apps/diract/README.md | 28 ++ apps/diract/diract-icon.js | 1 + apps/diract/diract.js | 548 +++++++++++++++++++++++++++++++++++++ apps/diract/diract.png | Bin 0 -> 1784 bytes 6 files changed, 595 insertions(+) create mode 100644 apps/diract/ChangeLog create mode 100644 apps/diract/README.md create mode 100644 apps/diract/diract-icon.js create mode 100644 apps/diract/diract.js create mode 100644 apps/diract/diract.png diff --git a/apps.json b/apps.json index f5be04136..58693208b 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,22 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] + }, + { + "id": "diract", + "name": "DirAct", + "shortName": "DirAct", + "version": "0.01", + "description": "Proximity interaction detection.", + "icon": "diract.png", + "type": "app", + "tags": "tool,sensors", + "supports" : [ "BANGLEJS2" ], + "allow_emulator": false, + "readme": "README.md", + "storage": [ + { "name": "diract.app.js", "url": "diract.js" }, + { "name": "diract.img", "url": "diract-icon.js", "evaluate": true } + ] } ] diff --git a/apps/diract/ChangeLog b/apps/diract/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/diract/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/diract/README.md b/apps/diract/README.md new file mode 100644 index 000000000..efecade3f --- /dev/null +++ b/apps/diract/README.md @@ -0,0 +1,28 @@ +# DirAct + +[DirAct](https://www.reelyactive.com/diract/) implementation for the Bangle.js. + + +## Usage + +Real-time interactions will be recognised by [Pareto Anywhere](https://www.reelyactive.com/pareto/anywhere/) open source middleware and any other program which observes the [DirAct open standard](https://reelyactive.github.io/diract/). + + +## Features + +Currently implements DirAct real-time functionality. + + +## Controls + +None. + + +## Requests + +[Contact reelyActive](https://www.reelyactive.com/contact/) for support/updates. + + +## Creator + +Developed by [jeffyactive](https://github.com/jeffyactive) of [reelyActive](https://www.reelyactive.com). DirAct is jointly developed by reelyActive and Code Blue Consulting. diff --git a/apps/diract/diract-icon.js b/apps/diract/diract-icon.js new file mode 100644 index 000000000..e351d09bf --- /dev/null +++ b/apps/diract/diract-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkE/4AImUQgMjBpIAI+UQFAMBn4XRmJBDiYXRFwQwCC9HzF93/kAXDgSPWj4XRMAZGSDAUhiTWSAH4Ag+URAAUvRBkSAofxgUzmchX4khSw3ygIID+UiFwMiF4bIBGowIBiYvEmUjF4kxEwgABmU/mMCC4cBiUhiAXDkET+cjC4cgj5IE+MAI4MAC4RGCHQIXEgRREF44kCCIIeCDoIIBMAYkDHQJeDEwJBBn/xgYGBn8hC5cS+YoBmEfFoP/IoMxgYXJmETJIISBj/zgBOBDgITCSgYXDBoYUCDQIXBiYXNBIIXBA4IXHI44XEJIJHIC5JHEVwRkBO5qKBbYqPGgMikTXDmKPDEAPyAIJJCX4cAAAQXDIoQtBl6IEGIIXJFoYmCSAQ4BSYIXJRYJWBDQIACkM/eYQXJdYcSC4fzG4J2CC5MwK4I+CAAR4BLwQXJBwowDiQfDC5HzLAIXFGwoXILAQALC5IANC/4X/C+w")) \ No newline at end of file diff --git a/apps/diract/diract.js b/apps/diract/diract.js new file mode 100644 index 000000000..dba41cccb --- /dev/null +++ b/apps/diract/diract.js @@ -0,0 +1,548 @@ +/** + * Copyright reelyActive 2017-2021 + * We believe in an open Internet of Things + * + * DirAct is jointly developed by reelyActive and Code Blue Consulting + */ + +// User-configurable constants +const INSTANCE_ID = [ 0x00, 0x00, 0x00, 0x01 ]; +const NAMESPACE_FILTER_ID = [ 0xc0, 0xde, 0xb1, 0x0e, 0x1d, + 0xd1, 0xe0, 0x1b, 0xed, 0x0c ]; +const EXCITER_INSTANCE_IDS = new Uint32Array([ 0xe8c17e45 ]); +const RESETTER_INSTANCE_IDS = new Uint32Array([ 0x4e5e77e4 ]); +const PROXIMITY_RSSI_THRESHOLD = -65; +const PROXIMITY_LED_RSSI_THRESHOLD = -65; +const PROXIMITY_TABLE_SIZE = 8; +const DIGEST_TABLE_SIZE = 32; +const OBSERVE_PERIOD_MILLISECONDS = 400; +const BROADCAST_PERIOD_MILLISECONDS = 3600; +const BROADCAST_DIGEST_PAGE_MILLISECONDS = 400; +const PROXIMITY_PACKET_INTERVAL_MILLISECONDS = 400; +const DIGEST_PACKET_INTERVAL_MILLISECONDS = 100; +const DIGEST_TIME_CYCLE_THRESHOLD = 86400; +const EXCITER_HOLDOFF_SECONDS = 60; +const BLINK_ON_PROXIMITY = true; +const BLINK_ON_DISTANCING = true; +const BLINK_ON_DIGEST = true; +const BLINK_ON_RESET = true; + + +// Eddystone protocol constants +const EDDYSTONE_UUID = 'feaa'; +const EDDYSTONE_UID_FRAME = 0x00; +const EDDYSTONE_NAMESPACE_OFFSET = 2; +const EDDYSTONE_NAMESPACE_LENGTH = 10; +const EDDYSTONE_INSTANCE_OFFSET = 14; + + +// DirAct constants +const DIRACT_MANUFACTURER_ID = 0x0583; // Code Blue Consulting +const DIRACT_PROXIMITY_FRAME = 0x01; +const DIRACT_DIGEST_FRAME = 0x11; +const DIRACT_DEFAULT_COUNT_LENGTH = 0x07; +const DIRACT_INSTANCE_LENGTH = 4; +const DIRACT_INSTANCE_OFFSET = 2; +const MAX_NUMBER_STRONGEST = 3; +const MAX_BATTERY_VOLTAGE = 3.3; +const MIN_BATTERY_VOLTAGE = 3.0; +const MAX_RSSI_TO_ENCODE = -28; +const MIN_RSSI_TO_ENCODE = -92; +const MAX_ACCELERATION_TO_ENCODE = 2; +const MAX_ACCELERATION_MAGNITUDE = 0x1f; +const INVALID_ACCELERATION_CODE = 0x20; +const SCAN_OPTIONS = { + filters: [ + { manufacturerData: { 0x0583: {} } }, + { services: [ EDDYSTONE_UUID ] } + ] +}; + + +// Other constants +const BITS_PER_BYTE = 8; +const DUMMY_INSTANCE_ID = 0; +const DUMMY_RSSI = MIN_RSSI_TO_ENCODE; + + +// Global variables +let proximityInstances = new Uint32Array(PROXIMITY_TABLE_SIZE); +let proximityRssis = new Int8Array(PROXIMITY_TABLE_SIZE); +let digestInstances = new Uint32Array(DIGEST_TABLE_SIZE); +let digestCounts = new Uint16Array(DIGEST_TABLE_SIZE); +let digestTime = new Uint8Array([ 0, 0, 0 ]); +let numberOfDigestPages = 0; +let sensorData = [ 0x82, 0x08, 0x3f ]; +let cyclicCount = 0; +let lastDigestTime = Math.round(getTime()); +let lastResetTime = Math.round(getTime()); +let isExciterPresent = false; +let isResetterPresent = false; +let isProximityDetected = false; +let menu = { + "": { "title": "-- DirAct --" } +}; + + +/** + * Initiate observer mode, scanning for devices in proximity. + */ +function observe() { + proximityInstances.fill(DUMMY_INSTANCE_ID); // Reset proximity + proximityRssis.fill(DUMMY_RSSI); // table data + isExciterPresent = false; + isResetterPresent = false; + + NRF.setScan(handleDiscoveredDevice, SCAN_OPTIONS); // Start scanning + setTimeout(broadcast, OBSERVE_PERIOD_MILLISECONDS); // ...until period end +} + + +/** + * Compile the scan results and initiate broadcaster mode, advertising either + * proximity or digest packets, in consequence. + */ +function broadcast() { + NRF.setScan(); // Stop scanning + + let sortedProximityIndices = getSortedIndices(proximityRssis); + + updateDigestTable(sortedProximityIndices); + updateSensorData(); + + let currentTime = Math.round(getTime()); + let isExcited = isExciterPresent && + ((currentTime - lastDigestTime) > EXCITER_HOLDOFF_SECONDS); + + if(isResetterPresent) { + if(BLINK_ON_RESET) { + Bangle.setLCDPower(true); + } + lastResetTime = currentTime; + resetDigest(); + broadcastProximity(sortedProximityIndices); + } + else if(isExcited) { + let sortedDigestIndices = getSortedIndices(digestCounts); + compileDigest(); + broadcastDigest(sortedDigestIndices, 0); + } + else { + broadcastProximity(sortedProximityIndices); + } +} + + +/** + * Initiate broadcaster mode advertising proximity packets. + * @param {TypedArray} sortedIndices The sorted proximity table indices. + */ +function broadcastProximity(sortedIndices) { + let advertisingOptions = { + interval: PROXIMITY_PACKET_INTERVAL_MILLISECONDS, + showName: false, + manufacturer: DIRACT_MANUFACTURER_ID + }; + + advertisingOptions.manufacturerData = compileProximityData(sortedIndices); + NRF.setAdvertising({}, advertisingOptions); // Start advertising + setTimeout(observe, BROADCAST_PERIOD_MILLISECONDS); // ...until period end +} + + +/** + * Initiate broadcaster mode advertising digest packets. + * @param {TypedArray} sortedIndices The sorted digest table indices. + * @param {Number} pageNumber The page number to broadcast. + */ +function broadcastDigest(sortedIndices, pageNumber) { + let isLastPage = (pageNumber === (numberOfDigestPages - 1)); + let advertisingOptions = { + interval: DIGEST_PACKET_INTERVAL_MILLISECONDS, + showName: false, + manufacturer: DIRACT_MANUFACTURER_ID + }; + + advertisingOptions.manufacturerData = compileDigestData(sortedIndices, + pageNumber); + NRF.setAdvertising({}, advertisingOptions); // Start advertising + + if(isLastPage) { + setTimeout(observe, BROADCAST_DIGEST_PAGE_MILLISECONDS); + if(getTime() > DIGEST_TIME_CYCLE_THRESHOLD) { + lastResetTime = Math.round(getTime()); + resetDigest(); + } + if(BLINK_ON_DIGEST) { + Bangle.setLCDPower(true); + } + } + else { + setTimeout(broadcastDigest, BROADCAST_DIGEST_PAGE_MILLISECONDS, + sortedIndices, ++pageNumber); + } +} + + +/** + * Handle the given device discovered on scan and process further if + * Eddystone-UID or DirAct. + * @param {BluetoothDevice} device The discovered device. + */ +function handleDiscoveredDevice(device) { + let isEddystone = (device.hasOwnProperty('services') && + device.hasOwnProperty('serviceData') && + (device.services[0] === EDDYSTONE_UUID)); + let isManufacturer = (device.hasOwnProperty('manufacturer') && + device.manufacturer === DIRACT_MANUFACTURER_ID); + + if(isEddystone) { + let isEddystoneUID = (device.serviceData[EDDYSTONE_UUID][0] === + EDDYSTONE_UID_FRAME); + if(isEddystoneUID) { + handleEddystoneUidDevice(device.serviceData[EDDYSTONE_UUID], device.rssi); + } + } + else if(isManufacturer) { + let isDirAct = ((device.manufacturerData[0] === DIRACT_PROXIMITY_FRAME) || + (device.manufacturerData[0] === DIRACT_DIGEST_FRAME)); + if(isDirAct) { + handleDirActDevice(device.manufacturerData, device.rssi); + } + } +} + + +/** + * Handle the given Eddystone-UID device, adding to the devices in range if + * it meets the filter criteria. + * @param {Array} serviceData The Eddystone service data. + * @param {Number} rssi The received signal strength. + */ +function handleEddystoneUidDevice(serviceData, rssi) { + for(let cByte = 0; cByte < EDDYSTONE_NAMESPACE_LENGTH; cByte++) { + let namespaceIndex = EDDYSTONE_NAMESPACE_OFFSET + cByte; + if(serviceData[namespaceIndex] !== NAMESPACE_FILTER_ID[cByte]) { + return; + } + } + + let instanceId = 0; + let bitShift = (DIRACT_INSTANCE_LENGTH - 1) * BITS_PER_BYTE; + + for(let cByte = 0; cByte < DIRACT_INSTANCE_LENGTH; cByte++) { + let instanceByte = serviceData[EDDYSTONE_INSTANCE_OFFSET + cByte]; + instanceId += instanceByte << bitShift; + bitShift -= BITS_PER_BYTE; + } + + let unsignedInstanceId = new Uint32Array([instanceId])[0]; + + if(EXCITER_INSTANCE_IDS.indexOf(unsignedInstanceId) >= 0) { + isExciterPresent = true; + } + else if(RESETTER_INSTANCE_IDS.indexOf(unsignedInstanceId) >= 0) { + isResetterPresent = true; + } + else { + updateProximityTable(instanceId, rssi); + } +} + + +/** + * Handle the given DirAct device, adding to the devices in range if + * it meets the filter criteria. + * @param {Array} manufacturerData The DirAct manufacturer data. + * @param {Number} rssi The received signal strength. + */ +function handleDirActDevice(manufacturerData, rssi) { + let instanceId = 0; + let bitShift = (DIRACT_INSTANCE_LENGTH - 1) * BITS_PER_BYTE; + + for(let cByte = DIRACT_INSTANCE_OFFSET; + cByte < DIRACT_INSTANCE_OFFSET + DIRACT_INSTANCE_LENGTH; cByte++) { + let instanceByte = manufacturerData[cByte]; + instanceId += instanceByte << bitShift; + bitShift -= BITS_PER_BYTE; + } + + updateProximityTable(instanceId, rssi); +} + + +/** + * Update the proximity table with the given instance's RSSI. If the instance + * already exists, combine RSSI values in a weighted average. + * @param {String} instanceId The DirAct 4-byte instance id as a 32-bit integer. + * @param {Number} rssi The received signal strength. + */ +function updateProximityTable(instanceId, rssi) { + let instanceIndex = proximityInstances.indexOf(instanceId); + let isNewInstance = (instanceIndex < 0); + + if(isNewInstance) { + let nextIndex = proximityInstances.indexOf(DUMMY_INSTANCE_ID); + if(nextIndex >= 0) { + proximityInstances[nextIndex] = instanceId; + proximityRssis[nextIndex] = rssi; + } + } + else { + proximityRssis[instanceIndex] = (proximityRssis[instanceIndex] + rssi) / 2; + } +} + + +/** + * Update the digest table based on the proximity table and its sorted indices. + * @param {TypedArray} sortedIndices The sorted proximity table indices. + */ +function updateDigestTable(sortedIndices) { + for(let cInstance = 0; cInstance < PROXIMITY_TABLE_SIZE; cInstance++) { + let proximityIndex = sortedIndices[cInstance]; + + if(proximityRssis[proximityIndex] >= PROXIMITY_RSSI_THRESHOLD) { + let instanceId = proximityInstances[proximityIndex]; + let instanceIndex = digestInstances.indexOf(instanceId); + let isNewInstance = (instanceIndex < 0); + + if(isNewInstance) { + let nextIndex = digestInstances.indexOf(DUMMY_INSTANCE_ID); + if(nextIndex >= 0) { + digestInstances[nextIndex] = instanceId; + digestCounts[nextIndex] = 1; + } + } + else if(digestCounts[instanceIndex] < 65535) { + digestCounts[instanceIndex]++; + } + } + else { + cInstance = PROXIMITY_TABLE_SIZE; // Break + } + } +} + + +/* + * Compile the digest from the digest table. + */ +function compileDigest() { + let numberOfEntries = digestCounts.findIndex(count => count === 0); + let currentTime = Math.round(getTime()); + let elapsedTime = currentTime - lastResetTime; + if(numberOfEntries < 0) { + numberOfEntries = DIGEST_TABLE_SIZE; + } + digestTime[0] = (elapsedTime >> 16) & 0xff; + digestTime[1] = (elapsedTime >> 8) & 0xff; + digestTime[2] = elapsedTime & 0xff; + numberOfDigestPages = Math.max(1, Math.min(8, Math.ceil(numberOfEntries/3))); + lastDigestTime = currentTime; +} + + +/* + * Clear the digest table. + */ +function resetDigest() { + digestInstances.fill(DUMMY_INSTANCE_ID); + digestCounts.fill(0); +} + + +/** + * Compile the DirAct proximity data. + * @param {TypedArray} sortedIndices The sorted proximity table indices. + */ +function compileProximityData(sortedIndices) { + let data = [ + DIRACT_PROXIMITY_FRAME, DIRACT_DEFAULT_COUNT_LENGTH, + INSTANCE_ID[0], INSTANCE_ID[1], INSTANCE_ID[2], INSTANCE_ID[3], + sensorData[0], sensorData[1], sensorData[2] + ]; + let isNewProximityDetected = false; + + for(let cInstance = 0; cInstance < MAX_NUMBER_STRONGEST; cInstance++) { + let index = sortedIndices[cInstance]; + + if(proximityRssis[index] >= PROXIMITY_RSSI_THRESHOLD) { + let instanceId = proximityInstances[index]; + data.push((instanceId >> 24) & 0xff, (instanceId >> 16) & 0xff, + (instanceId >> 8) & 0xff, instanceId & 0xff, + encodeRssi(proximityRssis[index])); + if(proximityRssis[index] >= PROXIMITY_LED_RSSI_THRESHOLD) { + isNewProximityDetected = true; + } + } + else { + cInstance = PROXIMITY_TABLE_SIZE; // Break + } + } + + cyclicCount = (cyclicCount + 1) % 8; + + data[1] = (cyclicCount << 5) + (data.length - 2); + + if(isProximityDetected && !isNewProximityDetected && BLINK_ON_DISTANCING) { + Bangle.setLCDPower(true); + } + else if(isNewProximityDetected && BLINK_ON_PROXIMITY) { + Bangle.setLCDPower(true); + } + isProximityDetected = isNewProximityDetected; + + return data; +} + + +/** + * Compile the DirAct digest data. + * @param {TypedArray} sortedIndices The sorted digest table indices. + * @param {Number} digestPage The page of the digest to compile. + */ +function compileDigestData(sortedIndices, digestPage) { + let isLastPage = (digestPage === (numberOfDigestPages - 1)); + + let digestStatus = digestTime[0] & 0x7f; + if(isLastPage) { + digestStatus |= 0x80; + } + + let data = [ + DIRACT_DIGEST_FRAME, DIRACT_DEFAULT_COUNT_LENGTH, + INSTANCE_ID[0], INSTANCE_ID[1], INSTANCE_ID[2], INSTANCE_ID[3], + digestStatus, digestTime[1], digestTime[2] + ]; + let pageIndex = digestPage * 3; + + for(let cInstance = pageIndex; cInstance < (pageIndex + 3); cInstance++) { + let index = sortedIndices[cInstance]; + + if(digestCounts[index] > 0) { + let instanceId = digestInstances[index]; + let encodedCount = digestCounts[index]; + if(encodedCount > 127) { + encodedCount = 0x80 | (Math.min((encodedCount >> 8), 0x7f) & 0x7f); + } + data.push((instanceId >> 24) & 0xff, (instanceId >> 16) & 0xff, + (instanceId >> 8) & 0xff, instanceId & 0xff, + encodedCount); + } + else { + cInstance = pageIndex + 3; // Break + } + } + + data[1] = (digestPage << 5) + (data.length - 2); + + return data; +} + + +/** + * Encode the given RSSI. + * @param {Number} rssi The given RSSI. + * @return {Number} The encoded RSSI. + */ +function encodeRssi(rssi) { + rssi = Math.round(rssi); + + if(rssi >= MAX_RSSI_TO_ENCODE) { + return 0x3f; + } + if(rssi <= MIN_RSSI_TO_ENCODE) { + return 0x00; + } + return rssi - MIN_RSSI_TO_ENCODE; +} + + +/** + * Encode the battery percentage. + * @return {Number} The battery percentage. + */ +function encodeBatteryPercentage() { + let voltage = NRF.getBattery(); + + if(voltage <= MIN_BATTERY_VOLTAGE) { + return 0x00; + } + if(voltage >= MAX_BATTERY_VOLTAGE) { + return 0x3f; + } + + return Math.round(0x3f * (voltage - MIN_BATTERY_VOLTAGE) / + (MAX_BATTERY_VOLTAGE - MIN_BATTERY_VOLTAGE)); +} + + +/** + * Encode the acceleration. + * @return {Array} The encoded acceleration [ x, y, z ]. + */ +function encodeAcceleration() { + let encodedAcceleration = { x: INVALID_ACCELERATION_CODE, + y: INVALID_ACCELERATION_CODE, + z: INVALID_ACCELERATION_CODE }; + + let acceleration = { x: Bangle.getAccel().x, + y: Bangle.getAccel().y, + z: Bangle.getAccel().z }; + + for(let axis in acceleration) { + let magnitude = acceleration[axis]; + let encodedMagnitude = Math.min(MAX_ACCELERATION_MAGNITUDE, + Math.round(MAX_ACCELERATION_MAGNITUDE * + (Math.abs(magnitude) / + MAX_ACCELERATION_TO_ENCODE))); + if(magnitude < 0) { + encodedMagnitude = 0x3f - encodedMagnitude; + } + encodedAcceleration[axis] = encodedMagnitude; + } + + return encodedAcceleration; +} + + +/** + * Update the sensor data (battery & acceleration) for the advertising packet. + */ +function updateSensorData() { + + // Update the battery measurement each time the cyclic count resets + if(cyclicCount === 0) { + encodedBattery = encodeBatteryPercentage(); + } + + encodedAcceleration = encodeAcceleration(); + + sensorData[0] = ((encodedAcceleration.x << 2) & 0xfc) | + ((encodedAcceleration.y >> 4) & 0x3f); + sensorData[1] = ((encodedAcceleration.y << 4) & 0xf0) | + ((encodedAcceleration.z >> 2) & 0x0f); + sensorData[2] = ((encodedAcceleration.z << 6) & 0xc0) | + (encodedBattery & 0x3f); +} + + +/** + * Determine the sorted order of the indices of the given array. + * @return {Uint8Array} The array of indices sorted in descending order. + */ +function getSortedIndices(unsortedArray) { + let sortedIndices = new Uint8Array(unsortedArray.length); + + sortedIndices.forEach((value, index) => sortedIndices[index] = index); + sortedIndices.sort((a, b) => unsortedArray[b] - unsortedArray[a]); + + return sortedIndices; +} + + +// On start: begin DirAct operation and display the menu +g.clear(); +E.showMenu(menu); +observe(); diff --git a/apps/diract/diract.png b/apps/diract/diract.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2c099786f5b6d8398825feb62cee4b890d67e8 GIT binary patch literal 1784 zcmX|Cc{tly7bcb}(Z*iFAe2zFN^M^)ZR|8+`K&{9l?a-OK@&R-siky7M@x!9$6AJ} zqLvVQMJy3Zo7#ubl!msZ=BM+0{o~yG-1|J|ocF%(d!9={A??IP6-4>?_{1ITt=)kA z)Io@VfORS`>^5onzOhaG#JpaNIZ zPUF{4?lT6r5 zr|sJmSjNZoWXMADl027?P!X3gKFz8Z-Y%1hbkC_co$hE zdc)5eU7w5T%~BdoX;4ETNW69IM5WJ^qsepwmast2!61n_6zWNI8(7J#0spSkRn64( z`ISEI`(C>-M!GZDzdf!Mk$S{cj(Y0G?8{$BUwNU12ATBkH?(v)c4H{?7w+YVjp`yKCWW~3lldB>)QNc>E-ItVY>(fsLATo)jHNk)DHJKqhg$9$!RngNylUD)SkDi7 zQ>jk5dOpX6#AGvw6q-(?(>I{?Xu&oNf#9sO>IHgEZ|31w8<9XGGvYQTeR%QW8nfcT z2`?jwiPRY=*rzGF zGWwL14F0gY^OJwwrCSA>E>98^2%4V(1Oe@F8`-Dn6W!y#dv$>lRlDkMZY{l?5$P=M znIV@XTk&@$-BYp7f@6iJ0yVDrh(nDkBR8g7A~(M5a*M0{Y68stqc-P49|2^d0TmwV z`aLnZ0n<@A;f?TX3KMT4G3gMG7ydsUvaLSE2d!n1$zb`UOOt0~cHac@R>ykXP_8*Tv%V=uW0}NNY!`l(< z{n~FSbY*p{41hNMKZDraHxvlz7C>0w_WXhB$%l?kCqApvk5HI-aYJCT0^6Y5Q=3qg z(?rE%B^c+vn-c>2p0pxgPnXm24y0%m36B*MuZorH?QG7E^!Eo(RzE%p-jt9PX^gGA zM1zqVLs(DscN%k#fP_TEkVz2JrzP@%U6%*f2tjz$!ZSEo`5gjnh+P@b`ekt-ceuhf zQz8E?FmtIwAVeFA^l5F;W*^xNIKP$H-wFT04+^M~oS)|t@!^rbG9B!T5v~V@LA$lr zl(2Nn`SdWY*6O)iucY#D--kR#b_4`&<$d7jn+GZmUa3(fZ36R}1;skv8YL|0<3e1W zPu)IpF|n3vUt*~Kql>k}pOBd97|Wk!P=`vWxS1Dq)30}XGNI!W!Q;=AOz9))Xv&>{)$X~J}bX08@|HTdgned#W11mB-9PHsqwBDFvOU6>$W17KfX&1%A z2i5{r*%y{mqdCNeP_~ir=wT@hxMVYdldq5j43DNn^DE(;&TKqqeZC#-@HZ=!c#X`V z{Fh%03HySExk3Al*V%*MMX0<&c;3Fz{h&Rg`{?g+2mH5yla!0gT`hJP@T2iL*dVQ| I&j%*`1M&S_MgRZ+ literal 0 HcmV?d00001 From 0de5a23736eaa4a8152cba314dfbcecf2d817b62 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 22 Dec 2021 08:45:13 +0100 Subject: [PATCH 144/217] Fix: Gadgedbridge freezes screen --- apps/lcars/lcars.app.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 9068868f0..2104c6f7f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -30,6 +30,7 @@ let cWhite = "#FFFFFF"; let lcarsViewPos = 0; let drag; let hrmValue = 0; +var connected = NRF.getSecurityStatus().connected; /* * Requirements and globals @@ -311,13 +312,6 @@ function draw(){ // First handle alarm to show this correctly afterwards handleAlarm(); - // Clear data - var current = new Date(); - if(current.getHours() == 0 && current.getMinutes() == 0){ - stepsData = new Array(24).fill(0); - hrmData = new Array(24).fill(0); - } - // Next draw the watch face g.reset(); g.clearRect(0, 0, g.getWidth(), g.getHeight()); @@ -396,7 +390,13 @@ function handleAlarm(){ */ Bangle.on('lcdPower',on=>{ if (on) { - draw(); // draw immediately, queue redraw + // Whenever we connect to Gadgetbridge, reading data from + // health failed. Therefore, we update and read data from + // health iff the connection state did not change. + if(connected == NRF.getSecurityStatus().connected) { + draw(); // draw immediately, queue redraw + } + connected = NRF.getSecurityStatus().connected } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; From 63850e74b3461f67f05e3d1dd6348e494b58141b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20ICH=C3=89?= <4037271+peeweek@users.noreply.github.com> Date: Wed, 22 Dec 2021 08:48:07 +0100 Subject: [PATCH 145/217] Added Support for messages --- apps.json | 2 +- apps/hcclock/ChangeLog | 5 ++-- apps/hcclock/README.md | 1 + apps/hcclock/hcclock.app.js | 51 +++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..e3d9a5314 100644 --- a/apps.json +++ b/apps.json @@ -4064,7 +4064,7 @@ { "id": "hcclock", "name": "Hi-Contrast Clock", - "version": "0.02", + "version": "0.03", "description": "Hi-Contrast Clock : A simple yet very bold clock that aims to be readable in high luninosity environments. Uses big 10x5 pixel digits. Use BTN 1 to switch background and foreground colors.", "icon": "hcclock-icon.png", "type": "clock", diff --git a/apps/hcclock/ChangeLog b/apps/hcclock/ChangeLog index aaa55d01a..f70653d58 100644 --- a/apps/hcclock/ChangeLog +++ b/apps/hcclock/ChangeLog @@ -1,2 +1,3 @@ -0.01: base code -0.02: saved settings when switching color scheme \ No newline at end of file +0.01: Base code +0.02: Saved settings when switching color scheme +0.03: Added Button 3 opening messages (if app is installed) \ No newline at end of file diff --git a/apps/hcclock/README.md b/apps/hcclock/README.md index 328f1fe03..122401dd8 100644 --- a/apps/hcclock/README.md +++ b/apps/hcclock/README.md @@ -5,6 +5,7 @@ A High-contrast, black-on-white or white-on-black clock displaying huge pixel di ## Usage * BTN 1 switches between the two modes : black-on-white or white-on-black +* BTN 3 opens the messages (if installed, and there are new messages) * That's it! ## Issues and Requests diff --git a/apps/hcclock/hcclock.app.js b/apps/hcclock/hcclock.app.js index 4664dd763..623b28f13 100644 --- a/apps/hcclock/hcclock.app.js +++ b/apps/hcclock/hcclock.app.js @@ -129,6 +129,7 @@ function updateTime() g.setFontAlign(0, -1, 0); g.drawString(fmtDate(d,mo,y,hour), 120, 120); } + drawMessages(); } function drawDigits(x, value) @@ -222,6 +223,55 @@ function flipColors() setColorScheme(0); } +////////////////////////////////////////// +// +// MESSAGE HANDLING() +// + +let messages_installed = require("Storage").read("messages.app.js") != undefined; + +function handleMessages() +{ + if(messages_installed && hasMessages() > 0) + { + E.showMessage("Loading Messages..."); + load("messages.app.js"); + } +} + +function hasMessages() +{ + if(!messages_installed) + return false; + + var messages = require("Storage").readJSON("messages.json",1)||[]; + if (messages.some(m=>m.new)) + return true; + else + return false; +} + +let msg = atob("GBiBAAAAAAAAAAAAAAAAAAAAAB//+DAADDAADDAADDwAPD8A/DOBzDDn/DA//DAHvDAPvjAPvjAPvjAPvh///gf/vAAD+AAB8AAAAA=="); +let had_messages = false; + +function drawMessages() +{ + if(!had_messages && hasMessages()) { + g.setColor(255,255,255); + g.drawImage(msg, 200, 206); + g.setFont("6x8", 2); + g.setFontAlign(0, -1, 0); + g.drawString(">", 224, 210); + had_messages = true; + } + else if (had_messages && !hasMessages()) + { + g.setColor(255,0,0); + g.fillRect(200, 200, 240, 240); + had_messages = false; + } +} + ////////////////////////////////////////// // // MAIN FUNCTION() @@ -238,6 +288,7 @@ setInterval(updateTime, interval); // Handle Button Press setWatch(flipColors, BTN1, true); setWatch(Bangle.showLauncher, BTN2, false); +setWatch(handleMessages, BTN3, true); // Handle redraw on LCD on / fullscreen notifications dismissed Bangle.on('lcdPower', (on) => { if(on) redraw(); }); From 07049c4d880a82a6a5554d4bafe41c8392245357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20ICH=C3=89?= <4037271+peeweek@users.noreply.github.com> Date: Wed, 22 Dec 2021 09:01:41 +0100 Subject: [PATCH 146/217] Fixed position of icon --- apps/hcclock/hcclock.app.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/hcclock/hcclock.app.js b/apps/hcclock/hcclock.app.js index 623b28f13..de5163996 100644 --- a/apps/hcclock/hcclock.app.js +++ b/apps/hcclock/hcclock.app.js @@ -258,16 +258,16 @@ function drawMessages() { if(!had_messages && hasMessages()) { g.setColor(255,255,255); - g.drawImage(msg, 200, 206); + g.drawImage(msg, 184, 212); g.setFont("6x8", 2); g.setFontAlign(0, -1, 0); - g.drawString(">", 224, 210); + g.drawString(">", 224, 216); had_messages = true; } else if (had_messages && !hasMessages()) { - g.setColor(255,0,0); - g.fillRect(200, 200, 240, 240); + g.setColor(0,0,0); + g.fillRect(180, 210, 240, 240); had_messages = false; } } From 1cf197df6faf28c23f666bfe107657c930bc574d Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 22 Dec 2021 12:28:01 +0100 Subject: [PATCH 147/217] Sitch between month / 24h --- apps/lcars/lcars.app.js | 113 +++++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 37 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 2104c6f7f..afbca2b8b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -31,6 +31,7 @@ let lcarsViewPos = 0; let drag; let hrmValue = 0; var connected = NRF.getSecurityStatus().connected; +var plotWeek = false; /* * Requirements and globals @@ -270,36 +271,71 @@ function drawPosition1(){ } // Plot HRM graph - var data = new Uint16Array(32); - var cnt = new Uint8Array(32); - health.readDailySummaries(new Date(), h=>{ - data[h.day]+=h.bpm; - if (h.bpm) cnt[h.day]++; - }); - require("graph").drawBar(g, data, { - axes : true, - minx: 1, - gridx : 4, - gridy : 100, - width : 140, - height : 50, - x: 5, - y: 25 - }); + if(plotWeek){ + var data = new Uint16Array(32); + var cnt = new Uint8Array(32); + health.readDailySummaries(new Date(), h=>{ + data[h.day]+=h.bpm; + if (h.bpm) cnt[h.day]++; + }); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 5, + gridy : 100, + width : 140, + height : 50, + x: 5, + y: 25 + }); - // Plot step graph - var data = new Uint16Array(32); - health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); - require("graph").drawBar(g, data, { - axes : true, - minx: 1, - gridx : 4, - gridy : 5, - width : 140, - height : 50, - x: 5, - y: 115 - }); + // Plot step graph + var data = new Uint16Array(32); + health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 5, + gridy : 5, + width : 140, + height : 50, + x: 5, + y: 115 + }); + + // Plot day + } else { + var data = new Uint16Array(24); + var cnt = new Uint8Array(24); + health.readDay(new Date(), h=>{ + data[h.hr]+=h.bpm; + if (h.bpm) cnt[h.hr]++; + }); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 4, + gridy : 100, + width : 140, + height : 50, + x: 5, + y: 25 + }); + + // Plot step graph + var data = new Uint16Array(24); + health.readDay(new Date(), h=>data[h.hr]+=h.steps); + require("graph").drawBar(g, data, { + axes : true, + minx: 1, + gridx : 4, + gridy : 1000, + width : 140, + height : 50, + x: 5, + y: 115 + }); + } g.setFontAntonioMedium(); g.setColor(cWhite); @@ -394,13 +430,14 @@ Bangle.on('lcdPower',on=>{ // health failed. Therefore, we update and read data from // health iff the connection state did not change. if(connected == NRF.getSecurityStatus().connected) { - draw(); // draw immediately, queue redraw + draw(); } - connected = NRF.getSecurityStatus().connected } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; } + + connected = NRF.getSecurityStatus().connected }); Bangle.on('lock', function(isLocked) { @@ -456,14 +493,16 @@ Bangle.on("drag", e => { // Vertical swipe } else if (Math.abs(dy)>Math.abs(dx)+10) { - if(lcarsViewPos != 0){ - return; + if(lcarsViewPos == 0){ + if(dy > 0){ + decreaseAlarm(); + } else { + increaseAlarm(); + } } - if(dy > 0){ - decreaseAlarm(); - } else { - increaseAlarm(); + if(lcarsViewPos == 1){ + plotWeek = dy < 0 } } From 56a42fb0648c88da743fa5e19822d6cc9410d044 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Wed, 22 Dec 2021 14:37:16 +0100 Subject: [PATCH 148/217] note longer needed --- apps/andark/add_to_apps.json | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 apps/andark/add_to_apps.json diff --git a/apps/andark/add_to_apps.json b/apps/andark/add_to_apps.json deleted file mode 100644 index 57613f9d2..000000000 --- a/apps/andark/add_to_apps.json +++ /dev/null @@ -1,15 +0,0 @@ -{ "id": "andark", - "name": "Analog Dark", - "shortName":"AnDark", - "version":"0.01", - "description": "analog clock face without disturbing widgets", - "icon": "andark_icon.png", - "type": "clock", - "tags": "clock", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"anrark.app.js","url":"app.js"}, - {"name":"andark.img","url":"app_icon.js ","evaluate":true} - ] -} From 1533180617f82e4e0be6c4c52d1e86eff78cd28a Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:36:40 +0100 Subject: [PATCH 149/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 9d54f1d79..c15511dd2 100644 --- a/apps.json +++ b/apps.json @@ -5068,7 +5068,7 @@ "name": "Simple Clock with Date", "shortName": "supf Clock", "version": "0.01", - "description": "Simple Clock with seconds and Date in custom language. Install 'Languages' to get localized names.", + "description": "Simple Clock with seconds and date in custom language. Install 'Languages' to get localized names.", "icon": "icon.png", "screenshots": [{"url":"screenshot_supf.png"}], "type": "clock", From 21324ec224791802506a466de8d9438749881491 Mon Sep 17 00:00:00 2001 From: M14aAUI <77926990+M14aAUI@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:39:21 +0100 Subject: [PATCH 150/217] Update README.md --- apps/supf/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/supf/README.md b/apps/supf/README.md index 5b80152c3..258a69d4b 100644 --- a/apps/supf/README.md +++ b/apps/supf/README.md @@ -1,4 +1,4 @@ -# Simple Clock with seconds and Date in custom language -ATTENTION: requires Languages app +# Simple Clock with Date +Simple Clock with seconds and date in custom language. Install 'Languages' to get localized names. ![](screenshot_supf.png) From f0a2767c8c4d1a8b2b41c9900617bed358270700 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:24:51 +0100 Subject: [PATCH 151/217] changed update on lock changed update on lock, so that the display only refreshes after 60 seconds (banglejs2) --- apps/andark/app.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/andark/app.js b/apps/andark/app.js index cf248d462..2a2c4b29d 100644 --- a/apps/andark/app.js +++ b/apps/andark/app.js @@ -1,5 +1,6 @@ const c={"x":g.getWidth()/2,"y":g.getHeight()/2}; let zahlpos=[]; +let unlock = true; function zeiger(len,dia,tim){ const x =c.x+ Math.cos(tim)*len/2, @@ -41,9 +42,11 @@ function draw(){ // g.setColor(1,1,1); const minz = zeiger(150,5,m); g.fillPoly(minz,true); + if (unlock){ const sekz = zeiger(150,2,s); g.fillPoly(sekz,true); g.fillCircle(c.x,c.y,4); + } } @@ -90,6 +93,7 @@ g.setBgColor(0,0,0); g.clear(); drawScale(); draw(); + let secondInteraval= setInterval(draw, 1000); // Stop updates when LCD is off, restart when on @@ -102,6 +106,19 @@ Bangle.on('lcdPower',on=>{ }else{ } }); +Bangle.on('lock',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (!on) { + secondInterval = setInterval(draw, 1000); + unlock = true; + draw(); // draw immediately + }else{ + secondInterval = setInterval(draw, 60000); + unlock = false; + draw(); + } + }); // Show launcher when middle button pressed Bangle.setUI("clock"); From 967812c05f4d3ec17b0147bfb705d82d17c4d783 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Thu, 23 Dec 2021 00:33:19 +0900 Subject: [PATCH 152/217] AwairMonitor: the app is now a clock, data is greyed when connection is lost --- apps/awairmonitor/app.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/apps/awairmonitor/app.js b/apps/awairmonitor/app.js index a5a1d1a72..9123a9c2c 100644 --- a/apps/awairmonitor/app.js +++ b/apps/awairmonitor/app.js @@ -30,6 +30,8 @@ var bt_temp_history = new Array(10).fill(0); var internal_last_update = -1; +var display_frozen = false; + function draw() { g.reset().clearRect(0,24,g.getWidth(),g.getHeight()); @@ -47,14 +49,8 @@ function draw() { g.drawString("Humi", 125, 100); g.drawString("Temp", 160, 100); - g.setFont("HaxorNarrow7x17"); - g.drawString(""+bt_current_co2, 18, 110); - g.drawString(""+bt_current_voc, 53, 110); - g.drawString(""+bt_current_pm25, 88, 110); - g.drawString(""+bt_current_humi, 123, 110); - g.drawString(""+bt_current_temp, 158, 110); - if (last_update != bt_last_update) { + display_frozen = false; last_update = bt_last_update; internal_last_update = last_update; if (last_update % 10 == 0) { @@ -65,16 +61,29 @@ function draw() { bt_temp_history.shift(); bt_temp_history.push(bt_current_temp); } } - + if (internal_last_update == -1) { g.drawString("Waiting for connection", 88, 164); - } else if (internal_last_update > last_update + 5) { + } else if ((internal_last_update > last_update + 5) && (internal_last_update < last_update + 60)) { g.drawString("Trying to reconnect since " + (internal_last_update - last_update), 88, 164); + } else if (internal_last_update > last_update + 5) { + display_frozen = true; + g.drawString("Waiting for connection", 88, 164); } + if (display_frozen) { g.setColor("#888"); } + + g.setFont("HaxorNarrow7x17"); + g.drawString(""+bt_current_co2, 18, 110); + g.drawString(""+bt_current_voc, 53, 110); + g.drawString(""+bt_current_pm25, 88, 110); + g.drawString(""+bt_current_humi, 123, 110); + g.drawString(""+bt_current_temp, 158, 110); for (i = 0; i < 10; i++) { - // max height = 32 + if (display_frozen) { g.setColor("#888"); } + + // max height = 32 g.drawLine(10+i*2, 150-(Math.min(Math.max(bt_co2_history[i],400), 1200)-400)/25, 10+i*2, 150); g.drawLine(45+i*2, 150-(Math.min(Math.max(bt_voc_history[i],0), 1440)-0)/45, 45+i*2, 150); g.drawLine(80+i*2, 150-(Math.min(Math.max(bt_pm25_history[i],0), 32)-0)/1, 80+i*2, 150); @@ -91,6 +100,7 @@ function draw() { } // init +Bangle.setUI("clock"); require("FontHaxorNarrow7x17").add(Graphics); g.clear(); Bangle.loadWidgets(); From 28fb84422383a1d36e931a058fa9160b4f1c2af3 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Thu, 23 Dec 2021 00:34:05 +0900 Subject: [PATCH 153/217] Update ChangeLog --- apps/awairmonitor/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/awairmonitor/ChangeLog b/apps/awairmonitor/ChangeLog index 0cc9a42b0..88e9690d8 100644 --- a/apps/awairmonitor/ChangeLog +++ b/apps/awairmonitor/ChangeLog @@ -1 +1,2 @@ 0.01: Beta version for Bangle 2 paired with Chrome (2021/12/11) +0.02: The app is now a clock, the data is greyed after the connection is lost (2021/12/22) From 4f709d0d4b9fa60dac5c56be1ee11aa009056f86 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Thu, 23 Dec 2021 00:35:51 +0900 Subject: [PATCH 154/217] Update apps.json --- apps.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index e5e9f8f02..bf5e8c77f 100644 --- a/apps.json +++ b/apps.json @@ -4931,10 +4931,12 @@ "id":"awairmonitor", "name":"Awair Monitor", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "allow_emulator": true, - "version":"0.01", + "version":"0.02", "description": "Displays the level of CO2, VOC, PM 2.5, Humidity and Temperature, from your Awair device.", - "tags": "tool,health", + "type": "clock", + "tags": "clock,tool,health", "readme":"README.md", "supports":["BANGLEJS2"], "storage": [ From ad6ed2496e6b97eb66e376caaee835863c5c2b89 Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:49:50 +0100 Subject: [PATCH 155/217] fixed wrong spelling in variable name --- apps/andark/app.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/apps/andark/app.js b/apps/andark/app.js index 2a2c4b29d..efa00ce6f 100644 --- a/apps/andark/app.js +++ b/apps/andark/app.js @@ -1,6 +1,6 @@ const c={"x":g.getWidth()/2,"y":g.getHeight()/2}; let zahlpos=[]; -let unlock = true; +let unlock = false; function zeiger(len,dia,tim){ const x =c.x+ Math.cos(tim)*len/2, @@ -45,8 +45,9 @@ function draw(){ if (unlock){ const sekz = zeiger(150,2,s); g.fillPoly(sekz,true); - g.fillCircle(c.x,c.y,4); } + g.fillCircle(c.x,c.y,4); + } @@ -94,7 +95,7 @@ g.clear(); drawScale(); draw(); -let secondInteraval= setInterval(draw, 1000); +let secondInterval= setInterval(draw, 1000); // Stop updates when LCD is off, restart when on Bangle.on('lcdPower',on=>{ @@ -122,6 +123,3 @@ Bangle.on('lock',on=>{ // Show launcher when middle button pressed Bangle.setUI("clock"); -// Load widgets -//Bangle.loadWidgets(); -//Bangle.drawWidgets(); From 4e41b3a2b03a685e89d8f35598e858b9ae355d0a Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:50:53 +0100 Subject: [PATCH 156/217] Update ChangeLog --- apps/andark/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/andark/ChangeLog b/apps/andark/ChangeLog index 91bbd190f..341868930 100644 --- a/apps/andark/ChangeLog +++ b/apps/andark/ChangeLog @@ -1,3 +1,4 @@ 0.01: Release 0.02: Rename app 0.03: Add type "clock" +0.04: changed update cylce, when locked From b9660042230976ef111dbab228a3847471aa708f Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:56:10 +0100 Subject: [PATCH 157/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 5675c30d5..b067b59cb 100644 --- a/apps.json +++ b/apps.json @@ -5066,7 +5066,7 @@ { "id": "andark", "name": "Analog Dark", "shortName":"AnDark", - "version":"0.03", + "version":"0.04", "description": "analog clock face without disturbing widgets", "icon": "andark_icon.png", "type": "clock", From 7912a8e0a5312bcbbdd852765c3ffc1e6a10cebe Mon Sep 17 00:00:00 2001 From: HeiLaut <66202132+HeiLaut@users.noreply.github.com> Date: Wed, 22 Dec 2021 17:02:28 +0100 Subject: [PATCH 158/217] removed banglejs1 support can't test if it's working correkt on banglejs1 --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index b067b59cb..9fefe6701 100644 --- a/apps.json +++ b/apps.json @@ -5071,7 +5071,7 @@ "icon": "andark_icon.png", "type": "clock", "tags": "clock", - "supports" : ["BANGLEJS","BANGLEJS2"], + "supports" : ["BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"andark.app.js","url":"app.js"}, From 83ced79ec8cf916eba9b56462ae032ddac1de34b Mon Sep 17 00:00:00 2001 From: "A. Benjamins" Date: Wed, 22 Dec 2021 20:53:37 +0100 Subject: [PATCH 159/217] Create widget.js --- apps/widviztime/widget.js | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 apps/widviztime/widget.js diff --git a/apps/widviztime/widget.js b/apps/widviztime/widget.js new file mode 100644 index 000000000..5e81af611 --- /dev/null +++ b/apps/widviztime/widget.js @@ -0,0 +1,53 @@ +(() => { + + var saved = null; + + + function hide() { + if (!Bangle.isLCDOn() || saved) return; + saved = []; + for (var wd of WIDGETS) { + saved.push({ + d: wd.draw, + a: wd.area + }); + wd.draw = () => {}; + wd.area = ""; + } + g.setColor(0, 0, 0); + g.fillRect(0, 0, g.getWidth(), 23); + } + + function reveal() { + if (!Bangle.isLCDOn() || !saved) return; + for (var wd of WIDGETS) { + var o = saved.shift(); + wd.draw = o.d; + wd.area = o.a; + } + Bangle.drawWidgets(); + saved = null; + } + + function draw() { + g.setColor(0x07ff); + g.drawImage(atob("GBgBAAAAAAAAAAAAAAAAAH4AAf+AB4HgDgBwHDw4OH4cMOcMYMMGYMMGMOcMOH4cHDw4DgBwB4HgAf+AAH4AAAAAAAAAAAAAAAAA"), this.x, this.y); + } + + WIDGETS.viz = { + area: "tl", + width: 24, + draw: draw + }; + + + + Bangle.on('lock', (locked) => { + if (!locked) { + reveal(); + setTimeout(function() { + hide(); + }, 4000); + } + }); +})(); From 52cc043787e7f74316d8fb4f363b4a6201c7d0fd Mon Sep 17 00:00:00 2001 From: "A. Benjamins" Date: Wed, 22 Dec 2021 20:54:05 +0100 Subject: [PATCH 160/217] Create changelog --- apps/widviztime/changelog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/widviztime/changelog diff --git a/apps/widviztime/changelog b/apps/widviztime/changelog new file mode 100644 index 000000000..287061d0c --- /dev/null +++ b/apps/widviztime/changelog @@ -0,0 +1 @@ +0.01: New Widget, forked from widviz From 80c41ae35e485dff19dbea0c2b4d654b8097b885 Mon Sep 17 00:00:00 2001 From: "A. Benjamins" Date: Wed, 22 Dec 2021 21:01:33 +0100 Subject: [PATCH 161/217] Add files via upload --- apps/widviztime/eye.png | Bin 0 -> 3364 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/widviztime/eye.png diff --git a/apps/widviztime/eye.png b/apps/widviztime/eye.png new file mode 100644 index 0000000000000000000000000000000000000000..9aec8ce8930a6c34f8d664fdeab042554296b814 GIT binary patch literal 3364 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 o2D28nICLwO2_e Date: Wed, 22 Dec 2021 21:06:01 +0100 Subject: [PATCH 162/217] Update apps.json --- apps.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/apps.json b/apps.json index e5e9f8f02..ec1eb0568 100644 --- a/apps.json +++ b/apps.json @@ -5062,5 +5062,19 @@ {"name":"ltherm.app.js","url":"app.js"}, {"name":"ltherm.img","url":"icon.js","evaluate":true} ] + }, + { + "id": "widviztime", + "name": "Widget Autohide Widget", + "shortName": "Viz Time Widget", + "version": "0.01", + "description": "The widgets will be shown for four seconds after the device is unlocked.", + "icon": "eye.png", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"widviztime.wid.js","url":"widget.js"} + ] } ] From 8499a19cbb5ab7b12f936327eb91ff0f910bf270 Mon Sep 17 00:00:00 2001 From: "A. Benjamins" Date: Wed, 22 Dec 2021 21:07:51 +0100 Subject: [PATCH 163/217] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index ec1eb0568..e9eaab42b 100644 --- a/apps.json +++ b/apps.json @@ -5072,6 +5072,7 @@ "icon": "eye.png", "type": "widget", "tags": "widget", + "readme":"README.md", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widviztime.wid.js","url":"widget.js"} From 82abd587c2b0a8f07d40416b6f6b0317812200e4 Mon Sep 17 00:00:00 2001 From: "A. Benjamins" Date: Wed, 22 Dec 2021 21:10:13 +0100 Subject: [PATCH 164/217] Create README.md --- apps/widviztime/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 apps/widviztime/README.md diff --git a/apps/widviztime/README.md b/apps/widviztime/README.md new file mode 100644 index 000000000..35ea3c057 --- /dev/null +++ b/apps/widviztime/README.md @@ -0,0 +1,7 @@ +# Widget Autohide Widget +This should make widgets completely hidden (except for 4 seconds after the watch is unlocked) + +Additional features that I want to implement: +- [ ] Only show widgets when in app launcher +- [ ] Make timeout adjustable +- [ ] Disable widgets completely From f1b322a21018d844c586dda63487268df649cbd7 Mon Sep 17 00:00:00 2001 From: "A. Benjamins" Date: Wed, 22 Dec 2021 21:13:06 +0100 Subject: [PATCH 165/217] Update README.md --- apps/widviztime/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/widviztime/README.md b/apps/widviztime/README.md index 35ea3c057..73e24b658 100644 --- a/apps/widviztime/README.md +++ b/apps/widviztime/README.md @@ -1,7 +1,8 @@ # Widget Autohide Widget -This should make widgets completely hidden (except for 4 seconds after the watch is unlocked) +This widget is forked from the "Widget Visibility Widget" +It should make widgets completely hidden (except for 4 seconds after the watch is unlocked) Additional features that I want to implement: -- [ ] Only show widgets when in app launcher -- [ ] Make timeout adjustable -- [ ] Disable widgets completely +- Only show widgets when in app launcher +- Make timeout adjustable +- Disable widgets completely From 968e31c858e5752ec6856ed457ae2389da9f94a3 Mon Sep 17 00:00:00 2001 From: crazysaem Date: Wed, 22 Dec 2021 21:24:21 +0000 Subject: [PATCH 166/217] ptlaunch: Add updated screenshots --- apps/ptlaunch/add_pattern_dark.png | Bin 3185 -> 2682 bytes apps/ptlaunch/add_pattern_light.png | Bin 3202 -> 2700 bytes apps/ptlaunch/manage_patterns_dark.png | Bin 3008 -> 941 bytes apps/ptlaunch/manage_patterns_light.png | Bin 3027 -> 2944 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/ptlaunch/add_pattern_dark.png b/apps/ptlaunch/add_pattern_dark.png index 04dfdecd6816c643f49a7246411886abce547b82..4d5770835e660bb266fe10fabf6ec0a18f55ba9f 100644 GIT binary patch literal 2682 zcmb7GdpHwp8`oZk*(ys8uMo?jY)(yHry^@|3OTe%WUu2$&aq)?$~j&XrO;cN({eW3 z-VIAgVZ)m_COM}ur>KNa-yh%g{qcT(e1AOm?|Sb0`aRe4T=#wbeoyK}d&>i$BOoCm zp##=dD5pKF`MH3id$F1}eRU7^ML1a^g{n9TpM-=!r>s%tF8Hg9g~NH1h7ggDyJmmQ zUOb@i*83jwepe;tF1hyr`S8f~CEDoX-0auQwO3~Ex8tJ~2!isGa5FUV_|_}s=CI?L zR_YEKXzTg%F{j^)^)O(*+{7V7eWx>{sr}1acg;|rTURf>s~TjP=9;* z{lJ(nMdf3Z_5nYRB;G$or$+I5yUWu1RU5={5f0>;a3|%v{S4=rj=@?rz#o(io`x>F zECsEGBU+>ky;BsFDQss({aah#cv$ExL_<0K=eBE0Yi(ED9ohy=Ee*$HZ^9ygKiuVj zL5!%%Si#C@nHc~B>Z=Di%v7O?TtqUv^|2#w;E_OuK-9TPTx%Ao0!}(6?lCKyUw1=m zCN{X51B2dEjgs_m>AE{cxy-*Dl%=$pK!OMNAWnHT0GOExndCY!=}%InP)wDY1QxkL$AH=_bWLnA5xM> zSg~$1on|#j(Z4K$!VuBYQH^X9Z5@;LGwAi)0mH+af!Sof7YUQ1nV5o8s^Z9Lg!?Vw zvZ?$)k_w84d?AH5rqMci-93OS+Em^f0c5Zk5j~j)TI^ZU4plGLeXs);B5nDPJ%Rve znKUy6;iV^G*O0(5oV9r8qS7Gk)up`NWPKP5lnLa%xdR?7s*FOm+^F%G&ja z^LKY&&j*&^e>!dU)K{=} z1yYcBPgJ9@*zaKfNwl?QAx0+Z!Q3wq*yrH3>_7Ch=T1MeExi%c732Eav??`Ho3}!q zB62nj8?CY8DZc#}Nt=#RR33+G+!)CUfjR}f``pj)@!D0X5k`TaMh4W0@!xIc)IY7Y zRNjkp4+-YNxpG~gsA!Usa`qD|l^A5Xm6K`e@>maCOBpj)$=Q(^05dVT<#*<(8^46kT~nxFjlZ^#<&sLuy%VCa}o+ z+Hcu&Um>mbZYHvEI4Zn@FN-?g|Wsx}BFAH0(18B4Iwx_G(0s|_$-@}3M%%gXcJiT)^ zdpn?m&tCLM^rh?wa6KbRuL(Z;NQo3P53C)R=hK*!w zIEK<{83p`t>Q{h3+mf|nO``Cv1h7;2Oayc5@Cae6Gs@)-OWG~fYKbrDS)2Uhe3Bhk zAjmv;@>&+04zHWSq-k&1mK5Q0S#s4#DHDy*JP&IU%4K`Mq+p`zzLD+3`?E}BLAOU@ zq1JL{SC@U*AJRl$eNJ1Gn~w(5bwc`>E%ew(G9}`CT0y>vn~xULZ3380g}_CMIEz|! z`VsZ)Jlo0}t0rw<%DM~bWMphT6I@^o>n87l&i)Ub_&xTazs_YHCfDwIRs%~p0FBtdJs zs{LXbbPFQlh{#xS;r!){l5k9bVl&b5M=8MJKsYQKPJ$=R|JzV=Hy?gu{wJA?D{pmX zP`bAAzlDet9hr6s26lgI_Fg&p=rK`wc`~aYIo2l=#AlUJ97>1jm9WtCosR(-s@(?% zFr&LPuVgmmTFEXxCu5ZSz1cuVctbYuiyU-$L0aO7gQO3oYkqshF==-&O;P%xQXEf3 z?WbGvq(W$qRXfp_fYOGwxe4Xw*l{oF2nz?rKlL}YsSE2vs@gm4kzsdaj{Q@8lnSBC zYt=tmAA7#q%o%zLn(`}pqBN20I>4Rl3okvy%C zed!kK+}@1lD>~rJB3ts|VQnSbZPlHbA36=cea$=Bi6iKJP+7@PY;lTQ**>S9ih1+c z(JQS`%Fy;EiiC=j$TOc*9Lq)ci?if$n3Q`AN=?1Uco<<=W2yF8^^1;tIwoDyR~F1d z`e>j~TcI~NR@r(Hmgz5iF<=E~os1Wm{Wqh@qR}r{W+=RzY9F6WKbp%pOmo47Z0rgJ Yshku0-6o!~_n8#3wy;N4A+ZVn0yXeC*#H0l literal 3185 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 diff --git a/apps/ptlaunch/add_pattern_light.png b/apps/ptlaunch/add_pattern_light.png index 47549b43e718f0929a1b58bb7dd71e3ff71f6b2d..998ec21a0819f504b03389508dcd12356c6146af 100644 GIT binary patch literal 2700 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 l8rwYIwsec%<81VVGd00S^dL_t(&-tC%= zlB+NXg~=Om-v4FS<_Cz4+6vCx-ht`58N2;Tj|7A*rKSB_R)2UqV6(TAPD4LTtN?IB zV7x;d81xLd6B>9EnycRRG+bcFuc68IyKp^txZ~9l6@{zw+xZZO)#Ctrir2bCd2Hi&0+$$?OjCBNQ4zHB($dn>($dn> z{#(OCMn7q-d4HQ%CE(LkNqAnB0G*16t*d@XeK*$qPMRe^Sl+_fA%Y$OZ;aCVfTAG? z__e5)Kfyl>rap{`1yct751x$zO0S72^(oPlxT@ypiW#yJBog{9qc0j4XB?|`pr-Z2=LU~%pc zEOX;QlQ=eK7g}`2I#-DPH7Gk+M#ycs9;*u@YhIcfvVm+i7gH{MOHKrT#=&4RH!Laz{8E@(F$J?%;}Kf> z4FW?%WF8lpGqjhxrG{0BeBHTAb88^f8VdYP_B-W1`#wK(^%0<*a#W zvmqPEX7>JgbTnb}usQ$$ literal 3008 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 aeV|ihqCHlzjQt}A082A8^66P@^#1^?Kzw)r diff --git a/apps/ptlaunch/manage_patterns_light.png b/apps/ptlaunch/manage_patterns_light.png index 5e4b27131e5531a7b3191c7664543c5e542d3607..13470f4506ace6d691b83d5b0d845350c07acfb1 100644 GIT binary patch literal 2944 zcmb_ec{J4R7yr&?8AKRKriH8}BuisWwva9RFy=L~6O{=gX1um)5ZSX2k;oQOX!IK- zGluNmNRcJGY$NiU_x=6#{{MT&}~=P@VmBz}jOk<0u=fHB1K_+E15Tx&?#Q=s7xrKrMIogj)a+h}pT*#7v8V z=wnoOtPdMZX=Bd)yg!uV(-Pnt=t;M^7<}RS^K{AUl=PuLifWb|PqhXy!Yyv)T7IsE zyI2iDpml~L#%Du1Rg7q?7=BRh^B=LGG0LK3Dr)+;xO(@5VozdVUmpen$f`oLY1SiN=Ey%7Y`au<mD=y~Qhhg&#^d4RYaF4Jd^zGd(>kCAH~vfcB!L0J(P1@3MRT6re6_1T$M|70@|D>gEnMJydnv2++eg>|fD*r4lH(@_pE{*OkZv`9O{a4L+AV4@Q^R4Y7cYBj5?^5 z2GCVbAZ=v%kPM+<=^H!0#-WDssV`uSz|?z5=D=$11Y}&A$ZxXIdtI2S>9s>_lZLd^-=w889yCh5Tl8=NH7BNr9$J*jyt5v`q}wbUZNs+IQ01U$KM|;04}SYxxpexZNt?v#QVCLy*8F z>m|W!?1m&F26w>p8JHb@1~(HDT9OdE9s?%}HbJQ7c7`Z2RG1YFjC6*v4q7QcG$|9RasRpAt&Gx#OWBqN+8@J}vATSwOl)VdteS0@R$-Or;)1A2SIS7Tu26j8 zD^Ib$2AR$t7H=F(#P_M{JHG}#7Lr?bBV<2Yqp^YzXM#aP4Hm)`0zKQO5s*+3Ap&X$Ng1>;w=@#<}`YskN*UZwdQxywnE9n+Qy^yi5SM_GyZtDAXl`a zu|ScOvtM(1?8ZY7GUUy)FqI(4Yw0ml7(P7Zm#UneSGx}6j;~~YR6!d;$nwayB&jVN zYZILNEP27h>lxvl{Z%4buP%w6VIG~PvP4rs4{EO8 z3dfK0)M9#tgNuoH3U_=dqAzl)bf9c1MB*y%d3O0QsQYjX@Q753*mXhsW(Ja?b)7+W zQ#eq zo}AWO*qY;k0+Wk4#+b{W@NU&%S{&|Gsatxu^j-W#QanC-qr2H-iKV)o)`fgjR##on zc?S(JY1-U1bG!UJHC=PfK3~edSA)p%Y6R&O3mC5Y*4!B9=YpcDtsC_VeSn=F)I%PL z>j9ihPA3H1LU`Xh=vknj|&X1Z2om4NP76L0WxnJ4`&dQ6GWob!v5Sj!d6%Bg! zFKD{?UGEQz6Id#;NhIz3nVrwMO|^fKwX}c1&q2(ApvjDs(|%!yvX8QFYx1kw*7wi+ zR4-OC;qCRE@OIc&cMZ>mub@(b|AB$Y3#DGFCO|>@>az0-<+Xyeq7KN$ahZo*v$MFfY)Ar<+(?6_kNtbW= z7aCJiCryNAPpaW z`Oq{woKnnFtYu<1^@e`lTy}jy=&`~tb0{bJ8X9NTym0X97vd@(_R?$}rUidWzi_)~ zT{gN7ks6UTcl_Rn{Pa9rOAu2J=9#+9*pPnJq%Se5{kydmjU(Juc$YLz(mCTh^3}{` zQpNJ5e&N{~r8Bygw%AR&)71nY#A`JJ4ZbNEOu2wLIIFsAP%8*^&Ith|$kz_L=)WjqS@zyh z9r){%BCH?3eofd5>FHIu0!dn0GK>A$tVJ-kXe9W&L8qSbci%QJIJ9jx{F@#Oy7q5> zQ&8Q?yg8?ucqF8E#Kls)oVp&5;`EhsP?S~L`bDbVR+drdYm2d!8P0G$8+L{>+#?<= zfc0F+a1CT6OARH-)mjaYyE@w=sK_*E8{#(&fCOQj`o(mopFAIwa`nqAwmpE%85X6$ z^@ulgMM5VT$R;Q=>E%#aQuCEG29QP;6$P%`#6ZOR9 z*BnRh^d4cja7}5046CB!QRsH8&d2OtB4&GKaX3ZH&Ml_>&Bz(5`M_u_Z)Ya#M8*4z zC8zGQAcM|6v)q^_C@20 SYZhBl1J?{K3|{JEqyG!vmv2r0 literal 3027 zcmb`Jc{tSD8^FKwWirOjBqmEt%35lW$Pi-&*|!*L_LynNa)+PGSP~IQu|$nw*b_1#$c%>bkg?Ga5sKqXJt%j$V9%IeA3Qk^X&sw%58bTYEA zGOSP63sqMV%nS2N&&)Dgk{yu}n-`P^>Gs-io_c&I{^Vw6NJeUSiU`EL;tLO`SC08> zxYxODqW&xi{oov$cNT`stV=Qm_RV3w!&YD}% zxIkQEwKNC1+KwDul37lj1goA*yxwU7aKI-*(nz#D?N zN5W!SIJB-r53F{IC-7%vWTHqY5(Q+~jUbppO0K|Y{uaZs-E*BO6%JVrYB!4gLP5hf zUv^#8aBEB3vvUGwtk0yk!(puUZo42C2qZ)MzNrtCH}vbQvQ`xp=sOjT(U8b|u7k&GfXYGQ;28oLW?p%kv@7iiz z=6c#zGjHDB2$=tHyOdw`1T`tK`%*5rq4h;N%Al~!HPxMeQUeKLxOE&0sogsz{OYI` zsbuC=d`Hnsm3yszl zdwrYhyeEZNj~cb>41k7d`s$G!amv{vY?myrA#1t!m@9O-onI;rWTqj+tRs>Afp5lH zZ<%Mt{b-!XM(0+S=|?!_m!DzFoSzuq-q~&9_Ct5P_JKoGsa4^;NzSnG!s*HondR|)+iF*52%C+Spb*cn|S`~wki{a+sdXY zdX1A+jBWcsMbN)J%9$bd8>}U}6IzFE^%?#)m2`!-v1zP~ZzuNgwHpf6Uvi_R)??(? zA9svW=ByAOQhznb@2|*h(Vy7wBu~H!#4kmul+ES1TBZ2pDOANyJz=6~dTrU0Nmjr#&wEl=E~$fA4s5^b1LkE!}tXm1uhOYN%TqlC(-^Koh443C61d!&t(B}>+i zj2BB4U-1iF$6W&J_-eIFn+^iztWm3;*lFQV8*_2UPB7o7+WrceQw^Y3aS*=%g;H78 z{`JXn=!O;{M6Ws!S^X%tP++TOm>pj1SUdKI5`e*v&K#;a#DtVlIL_DI_P^|Uyon?T zyo|jwa^tb{lj_3hIk)mnW=}bVb0iqw@sAp$>>_F>jUbGuxLk5!Fe_f=^_yE0`Bwuf zjMCGk<)1te|?lXZX|FAbqJl&U}Jh;-|2aYs2f= z@$8+hkj#zYLCFZ={ZnUJ_UGxEgm-Ryoug=-XI_3;;>npN35K1WS<6=^7AB@jalKE>uNL`E&_A);dgprfkOQf7?IWWCu!AS-c1HX-jvm9|eGm6X!& zNo~`kw8Jh*u*{atMm^>DiZgRWDbma356D7hA2^PqJx9= zpPAWWrwPZlFL|2=vx-K&cw%^loVKRe6^1K@JsuaryPR;M2R0$m3LNB>2<%HR z4bM{htcQ6#ZOWV33O8nXCRR+`+1CWKZ{x5L6UaF`p1|Ek+@H!Yu|1e(MXax!%zyBM zMZ$g_0=t*1nnl7kH6$*#Kad%)7K7xx^5; zHxQ*>D{6*l6R;X%We!H{gu!Q6h$-SzW=1NZ-m0A2M&yb^5q3rZe&{|)k6Rd99wPSMp+uE2t({1jV9sO7iWBwL^$$twRgN&|?y(p9hP)b%)jmqbpAv}dU0qTJe;zCg*^pVHK#H>yAB#e69j>J>!C_>9Yr;8E)ON#7&R zN9@zVjd>@H5tv{EW2>7R2kQ?hd))FM ucK=Gp7($decD|Hi%xyXDxu5SVW5%~*$4A3zqPMwSI$&;Ujjb{EPW&&J#d#wD From 3615d7fe4c65992acb38c110728d501eab245543 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Wed, 22 Dec 2021 22:57:05 +0100 Subject: [PATCH 167/217] Update gps-info.js 1. (bugfix) Workaround for a crash in toUTCString() if fix.time has the value "undefined", see https://github.com/espruino/BangleApps/issues/1155 2. (improvement) The 4-dot progress indicator is replaced by the number of satellites in view. Tested on Bangle.js 2 with firmware 2v11 --- apps/gpsinfo/gps-info.js | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index df888651a..cca7e8e0f 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -16,13 +16,17 @@ var lastFix = { time: 0, satellites: 0 }; -var nofix = 0; +var SATinView = 0; function formatTime(now) { - var fd = now.toUTCString().split(" "); - var time = fd[4].substr(0, 5); - var date = [fd[0], fd[1], fd[2]].join(" "); - return time + " - " + date; + if (now == undefined) { + return "no GPS time available"; + } else { + var fd = now.toUTCString().split(" "); + var time = fd[4].substr(0, 5); + var date = [fd[0], fd[1], fd[2]].join(" "); + return time + " - " + date; + } } function getMaidenHead(param1,param2){ var lat=-100.0; @@ -77,9 +81,9 @@ function onGPS(fix) { {type:"txt", font:"6x8", label:"Waiting for GPS" }, {type:"h", c: [ {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, - {type:"txt", font:"6x8", pad:3, label:"Satellites" } + {type:"txt", font:"6x8", pad:3, label:"Satellites used" } ]}, - {type:"txt", font:"6x8", label:"", id:"progress" } + {type:"txt", font:"6x8", label:"", fillx:true, id:"progress" } ]},{lazy:true}); } g.clearRect(0,24,g.getWidth(),g.getHeight()); @@ -87,7 +91,6 @@ function onGPS(fix) { } lastFix = fix; if (fix.fix) { - nofix = 0; var locale = require("locale"); var satellites = fix.satellites; var maidenhead = getMaidenHead(fix.lat,fix.lon); @@ -100,12 +103,18 @@ function onGPS(fix) { layout.maidenhead.label = "Maidenhead: "+maidenhead; } else { layout.sat.label = fix.satellites; - nofix = (nofix+1) % 4; - layout.progress.label = ".".repeat(nofix) + " ".repeat(4-nofix); + layout.progress.label = "in view: " + SATinView; } layout.render(); } +function onGPSraw(nmea) { + if (nmea.slice(3,6) == "GSV") { + SATinView = nmea.slice(11,13); + } +} + Bangle.loadWidgets(); Bangle.drawWidgets(); Bangle.on('GPS', onGPS); +Bangle.on('GPS-raw', onGPSraw); From e81b97dc6f5adbbadde30aea4498a969a1421bfd Mon Sep 17 00:00:00 2001 From: David Peer Date: Thu, 23 Dec 2021 10:08:22 +0100 Subject: [PATCH 168/217] Minor change --- apps/lcars/lcars.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index afbca2b8b..d9587c1ac 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -329,7 +329,7 @@ function drawPosition1(){ axes : true, minx: 1, gridx : 4, - gridy : 1000, + gridy : 2000, width : 140, height : 50, x: 5, From fdcc1f50dbef5a330bab703dc2300cf8c89796b8 Mon Sep 17 00:00:00 2001 From: David Peer Date: Thu, 23 Dec 2021 14:10:21 +0100 Subject: [PATCH 169/217] Show BT status. --- apps/lcars/lcars.app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index d9587c1ac..32020a01c 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -168,7 +168,11 @@ function drawLock(){ g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); g.drawString("LCARS", 130, 12); - g.drawString("B-JS2", 130, 32); + if(connected){ + g.drawString("BT-CO", 130, 32); + } else { + g.drawString("BT-NC", 130, 32); + } if(Bangle.isLocked()){ g.drawString("LOCK", 130, 52); } @@ -502,7 +506,7 @@ Bangle.on("drag", e => { } if(lcarsViewPos == 1){ - plotWeek = dy < 0 + plotWeek = dy < 0 ? true : false; } } From 6c7fd262b7cff644fd7a0b811b78f5311abfca16 Mon Sep 17 00:00:00 2001 From: David Peer Date: Thu, 23 Dec 2021 14:17:05 +0100 Subject: [PATCH 170/217] Minor improvement --- apps/lcars/lcars.app.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 32020a01c..5f328389e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -307,6 +307,11 @@ function drawPosition1(){ y: 115 }); + g.setFontAntonioMedium(); + g.setColor(cWhite); + g.drawString("HRM", 122, 9); + g.drawString("STEPS [K]", 90, 96); + // Plot day } else { var data = new Uint16Array(24); @@ -339,13 +344,12 @@ function drawPosition1(){ x: 5, y: 115 }); + + g.setFontAntonioMedium(); + g.setColor(cWhite); + g.drawString("HRM [24]", 90, 9); + g.drawString("STEPS [24]", 82, 96); } - - g.setFontAntonioMedium(); - g.setColor(cWhite); - g.drawString("HRM", 122, 9); - g.drawString("STEPS [K]", 90, 96); - } function draw(){ From f64c91e0b80e03e4b9a433cb3493867cc2ed5008 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Fri, 24 Dec 2021 00:25:07 +0900 Subject: [PATCH 171/217] SpeechTimer: fixed listing screenshot and allowed in emulator --- apps.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps.json b/apps.json index bf5e8c77f..f76800494 100644 --- a/apps.json +++ b/apps.json @@ -4697,6 +4697,8 @@ "tags": "tool,timer", "readme":"README.md", "supports":["BANGLEJS2"], + "screenshots": [{"url":"screenshot1.png"},{"url":"screenshot2.png"},{"url":"screenshot3.png"}], + "allow_emulator": true, "storage": [ {"name":"a_speech_timer.app.js","url":"app.js"}, {"name":"a_speech_timer.img","url":"app-icon.js","evaluate":true} From 144bb884003e1c249406853e360a485dbf8f3f64 Mon Sep 17 00:00:00 2001 From: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Fri, 24 Dec 2021 03:03:45 +0000 Subject: [PATCH 172/217] Update settings.js --- apps/setting/settings.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 1a9463858..bb54fa7e9 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -500,6 +500,9 @@ function showUtilMenu() { 'Debug Info': { value: E.clip(0|settings.log,0,2), format: v => ["Hide","Show","Log"][E.clip(0|v,0,2)], + min: 0, + max: 2, + step: 1, onchange: v => { settings.log = v; updateSettings(); From 3873acd7bb3f81ce665e0b333e0160653574a63b Mon Sep 17 00:00:00 2001 From: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Fri, 24 Dec 2021 03:17:11 +0000 Subject: [PATCH 173/217] Update settings.js --- apps/setting/settings.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index bb54fa7e9..1208018ed 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -499,10 +499,9 @@ function showUtilMenu() { '< Back': ()=>showMainMenu(), 'Debug Info': { value: E.clip(0|settings.log,0,2), - format: v => ["Hide","Show","Log"][E.clip(0|v,0,2)], min: 0, max: 2, - step: 1, + format: v => ["Hide","Show","Log"][E.clip(0|v,0,2)], onchange: v => { settings.log = v; updateSettings(); From 74c2eca062ae13bd5b45ed86a6090356085476c4 Mon Sep 17 00:00:00 2001 From: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Fri, 24 Dec 2021 03:18:29 +0000 Subject: [PATCH 174/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index e5e9f8f02..299920067 100644 --- a/apps.json +++ b/apps.json @@ -167,7 +167,7 @@ { "id": "setting", "name": "Settings", - "version": "0.38", + "version": "0.39", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", From d6f6b95daf4eddae94a29d9f2d5de4a4f1d9b4b0 Mon Sep 17 00:00:00 2001 From: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Fri, 24 Dec 2021 03:24:44 +0000 Subject: [PATCH 175/217] Update ChangeLog --- apps/setting/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 143144d51..a2245a02d 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -41,3 +41,4 @@ 0.36: Added 'Utils' menu with helpful utilities for restoring Bangle.js 0.37: Going into passkey menu now saves settings with passkey 0.38: Restructed menus as per forum discussion +0.39: Fix misbehaving debug info option From d76a89b89acdb55aa25059c2522492302854e9e4 Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Fri, 24 Dec 2021 12:42:25 +0100 Subject: [PATCH 176/217] Update gps-info.js Sum up number of GPS and Beidou satellites in view. --- apps/gpsinfo/gps-info.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index cca7e8e0f..4c935b61a 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -109,8 +109,13 @@ function onGPS(fix) { } function onGPSraw(nmea) { + var nofBD = 0; + var nofGP = 0; if (nmea.slice(3,6) == "GSV") { - SATinView = nmea.slice(11,13); + // console.log(nmea); + if (nmea.slice(0,7) == "$BDGSV,") nofBD = nmea.slice(11,13); + if (nmea.slice(0,7) == "$GPGSV,") nofGP = nmea.slice(11,13); + SATinView = nofBD + nofGP; } } From bc58b67675b484270ec15d47ab4ca76d7b1bfe7b Mon Sep 17 00:00:00 2001 From: EmVee381 Date: Sat, 25 Dec 2021 14:23:35 +0100 Subject: [PATCH 177/217] corrected cs_CZ "trans" messages --- apps/locale/locales.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index b607998a0..a77ea16d3 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -589,7 +589,7 @@ var locales = { month: "leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec", abday: "ne,po,út,st,čt,pá,so", day: "neděle,pondělí,úterý,středa,čtvrtek,pátek,sobota", - trans: { yes: "tak", Yes: "Tak", no: "nie", No: "Nie", ok: "ok", on: "na", off: "poza" } + trans: { yes: "ano", Yes: "Ano", no: "ne", No: "Ne", ok: "ok", on: "zap", off: "vyp" } }, "sl_SI": { lang: "sl_SI", From 2bf23bb5dc1eae3f0724e422fa683c3d15468763 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Mon, 27 Dec 2021 05:00:22 +0900 Subject: [PATCH 178/217] Update awair_to_bangle.html --- apps/awairmonitor/awair_to_bangle.html | 40 ++++++++++++++------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/apps/awairmonitor/awair_to_bangle.html b/apps/awairmonitor/awair_to_bangle.html index 2926cca9e..4e4465b75 100644 --- a/apps/awairmonitor/awair_to_bangle.html +++ b/apps/awairmonitor/awair_to_bangle.html @@ -7,7 +7,6 @@ // Don't forget to enable the Local API on your Awair before using this // https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Local-API-Feature -const awair_ip_1 = "192.168.2.2"; // <- INPUT YOUR AWAIR IP ADDRESS HERE const awair_name_1 = "Awair"; var bt_connection; @@ -15,7 +14,7 @@ var is_connected = false; var reconnect_counter = 5; var reconnect_attempt_counter = 1; -window.onload = function() { +function initChart() { var chart_co2; var chart_voc; var chart_pm; @@ -23,6 +22,8 @@ window.onload = function() { var chart_humidity; var dataPoints_1 = []; var posx = 0; + + var awair_ip_1 = document.getElementById('inputawairip').value; $.getJSON("http://"+awair_ip_1+"/air-data/latest", function(data) { $.each(data, function(key, value){ @@ -105,11 +106,13 @@ window.onload = function() { let current_humi = dataPoints_1['humid'][dataPoints_1['humid'].length-1].y; let current_temp = dataPoints_1['temp'][dataPoints_1['temp'].length-1].y; let last_update = dataPoints_1['temp'].length-1; - if (is_connected && bt_connection.isOpen) { + console.log(is_connected); + console.log(bt_connection); + if (is_connected && bt_connection && bt_connection.isOpen) { bt_connection.write('\x10bt_current_co2='+current_co2+';bt_current_voc='+current_voc+';bt_current_pm25='+current_pm25+';bt_current_humi='+current_humi+';bt_current_temp='+current_temp+';bt_last_update='+last_update+';\n'); console.log("Sent data through Bluetooth"); - } else if (is_connected && !bt_connection.isOpen) { + } else if (is_connected && bt_connection && !bt_connection.isOpen) { console.log("Disconnected - Next attempt to reconnect in " + reconnect_counter); reconnect_counter--; @@ -148,10 +151,13 @@ function connectBT() { bt_connection = c; is_connected = true; reconnect_attempt_counter = 1; + initChart(); }); } function disconnectBT() { + console.log("Disconnect Bluetooth button pressed. bt_connection value below.") + console.log(bt_connection); if (is_connected && bt_connection) { bt_connection.close(); is_connected = false; @@ -167,23 +173,21 @@ function disconnectBT() {

How to use -

+

Step 1: Enable the Local API on your Awair: https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Local-API-Feature -

-Step 2: Modify this HTML file to input the IP address of your Awair on top (const awair_ip_1 = "192.168.xx.xx") -

-Step 3: Launch the Awair Monitor app on your BangleJS -

-Step 4: Click "Connect BangleJS" -

-Step 5: Optionally, open the web inspector's console (Right click > Inspector > Console) to read the bluetooth logs +

+Step 2: Launch the Awair Monitor app on your BangleJS +

+Step 3: Input your Awair IP address and click the Connect button: + + +

+Step 4: Optionally, open the web inspector's console (Right click > Inspector > Console) to read the Bluetooth logs +

+Step 5: Once you are done, click the Disconnect button to properly close the Blutooth connection +

-
- - -
-

From 8d5eb78d7b147d60b67f89735f4f4dc5ad423e2d Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Mon, 27 Dec 2021 05:02:53 +0900 Subject: [PATCH 179/217] Update apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index f76800494..b88840a12 100644 --- a/apps.json +++ b/apps.json @@ -4940,6 +4940,7 @@ "type": "clock", "tags": "clock,tool,health", "readme":"README.md", + "custom": "awair_to_bangle.html", "supports":["BANGLEJS2"], "storage": [ {"name":"awairmonitor.app.js","url":"app.js"}, From a8d0baa434c446187ce4fdd9ace60a6181e86356 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Mon, 27 Dec 2021 05:09:19 +0900 Subject: [PATCH 180/217] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index b88840a12..ded742dc7 100644 --- a/apps.json +++ b/apps.json @@ -4935,7 +4935,7 @@ "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "allow_emulator": true, - "version":"0.02", + "version":"0.03", "description": "Displays the level of CO2, VOC, PM 2.5, Humidity and Temperature, from your Awair device.", "type": "clock", "tags": "clock,tool,health", From e75bfe48830ff294e2e4673155d4b1e4fe4f5e15 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Mon, 27 Dec 2021 05:33:39 +0900 Subject: [PATCH 181/217] Update awair_to_bangle.html --- apps/awairmonitor/awair_to_bangle.html | 493 ++++++++++++++++++++++++- 1 file changed, 488 insertions(+), 5 deletions(-) diff --git a/apps/awairmonitor/awair_to_bangle.html b/apps/awairmonitor/awair_to_bangle.html index 4e4465b75..8624d01f6 100644 --- a/apps/awairmonitor/awair_to_bangle.html +++ b/apps/awairmonitor/awair_to_bangle.html @@ -1,7 +1,488 @@ - + + + + + + + + + + + - function checkIfSupported() { - // Hack for windows - if (navigator.platform.indexOf("Win")>=0 && - (navigator.userAgent.indexOf("Chrome/54")>=0 || - navigator.userAgent.indexOf("Chrome/55")>=0 || - navigator.userAgent.indexOf("Chrome/56")>=0) - ) { - console.warn("Chrome <56 in Windows has navigator.bluetooth but it's not implemented properly"); - if (confirm("Web Bluetooth on Windows is not yet available.\nPlease click Ok to see other options for using Web Bluetooth")) - window.location = "https://www.espruino.com/Puck.js+Quick+Start"; - return false; - } - if (navigator.bluetooth) return true; - console.warn("No Web Bluetooth on this platform"); - var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; - if (iOS) { - if (confirm("To use Web Bluetooth on iOS you'll need the WebBLE App.\nPlease click Ok to go to the App Store and download it.")) - window.location = "https://itunes.apple.com/us/app/webble/id1193531073"; - } else { - if (confirm("This Web Browser doesn't support Web Bluetooth.\nPlease click Ok to see instructions for enabling it.")) - window.location = "https://www.espruino.com/Quick+Start+BLE#with-web-bluetooth"; - } - return false; - } +

+How to use +

+Step 1: Enable the Local API on your Awair: https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Local-API-Feature +

+Step 2: Launch the Awair Monitor app on your BangleJS +

+Step 3: Input your Awair IP address and click the Connect button: + + +

+Step 4: Optionally, open the web inspector's console (Right click > Inspector > Console) to read the Bluetooth logs +

+Step 5: Once you are done, click the Disconnect button to properly close the Blutooth connection +

+

- var NORDIC_SERVICE = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"; - var NORDIC_TX = "6e400002-b5a3-f393-e0a9-e50e24dcca9e"; - var NORDIC_RX = "6e400003-b5a3-f393-e0a9-e50e24dcca9e"; - var DEFAULT_CHUNKSIZE = 20; +

- function log(level, s) { - if (puck.log) puck.log(level, s); - } - - function ab2str(buf) { - return String.fromCharCode.apply(null, new Uint8Array(buf)); +
+
+
+
+
+ +(buf)); } function str2ab(str) { @@ -590,93 +670,4 @@ function initChart() { let last_update = dataPoints_1['temp'].length-1; if (is_connected && bt_connection && bt_connection.isOpen) { - bt_connection.write('\x10bt_current_co2='+current_co2+';bt_current_voc='+current_voc+';bt_current_pm25='+current_pm25+';bt_current_humi='+current_humi+';bt_current_temp='+current_temp+';bt_last_update='+last_update+';\n'); - - console.log("Sent data through Bluetooth"); - } else if (is_connected && bt_connection && !bt_connection.isOpen) { - console.log("Disconnected - Next attempt to reconnect in " + reconnect_counter); - reconnect_counter--; - - if (reconnect_counter <= 0) { - reconnect_counter = 10 * reconnect_attempt_counter; - reconnect_attempt_counter++; - - console.log("Trying to reconnect"); - bt_connection.reconnect(function(c) { - console.log("Reconnect callback"); - if (!c) { - console.log("Couldn't reconnect"); - return; - } - bt_connection = c; - is_connected = true; - reconnect_attempt_counter = 1; - }); - } - } - - setTimeout(function(){updateChart()}, 1000); - }); - } -} - -function connectBT() { - console.log("Connect BT"); - Puck.connect(function(c) { - console.log("Connect callback"); - if (!c) { - console.log("Couldn't connect"); - return; - } - bt_connection = c; - is_connected = true; - reconnect_attempt_counter = 1; - if (!is_chart_started) { - initChart(); - is_chart_started = true; - } - }); -} - -function disconnectBT() { - console.log("Disconnect Bluetooth button pressed. bt_connection value below.") - console.log(bt_connection); - if (is_connected && bt_connection) { - bt_connection.close(); - is_connected = false; - console.log("Closed Bluetooth connection"); - } -} - - - - - - - -

-How to use -

-Step 1: Enable the Local API on your Awair: https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Local-API-Feature -

-Step 2: Launch the Awair Monitor app on your BangleJS -

-Step 3: Input your Awair IP address and click the Connect button: - - -

-Step 4: Optionally, open the web inspector's console (Right click > Inspector > Console) to read the Bluetooth logs -

-Step 5: Once you are done, click the Disconnect button to properly close the Blutooth connection -

-

- -

- -
-
-
-
-
- - + bt_connection.write('\x10bt_current_co2='+current_co2+';bt_current_voc='+current_voc+';bt_current_pm25='+current_pm25+';bt_current_humi='+current_humi+';bt_current_temp='+current_temp+';bt_ From 0a12cebc6e3c62a54c4fd095ea7b3a22f0e47576 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Mon, 27 Dec 2021 06:24:48 +0900 Subject: [PATCH 184/217] Update README.md --- apps/awairmonitor/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/awairmonitor/README.md b/apps/awairmonitor/README.md index 69894fea2..f4c7c42c4 100644 --- a/apps/awairmonitor/README.md +++ b/apps/awairmonitor/README.md @@ -5,11 +5,10 @@ Displays the level of CO2, VOC, PM 2.5, Humidity and Temperature, from your Awai * What you need: * A BangleJS 2 * An Awair device [with local API enabled](https://support.getawair.com/hc/en-us/articles/360049221014-Awair-Local-API-Feature) - * The web app [awair_to_bangle.html](awair_to_bangle.html) that will retrive the data from your Awair device and sent it to your BangleJS 2 through Chrome's Bluetooth LE connection + * The web app [awair_to_bangle.html](awair_to_bangle.html) that will retrieve the data from your Awair device and sent it to your BangleJS 2 through Chrome's Bluetooth LE connection * How to get started - * Open awair_to_bangle.html with a text/code editor and input the IP address of your Awair on top (const awair_ip_1 = "192.168.xx.xx") * Launch the Awair Monitor app on your BangleJS - * Open awair_to_bangle.html on Chrome and click "Connect BangleJS" - it connects to your watch the same way as the Bangle app store + * Open awair_to_bangle.html on Chrome (desktop or Android), input the IP address of your Awair device, and click "Connect BangleJS" - it connects to your watch the same way as the Bangle app store * Once connected to the watch with the app running, the watch app is updated once per second ![](screenshot.png) From d71e267610218b34a467277a94df8db9d10136f6 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Mon, 27 Dec 2021 06:26:01 +0900 Subject: [PATCH 185/217] Update ChangeLog --- apps/awairmonitor/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/awairmonitor/ChangeLog b/apps/awairmonitor/ChangeLog index 88e9690d8..71d6399c4 100644 --- a/apps/awairmonitor/ChangeLog +++ b/apps/awairmonitor/ChangeLog @@ -1,2 +1,3 @@ 0.01: Beta version for Bangle 2 paired with Chrome (2021/12/11) 0.02: The app is now a clock, the data is greyed after the connection is lost (2021/12/22) +0.03: Set the Awair's IP directly on the webpage (2021/12/27) From abd761bff9f4d45f08388cf876e0b3f5971b3e5c Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 13:43:23 +0100 Subject: [PATCH 186/217] Minor improvements --- apps/lcars/lcars.app.js | 54 +++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 5f328389e..29c349fe9 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -128,25 +128,25 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); - g.drawString("BAT:", 28, y); - g.drawString(bat+ "%", 70, y); + g.drawString("BAT:", 26, y); + g.drawString(bat+ "%", 68, y); } else if(key == "Steps"){ var steps = getSteps(); - g.drawString("STEP:", 28, y); - g.drawString(steps, 70, y); + g.drawString("STEP:", 26, y); + g.drawString(steps, 68, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); - g.drawString("TMP:", 28, y); - g.drawString(temperature + "C", 70, y); + g.drawString("TMP:", 26, y); + g.drawString(temperature + "C", 68, y); } else if(key == "HRM"){ - g.drawString("HRM:", 28, y); - g.drawString(hrmValue, 70, y); + g.drawString("HRM:", 26, y); + g.drawString(hrmValue, 68, y); } else { - g.drawString("NOT FOUND", 28, y); + g.drawString("NOT FOUND", 26, y); } } @@ -167,14 +167,14 @@ function drawLock(){ g.setFontAntonioMedium(); g.setColor(cOrange); g.clearRect(120, 10, g.getWidth(), 75); - g.drawString("LCARS", 130, 12); + g.drawString("LCARS", 128, 13); if(connected){ - g.drawString("BT-CO", 130, 32); + g.drawString("BT-CO", 128, 33); } else { - g.drawString("BT-NC", 130, 32); + g.drawString("BT-NC", 128, 33); } if(Bangle.isLocked()){ - g.drawString("LOCK", 130, 52); + g.drawString("LOCK", 128, 53); } } @@ -196,16 +196,15 @@ function drawState(){ timeInMinutes % 4 == 1 ? iconMars : timeInMinutes % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 120, 118); + g.drawImage(iconImg, 118, 107); // Alarm within symbol g.setFontAlign(-1, -1, 0); g.setFontAntonioMedium(); - g.drawString("STATUS", 123, 97); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 120+25, 118+25+1); + g.drawString(getAlarmMinutes(), 118+25, 107+25+1); } } @@ -225,11 +224,12 @@ function drawPosition0(){ drawLock(); // Write time + g.setFontAlign(0, -1, 0); g.setColor(cWhite); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 25, 10); + g.drawString(timeStr, 70, 10); // Write date g.setColor(cWhite); @@ -237,9 +237,10 @@ function drawPosition0(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 28, 56); + g.drawString(dayStr, 70, 56); // Draw data + g.setFontAlign(-1, -1, 0); g.setColor(cWhite); printData(settings.dataRow1, 97); printData(settings.dataRow2, 122); @@ -296,21 +297,24 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(32); health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); + var gridY = parseInt(Math.max.apply(Math, data))-1; + gridY = gridY <= 0 ? 1 : gridY; require("graph").drawBar(g, data, { axes : true, minx: 1, gridx : 5, - gridy : 5, + gridy : gridY, width : 140, height : 50, x: 5, y: 115 }); + g.setFontAlign(1, 1, 0); g.setFontAntonioMedium(); g.setColor(cWhite); - g.drawString("HRM", 122, 9); - g.drawString("STEPS [K]", 90, 96); + g.drawString("WEEK HRM", 154, 27); + g.drawString("WEEK STEPS [K]", 154, 115); // Plot day } else { @@ -334,21 +338,23 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(24); health.readDay(new Date(), h=>data[h.hr]+=h.steps); + var gridY = parseInt(Math.max.apply(Math, data)/100)*100; require("graph").drawBar(g, data, { axes : true, minx: 1, gridx : 4, - gridy : 2000, + gridy : gridY, width : 140, height : 50, x: 5, y: 115 }); + g.setFontAlign(1, 1, 0); g.setFontAntonioMedium(); g.setColor(cWhite); - g.drawString("HRM [24]", 90, 9); - g.drawString("STEPS [24]", 82, 96); + g.drawString("DAY HRM", 154, 27); + g.drawString("DAY STEPS", 154, 115); } } From ee63b2630ef8c7bbea9d8cb6d60b140416d33d44 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 13:50:48 +0100 Subject: [PATCH 187/217] Week - k steps, dax,steps. --- apps/lcars/lcars.app.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 29c349fe9..f9fc37ee6 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -297,7 +297,7 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(32); health.readDailySummaries(new Date(), h=>data[h.day]+=h.steps/1000); - var gridY = parseInt(Math.max.apply(Math, data))-1; + var gridY = parseInt(Math.max.apply(Math, data)/2); gridY = gridY <= 0 ? 1 : gridY; require("graph").drawBar(g, data, { axes : true, @@ -314,7 +314,7 @@ function drawPosition1(){ g.setFontAntonioMedium(); g.setColor(cWhite); g.drawString("WEEK HRM", 154, 27); - g.drawString("WEEK STEPS [K]", 154, 115); + g.drawString("WEEK STEPS [k]", 154, 115); // Plot day } else { @@ -338,7 +338,8 @@ function drawPosition1(){ // Plot step graph var data = new Uint16Array(24); health.readDay(new Date(), h=>data[h.hr]+=h.steps); - var gridY = parseInt(Math.max.apply(Math, data)/100)*100; + var gridY = parseInt(Math.max.apply(Math, data)/1000)*1000; + gridY = gridY <= 0 ? 1000 : gridY; require("graph").drawBar(g, data, { axes : true, minx: 1, From 90d1df2ca068616fe72c3158492be745cb463bed Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 13:51:18 +0100 Subject: [PATCH 188/217] Typo --- apps/lcars/lcars.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f9fc37ee6..aea7c60d2 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -314,7 +314,7 @@ function drawPosition1(){ g.setFontAntonioMedium(); g.setColor(cWhite); g.drawString("WEEK HRM", 154, 27); - g.drawString("WEEK STEPS [k]", 154, 115); + g.drawString("WEEK STEPS [K]", 154, 115); // Plot day } else { From f7256c011d8cb825b1525e8453325f0c9abdaea5 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:08:45 +0100 Subject: [PATCH 189/217] Show planet for one hour instead of one minute. --- apps/lcars/lcars.app.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index aea7c60d2..9b2ef59c6 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -185,16 +185,17 @@ function drawState(){ g.setColor(cWhite); var bat = E.getBattery(); - var timeInMinutes = getCurrentTimeInMinutes(); + var current = new Date(); + var hours = current.getHours(); var iconImg = isAlarmEnabled() ? iconAlarm : Bangle.isCharging() ? iconCharging : bat < 30 ? iconNoBattery : Bangle.isGPSOn() ? iconSatellite : - timeInMinutes % 4 == 0 ? iconSaturn : - timeInMinutes % 4 == 1 ? iconMars : - timeInMinutes % 4 == 2 ? iconMoon : + hours % 4 == 0 ? iconSaturn : + hours % 4 == 1 ? iconMars : + hours % 4 == 2 ? iconMoon : iconEarth; g.drawImage(iconImg, 118, 107); From e75960ab116cf0278ab2833175cf79baafccb5f6 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:18:35 +0100 Subject: [PATCH 190/217] Updated icon and screenshots --- apps/lcars/lcars.icon.js | 2 +- apps/lcars/screenshot.png | Bin 4813 -> 4746 bytes apps/lcars/screenshot_2.png | Bin 2802 -> 3027 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/lcars/lcars.icon.js b/apps/lcars/lcars.icon.js index c404728e0..49694cf7c 100644 --- a/apps/lcars/lcars.icon.js +++ b/apps/lcars/lcars.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwgeevPnAQsc+fPngCE+/fvoCEvAbIA4/AgFzEZwRBjwjNvBUBEZ3eCIMOEZtwCIMBEZuARYU5EZecTocHEZf0CIcBEbvgaggjKTwIAEbQpoHAAiSEeoYQHJQr1CCBJKEIgcBI4xKFaIdt3AOFgfuAYMeEYLRBj1pLQ4ICuYjBAgPbtoRHhu3AYN5VoMGzVpI49502AgPPVoM27dsK48N23cgE5CgOmzVoCI4LBzCSB8EP2wjJgILBAYMAhIjBsAjJzVwg47C7YRJEYhfBEZXmEZ53CI4q2BEAiVCkwjCNYaMGboQjDkBfDCAbdB04EBgyPDC4YAD/dt2wRCHIM5njXCCAcHboOmCIQ0B5/nfYT6DFIIjBeAcOvM8+EAjitFEYJEBAANzEYOeeowjCFgUDzwjB+YrDgAgBEYWcA4Mc+YjCvAQCgftEANuDIYOBEYXPNwIAIg4OCCgXkCBEOEZDvBEAhEB4AjF/inB8+OJQOOvILBoAjGU4IFDAQYjGbQIdCAQt4EY0DEZACDEYceEZACDC4bLBEZwCO")) +require("heatshrink").decompress(atob("lmy5YCFi1ZsuWAQgGGy1YgXbtu2AQgjH4EAEZ2XCINbEZxRBvIjNzwRBh4jN2ARBgIjNwCIClojMTQcFEZdkCIgjLngRDg4jLsDREEZOzTwIAEjwjHs5oDAAiSEEYUcCA5uFeoQQJAAP2EYRECgJHGJQrRDps4BwsD5wDBrYjB+AXBtJaHBAV5spoC6dNGY8NmBBBEYMAg2atJHHvOmwEB8qtBmnTpgjImncgEtkEB02atARHBYOYSQPgh4jKgILBCIMAhIjBc4ojEzVwCII7B6dAEZpfBEZXmEZ53CI4twEAqVCkwjCNYaMGboQjDUgIjGboOnAgMGR4WgC4YAD+dNmgEBgg5BluUa4QQDg7dB0wjCJoNl2z7CAQJBDEYLwDh9tyxEBjitFEYJEBfwQjB7z1GEYQsCgfbEYNZT4ggBEYWcOIVZEYPbtAQCgfNEANODIYOBEYVlDQQAHg4OCCgW0CBEKEYySBg4gFi1Z4AjFWwM922OJQOPtoLBoBHGgPlAoQCEoAjGgIdCAQto+wjFhIgFAQwjDrYjIAQYjDEBQjFARwA==")) diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 98bf50546ab06532dbee2dcb58524a138c9ed9f2..11695ba5b05a6a6885ad9bdc7203fed50853e4bb 100644 GIT binary patch delta 4740 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 From 6fab0c8c87fc7d923495f0c11a90f2dc50409154 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:21:21 +0100 Subject: [PATCH 191/217] Moved state icon into middle of lower screen. --- apps/lcars/lcars.app.js | 4 ++-- apps/lcars/screenshot.png | Bin 4746 -> 4772 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 9b2ef59c6..7dcdca4ee 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -197,7 +197,7 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 118, 107); + g.drawImage(iconImg, 115, 107); // Alarm within symbol g.setFontAlign(-1, -1, 0); @@ -205,7 +205,7 @@ function drawState(){ if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 118+25, 107+25+1); + g.drawString(getAlarmMinutes(), 115+25, 107+25+1); } } diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 11695ba5b05a6a6885ad9bdc7203fed50853e4bb..22e00581be28e9800ad17851901460ef318373a3 100644 GIT binary patch delta 4767 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 Sofwz^0000 Date: Tue, 28 Dec 2021 14:24:06 +0100 Subject: [PATCH 192/217] Minor changes --- apps/lcars/lcars.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 7dcdca4ee..1dbae6668 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -169,9 +169,9 @@ function drawLock(){ g.clearRect(120, 10, g.getWidth(), 75); g.drawString("LCARS", 128, 13); if(connected){ - g.drawString("BT-CO", 128, 33); + g.drawString("CONN", 128, 33); } else { - g.drawString("BT-NC", 128, 33); + g.drawString("NOCON", 128, 33); } if(Bangle.isLocked()){ g.drawString("LOCK", 128, 53); From 53e37132055cae7ccab96598910927a8949b0e51 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:24:41 +0100 Subject: [PATCH 193/217] Updated screenshot --- apps/lcars/screenshot.png | Bin 4772 -> 4798 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 22e00581be28e9800ad17851901460ef318373a3..4d4911227dc8ce48bd8db53c3947900c4e8ac87e 100644 GIT binary patch delta 4793 zcmV;q5=QN$CB7w)F@JbTL_t(|UhQ33mg67{oZSD=Juluuu$B^t%~Ai%bQ>^8MNx>w zuYdpk{r%H^{{H^`dmSm`-`!#>*@(tic z8?ziUb^-6(wE%$M#_Lrd$M@U;9N=9`9zb9K0KBN*zX9C35q}U9Xj(0vhXpN5K4LkTKuu$Noz@DeeLClqtz83}gmpx~Q1GmzSeVl*S zy(vg*J7t$P2n?JvE621s_&A0>|4x;Yj|AGt@UHeS27g9}T`Oayy|at+iHX~C06vC) ziGfc>O_?-Jk1}w|%qNI*P;v2Sev7+7M?Eqk^Y zrZMpG$}jC544il-0F2N7b0+*6#WHXQ10U9*SgBSoBJyF=O-?acw7ySgU`vz&(ZERb z;fm_aw0{=@1%$>enmkznz`fd#4*!S-rlrm&ih(jT7jonBb3PxYflOCML|d1%0cG9~By2@Q(s; zNqdF>m^c%OFzy8&Vk;)HEG%^nY0G8m_s0TQ+E8O*^_sp~3*cUDkXF*PEsop-P?HDR z#7>G6KN7$a%Z^}RZXv=lf$Rlft&?gSb$_({EuTMzfmZ;q#{9Fjp(XIV%6?1~VkYO8 zu&);G8!?J_fvjaYkBCBO&efiK8@N{cQqh;zZJ@L+ax6$%k)swXH0`VHeaLlWZkuszNPUN6wDl4>=I;2g@ zGcW>9Bn@ILDNRfEZ4TfAq0+%k%Su`>aDtSY(9=h|eec_~#A2xl6$Ru{_C>+jvJ+Yu z7&%p(E<#8eSWAbH%HtRqX>^(<2Y+)35Np_%0&r~`tof16=2iyIwX${uU)s_swdZjf z*y_Ai0M zaOP!{Ffg|v2f1bnZ9_0{)c?4?F=h?Rsi)(Kc?hiuykzcp~_GBLvBTJ*wj zf^73jXyDEO)-?5yQ6$sAwSRjdG-gE@A9YJGFls3#ot1&71aNXD?hQWfG_ba74GFbT z41Dw-@iPaUn}UG@z}t#0^|8y?4_pb3$llKawei?~HT`~*9|No3lNr^-c<+-fFx8>X zCmTB2*2V$>;5K$$s#NJ_o^*m``Mz6zAs;%yvl=b{Y_-?}(`#E9(SPUzcUF#yG9cGR zA*K!hBUXBN8su&?%UL+&ZZxgape7#%U}+Qh`HZ@mhP$m1jju{8TBWO9wPhmjrEG#a zSxYB@sRWGL**GrFtksix{`%X))-FFULnLAZfRT6RhR~LNYs*AVbEIjs`jj{lVPMOR z>>B93zJW|kKr2yQf|m#;Lq;0VBiBCh%TmP@0JNpKC?%n0ow4)l_^Pxv`i`5uo?ru8JChB zp@9#pcmp^c&QDNTIz*noL{|?3a6}yS7P9Z z0|T+)8i&?`jenk`eAa_F$spBvD1ZS5MsB5~Zs^fIp#|~-tKNPp3PBC?)^HXI-jWDI zIwEM3MNN-eo+B%9$X*D`?UrtPA%1Bkjsg`2Y74`ov0F5q)Jd$m904-5+f18)QH)#* za-^;|iT8^uaXHf=l7cg?W#T18S0wi3I$nvx$#l&mp* z3kjitWaj5nGH|X-PXkI{uGEHLu1t#MQ-^7QkrqIZ#StV;YY8zkK()FJXJD;@p3gO~ z7q+A)o~k04GuG$}@5vXPvf1p>fQdS z`+r8Ghr}r7Dn^bpono}3KABmwLr3&$B%gf zytQtL{HO(v?UVst)L@ZrE(`1cb`tu*ymLAC7i#m`j$=6OphRZHzhKm8V?PV*XX1i^ z`&m5RSGrxZ9;l))RUd7UVLp+1E`jIDhB3e0E9YS;P)1Obpz!HEpr+W^)T1P4c9M{20%X>OFk@ii=z+7BdTJ1s_Tbf1#7|Q%B z0QgTTg!?7@WkNiRke#b4^8`-dwjI*`8U(VE-SA^djh~Mth!K{pJD$1 z>oqZ}i$?U)!~x)iz&5I?sejDKzeZ$Xw)*>H(levfsT1B@R0=>=sGd57ZZ19U@l-UtwvGLs4bZ(JZcvL z(1itUc{pXPw0>y$GeCZ;>%P>cuC(n}^b(&fPV%3f$D?gs8Q2QacYg!(qeVF&xH8YY zB}PJ*cGGm)xxTbMX!#{|*YYG-+%egialIEix-u}gr$F1JgX|;F?wZgXOR=MN299HV zt)1F)OI=%}{fauI%n2~?PQVER7v#6JX$S*zz(^aff%?{6$!Y0H^A|9?!pvH|GwU*%%Q;~1Fg1Xe(6fRor7dB3InQowrVeZ}Gmvt-Gq48YQVEeawidiO`*N}e?Qruk zu=8#+CYqo#_T&OU`-3Aps5L?l^R3TaM?}qc}JA$tF^ng2EHvLpCPX-6h@KF z%|@@6sDHhEaU-gpUn$}oNwJeBfNKHr$S6cX{P)_JbE1e?9%fheIEJp26H_qoYyj36 zGi3p5r=)asZ3nAmx!VMbSftqALG5ukUcN;$5|Cc)1b_EXl(wO(2DUm|8m5tFmNZsS za%F1()t;9+(wdKrIta{sW8nM5G*T0&$?>h zT}FKyfPagRYTFZg09fj1l03=V_?h$U9aVc?>P&0Cd?oDk%ti8*M(PkZpBJqY`=f=kK->>D0l%9#)*V41YG-U^t19AEm!*;_t)l76z_0U3U#! zTj9uGZh@QTJ-0##iwwnY%T8kCyWDD{57)fnJ*OzHWMo{%0$kjcj|V5$N`ad90@Zs_ zLybn%?E?+~F9SWlidwZNd&1aMrMtW^Wmgi%%{-pgoVcu-)5l!1Zi^Pg0ZuInQfsmR zaDS}@7tEjUMmw8O6ZgHF;eggDKaM?<6+0(MOLqgX6uhVQ2T(@U7B}8`ye0=yoEBM# zpwf8Nt)|Z)+7#XMKuyfF@@wi&<$WB0JwU7hwD!5T6HCjZWJPINS3Y7o^<#}^Ki?|z2wq#44gZeV=t*A)Nb_A0ITWS6#=Yi*V5;3 zM<`6#eI-s~;1s~fL<*4=wQL{(GPS!VIc8_zbmDx4$TCfvZ{YFVm{Wq`sTp{70DtFk z(5C?Slw%f+Yh5HM0V^4Wm`wwhGH|Pj5>+lLF>0CL%gIkJXL$xDdu7c<14)5sr_ccX zWB`qB+f*7j9g=U$l-VMM7K`;TtR!L5@&mvg)-Ee!DhB32i$omCnvdn8-fso)D2<4< zaNShXGVp2AoR!m=vNo&NfQPzGV}DrmxmI7aK9TNYfk!iNDS%NxYEg&$c>vhI>jeW7 zHq{m)N&y}KZUNxG_oDW3E~D~aWb%*b*?jho3`0^w(5;b zjmChv8rJ3?*YdUA+&v1hmU*JKvs)k-cy}uC2tdj-4j@5gD*o)Dl9G{W#sdl{G3lSjp zlT%Lx%}nhgFE$Af2Z(0^sWKE`5O3!3icYLzjHu^&as|FxD!{y+b3H<%vv=zM-#ovW TQ(~2;00000NkvXXu0mjfRvY*a delta 4767 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 tM)Y$%a|M1{D!{zn52dV From 5e596f49451c95e296019c29eb9e78af5c483f1e Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 28 Dec 2021 14:36:23 +0100 Subject: [PATCH 194/217] Show disconnect immideately. --- apps/lcars/lcars.app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 1dbae6668..f27c26b7f 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -200,13 +200,13 @@ function drawState(){ g.drawImage(iconImg, 115, 107); // Alarm within symbol - g.setFontAlign(-1, -1, 0); g.setFontAntonioMedium(); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); g.drawString(getAlarmMinutes(), 115+25, 107+25+1); } + g.setFontAlign(-1, -1, 0); } @@ -447,6 +447,9 @@ Bangle.on('lcdPower',on=>{ // health iff the connection state did not change. if(connected == NRF.getSecurityStatus().connected) { draw(); + } else { + connected = NRF.getSecurityStatus().connected + drawLock(); } } else { // stop draw timer if (drawTimeout) clearTimeout(drawTimeout); From 4769a1dc078dce61a1bad6a255f92f179b62e6c1 Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Sun, 12 Dec 2021 19:08:51 +0100 Subject: [PATCH 195/217] lcars: Add implicit semicolons --- apps/lcars/lcars.app.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f27c26b7f..5042560d3 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -42,73 +42,73 @@ var bgLeft = { width : 27, height : 176, bpp : 3, transparent : 0, buffer : require("heatshrink").decompress(atob("AAUM2XLlgCCwAJBBAuy4EAmQIF5cggAIGlmwgYIG2XIF42wF4ImGF4ImHJoQmGJoQdJhZNHNY47CgRNGBIJZHHgRiGBIRQ/KH5QCAFCh/eX5Q/KAwdCAGVbtu27YCCoAJBkuWrNlAQRGCiwRDAQPQBIMJCIYCBsAJBgomEtu0WoQmEy1YBIMBHYttIwQ7FyxQ/KHFlFAQ7F2weCHYplKChRTCCg5TCHw5TMAD0GzVp0wCCBBGaBIMaBAtpwECBA2mwEJBAugDgMmCIwJBF5EABAtoeQQvGCYQdPJoI7LMQzTCLJKAGzAJBO4xQ/KGQA8UP7y/KH5QnAHih/eX5Q/GQ4JCGRJlKCgxTDBAwgCCg5TCHwxTCNA4A==")) -} +}; var bgRight = { width : 27, height : 176, bpp : 3, transparent : 0, buffer : require("heatshrink").decompress(atob("lmy5YCDBIUyBAmy5AJBhYUG2EAhgIFAQMAgQIGCgQABCg4ABEAwUNFI2AKZHAKZEgGRZTGOIUDQxJxGKH5Q/agwAnUP7y/KH4yGeVYAJrdt23bAQVABIMly1ZsoCCMgUWCIYCB6AJBhIRDAQNgBIMFEwlt2i1CEwmWrAJBgI7FtpGCHYuWKH5QxEwpQDlo7F0A7IqBZBEwo7BCIwCBJo53CJoxiCJpIAdgOmzVpAQR/CgAIEAQJ2CBAoCBBIMmCg1oD4QLGFQUCCjQ+CKYw+CKY4JCKYwoCGRMaGREJDoroCgwdFzBlLKH5QvAHih/eX5Q/KE4A8UP7y/KH5QGDpg7HJoxZCCIx3CJowmCF4yACJox/CgAA=")) -} +}; var iconEarth = { width : 50, height : 50, bpp : 3, buffer : require("heatshrink").decompress(atob("AFtx48ECBsDwU5k/yhARLjgjBjlzAQMQEZcIkOP/fn31IEZgCBnlz58cEpM4geugEgwU/8+WNZJHDuHHvgmBCQ8goEOnVgJoMnyV58mACItHI4X8uAFBuVHnnz4BuGxk4////Egz3IkmWvPgNw8f/prB//BghTC+AjE7848eMjNnzySBwUJkmf/BuGuPDAQIjBiPHhhTCSQnjMo0ITANJn44Dg8MuFBggCCiFBcAJ0Bv5xEh+ITo2OhHkyf/OIQdBWwVHhgjBNwUE+fP/5EEgePMoYLBhMgyVJk/+BQQdC688I4XxOIc8v//NAvr+QEBj/5NwKVBy1/QYUciPBhk1EAJrC+KeC489QYaMBgU/8BNB9+ChEjz1Jkn/QYMBDQIgCcYTCCiP/nlzJQmenMAgV4//uy/9wRaB/1J8iVCcAfHjt9TYYICnhKCgRKBw159/v//r927OIeeoASBDQccvv3791KYVDBYPLJQeCnPnz//AAP6ocEjEkXgMgJQtz79fLAP8KYkccAcJ8Gf/f/xu/cAMQ4eP5MlyQRCMolx40YsOGBAPfnnzU4KVDpKMBvz8Dh0/8me7IICgkxJQXPIgZTD58sEgcJk+eNoONnFBhk4/5uB/pcDg5KD+4mEv4CBXISVDhEn31/8/+mH7x//JQK5CAAMB4JBCnnxJQf/+fJEgkAa4L+CAQOOjMn/1bXIRxDJQXx58f//Hhlz/88EgsChMgz/Zs/+nfkyV/8huDOI6SD498NwoACi1Z8+S/Plz17/+QCI7jC+ZxBmfPnojIAAMDcYWSp//2wRJEwq2GABECjMgNYwAmA=")) -} +}; var iconSaturn = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4A/AEkQuPHCJ0ChEAwARNjAjBjgjOhs06Q2OEYVx4ARMhEggUMkANIDoIgBoEEgEBNxJEC6ZrBAAMwNxAjDNYcHNxIjB7dtEwIHBwRoKj158+cuPEjlwCRAjC23bpu0wRNDAAsHEYWeEwaSJ6YjCAQUNSRQjEzxQBWZMNEYlsmg2JWAIjCz95SoJuJggjDtuw6dMG5JKCz998wFBJRVNEYW0yaVBJRNhJQN9+4pCzhKJmBKC4YpB/fINxIgCzFxSoQ3J4ENm3CAQPb98wbpEcAQMYWwKYBNxMDXgc2/fv3g2IEAOAgAjBjy5CEhEMfYICBgfPnjdLjj+CgMHiC3JknDhhoINw4jCAB0IJQIANR4QjPAH4A/AFA")) -} +}; var iconMoon = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4AQjlx44CCCZsg8eOkHDwAQKEYgmPhEgEQM48AOIgMHEYoCB4ATI8UAmH/x04JoRuJsImHuBKLn37EwZuIgEQOI8cEpXj/yYBhE8+YNGgkYoJxITBUPnAaC///nC+FjBuIOJZEB8YeCh/8AoYACoMEEAnEjhQDPQJKJ/DCDAoi5DoLdHAoMQgLjFWYPOnngh02IwXzwDjEgPGEYS8BI4MBYoSVG4fP/nghkAgZrDkngJQqSG4gvBg4sBQgkImHihEAWwP8ZBMBEYl5/+cSoVAGQIUFh04weJn///0gj/OEw5KEz45BzhuCTYQAEgePB4IACAoJuBnAQEa4XHjxKB//xFgWHJQsCRgMDEonipwjENwUBDQNx8+evvn/hTDLw3igE+EgZxB8UOXIvEJQUfEYOfv53DEQkgga5BJQvzx84cAj+CDoNh8/eEYJKDuCSEcocnEon+/7xEgFBIIcfB4Mf/IICXI2DgDdBAAn758gCIq5Dv4zBvJuIOIfjEgvP/ARHgwdCB4P3AoTdFAAk4EYk8SQgAFTALaDSQwAGh08//vnDmBABYmEEZYAzA==")) -} +}; var iconMars = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("AH4ATjlwCJ+Dh0wwAQMg0cuPHjFhCZkDps0yVJkmQCBMEjFx42atOmzQmLhMkEYQCCCREQoOGEYmmzB0IEY4CBkARGoJKBEYQCEzgSGkGSpAjDyYCCphuGiFhJQgCD8ASFgRHGAQKbB6BuHJRGeOIsINxEk6dNmARDgMEjQjHAQPnVQojIyZKB6YSDNwK5FAQt54BuDXJIjBEwK5EgxKKXgq5BJRdgXIojJAQJKMcAM0EwM2JUApDoCVFExa7FkGCgAmIkAREEwUEjAmHCIgABhEggQmFpACBCIojBEwRQCzVhwkQU4YADgQmBwQCCI4IFBCAojFAQojGJQQjDAQgRGEZICBEo4gFyUIkilFJQUYEAZrBAQMYNw5KDSQSbCNwwABgOGEwgCBsPACQ5xGwdNnARJcAVh48evvnCJK8Chs+/fv33gCRcB48cuPHCBYA/ADAA==")) -} +}; var iconSatellite = { width : 50, height : 50, bpp : 3, transparent : 2, buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) -} +}; var iconAlarm = { width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) -} +}; var iconCharging = { width : 50, height : 50, bpp : 3, transparent : 5, buffer : require("heatshrink").decompress(atob("23btugAwUBtoICARG0h048eODQYCJ6P/AAUCCJfbo4SDxYRLtEcuPHjlwgoRJ7RnIloUHoYjDAQfAExEAwUIkACEkSAIEYwCBhZKH6EIJI0CJRFHEY0BJRWBSgf//0AJRYSE4BKLj4SE8BKLv4RD/hK/JS2AXY0gXwRKG4cMmACCJQMAg8csEFJQsBAwfasEAm379u0gFbcBfHzgFBz1xMQZKBjY/D0E2+BOChu26yVEEYdww+cgAFCg+cgIfB6RKF4HbgEIkGChEAthfCJQ0eEAIjBBAMxk6GCJQtgtyVBwRKBAQMbHAJKGXIIFCgACBhl54qVG2E+EAJKBJoWAm0WJQ6SCXgdxFgMLJQvYjeAEAUwFIUitEtJQ14NwUHgEwKYZKGwOwNYX7XgWCg3CJQ5rB4MevPnAoPDJRJrCgEG/ECAoNsJRUwoEesIIBiJKI3CVDti/CJRKVDiJHBSo0YsOGjED8AjBcAcIgdhcAXAPIUAcAYIBcA4dBAQUG8BrBgBuCgOwcBEeXIK2BBAIFBgRqBGoYAChq8CcYUE4FbUYOACQsHzgjDgwFBCIImBAQsDtwYD7cAloRI22B86YBw5QBgoRJ7dAgYEDCJaeBJoMcsARMAQNoJIIRE6A")) -} +}; var iconNoBattery = { text: "NO BAT", width : 50, height : 50, bpp : 3, transparent : 1, buffer : require("heatshrink").decompress(atob("kmSpIC/AWMyoQIFsmECJFJhMmA4QXByVICIwODAQ4RRFIQGD5JVLkIGDzJqMyAGDph8MiRKGyApEAoZKFyYIDQwMkSQNkQZABBhIIOOJRuEL5gRIAUKACVQMhmUSNYNDQYJTBBwYFByGTkOE5FJWYNMknCAQKYCiaSCpmGochDoSYBhMwTAZrChILBhmEzKPBF4ImBTAREBDoMmEwJVDoYjBycJFgWEJQRuLJQ1kmQCCjJlCBYbjCagaDBwyDBmBuBF4TjJAUQKINBChCDQxZBcZIIQF4NIgEAgKSDiQmEVQKMBoARBAAMCSQLLBVoxqKL4gaCChVCNwoRKOIo4CJIgABBoSMHpIRFgDdJOIJUBCAUJRgJuEAQb+DIIgRIAX4C/ASOQA")) -} +}; // Font to use: // Graphics.prototype.setFontAntonioMedium = function(scale) { // Actual height 20 (19 - 0) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAA//mP/5gAAAAAAAAAAAAA/gAMAAAAAA/gAPAAAEIIBP+H/8D+IYBP+H/8D+IABCAAwIAfnwP8+PHh448eP3+B4fAAAAAAAH/AD/4AwGAMBgD/4Af8GAAPgAPgAfgAfAAfAA+AAOP/AH/4BgGAYBgH/4A/8AAAAAAAAAQAA/B+f4/+GMPhjv/4/h8Dg/gAcYwAAPwADgAAAAAAAAB//8///sAAaAACAAAMAAb//+f//AAAAAAAbAAGwAA4AA/wADgABsAAbAAAAAAAgAAMAAPwAD8AAMAADAAAAAAAAAAHAAB/AAOAAAAAAAAMAADAAAwAAMAACAAAAAAAAAABgAAYAAAAAAAAA4AD+AP+A/4A/gAOAAAAAAAAAH//j//8wADMAAz//8f/+AAAAAAAMAADAABgAA//+P//gAAAAAAAAAAAAAfgfP4fzAfswfDP/gx/gMAAAHgPj4D8wMDMHAz//8f3+AAEAAAAADwAH8APzA/AwP//j//4AAwAAAD/Hw/x+MwBjOAYz/+Mf/AAAAAAAH//j//8wYDMGAz9/8fP+AAcDAAAwAAMAfjB/4z/wP+AD4AAwAAAAOB/f4///MHAzBwM///H9/gAAAAAAH/Pj/78wGDMBgz//8f/+AAAAAAADhwA4cAAAAAAAAAAAAAADh/A4fgAAAAOAAHwABsAA7gAccAGDAAAAANgADYAA2AANgADYAA2AAAAAAAABgwAccADuAAbAAHwAA4AAAAHwAD8c4/POMHAD/wAfwAAAAAAAAD/wD//B4B4Y/HMf8zMBMyATMwczP+M4BzHwcgf+AA+AAAAAAD4A/+P/8D+DA/4wH/+AB/4AAeAAAAAAA//+P//jBgYwYGP//j//4PH4AAAAAAAf/+P//zgAcwADP4fz+P4Ph8AAAAAAA//+P//jAAYwAGPADj//4P/4AAAAAAA//+P//jBgYwYGMGBgAAAAAAP//j//4wYAMGADBgAAAAAAAA//w///PAHzAQM4MHP7/x+/8AAAAAAD//4//+AGAABgAAYAP//j//4AAAAAAAAAA//+P//gAAAAAAAAAAAHwAB+AABgAAY//+P//AAAAAAAAAAD//4//+APgAf+Afj8PgPjAAYAAAAAAD//4//+AABgAAYAAGAAAAAAA//+P//j/gAD/wAB/gAP4B/4P/AD//4//+AAAAAAAAAAP//j//4P4AAfwAA/g//+P//gAAAAAAAAAA//g//+PAHjAAY4AOP//h//wAAAAAAD//4//+MDADAwA4cAP/AB/gAAAAAAAA//g//+PAHjAAc4APv//5//yAAAAAAD//4//+MGADBgA48AP//h+f4AAAAAAB+Pw/z+MOBjBwY/P+Hx/AAHgwAAMAAD//4//+MAADAAAAAAP//D//4AAOAABgAA4//+P//AAAAwAAP8AD//AA/+AAfgP/4//gPwAAAAA+AAP/4Af/4AD+A//j/wA/wAD/+AA/4B/+P/+D+AAAAAMADj8P4P/4A/4B//w+A+MABgAAA4AAPwAB/gAB/+A//j/gA+AAMAAAAAYwB+MH/jf+Y/8GPwBjAAAAAAP//7//+wABsAAYAAAAAAPAAD/gAH/gAD/gAD4AACAAADAAGwABv//7//+AAAA=="), 32, atob("BQUHCAgVCQQFBQkHBQcFBwgICAgICAgICAgFBQcHBwgPCQkJCQcHCQoFCQkHDQoJCQkJCAYJCQ0ICAcGBwY="), 20+(scale<<8)+(1<<16)); -} +}; Graphics.prototype.setFontAntonioLarge = function(scale) { // Actual height 39 (39 - 1) g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); -} +}; /* * Draw watch face @@ -548,4 +548,4 @@ g.setTheme({bg:"#000",fg:"#fff",dark:true}).clear(); draw(); // After drawing the watch face, we can draw the widgets -// Bangle.drawWidgets(); \ No newline at end of file +// Bangle.drawWidgets(); From 421681fec9c3e8dc5f93996b489fd52ac5375148 Mon Sep 17 00:00:00 2001 From: Adam Schmalhofer Date: Thu, 23 Dec 2021 16:06:55 +0100 Subject: [PATCH 196/217] lcars: Show "0" on timer Sometimes when my watch buzzes, I look at it and am puzzled why. Until I remember that I had a timer set. This now shows a timer of "0". --- apps/lcars/lcars.app.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 5042560d3..6e0a46844 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -201,7 +201,7 @@ function drawState(){ // Alarm within symbol g.setFontAntonioMedium(); - if(isAlarmEnabled() > 0){ + if(isAlarmEnabled()){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); g.drawString(getAlarmMinutes(), 115+25, 107+25+1); @@ -404,7 +404,7 @@ function getCurrentTimeInMinutes(){ } function isAlarmEnabled(){ - return settings.alarm > 0; + return settings.alarm >= 0; } function getAlarmMinutes(){ @@ -429,11 +429,13 @@ function handleAlarm(){ .then(() => new Promise(resolve => setTimeout(resolve, t))) .then(() => Bangle.buzz(t, 1)) .then(() => new Promise(resolve => setTimeout(resolve, t))) - .then(() => Bangle.buzz(t, 1)); - - // Update alarm state to disabled - settings.alarm = -1; - Storage.writeJSON(SETTINGS_FILE, settings); + .then(() => Bangle.buzz(t, 1)) + .then(() => new Promise(resolve => setTimeout(resolve, 5E3))) + .then(() => { + // Update alarm state to disabled + settings.alarm = -1; + Storage.writeJSON(SETTINGS_FILE, settings); + }); } From b8959f7335f56fe1daae00881fcc29fe52e76de1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 29 Dec 2021 09:25:06 +0100 Subject: [PATCH 197/217] Wrong icon. --- apps/lcars/lcars.app.js | 12 ++++++------ apps/lcars/lcars.icon.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f27c26b7f..d2295b1f8 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -129,21 +129,21 @@ function printData(key, y){ if(key == "Battery"){ var bat = E.getBattery(); g.drawString("BAT:", 26, y); - g.drawString(bat+ "%", 68, y); + g.drawString(bat+ "%", 65, y); } else if(key == "Steps"){ var steps = getSteps(); g.drawString("STEP:", 26, y); - g.drawString(steps, 68, y); + g.drawString(steps, 65, y); } else if(key == "Temp."){ var temperature = Math.floor(E.getTemperature()); g.drawString("TMP:", 26, y); - g.drawString(temperature + "C", 68, y); + g.drawString(temperature + "C", 65, y); } else if(key == "HRM"){ g.drawString("HRM:", 26, y); - g.drawString(hrmValue, 68, y); + g.drawString(hrmValue, 65, y); } else { g.drawString("NOT FOUND", 26, y); @@ -197,14 +197,14 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 115, 107); + g.drawImage(iconImg, 117, 107); // Alarm within symbol g.setFontAntonioMedium(); if(isAlarmEnabled() > 0){ g.setFontAlign(0, 0, 0); g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 115+25, 107+25+1); + g.drawString(getAlarmMinutes(), 117+25, 107+25+1); } g.setFontAlign(-1, -1, 0); } diff --git a/apps/lcars/lcars.icon.js b/apps/lcars/lcars.icon.js index 49694cf7c..22e98a39a 100644 --- a/apps/lcars/lcars.icon.js +++ b/apps/lcars/lcars.icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("lmy5YCFi1ZsuWAQgGGy1YgXbtu2AQgjH4EAEZ2XCINbEZxRBvIjNzwRBh4jN2ARBgIjNwCIClojMTQcFEZdkCIgjLngRDg4jLsDREEZOzTwIAEjwjHs5oDAAiSEEYUcCA5uFeoQQJAAP2EYRECgJHGJQrRDps4BwsD5wDBrYjB+AXBtJaHBAV5spoC6dNGY8NmBBBEYMAg2atJHHvOmwEB8qtBmnTpgjImncgEtkEB02atARHBYOYSQPgh4jKgILBCIMAhIjBc4ojEzVwCII7B6dAEZpfBEZXmEZ53CI4twEAqVCkwjCNYaMGboQjDUgIjGboOnAgMGR4WgC4YAD+dNmgEBgg5BluUa4QQDg7dB0wjCJoNl2z7CAQJBDEYLwDh9tyxEBjitFEYJEBfwQjB7z1GEYQsCgfbEYNZT4ggBEYWcOIVZEYPbtAQCgfNEANODIYOBEYVlDQQAHg4OCCgW0CBEKEYySBg4gFi1Z4AjFWwM922OJQOPtoLBoBHGgPlAoQCEoAjGgIdCAQto+wjFhIgFAQwjDrYjIAQYjDEBQjFARwA==")) +require("heatshrink").decompress(atob("mEwgeevPnAQsc+fPngCE+/fvoCEvAbIA4/AgFzEZwRBjwjNvBUBEZ3eCIMOEZtwCIMBEZuARYU5EZecTocHEZf0CIcBEbvgaggjKTwIAEbQpoHAAiSEeoYQHJQr1CCBJKEIgcBI4xKFaIdt3AOFgfuAYMeEYLRBj1pLQ4ICuYjBAgPbtoRHhu3AYN5VoMGzVpI49502AgPPVoM27dsK48N23cgE5CgOmzVoCI4LBzCSB8EP2wjJgILBAYMAhIjBsAjJzVwg47C7YRJEYhfBEZXmEZ53CI4q2BEAiVCkwjCNYaMGboQjDkBfDCAbdB04EBgyPDC4YAD/dt2wRCHIM5njXCCAcHboOmCIQ0B5/nfYT6DFIIjBeAcOvM8+EAjitFEYJEBAANzEYOeeowjCFgUDzwjB+YrDgAgBEYWcA4Mc+YjCvAQCgftEANuDIYOBEYXPNwIAIg4OCCgXkCBEOEZDvBEAhEB4AjF/inB8+OJQOOvILBoAjGU4IFDAQYjGbQIdCAQt4EY0DEZACDEYceEZACDC4bLBEZwCO")) \ No newline at end of file From 92dde29d4540002fd4008a88275d2b38fc82d17c Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 29 Dec 2021 09:26:49 +0100 Subject: [PATCH 198/217] Left align date and time --- apps/lcars/lcars.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index d2295b1f8..af4ff26e7 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -225,12 +225,12 @@ function drawPosition0(){ drawLock(); // Write time - g.setFontAlign(0, -1, 0); + g.setFontAlign(-1, -1, 0); g.setColor(cWhite); var currentDate = new Date(); var timeStr = locale.time(currentDate,1); g.setFontAntonioLarge(); - g.drawString(timeStr, 70, 10); + g.drawString(timeStr, 28, 10); // Write date g.setColor(cWhite); @@ -238,7 +238,7 @@ function drawPosition0(){ var dayStr = locale.dow(currentDate, true).toUpperCase(); dayStr += " " + currentDate.getDate(); dayStr += " " + currentDate.getFullYear(); - g.drawString(dayStr, 70, 56); + g.drawString(dayStr, 29, 56); // Draw data g.setFontAlign(-1, -1, 0); From be8f5ebb67dedbf4d4d9abd2099730f2852280a0 Mon Sep 17 00:00:00 2001 From: Marco Heiming Date: Sat, 1 Jan 2022 13:53:28 +0100 Subject: [PATCH 199/217] Redraw battery on charging event --- apps/circlesclock/app.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index c409c1e32..a23894ba1 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -226,6 +226,10 @@ Bangle.on('HRM', function(hrm) { //} }); +Bangle.on('charging', function(charging) { + drawBattery(); +}); + g.clear(); Bangle.loadWidgets(); /* From 9b29f5d2c72737d06b0d6b48505ff01bd69c93ab Mon Sep 17 00:00:00 2001 From: Marco Heiming Date: Sat, 1 Jan 2022 14:13:53 +0100 Subject: [PATCH 200/217] Improve heart rate circle drawing calculation --- apps/circlesclock/app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index a23894ba1..026b47cc6 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -102,7 +102,8 @@ function drawHeartRate() { g.fillCircle(w2, h3, radiusOuter); if (hrtValue != undefined && hrtValue > 0) { - const percent = hrtValue / settings.maxHR; + const minHR = 40; + const percent = (hrtValue - minHR) / (settings.maxHR - minHR); drawGauge(w2, h3, percent, colorRed); } @@ -166,6 +167,7 @@ function drawGauge(cx, cy, percent, color) { var i = 0; var r = radiusInner + 3; + if (percent <= 0) return; if (percent > 1) percent = 1; var startrot = -offset; From 495ee69251126350d174b3785117626693d03e3e Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Mon, 3 Jan 2022 11:08:32 +0100 Subject: [PATCH 201/217] Update apps/gpsinfo/gps-info.js (nofBD and/or nofGP are not recognized as numbers) Co-authored-by: BartS23 <10829389+BartS23@users.noreply.github.com> --- apps/gpsinfo/gps-info.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index 4c935b61a..3c8bd42ea 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -113,8 +113,8 @@ function onGPSraw(nmea) { var nofGP = 0; if (nmea.slice(3,6) == "GSV") { // console.log(nmea); - if (nmea.slice(0,7) == "$BDGSV,") nofBD = nmea.slice(11,13); - if (nmea.slice(0,7) == "$GPGSV,") nofGP = nmea.slice(11,13); + if (nmea.slice(0,7) == "$BDGSV,") nofBD = Number(nmea.slice(11,13)); + if (nmea.slice(0,7) == "$GPGSV,") nofGP = Number(nmea.slice(11,13)); SATinView = nofBD + nofGP; } } From aa45ecdb961dab07cd74b992f44fe5692f69aafc Mon Sep 17 00:00:00 2001 From: Hilmar Strauch <56518493+HilmarSt@users.noreply.github.com> Date: Mon, 3 Jan 2022 11:49:43 +0100 Subject: [PATCH 202/217] Update gps-info.js : make nofBD and nofGP global ...otherwise one of them is always zero. Thanks, BartS23 --- apps/gpsinfo/gps-info.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index 3c8bd42ea..a16d4a04e 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -17,6 +17,8 @@ var lastFix = { satellites: 0 }; var SATinView = 0; +var nofBD = 0; +var nofGP = 0; function formatTime(now) { if (now == undefined) { @@ -109,8 +111,6 @@ function onGPS(fix) { } function onGPSraw(nmea) { - var nofBD = 0; - var nofGP = 0; if (nmea.slice(3,6) == "GSV") { // console.log(nmea); if (nmea.slice(0,7) == "$BDGSV,") nofBD = Number(nmea.slice(11,13)); From 402a2fc6b4a99ce6b7be75c7a1c3cc056790bfc8 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:07:17 +0100 Subject: [PATCH 203/217] Updated contributors --- apps/lcars/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index b7a692c96..4630db1ea 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -1,9 +1,8 @@ # LCARS clock A simple LCARS inspired clock. -Note: To display the steps, the health app is required. -If this app is not installed, the data will not be shown. - +Note: To display the steps, the health app is required. If this app is not installed, the data will not be shown. +To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerdavid/BangleApps) ## Features * LCARS Style watch face. @@ -28,5 +27,6 @@ Access different screens via swipe left/ right
Icons made by Smashicons, Freepik from www.flaticon.com
-## Creator -Made by [David Peer](https://github.com/peerdavid) \ No newline at end of file +## Contributors +- Creator: [David Peer](https://github.com/peerdavid). +- Improvements: [Adam Schmalhofer](https://github.com/adamschmalhofer). From b04578840bf945f53cf844e2a64344157f90b86f Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:19:48 +0100 Subject: [PATCH 204/217] Added vref to settings --- apps/lcars/lcars.app.js | 5 +++++ apps/lcars/lcars.settings.js | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 391f14c20..36a335a81 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -145,6 +145,11 @@ function printData(key, y){ g.drawString("HRM:", 26, y); g.drawString(hrmValue, 65, y); + } else if (key == "VREF"){ + var voltage = E.getAnalogVRef().toFixed(2); + g.drawString("VREF:", 26, y); + g.drawString(voltage + "V", 65, y); + } else { g.drawString("NOT FOUND", 26, y); } diff --git a/apps/lcars/lcars.settings.js b/apps/lcars/lcars.settings.js index 2255caf9b..0d004b002 100644 --- a/apps/lcars/lcars.settings.js +++ b/apps/lcars/lcars.settings.js @@ -18,14 +18,14 @@ storage.write(SETTINGS_FILE, settings) } - var data_options = ['Battery', 'Steps', 'Temp.', "HRM"]; + var data_options = ["Battery", "Steps", "Temp.", "HRM", "VREF"]; E.showMenu({ '': { 'title': 'LCARS Clock' }, '< Back': back, 'Row 1': { value: 0 | data_options.indexOf(settings.dataRow1), - min: 0, max: 3, + min: 0, max: 4, format: v => data_options[v], onchange: v => { settings.dataRow1 = data_options[v]; @@ -34,7 +34,7 @@ }, 'Row 2': { value: 0 | data_options.indexOf(settings.dataRow2), - min: 0, max: 3, + min: 0, max: 4, format: v => data_options[v], onchange: v => { settings.dataRow2 = data_options[v]; @@ -43,7 +43,7 @@ }, 'Row 3': { value: 0 | data_options.indexOf(settings.dataRow3), - min: 0, max: 3, + min: 0, max: 4, format: v => data_options[v], onchange: v => { settings.dataRow3 = data_options[v]; From 9551f7751033f2b3fabd411cb2bae58945ba942d Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:38:02 +0100 Subject: [PATCH 205/217] Show large text for alarm --- apps/lcars/lcars.app.js | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 36a335a81..8aa31f18b 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -23,6 +23,7 @@ let cBlue = "#0094FF"; let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; +let cRed = "#FF0000"; /* * Global lcars variables @@ -79,12 +80,6 @@ var iconSatellite = { buffer : require("heatshrink").decompress(atob("pMkyQC/ATGXhIRPyNl0gmPjlwCJ9ly1aCJ1c+fHJR1Hy1ZJR1I+fPnlx6QRLpe+/JKBr5KMuYjBJQMdCJce/fvJQW0CJUlEYQCBSpvvJQbXJjl0NwnzNxGQwEOnHhgF78+WqQyIrFx48cAQXz4ShJgAABh0+8cP//9LJEhg4jDuP3//0LhGQgYlBgeAn///5cIy8MuAmDCIP/9I4HkmCEYMOgHfCQWkCI0cuBuDgF/CIP+CI1Ny1IkeAgHANwIAB/QRFrj7BhkxEwQRC/4RFpbXDgSVBg4RCSorXDI4MJAQMfCIP8cwImDn37fwN58+kwHgLgSVFub7CI4NyBAJKDLgkuEYX78+evKtCLg0jEYRKC58JMoRcFkwjDJQTFDl65EkojEAQMdcwn/+gFC3YjEJQLXEpYRDWwQmEdI6SHAQO0CJUkx4jDF4gCIJQgRMXIjCEARIjCCJ2XEYPKCJqJBJQIROcAUpCJ0kybaDARtdCKAC2kAA=")) }; -var iconAlarm = { - width : 50, height : 50, bpp : 3, - transparent : 1, - buffer : require("heatshrink").decompress(atob("kmSpICEp//BAwCJn/+CJ8k//5CKAABCJs8uPH//x48EI5YjCAARNKEYUcv//jgFBExEnEYoAC+QmHIgIgC/gpCuPBCI2fIgU4AQXjA4P8CIuTEYZKBAolwHApXBEAWP//jxwpBAALaFDoYCIiQmDDIP4EAT+CEwnJEwYjLAQLaFEYomDKALmDNwoCIOIZuD8AkFgCYDHAQjMAQTdDNwOAEg0Dx0/cYeREZtxQYOTHgJuHOIvkXJy8DNwIACJQ8Ah4NDAAfxEZARHOIIkHg4jQAQb1CQ4KVJgEOnDIBSoIjNAQPBcAaVJcAKVBcDGOcD7OBMQM48BuH8f//JKCnhKNggRBkmfTQJxBEwhuD/gRCyVHJRlyCIVJXgYmB8ZQBAoIKBXIQmCOIt/NxAUCOIImCIgIpCBAJuDAQZEE/huIAQWTDgImBTYQGC8gRFcYpKFCI8kDwQAFCJBfBEAX/+IjBiQRIEw4jJAQc8v//NYwCIOgJrIJpA1OcwbaFAQWQA=")) -}; - var iconCharging = { width : 50, height : 50, bpp : 3, transparent : 5, @@ -193,24 +188,26 @@ function drawState(){ var current = new Date(); var hours = current.getHours(); - var iconImg = - isAlarmEnabled() ? iconAlarm : - Bangle.isCharging() ? iconCharging : - bat < 30 ? iconNoBattery : - Bangle.isGPSOn() ? iconSatellite : - hours % 4 == 0 ? iconSaturn : - hours % 4 == 1 ? iconMars : - hours % 4 == 2 ? iconMoon : - iconEarth; - g.drawImage(iconImg, 117, 107); - - // Alarm within symbol - g.setFontAntonioMedium(); - if(isAlarmEnabled()){ + if(!isAlarmEnabled()){ + var iconImg = + Bangle.isCharging() ? iconCharging : + bat < 30 ? iconNoBattery : + Bangle.isGPSOn() ? iconSatellite : + hours % 4 == 0 ? iconSaturn : + hours % 4 == 1 ? iconMars : + hours % 4 == 2 ? iconMoon : + iconEarth; + g.drawImage(iconImg, 117, 107); + } else { + // Alarm within symbol + g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); - g.setColor(cWhite); - g.drawString(getAlarmMinutes(), 117+25, 107+25+1); + g.setColor(cRed); + g.drawString("ALARM", 117+25, 107); + g.setFontAntonioLarge(); + g.drawString(getAlarmMinutes(), 117+25, 107+35); } + g.setFontAlign(-1, -1, 0); } From 4856788e9eb13802d6be8688242872dd74c922b4 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:48:57 +0100 Subject: [PATCH 206/217] Minor color changes --- apps/lcars/lcars.app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 8aa31f18b..1ba16fc59 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -23,7 +23,6 @@ let cBlue = "#0094FF"; let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; -let cRed = "#FF0000"; /* * Global lcars variables @@ -202,7 +201,7 @@ function drawState(){ // Alarm within symbol g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); - g.setColor(cRed); + g.setColor(cPurple); g.drawString("ALARM", 117+25, 107); g.setFontAntonioLarge(); g.drawString(getAlarmMinutes(), 117+25, 107+35); From 9ecfb20fbc1f74b1121bbcf4206b53faaf67cc30 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 17:56:10 +0100 Subject: [PATCH 207/217] Updated colors --- apps/lcars/lcars.app.js | 3 ++- apps/lcars/screenshot.png | Bin 4798 -> 4732 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 1ba16fc59..9d125db4a 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -173,6 +173,7 @@ function drawLock(){ g.drawString("NOCON", 128, 33); } if(Bangle.isLocked()){ + g.setColor(cPurple); g.drawString("LOCK", 128, 53); } } @@ -201,7 +202,7 @@ function drawState(){ // Alarm within symbol g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); - g.setColor(cPurple); + g.setColor(cOrange); g.drawString("ALARM", 117+25, 107); g.setFontAntonioLarge(); g.drawString(getAlarmMinutes(), 117+25, 107+35); diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 4d4911227dc8ce48bd8db53c3947900c4e8ac87e..385273048d77e884dd0ebfb66931ccc68d884ca1 100644 GIT binary patch delta 4726 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 Eg5O2u&j0`b delta 4793 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 TQ(~2;00000NkvXXu0mjfvsL(J From a58f32b042b1af718b6d7543c1611b5c7b522b86 Mon Sep 17 00:00:00 2001 From: David Peer Date: Mon, 3 Jan 2022 19:33:49 +0100 Subject: [PATCH 208/217] Performane improvements --- apps/lcars/lcars.app.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 9d125db4a..f9b1e410e 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -183,6 +183,7 @@ function drawState(){ return; } + g.clearRect(110, 90, g.getWidth(), 170); g.setColor(cWhite); var bat = E.getBattery(); var current = new Date(); @@ -197,7 +198,7 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 117, 107); + g.drawImage(iconImg, 117, 104); } else { // Alarm within symbol g.setFontAntonioMedium(); @@ -522,6 +523,11 @@ Bangle.on("drag", e => { } else { increaseAlarm(); } + + // Only update the state and return to + // avoid a full draw as this is much faster. + drawState(); + return; } if(lcarsViewPos == 1){ From 0e167ada67f86208fb6fb84cf5edd708295933d3 Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 4 Jan 2022 08:05:59 +0100 Subject: [PATCH 209/217] Lower line as battery indicator --- apps/lcars/lcars.app.js | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index f9b1e410e..07037b197 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -149,7 +149,7 @@ function printData(key, y){ } } -function drawHoriztonatlBgLine(color, x1, x2, y, h){ +function drawHorizontalBgLine(color, x1, x2, y, h){ g.setColor(color); for(var i=0; i Date: Tue, 4 Jan 2022 08:45:23 +0100 Subject: [PATCH 210/217] Design chnges --- apps/lcars/lcars.app.js | 55 +++++++++++++++++++++----------------- apps/lcars/screenshot.png | Bin 4732 -> 5112 bytes 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 07037b197..63e3a3a33 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -23,6 +23,7 @@ let cBlue = "#0094FF"; let cOrange = "#FF9900"; let cPurple = "#FF00DC"; let cWhite = "#FFFFFF"; +let cBlack = "#000000"; /* * Global lcars variables @@ -104,6 +105,7 @@ Graphics.prototype.setFontAntonioLarge = function(scale) { g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAPgAAAAAB8AAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAD8AAAAAH/gAAAAP/8AAAAf//gAAA///AAAB//+AAAD//8AAAH//4AAAP//wAAAB//gAAAAP/AAAAAB+AAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH///AAAf////8AP/////4B//////Af/////8D8AAAAfgeAAAAA8DwAAAAHgeAAAAA8D//////gf/////8B//////AP/////wAf////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAHgAAAAAA8AAAAAAPgAAAAAB4AAAAAAf/////gP/////8B//////gP/////8B//////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAD/+AAP8A//wAP/gP/+AH/8D//wD//gfgAA//8DwAAf+HgeAAP/A8DwAH/gHgfgP/wA8D///4AHgP//+AA8A///AAHgB//AAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AA/gAD/AAH/gA/4AA/+AP/AAH/4D/4AA//gfgA4AB8DwAPAAHgeAB4AA8DwAPgAHgfAD+AB8D//////gP/////4B//5//+AD/+H//gAH/AH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP4AAAAAP/AAAAAP/4AAAAP//AAAAP/x4AAAf/wPAAAf/gB4AAf/AAPAAP/AAB4AB//////gP/////8B//////gP/////8AAAAAPAAAAAAB4AAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//wD/AB///Af+AP//4D/4B///Af/gP//4B/8B4D4AAPgPAeAAA8B4DwAAHgPAfAAB8B4D////gPAf///4B4B////APAD///gAAAD//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///AAAP////4AH/////wB//////Af/////8D8APAA/geADwAB8DwAeAAHgeADwAA8D4AeAAPgf/j+AH8B/8f///gP/h///4Af8H//+AAPgP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAPAAAAAAB4AAAABgPAAAA/8B4AAB//gPAAD//8B4AH///gPAH///8B4P//+AAPH//wAAB///gAAAP//AAAAB/+AAAAAP+AAAAAB+AAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4A/+AAf/w//+AP//v//4B//////Af/////8D4AfwAPgeAB8AA8DwAHAAHgeAB8AA8D4Af4APgf/////8B//////AP//v//4A//4//8AA/4A/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/+AAAAD//+D/gB///4f+AP///j/4D///8f/gfAAHgB8DwAA8AHgeAAHgA8DwAA8AHgfgAHgB8D//////gP/////4A/////+AD/////gAD////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAfgAAB+AD8AAAPwAfgAAB+AD8AAAPwAfgAAAAAAAAAAAAAAAAAAAAAAAA=="), 46, atob("DBATExMTExMTExMTCw=="), 45+(scale<<8)+(1<<16)); }; + /* * Draw watch face */ @@ -117,36 +119,41 @@ function queueDraw() { } -function printData(key, y){ +function printData(key, y, c){ g.setFontAlign(-1,-1,0); + var text = "ERR"; + var value = "NOT FOUND"; if(key == "Battery"){ - var bat = E.getBattery(); - g.drawString("BAT:", 26, y); - g.drawString(bat+ "%", 65, y); + text = "BAT"; + value = E.getBattery() + "%"; } else if(key == "Steps"){ - var steps = getSteps(); - g.drawString("STEP:", 26, y); - g.drawString(steps, 65, y); + text = "STEP"; + value = getSteps(); } else if(key == "Temp."){ - var temperature = Math.floor(E.getTemperature()); - g.drawString("TMP:", 26, y); - g.drawString(temperature + "C", 65, y); + text = "TEMP"; + value = Math.floor(E.getTemperature()) + "C"; } else if(key == "HRM"){ - g.drawString("HRM:", 26, y); - g.drawString(hrmValue, 65, y); + text = "HRM"; + value = hrmValue; } else if (key == "VREF"){ - var voltage = E.getAnalogVRef().toFixed(2); - g.drawString("VREF:", 26, y); - g.drawString(voltage + "V", 65, y); + text = "VREF"; + value = E.getAnalogVRef().toFixed(2) + "V"; - } else { - g.drawString("NOT FOUND", 26, y); } + + g.setColor(c); + g.fillRect(133, y-2, 165 ,y+18); + g.fillCircle(164, y+8, 10); + g.setColor(cBlack); + g.drawString(text, 135, y); + + g.setColor(c); + g.drawString(value, 88, y); } function drawHorizontalBgLine(color, x1, x2, y, h){ @@ -183,7 +190,7 @@ function drawState(){ return; } - g.clearRect(110, 90, g.getWidth(), 170); + g.clearRect(20, 93, 77, 170); g.setColor(cWhite); var bat = E.getBattery(); var current = new Date(); @@ -198,16 +205,16 @@ function drawState(){ hours % 4 == 1 ? iconMars : hours % 4 == 2 ? iconMoon : iconEarth; - g.drawImage(iconImg, 117, 104); + g.drawImage(iconImg, 29, 104); } else { // Alarm within symbol g.setFontAntonioMedium(); g.setFontAlign(0, 0, 0); g.setColor(cOrange); - g.drawString("ALARM", 117+25, 107); + g.drawString("ALARM", 29+25, 107); g.setColor(cWhite); g.setFontAntonioLarge(); - g.drawString(getAlarmMinutes(), 117+25, 107+35); + g.drawString(getAlarmMinutes(), 29+25, 107+35); } g.setFontAlign(-1, -1, 0); @@ -252,9 +259,9 @@ function drawPosition0(){ // Draw data g.setFontAlign(-1, -1, 0); g.setColor(cWhite); - printData(settings.dataRow1, 97); - printData(settings.dataRow2, 122); - printData(settings.dataRow3, 147); + printData(settings.dataRow1, 97, cOrange); + printData(settings.dataRow2, 122, cPurple); + printData(settings.dataRow3, 147, cBlue); // Draw state drawState(); diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index 385273048d77e884dd0ebfb66931ccc68d884ca1..ea57e979fcbbc7761a7b06bf69000c22d526cab9 100644 GIT binary patch delta 5110 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 YKi)^^b0eb_3;+NC07*qoM6N<$f=R!@)&Kwi delta 4727 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 Date: Tue, 4 Jan 2022 08:47:23 +0100 Subject: [PATCH 211/217] Updated readme --- apps/lcars/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/lcars/README.md b/apps/lcars/README.md index 4630db1ea..97695a408 100644 --- a/apps/lcars/README.md +++ b/apps/lcars/README.md @@ -13,6 +13,7 @@ To contribute you can open a PR at this [GitHub Repo]( https://github.com/peerda * [Screen 1] Shows different states such as (charging, out of battery, GPS on etc.) * [Screen 1] Swipe up/down to activate an alarm. * [Screen 1] Shows 3 customizable datapoints on the first screen. + * [Screen 1] The lower orange line indicates the battery level. * [Screen 2] Display month graphs for steps + hrm on the second screen. From a614a398ccc420b95c8d0e0456ccd489c5506cee Mon Sep 17 00:00:00 2001 From: David Peer Date: Tue, 4 Jan 2022 09:05:31 +0100 Subject: [PATCH 212/217] Minor design improvements --- apps/lcars/lcars.app.js | 5 +++-- apps/lcars/screenshot.png | Bin 5112 -> 5195 bytes 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/lcars/lcars.app.js b/apps/lcars/lcars.app.js index 63e3a3a33..74d0450c0 100644 --- a/apps/lcars/lcars.app.js +++ b/apps/lcars/lcars.app.js @@ -148,12 +148,13 @@ function printData(key, y, c){ g.setColor(c); g.fillRect(133, y-2, 165 ,y+18); - g.fillCircle(164, y+8, 10); + g.fillCircle(161, y+8, 10); g.setColor(cBlack); g.drawString(text, 135, y); g.setColor(c); - g.drawString(value, 88, y); + g.setFontAlign(1,-1,0); + g.drawString(value, 130, y); } function drawHorizontalBgLine(color, x1, x2, y, h){ diff --git a/apps/lcars/screenshot.png b/apps/lcars/screenshot.png index ea57e979fcbbc7761a7b06bf69000c22d526cab9..b3dfd42000766a5bff8e62a6e5d66103ac4f2a9b 100644 GIT binary patch delta 5194 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 Ef?}il!TQ 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 YKi)^^b0eb_3;+NC07*qoM6N<$g2zF@sQ>@~ From b5b40b8db6e6d97713c3550df9d4c61d32268796 Mon Sep 17 00:00:00 2001 From: Marco H Date: Tue, 4 Jan 2022 09:47:00 +0100 Subject: [PATCH 213/217] Extend TODO list --- apps/circlesclock/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/circlesclock/README.md b/apps/circlesclock/README.md index 27c0566d3..66d9afe08 100644 --- a/apps/circlesclock/README.md +++ b/apps/circlesclock/README.md @@ -13,6 +13,8 @@ It shows besides time, date and day of week the following information: ## TODO * Show weather information +* Configure which information to show in each circle +* Configure visibility of widgets ## Creator Marco ([myxor](https://github.com/myxor)) From 36a8623810e8f42db4708401dcf5d27b0a9e245d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 4 Jan 2022 09:37:59 +0000 Subject: [PATCH 214/217] check for duplicate apps --- bin/sanitycheck.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index fe59baa25..e50256fb6 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -76,8 +76,11 @@ function globToRegex(pattern) { const isGlob = f => /[?*]/.test(f) // All storage+data files in all apps: {app:,[file: | data:]} let allFiles = []; +let existingApps = []; apps.forEach((app,appIdx) => { if (!app.id) ERROR(`App ${appIdx} has no id`); + if (existingApps.includes(app.id)) ERROR(`Duplicate app '${app.id}'`); + existingApps.push(app.id); //console.log(`Checking ${app.id}...`); var appDir = APPSDIR+app.id+"/"; if (!fs.existsSync(APPSDIR+app.id)) ERROR(`App ${app.id} has no directory`); From 9d548ef5e697dcd659c3670f336984604cf09ff2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 4 Jan 2022 09:47:18 +0000 Subject: [PATCH 215/217] fix merge --- apps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps.json b/apps.json index e224e1576..4806955fe 100644 --- a/apps.json +++ b/apps.json @@ -5069,14 +5069,14 @@ "shortName":"AnDark", "version":"0.04", "description": "analog clock face without disturbing widgets", - "icon": "app_icon.png", + "icon": "andark_icon.png", "type": "clock", "tags": "clock", "supports" : ["BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"andark.app.js","url":"app.js"}, - {"name":"andark.img","url":"app_icon.js ","evaluate":true} + {"name":"andark.img","url":"app_icon.js","evaluate":true} ] }, { From f9a34bf2c8052a0824434de8ff9f7e32fec7507c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 4 Jan 2022 10:03:30 +0000 Subject: [PATCH 216/217] fix icon --- apps/supf/icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/supf/icon.js b/apps/supf/icon.js index c06a65409..9b880b5e9 100644 --- a/apps/supf/icon.js +++ b/apps/supf/icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("ogA/AH4A/AElAdbgcEDq46FgEEQX5HGACZbBDjQeCDrocbAH4A/AH4A0gX/AAPzgEBAoX/BgIFDiEAn4FCkAdFgYXEDpQXBAocwDow4BHwIIDEAIdCHAIdDAQM/Dp4UBAQodxmYABDrK5DDrY7BmQdaPRAd4d6CPESo4ACDoQACDowXDHwMBDpI+Bn4jEAH4A/AH4A/AB9ADjcEogdbogA+K7oddWyywBDzQcHAH4A/AGAA=")) +require("heatshrink").decompress(atob("mEw4UBAoP/AAXnnNVAH4ACoEABZJXBgoLUGaIAIgILLbf4AUnWqweq1gEB4QEBBZ0OwEA9k7h3C2ALGlk4BZAeBBZAvCBZOv/gLJ2EABZOggE7hQLFL5U+1XDBYYEB3jB/AClABRMBqoAXEhAiCBZdQBY8FHTAAj")) From 61b214da81a0d2ca1f2bf9898e9fe9efb328683a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 4 Jan 2022 10:13:20 +0000 Subject: [PATCH 217/217] Update version for #1167 --- apps.json | 2 +- apps/gpsinfo/ChangeLog | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 63dab2467..9d8ce0930 100644 --- a/apps.json +++ b/apps.json @@ -1501,7 +1501,7 @@ { "id": "gpsinfo", "name": "GPS Info", - "version": "0.05", + "version": "0.06", "description": "An application that displays information about altitude, lat/lon, satellites and time", "icon": "gps-info.png", "type": "app", diff --git a/apps/gpsinfo/ChangeLog b/apps/gpsinfo/ChangeLog index 381412c16..3ff284cb8 100644 --- a/apps/gpsinfo/ChangeLog +++ b/apps/gpsinfo/ChangeLog @@ -2,3 +2,4 @@ 0.03: Show number of satellites while waiting for fix 0.04: Add Maidenhead readout of GPS location 0.05: Refactor to use 'layout' library for multi-device support +0.06: Added number of satellites in view and fixed crash with GPS time