Skip to content

Commit 399aa87

Browse files
committed
schedclock: use dow correctly; fix dowToBitmask; various cleanup
1 parent 6e4ce39 commit 399aa87

File tree

1 file changed

+23
-41
lines changed

1 file changed

+23
-41
lines changed

apps/schedclock/settings.js

Lines changed: 23 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
(function(back) {
22
/**
3-
* @typedef ScheduleItemType - Individual Schedule Item
4-
* @member {number} hour - Hour (0-23)
5-
* @member {number} minute - Minute (0-59)
6-
* @member {string} face - Clock face source file (e.g. "myclock.js")
7-
* @member {number} dow - Bitmask for days of week [see Sched documentation]
3+
* @typedef {Object} ScheduleItemType - Individual Schedule Item
4+
* @property {number} hour - Hour (0-23)
5+
* @property {number} minute - Minute (0-59)
6+
* @property {string} face - Clock face source file (e.g. "myclock.js")
7+
* @property {number} dow - Bitmask for days of week [see Sched documentation]
88
*
9-
* @typedef SettingsType - Overall Settings File/Object
10-
* @member {boolean} enabled - Whether this app is enabled
11-
* @member {Array<ScheduleItemType>} sched - Array of schedule items
12-
*
9+
* @typedef {Object} SettingsType - Overall Settings File/Object
10+
* @property {boolean} enabled - Whether this app is enabled
11+
* @property {Array<ScheduleItemType>} sched - Array of schedule items
1312
*/
1413

1514
const SETTINGS_FILE = "schedclock.settings.json";
@@ -22,22 +21,15 @@
2221
const IND_WORKDAYS = 8;
2322
const IND_WEEKEND = 9;
2423

25-
const daysOfWeek = (function() {
26-
const firstDayOfWeek = (require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0;
27-
const daysOfWeek = require("date_utils").dows(1);
28-
if (!firstDayOfWeek) {
29-
// Move Sunday from end to start of week
30-
daysOfWeek.unshift(daysOfWeek.splice(-1, 1)[0]);
31-
}
32-
return daysOfWeek.concat([/*LANG*/"Every Day", /*LANG*/"Weekdays", /*LANG*/"Weekends"]);
33-
})();
24+
// dows(0) = days of week starting at Sunday
25+
const daysOfWeek = require("date_utils").dows(0).concat([/*LANG*/"Every Day", /*LANG*/"Weekdays", /*LANG*/"Weekends"]);
3426

3527
/**
3628
* Function to load settings
3729
* @returns {SettingsType} settings object
3830
*/
3931
const loadSettings = function() {
40-
let settings = require("Storage").readJSON(SETTINGS_FILE, 1) || {};
32+
const settings = require("Storage").readJSON(SETTINGS_FILE, 1) || {};
4133
settings.enabled = !!settings.enabled;
4234
if (!Array.isArray(settings.sched)) settings.sched = [];
4335

@@ -54,10 +46,7 @@
5446
*/
5547
const saveSettings = function(settings) {
5648
require("Storage").writeJSON(SETTINGS_FILE, settings);
57-
// After saving, tell the library to sync the alarms
58-
if (require("Storage").read("schedclock.lib.js")) {
59-
require("schedclock.lib.js").syncAlarms();
60-
}
49+
require("schedclock.lib.js").syncAlarms();
6150
};
6251

6352
/**
@@ -106,7 +95,7 @@
10695
// Add existing schedule items to the menu
10796
settings.sched.forEach((item, index) => {
10897
const faceName = (clockFaces.find(f => f.src === item.face) || {name: /*LANG*/"Unknown"}).name;
109-
const dow = binaryToDow(item.dow);
98+
const dow = bitmaskToDowIndex(item.dow);
11099
const dayName = daysOfWeek[dow === undefined ? IND_EVERY_DAY : dow];
111100
const timeStr = require("locale").time(new Date(1999, 1, 1, item.hour, item.minute, 0),1)
112101
menu[`${dayName} ${timeStr} - ${faceName}`] = () => editScheduleItem(index);
@@ -122,13 +111,13 @@
122111
* @param {number} index index in daysOfWeek
123112
* @returns bitmask for day of week
124113
*/
125-
const dowToBinary = function(index) {
114+
const dowIndexToBitmask = function(index) {
126115
switch(index) {
127116
case IND_EVERY_DAY: return BIN_EVERY_DAY;
128117
case IND_WORKDAYS: return BIN_WORKDAYS;
129118
case IND_WEEKEND: return BIN_WEEKEND;
130119
default:
131-
return 1 << (index + 1); // Single day (0=Sun, 1=Mon, ..., 6=Sat)
120+
return 1 << index; // Bitmask: Sun=1, Mon=2, Tue=4, Wed=8, Thu=16, Fri=32, Sat=64
132121
}
133122
};
134123

@@ -137,21 +126,20 @@
137126
* @param {number} b binary number for day of week
138127
* @returns index in daysOfWeek
139128
*/
140-
const binaryToDow = function(b) {
129+
const bitmaskToDowIndex = function(b) {
141130
switch(b) {
142-
case BIN_EVERY_DAY: return IND_EVERY_DAY;
143-
case BIN_WORKDAYS: return IND_WORKDAYS;
144-
case BIN_WEEKEND: return IND_WEEKEND;
145131
case 1: return 0;
146132
case 2: return 1;
147133
case 4: return 2;
148134
case 8: return 3;
149135
case 16: return 4;
150136
case 32: return 5;
151137
case 64: return 6;
138+
case BIN_WORKDAYS: return IND_WORKDAYS;
139+
case BIN_WEEKEND: return IND_WEEKEND;
140+
case BIN_EVERY_DAY:
141+
default: return IND_EVERY_DAY;
152142
}
153-
// Bitmask was something we don't handle yet, default to everyday for now
154-
return IND_EVERY_DAY;
155143
};
156144

157145
/**
@@ -171,7 +159,7 @@
171159
// Default odd items to "Every Day"
172160
if (currentItem.dow === undefined) currentItem.dow = BIN_EVERY_DAY;
173161

174-
let dow = binaryToDow(currentItem.dow);
162+
let dow = bitmaskToDowIndex(currentItem.dow);
175163

176164
const menu = {
177165
"": { "title": isNew ? /*LANG*/"Add Schedule" : /*LANG*/"Edit Schedule" },
@@ -182,7 +170,7 @@
182170
max: daysOfWeek.length - 1,
183171
format: v => daysOfWeek[v],
184172
onchange: v => {
185-
currentItem.dow = dowToBinary(v);
173+
currentItem.dow = dowIndexToBitmask(v);
186174
},
187175
},
188176
/*LANG*/"Hour": {
@@ -192,13 +180,7 @@
192180
format: v => {
193181
// Format as 12h time if user has that set
194182
const meridean = require("locale").meridian(new Date(1999, 1, 1, v, 0, 0),1);
195-
if (meridean) {
196-
return (v>12)
197-
? v-12 + meridean
198-
: ((v===0)?12:v) + meridean;
199-
} else {
200-
return v;
201-
}
183+
return (!meridean) ? v : (v%12||12) + meridean;
202184
},
203185
onchange: v => { currentItem.hour = v; }
204186
},

0 commit comments

Comments
 (0)