diff --git a/model/alarm.go b/model/alarm.go index 1453b9d..34f9d51 100644 --- a/model/alarm.go +++ b/model/alarm.go @@ -149,6 +149,7 @@ type AlarmRepeated struct { FollowingRoutines []Identifier `json:"routines"` IgnoreExceptions bool `json:"ignore_exceptions"` Comment string `json:"comment,omitempty"` + Disabled bool `json:"disabled,omitempty"` Excepts Exceptions `json:"excepts,omitempty"` NextTime *time.Time `json:"next_time,omitempty"` } @@ -185,6 +186,10 @@ func (a *AlarmRepeated) FillExcepts(cfg *config.Config, db *LevelDBStorage) erro } func (a *AlarmRepeated) GetNextOccurence(cfg *config.Config, db *LevelDBStorage) *time.Time { + if a.Disabled { + return nil + } + if len(a.Excepts) == 0 { a.FillExcepts(cfg, db) } @@ -239,16 +244,19 @@ func GetAlarmsRepeated(db *LevelDBStorage) (alarms []*AlarmRepeated, err error) func PutAlarmRepeated(db *LevelDBStorage, alarm *AlarmRepeated) (err error) { var key string - var id Identifier if alarm.Id.IsEmpty() { + var id Identifier + key, id, err = db.findBytesKey("alarm-repeated-", IDENTIFIER_LEN) if err != nil { return err } + alarm.Id = id + } else { + key = fmt.Sprintf("alarm-repeated-%s", alarm.Id.ToString()) } - alarm.Id = id // Don't store this, this is autocalculated alarm.Excepts = nil alarm.NextTime = nil @@ -293,17 +301,19 @@ func GetAlarmsSingle(db *LevelDBStorage) (alarms []*AlarmSingle, err error) { func PutAlarmSingle(db *LevelDBStorage, alarm *AlarmSingle) (err error) { var key string - var id Identifier if alarm.Id.IsEmpty() { + var id Identifier + key, id, err = db.findBytesKey("alarm-single-", IDENTIFIER_LEN) if err != nil { return err } + alarm.Id = id + } else { + key = fmt.Sprintf("alarm-single-%s", alarm.Id.ToString()) } - alarm.Id = id - return db.put(key, alarm) } @@ -363,17 +373,19 @@ func GetAlarmExceptions(db *LevelDBStorage) (alarms []*AlarmException, err error func PutAlarmException(db *LevelDBStorage, alarm *AlarmException) (err error) { var key string - var id Identifier if alarm.Id.IsEmpty() { + var id Identifier + key, id, err = db.findBytesKey("alarm-exception-", IDENTIFIER_LEN) if err != nil { return err } + alarm.Id = id + } else { + key = fmt.Sprintf("alarm-exception-%s", alarm.Id.ToString()) } - alarm.Id = id - return db.put(key, alarm) } diff --git a/ui/src/lib/alarmrepeated.js b/ui/src/lib/alarmrepeated.js index 27002fe..fa16855 100644 --- a/ui/src/lib/alarmrepeated.js +++ b/ui/src/lib/alarmrepeated.js @@ -5,15 +5,18 @@ export class AlarmRepeated { } } - update({ id, weekday, time, routines, ignore_exceptions, comment, excepts, next_time }) { + update({ id, weekday, time, routines, disabled, ignore_exceptions, comment, excepts, next_time }) { this.id = id; this.weekday = weekday; this.time = time; this.routines = routines == null ? [] : routines; this.ignore_exceptions = ignore_exceptions; this.comment = comment; - this.excepts = excepts; - this.next_time = next_time; + this.disabled = disabled == true; + if (excepts !== undefined) + this.excepts = excepts; + if (next_time !== undefined) + this.next_time = next_time; if (this.routines.length < 1) { this.routines.push(""); diff --git a/ui/src/lib/components/AlarmRepeatedList.svelte b/ui/src/lib/components/AlarmRepeatedList.svelte index a1c93cf..95e61c2 100644 --- a/ui/src/lib/components/AlarmRepeatedList.svelte +++ b/ui/src/lib/components/AlarmRepeatedList.svelte @@ -35,6 +35,8 @@ href="alarms/repeated/{alarm.id}" class="list-group-item list-group-item-action" class:active={$page.params.kind === "repeated" && $page.params.aid === alarm.id} + class:text-muted={alarm.disabled} + style:text-decoration={alarm.disabled?"line-through":null} > Les {weekdayStr(alarm.weekday)}s à {alarm.time} diff --git a/ui/src/routes/alarms/[kind]/[aid]/+page.svelte b/ui/src/routes/alarms/[kind]/[aid]/+page.svelte index 7448f2a..fb73c63 100644 --- a/ui/src/routes/alarms/[kind]/[aid]/+page.svelte +++ b/ui/src/routes/alarms/[kind]/[aid]/+page.svelte @@ -4,6 +4,7 @@ Col, Container, Icon, + Input, ListGroup, ListGroupItem, Row, @@ -117,12 +118,17 @@ Heure du réveil {alarm.time} - - Ignorer les exceptions ? {alarm.ignore_exceptions?"oui":"non"} + + Alarme active ? + {obj.disabled = !obj.disabled; obj.save().then(() => {obj.next_time = null; alarmsRepeated.refresh()});}} checked={!obj.disabled} /> {!obj.disabled?"oui":"non"} + + + Ignorer les exceptions ? + {obj.ignore_exceptions = !obj.ignore_exceptions; obj.save();}} checked={obj.ignore_exceptions} /> {obj.ignore_exceptions?"oui":"non"} {#if alarm.next_time} - Prochaine occurrence + Prochaine occurrence {/if}