From 51a52fcb8ef78abe5412242054acf0d66b8d98ac Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 15 Dec 2022 18:40:09 +0100 Subject: [PATCH 1/3] Fix alarm update in db --- model/alarm.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/model/alarm.go b/model/alarm.go index 1453b9d..fd82b99 100644 --- a/model/alarm.go +++ b/model/alarm.go @@ -239,16 +239,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 +296,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 +368,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) } From 45efc3601e76333b29375a6e9aedff1d8475fb73 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 15 Dec 2022 18:40:50 +0100 Subject: [PATCH 2/3] Can update exception ignore field --- ui/src/lib/alarmrepeated.js | 6 ++++-- ui/src/routes/alarms/[kind]/[aid]/+page.svelte | 8 +++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ui/src/lib/alarmrepeated.js b/ui/src/lib/alarmrepeated.js index 27002fe..5b841aa 100644 --- a/ui/src/lib/alarmrepeated.js +++ b/ui/src/lib/alarmrepeated.js @@ -12,8 +12,10 @@ export class AlarmRepeated { this.routines = routines == null ? [] : routines; this.ignore_exceptions = ignore_exceptions; this.comment = comment; - this.excepts = excepts; - this.next_time = next_time; + 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/routes/alarms/[kind]/[aid]/+page.svelte b/ui/src/routes/alarms/[kind]/[aid]/+page.svelte index 7448f2a..e767f30 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,13 @@ Heure du réveil {alarm.time} - - Ignorer les exceptions ? {alarm.ignore_exceptions?"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} From 5526940e6143f984261caeaf580a9146c9fd6d64 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Thu, 15 Dec 2022 18:45:20 +0100 Subject: [PATCH 3/3] New field to disable a repeated alarm --- model/alarm.go | 5 +++++ ui/src/lib/alarmrepeated.js | 3 ++- ui/src/lib/components/AlarmRepeatedList.svelte | 2 ++ ui/src/routes/alarms/[kind]/[aid]/+page.svelte | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/model/alarm.go b/model/alarm.go index fd82b99..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) } diff --git a/ui/src/lib/alarmrepeated.js b/ui/src/lib/alarmrepeated.js index 5b841aa..fa16855 100644 --- a/ui/src/lib/alarmrepeated.js +++ b/ui/src/lib/alarmrepeated.js @@ -5,13 +5,14 @@ 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.disabled = disabled == true; if (excepts !== undefined) this.excepts = excepts; if (next_time !== undefined) 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 e767f30..fb73c63 100644 --- a/ui/src/routes/alarms/[kind]/[aid]/+page.svelte +++ b/ui/src/routes/alarms/[kind]/[aid]/+page.svelte @@ -118,6 +118,10 @@ Heure du réveil {alarm.time} + + 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"}