2022-03-31 14:32:26 +00:00
// Return an array of all alarms
exports . getAlarms = function ( ) {
2022-04-04 14:49:45 +00:00
return require ( "Storage" ) . readJSON ( "sched.json" , 1 ) || [ ] ;
2022-03-31 14:32:26 +00:00
} ;
2022-04-04 15:58:17 +00:00
// Write a list of alarms back to storage
exports . setAlarms = function ( alarms ) {
return require ( "Storage" ) . writeJSON ( "sched.json" , alarms ) ;
} ;
2022-03-31 14:32:26 +00:00
// Return an alarm object based on ID
exports . getAlarm = function ( id ) {
2022-04-04 15:58:17 +00:00
return exports . getAlarms ( ) . find ( a => a . id == id ) ;
2022-03-31 14:32:26 +00:00
} ;
2022-04-04 15:58:17 +00:00
// Given a list of alarms from getAlarms, return a list of active alarms for the given time (or current time if time not specified)
exports . getActiveAlarms = function ( alarms , time ) {
if ( ! time ) time = new Date ( ) ;
var currentTime = ( time . getHours ( ) * 3600000 ) + ( time . getMinutes ( ) * 60000 ) + ( time . getSeconds ( ) * 1000 )
+ 10000 ; // get current time - 10s in future to ensure we alarm if we've started the app a tad early
return alarms . filter ( a => a . on && ( a . t < currentTime ) && ( a . last != time . getDate ( ) ) && ( ! a . date || a . date == time . toISOString ( ) . substr ( 0 , 10 ) ) ) . sort ( ( a , b ) => a . t - b . t ) ;
}
2022-03-31 14:32:26 +00:00
// Set an alarm object based on ID. Leave 'alarm' undefined to remove it
exports . setAlarm = function ( id , alarm ) {
2022-04-04 15:58:17 +00:00
var alarms = exports . getAlarms ( ) . filter ( a => a . id != id ) ;
2022-03-31 14:32:26 +00:00
if ( alarm !== undefined ) {
alarm . id = id ;
if ( alarm . dow === undefined ) alarm . dow = 0b1111111 ;
if ( alarm . on !== false ) alarm . on = true ;
if ( alarm . timer ) { // if it's a timer, set the start time as a time from *now*
var time = new Date ( ) ;
var currentTime = ( time . getHours ( ) * 3600000 ) + ( time . getMinutes ( ) * 60000 ) + ( time . getSeconds ( ) * 1000 ) ;
alarm . t = currentTime + alarm . timer ;
}
2022-04-05 09:59:13 +00:00
alarms . push ( alarm ) ;
2022-03-31 14:32:26 +00:00
}
2022-04-04 15:58:17 +00:00
exports . setAlarms ( alarms ) ;
2022-03-31 14:32:26 +00:00
} ;
2022-04-07 17:47:45 +00:00
/// Get time until the given alarm (object). Return undefined if alarm not enabled, or if 86400000 or more, alarm could be *more* than a day in the future
2022-03-31 14:32:26 +00:00
exports . getTimeToAlarm = function ( alarm , time ) {
if ( ! alarm ) return undefined ;
if ( ! time ) time = new Date ( ) ;
var currentTime = ( time . getHours ( ) * 3600000 ) + ( time . getMinutes ( ) * 60000 ) + ( time . getSeconds ( ) * 1000 ) ;
2022-04-08 19:24:24 +00:00
var active = alarm . on && ( alarm . dow >> ( time . getDay ( ) + ( alarm . t < currentTime ) ) ) & 1 && ( ! alarm . date || alarm . date == time . toISOString ( ) . substr ( 0 , 10 ) ) ;
if ( ! active ) return undefined ;
2022-03-31 14:32:26 +00:00
var t = alarm . t - currentTime ;
if ( alarm . last == time . getDate ( ) || t < - 60000 ) t += 86400000 ;
return t ;
} ;
/// Force a reload of the current alarms and widget
exports . reload = function ( ) {
2022-04-04 14:49:45 +00:00
eval ( require ( "Storage" ) . read ( "sched.boot.js" ) ) ;
2022-03-31 14:32:26 +00:00
if ( WIDGETS [ "alarm" ] ) {
WIDGETS [ "alarm" ] . reload ( ) ;
Bangle . drawWidgets ( ) ;
}
} ;