New route to delete the next alarm

This commit is contained in:
nemunaire 2022-12-08 16:43:56 +01:00
parent 4e0450faca
commit fa13484718
4 changed files with 78 additions and 1 deletions

View File

@ -22,6 +22,16 @@ func declareAlarmsRoutes(cfg *config.Config, db *reveil.LevelDBStorage, resetTim
c.JSON(http.StatusOK, alarm)
})
router.DELETE("/alarms/next", func(c *gin.Context) {
err := reveil.DropNextAlarm(cfg, db)
if err != nil {
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": err.Error()})
return
}
c.JSON(http.StatusOK, true)
})
router.GET("/alarms/single", func(c *gin.Context) {
alarms, err := reveil.GetAlarmsSingle(db)
if err != nil {

View File

@ -69,6 +69,45 @@ func GetNextAlarm(cfg *config.Config, db *LevelDBStorage) (*time.Time, error) {
return closestAlarm, nil
}
func DropNextAlarm(cfg *config.Config, db *LevelDBStorage) error {
timenext, err := GetNextAlarm(cfg, db)
if err != nil {
return err
}
alarmsRepeated, err := GetAlarmsRepeated(db)
if err != nil {
return err
}
for _, alarm := range alarmsRepeated {
next := alarm.GetNextOccurence(cfg, db)
if next != nil && *next == *timenext {
start := Date(*next)
stop := Date((*next).Add(time.Second))
return PutAlarmException(db, &AlarmException{
Start: &start,
End: &stop,
Comment: fmt.Sprintf("Automatic exception to cancel recurrent alarm %s", next.Format("Mon at 15:05")),
})
}
}
alarmsSingle, err := GetAlarmsSingle(db)
if err != nil {
return err
}
for _, alarm := range alarmsSingle {
if alarm.Time == *timenext {
return DeleteAlarmSingle(db, alarm)
}
}
return fmt.Errorf("Unable to find the next alarm")
}
type Exceptions []time.Time
func (e Exceptions) Len() int {

View File

@ -33,6 +33,18 @@ export async function alarmNextTrack() {
}
}
export async function deleteNextAlarm() {
const res = await fetch('api/alarms/next', {
method: 'DELETE',
headers: {'Accept': 'application/json'},
});
if (res.status == 200) {
return await res.json();
} else {
throw new Error((await res.json()).errmsg);
}
}
export async function alarmStop() {
const res = await fetch('api/alarm', {
method: 'DELETE',

View File

@ -7,8 +7,9 @@
import CycleCounter from '$lib/components/CycleCounter.svelte';
import DateFormat from '$lib/components/DateFormat.svelte';
import { isAlarmActive, alarmNextTrack, runAlarm, alarmStop } from '$lib/alarm';
import { isAlarmActive, alarmNextTrack, runAlarm, alarmStop, deleteNextAlarm } from '$lib/alarm';
import { getNextAlarm, newNCyclesAlarm } from '$lib/alarmsingle';
import { alarmsExceptions } from '$lib/stores/alarmexceptions';
import { alarmsSingle } from '$lib/stores/alarmsingle';
import { quotes } from '$lib/stores/quotes';
@ -43,6 +44,14 @@
})
}
function dropNextAlarm() {
deleteNextAlarm().then(() => {
alarmsExceptions.clear();
alarmsSingle.clear();
reloadNextAlarm();
});
}
let extinctionInProgress = false;
</script>
@ -90,6 +99,13 @@
{:else}
<DateFormat date={nextalarm} dateStyle="short" timeStyle="long" />
{/if}
<button
class="btn btn-lg btn-link"
title="Supprimer ce prochain réveil"
on:click={dropNextAlarm}
>
<Icon name="x-circle-fill" />
</button>
{/if}
{/await}
</div>