|
1 | 1 | (function(back) { |
2 | 2 | /** |
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] |
8 | 8 | * |
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 |
13 | 12 | */ |
14 | 13 |
|
15 | 14 | const SETTINGS_FILE = "schedclock.settings.json"; |
|
22 | 21 | const IND_WORKDAYS = 8; |
23 | 22 | const IND_WEEKEND = 9; |
24 | 23 |
|
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"]); |
34 | 26 |
|
35 | 27 | /** |
36 | 28 | * Function to load settings |
37 | 29 | * @returns {SettingsType} settings object |
38 | 30 | */ |
39 | 31 | const loadSettings = function() { |
40 | | - let settings = require("Storage").readJSON(SETTINGS_FILE, 1) || {}; |
| 32 | + const settings = require("Storage").readJSON(SETTINGS_FILE, 1) || {}; |
41 | 33 | settings.enabled = !!settings.enabled; |
42 | 34 | if (!Array.isArray(settings.sched)) settings.sched = []; |
43 | 35 |
|
|
54 | 46 | */ |
55 | 47 | const saveSettings = function(settings) { |
56 | 48 | 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(); |
61 | 50 | }; |
62 | 51 |
|
63 | 52 | /** |
|
106 | 95 | // Add existing schedule items to the menu |
107 | 96 | settings.sched.forEach((item, index) => { |
108 | 97 | 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); |
110 | 99 | const dayName = daysOfWeek[dow === undefined ? IND_EVERY_DAY : dow]; |
111 | 100 | const timeStr = require("locale").time(new Date(1999, 1, 1, item.hour, item.minute, 0),1) |
112 | 101 | menu[`${dayName} ${timeStr} - ${faceName}`] = () => editScheduleItem(index); |
|
122 | 111 | * @param {number} index index in daysOfWeek |
123 | 112 | * @returns bitmask for day of week |
124 | 113 | */ |
125 | | - const dowToBinary = function(index) { |
| 114 | + const dowIndexToBitmask = function(index) { |
126 | 115 | switch(index) { |
127 | 116 | case IND_EVERY_DAY: return BIN_EVERY_DAY; |
128 | 117 | case IND_WORKDAYS: return BIN_WORKDAYS; |
129 | 118 | case IND_WEEKEND: return BIN_WEEKEND; |
130 | 119 | 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 |
132 | 121 | } |
133 | 122 | }; |
134 | 123 |
|
|
137 | 126 | * @param {number} b binary number for day of week |
138 | 127 | * @returns index in daysOfWeek |
139 | 128 | */ |
140 | | - const binaryToDow = function(b) { |
| 129 | + const bitmaskToDowIndex = function(b) { |
141 | 130 | 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; |
145 | 131 | case 1: return 0; |
146 | 132 | case 2: return 1; |
147 | 133 | case 4: return 2; |
148 | 134 | case 8: return 3; |
149 | 135 | case 16: return 4; |
150 | 136 | case 32: return 5; |
151 | 137 | 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; |
152 | 142 | } |
153 | | - // Bitmask was something we don't handle yet, default to everyday for now |
154 | | - return IND_EVERY_DAY; |
155 | 143 | }; |
156 | 144 |
|
157 | 145 | /** |
|
171 | 159 | // Default odd items to "Every Day" |
172 | 160 | if (currentItem.dow === undefined) currentItem.dow = BIN_EVERY_DAY; |
173 | 161 |
|
174 | | - let dow = binaryToDow(currentItem.dow); |
| 162 | + let dow = bitmaskToDowIndex(currentItem.dow); |
175 | 163 |
|
176 | 164 | const menu = { |
177 | 165 | "": { "title": isNew ? /*LANG*/"Add Schedule" : /*LANG*/"Edit Schedule" }, |
|
182 | 170 | max: daysOfWeek.length - 1, |
183 | 171 | format: v => daysOfWeek[v], |
184 | 172 | onchange: v => { |
185 | | - currentItem.dow = dowToBinary(v); |
| 173 | + currentItem.dow = dowIndexToBitmask(v); |
186 | 174 | }, |
187 | 175 | }, |
188 | 176 | /*LANG*/"Hour": { |
|
192 | 180 | format: v => { |
193 | 181 | // Format as 12h time if user has that set |
194 | 182 | 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; |
202 | 184 | }, |
203 | 185 | onchange: v => { currentItem.hour = v; } |
204 | 186 | }, |
|
0 commit comments