Implemented reminder

This commit is contained in:
Magnus Åhall 2024-03-30 17:43:21 +01:00
parent d89d63803f
commit c352176417
3 changed files with 48 additions and 27 deletions

View File

@ -44,6 +44,8 @@ func (ntfy NTFY) Send(uuid string, msg []byte) (err error) {
ackURL := fmt.Sprintf("http, OK, %s/notification/ack?uuid=%s", ntfy.AcknowledgeURL, uuid)
req.Header.Add("X-Actions", ackURL)
req.Header.Add("X-Priority", "5")
req.Header.Add("X-Tags", "calendar")
res, err = http.DefaultClient.Do(req)
if err != nil {

View File

@ -8,6 +8,7 @@ import (
"encoding/json"
"fmt"
"regexp"
"strconv"
"strings"
"time"
)
@ -22,6 +23,7 @@ type Schedule struct {
Node Node
ScheduleUUID string `db:"schedule_uuid"`
Time time.Time
RemindMinutes int `db:"remind_minutes"`
Description string
Acknowledged bool
}
@ -29,7 +31,7 @@ type Schedule struct {
func ScanForSchedules(timeOffset int, content string) (schedules []Schedule) { // {{{
schedules = []Schedule{}
rxp := regexp.MustCompile(`\{\s*([0-9]{4}-[0-9]{2}-[0-9]{2}\s+[0-9]{2}:[0-9]{2}(?::[0-9]{2})?)\s*\,\s*([^\]]+?)\s*\}`)
rxp := regexp.MustCompile(`\{\s*([0-9]{4}-[0-9]{2}-[0-9]{2}\s+[0-9]{2}:[0-9]{2}(?::[0-9]{2})?)\s*\,\s*(?:(\d+)\s*(h|min)\s*,)?\s*([^\]]+?)\s*\}`)
foundSchedules := rxp.FindAllStringSubmatch(content, -1)
for _, data := range foundSchedules {
@ -38,6 +40,7 @@ func ScanForSchedules(timeOffset int, content string) (schedules []Schedule) {//
data[1] = data[1] + ":00"
}
// Timezone calculations
var timeTZ string
if timeOffset < 0 {
hours := (-timeOffset) / 60
@ -54,9 +57,23 @@ func ScanForSchedules(timeOffset int, content string) (schedules []Schedule) {//
continue
}
// Reminder
var remindMinutes int
if data[2] != "" && data[3] != "" {
value, _ := strconv.Atoi(data[2])
unit := strings.ToLower(data[3])
switch unit {
case "min":
remindMinutes = value
case "h":
remindMinutes = value * 60
}
}
schedule := Schedule{
Time: timestamp,
Description: data[2],
RemindMinutes: remindMinutes,
Description: data[4],
}
schedules = append(schedules, schedule)
}
@ -73,7 +90,7 @@ func RetrieveSchedules(userID int, nodeID int) (schedules []Schedule, err error)
user_id,
json_build_object('id', node_id) AS node,
schedule_uuid,
time,
time - MAKE_INTERVAL(mins => remind_minutes) AS time,
description,
acknowledged
FROM schedule
@ -110,13 +127,14 @@ func (a Schedule) IsEqual(b Schedule) bool {// {{{
} // }}}
func (s *Schedule) Insert(queryable Queryable) error { // {{{
res := queryable.QueryRow(`
INSERT INTO schedule(user_id, node_id, time, description)
VALUES($1, $2, $3, $4)
INSERT INTO schedule(user_id, node_id, time, remind_minutes, description)
VALUES($1, $2, $3, $4, $5)
RETURNING id
`,
s.UserID,
s.Node.ID,
s.Time,
s.RemindMinutes,
s.Description,
)
@ -144,11 +162,11 @@ func ExpiredSchedules() (schedules []Schedule) {// {{{
user_id,
node_id,
schedule_uuid,
time,
time - MAKE_INTERVAL(mins => remind_minutes) AS time,
description
FROM schedule
WHERE
time < NOW() AND
(time - MAKE_INTERVAL(mins => remind_minutes)) < NOW() AND
NOT acknowledged
ORDER BY
time ASC

1
sql/00019.sql Normal file
View File

@ -0,0 +1 @@
ALTER TABLE public.schedule ADD COLUMN remind_minutes int NOT NULL DEFAULT 0;