Skip to content

Commit

Permalink
Merge pull request #3486 from jla-42/master
Browse files Browse the repository at this point in the history
slpquiet: fix setting editing (#3484), ffcniftyapp: add
  • Loading branch information
bobrippling authored Jul 4, 2024
2 parents cd54341 + 35ea6db commit f19f0d3
Show file tree
Hide file tree
Showing 14 changed files with 271 additions and 1 deletion.
3 changes: 3 additions & 0 deletions apps/ffcniftyapp/ChangeLog
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
0.01: New Clock Nifty A ++ >> adding more information on the right side of the clock


13 changes: 13 additions & 0 deletions apps/ffcniftyapp/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Nifty-A ++ Clock

This is the clock:

![](screenshot_niftyapp.png)

The week number (ISO8601) can be turned off in settings (default is `On`)
Weather and Steps can be also turned off in settings.

![](screenshot_settings_niftyapp.png)

Based on the # Nifty-A Clock by @alessandrococco

1 change: 1 addition & 0 deletions apps/ffcniftyapp/app-icon.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

174 changes: 174 additions & 0 deletions apps/ffcniftyapp/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
const w = require("weather");
//const locale = require("locale");

// Weather icons from https://icons8.com/icon/set/weather/color
function getSun() {
return require("heatshrink").decompress(atob("kEggILIgOAAZkDAYPAgeBwPAgIFBBgPhw4TBp/yAYMcnADBnEcAYMwhgDBsEGgE/AYP8AYYLDCYgbDEYYrD8fHIwI7CIYZLDL54AHA=="));
}
function getPartSun() {
return require("heatshrink").decompress(atob("kcjwIVSgOAAgUwAYUGAYVgBoQHBkAIBocIDIX4CIcOAYMYg/wgECgODgE8oFAmEDxEYgYZBgQLBGYNAg/ggcYgANBAIIxBsPAG4MYsAIBoQ3ChAQCgI4BHYUEBgUADIIPBh///4GBv//8Cda"));
}
//function getPartRain() {
// return require("heatshrink").decompress(atob("kEggIHEmADJjEwsEAjkw8EAh0B4EAg35wEAgP+CYMDwv8AYMDBAP2g8HgH+g0DBYMMgPwAYX8gOMEwMG3kAg8OvgSBjg2BgcYGQIcBAY5CBg0Av//HAM///4MYgNBEIMOCoUMDoUAnBwGkEA"));
//}
function getCloud() {
return require("heatshrink").decompress(atob("kEggIfcj+AAYM/8ADBuFwAYPAmADCCAMBwEf8ADBhFwg4aBnEPAYMYjAVBhgDDDoQDHCYc4jwDB+EP///FYIDBMTgA=="));
}
function getSnow() {
return require("heatshrink").decompress(atob("kEggITQj/AAYM98ADBsEwAYPAjADCj+AgOAj/gAYMIuEHwEAjEPAYQVChk4AYQhCAYcYBYQTDnEPgEB+EH///IAQACE4IAB8EICIPghwDB4EeBYNAjgDBg8EAYQYCg4bCgZuFA=="));
}
function getRain() {
return require("heatshrink").decompress(atob("kEggIPMh+AAYM/8ADBuFwAYPgmADB4EbAYOAj/ggOAhnwg4aBnAeCjEcCIMMjADCDoQDHjAPCnAXCuEP///8EDAYJECAAXBwkAgPDhwDBwUMgEEhkggEOjFgFgMQLYQAOA=="));
}
function getStorm() {
return require("heatshrink").decompress(atob("kcjwIROgfwAYMB44ICsEwAYMYgYQCgAICoEHCwMYgFDwEHCYfgEAMA4AIBmAXCgUGFIVAwADBhEQFIQtCGwNggPgjAVBngCBv8Oj+AgfjwYpCGAIABn4kBgOBBAVwjBHBD4IdBgYNBGwUAkCdbA="));
}
// err icon - https://icons8.com/icons/set/error
function getErr() {
return require("heatshrink").decompress(atob("kEggILIgOAAYsD4ADBg/gAYMGsADBhkwAYsYjADCjgDBmEMAYNxxwDBsOGAYPBwYDEgOBwOAgYDB4EDHYPAgwDBsADDhgDBFIcwjAHBjE4AYMcmADBhhNCKIcG/4AGOw4A=="));
}
//function getDummy() {
// return require("heatshrink").decompress(atob("gMBwMAwA"));
//}




/**
Choose weather icon to display based on condition.
Based on function from the Bangle weather app so it should handle all of the conditions
sent from gadget bridge.
*/
function chooseIcon(condition) {
condition = condition.toLowerCase();
if (condition.includes("thunderstorm") ||
condition.includes("squalls") ||
condition.includes("tornado")) return getStorm;
else if (condition.includes("freezing") || condition.includes("snow") ||
condition.includes("sleet")) {
return getSnow;
}
else if (condition.includes("drizzle") ||
condition.includes("shower") ||
condition.includes("rain")) return getRain;
else if (condition.includes("clear")) return getSun;
else if (condition.includes("clouds")) return getCloud;
else if (condition.includes("few clouds") ||
condition.includes("scattered clouds") ||
condition.includes("mist") ||
condition.includes("smoke") ||
condition.includes("haze") ||
condition.includes("sand") ||
condition.includes("dust") ||
condition.includes("fog") ||
condition.includes("overcast") ||
condition.includes("partly cloudy") ||
condition.includes("ash")) {
return getPartSun;
} else return getErr;
}
/*function condenseWeather(condition) {
condition = condition.toLowerCase();
if (condition.includes("thunderstorm") ||
condition.includes("squalls") ||
condition.includes("tornado")) return "storm";
if (condition.includes("freezing") || condition.includes("snow") ||
condition.includes("sleet")) {
return "snow";
}
if (condition.includes("drizzle") ||
condition.includes("shower") ||
condition.includes("rain")) return "rain";
if (condition.includes("clear")) return "clear";
if (condition.includes("clouds")) return "clouds";
if (condition.includes("few clouds") ||
condition.includes("scattered clouds") ||
condition.includes("mist") ||
condition.includes("smoke") ||
condition.includes("haze") ||
condition.includes("sand") ||
condition.includes("dust") ||
condition.includes("fog") ||
condition.includes("overcast") ||
condition.includes("partly cloudy") ||
condition.includes("ash")) {
return "scattered";
} else { return "N/A"; }
return "N/A";
}
*/
// copied from: https://gist.github.com/IamSilviu/5899269#gistcomment-3035480
function ISO8601_week_no(date) {
var tdt = new Date(date.valueOf());
var dayn = (date.getDay() + 6) % 7;
tdt.setDate(tdt.getDate() - dayn + 3);
var firstThursday = tdt.valueOf();
tdt.setMonth(0, 1);
if (tdt.getDay() !== 4) {
tdt.setMonth(0, 1 + ((4 - tdt.getDay()) + 7) % 7);
}
return 1 + Math.ceil((firstThursday - tdt) / 604800000);
}

function format(value) {
return ("0" + value).substr(-2);
}

const ClockFace = require("ClockFace");
const clock = new ClockFace({
init: function () {
const appRect = Bangle.appRect;

this.viewport = {
width: appRect.w,
height: appRect.h
};

this.center = {
x: this.viewport.width / 2,
y: Math.round((this.viewport.height / 2) + appRect.y)
};

this.scale = g.getWidth() / this.viewport.width;
this.centerTimeScaleX = this.center.x + 32 * this.scale;
this.centerDatesScaleX = this.center.x + 40 * this.scale;
},
draw: function (date) {
const hour = date.getHours() - (this.is12Hour && date.getHours() > 12 ? 12 : 0);
const month = date.getMonth() + 1;
// const monthName = require("date_utils").month(month, 1);
// const dayName = require("date_utils").dow(date.getDay(), 1);
let steps = Bangle.getHealthStatus("day").steps;
let curr = (w.get() === undefined ? "no data" : w.get()); // Get weather from weather app.
//let cWea =(curr === "no data" ? "no data" : curr.txt);
let cTemp= (curr === "no data" ? 273 : curr.temp);
// const temp = locale.temp(curr.temp - 273.15).match(/^(\D*\d*)(.*)$/);
let w_icon = chooseIcon(curr.txt === undefined ? "no data" : curr.txt );
//let w_icon = chooseIcon(curr.txt);

g.setFontAlign(1, 0).setFont("Vector", 90 * this.scale);
g.drawString(format(hour), this.centerTimeScaleX, this.center.y - 31 * this.scale);
g.drawString(format(date.getMinutes()), this.centerTimeScaleX, this.center.y + 46 * this.scale);

g.fillRect(this.center.x + 30 * this.scale, this.center.y - 72 * this.scale, this.center.x + 32 * this.scale, this.center.y + 74 * this.scale);

g.setFontAlign(-1, 0).setFont("Vector", 16 * this.scale);
g.drawString(format(date.getDate()), this.centerDatesScaleX, this.center.y - 62 * this.scale); //26
g.drawString("." + format(month) + ".", this.centerDatesScaleX + 20, this.center.y - 62 * this.scale); //44
g.drawString(date.getFullYear(date), this.centerDatesScaleX, this.center.y - 44 * this.scale); //62
if (this.showWeekNum)
g.drawString("CW" + format(ISO8601_week_no(date)), this.centerDatesScaleX, this.center.y + -26 * this.scale); //15
// print(w_icon());
if (this.showWeather) {
g.drawImage(w_icon(), this.centerDatesScaleX, this.center.y - 8 * this.scale);
// g.drawString(condenseWeather(curr.txt), this.centerDatesScaleX, this.center.y + 24 * this.scale);
g.drawString((cTemp === undefined ? 273 : cTemp ) - 273 + "°C", this.centerDatesScaleX, this.center.y + 44 * this.scale); //48

}
if (this.showSteps)
g.drawString(steps, this.centerDatesScaleX, this.center.y + 66 * this.scale);

},
settingsFile: "ffcniftyapp.json"
});
clock.start();
Binary file added apps/ffcniftyapp/app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 20 additions & 0 deletions apps/ffcniftyapp/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"id": "ffcniftyapp",
"name": "Nifty-A Clock ++",
"version": "0.01",
"description": "A nifty clock with time and date and more",
"dependencies": {"weather":"app"},
"icon": "app.png",
"screenshots": [{"url":"screenshot_niftyapp.png"}],
"type": "clock",
"tags": "clock",
"supports": ["BANGLEJS","BANGLEJS2"],
"readme": "README.md",
"allow_emulator": true,
"storage": [
{"name":"ffcniftyapp.app.js","url":"app.js"},
{"name":"ffcniftyapp.img","url":"app-icon.js","evaluate":true},
{"name":"ffcniftyapp.settings.js","url":"settings.js"}
],
"data": [{"name":"ffcniftyapp.json"}]
}
Binary file added apps/ffcniftyapp/screenshot_niftyapp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added apps/ffcniftyapp/screenshot_settings_niftyapp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
35 changes: 35 additions & 0 deletions apps/ffcniftyapp/settings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

(function (back) {
var DEFAULTS = {
'showWeekNum': false,
'showWeather': false,
'showSteps': false,
};
let settings = require('Storage').readJSON("ffcniftyapp.json", 1) || DEFAULTS;
E.showMenu({

"": { "title": "Nifty-A Clock ++" },
"< Back": () => back(),
/*LANG*/"Show Week Number": {
value: settings.showWeekNum,
onchange: v => {
settings.showWeekNum = v;
require("Storage").writeJSON("ffcniftyapp.json", settings);
}
},
/*LANG*/"Show Weather": {
value: settings.showWeather,
onchange: w => {
settings.showWeather = w;
require("Storage").writeJSON("ffcniftyapp.json", settings);
}
},
/*LANG*/"Show Steps": {
value: settings.showSteps,
onchange: z => {
settings.showSteps = z;
require("Storage").writeJSON("ffcniftyapp.json", settings);
}
}
});
})
1 change: 1 addition & 0 deletions apps/slpquiet/ChangeLog
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
0.01: New App!
0.02: added check if settings file exists and create if missing
6 changes: 6 additions & 0 deletions apps/slpquiet/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,9 @@ It reuses the widget from [Quiet Mode Schedule and Widget](https://github.com/es
-optimization of code (and check if needed)

-feedback is always welcome

#### Attributions
The app icon is downloaded from [https://icons8.com](https://icons8.com).

#### License
[MIT License](LICENSE)
11 changes: 11 additions & 0 deletions apps/slpquiet/app.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
const SETTINGS_FILE = "quietSwitch.json";
const storage = require("Storage");

//check if settings file exists and create if missing
if (storage.read(SETTINGS_FILE)=== undefined) {
print("data file not existing, using defaults");
let saved = {
quietWhenSleep: 0, //off
quietMode: 1, //alerts
};
storage.writeJSON(SETTINGS_FILE,saved);
}

let saved = storage.readJSON(SETTINGS_FILE, 1) || {};

// Main menu
Expand Down
2 changes: 1 addition & 1 deletion apps/slpquiet/metadata.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{ "id": "slpquiet",
"name": "Sleep Quiet (activate quiet mode when asleep)",
"shortName":"Sleep Quiet",
"version":"0.01",
"version":"0.02",
"description": "Set Quiet mode (or alarms only mode), when the sleep tracking app detects sleep (each 10 min evaluated)",
"icon": "app.png",
"tags": "tool,widget",
Expand Down
6 changes: 6 additions & 0 deletions apps/thmswtch/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,9 @@ The app functionality is inspired by the [Quiet Mode Schedule and Widget](https:
-transfer of configuration into settings, so app can be used as a shortcut to switch theme.

-feedback is always welcome

#### Attributions
The app icon is downloaded from [https://icons8.com](https://icons8.com).

#### License
[MIT License](LICENSE)

0 comments on commit f19f0d3

Please sign in to comment.