diff --git a/main.go b/main.go index cb3afd6..8671727 100644 --- a/main.go +++ b/main.go @@ -271,13 +271,14 @@ func nodeUpdate(w http.ResponseWriter, r *http.Request, sess *session.T) { // {{ Content string CryptoKeyID int Markdown bool + TimeOffset int }{} if err = parseRequest(r, &req); err != nil { responseError(w, err) return } - err = UpdateNode(sess.UserID, req.NodeID, req.Content, req.CryptoKeyID, req.Markdown) + err = UpdateNode(sess.UserID, req.NodeID, req.TimeOffset, req.Content, req.CryptoKeyID, req.Markdown) if err != nil { responseError(w, err) return diff --git a/node.go b/node.go index 1868122..38d2b0a 100644 --- a/node.go +++ b/node.go @@ -323,9 +323,9 @@ func CreateNode(userID, parentID int, name string) (node Node, err error) { // { node.Crumbs, err = NodeCrumbs(node.ID) return } // }}} -func UpdateNode(userID, nodeID int, content string, cryptoKeyID int, markdown bool) (err error) { // {{{ +func UpdateNode(userID, nodeID, timeOffset int, content string, cryptoKeyID int, markdown bool) (err error) { // {{{ var scannedSchedules, dbSchedules, add, remove []Schedule - scannedSchedules = ScanForSchedules(content) + scannedSchedules = ScanForSchedules(timeOffset, content) for i := range scannedSchedules { scannedSchedules[i].Node.ID = nodeID scannedSchedules[i].UserID = userID diff --git a/schedule.go b/schedule.go index 8b0f9b6..a09c41a 100644 --- a/schedule.go +++ b/schedule.go @@ -26,7 +26,7 @@ type Schedule struct { Acknowledged bool } -func ScanForSchedules(content string) (schedules []Schedule) {// {{{ +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*\}`) @@ -38,7 +38,18 @@ func ScanForSchedules(content string) (schedules []Schedule) {// {{{ data[1] = data[1] + ":00" } - timestamp, err := time.Parse("2006-01-02 15:04:05", data[1]) + var timeTZ string + if timeOffset < 0 { + hours := (-timeOffset) / 60 + mins := (-timeOffset) % 60 + timeTZ = fmt.Sprintf("%s -%02d%02d", data[1], hours, mins) + } else { + hours := timeOffset / 60 + mins := timeOffset % 60 + timeTZ = fmt.Sprintf("%s +%02d%02d", data[1], hours, mins) + } + + timestamp, err := time.Parse("2006-01-02 15:04:05 -0700", timeTZ) if err != nil { continue } @@ -62,7 +73,7 @@ func RetrieveSchedules(userID int, nodeID int) (schedules []Schedule, err error) user_id, json_build_object('id', node_id) AS node, schedule_uuid, - time::timestamptz, + time, description, acknowledged FROM schedule diff --git a/sql/00018.sql b/sql/00018.sql new file mode 100644 index 0000000..261a5b8 --- /dev/null +++ b/sql/00018.sql @@ -0,0 +1,2 @@ +ALTER TABLE public.schedule ALTER COLUMN "time" TYPE timestamptz USING "time"::timestamptz; + diff --git a/static/js/node.mjs b/static/js/node.mjs index 5d0992a..2f661ed 100644 --- a/static/js/node.mjs +++ b/static/js/node.mjs @@ -485,6 +485,7 @@ export class Node { Content: this._content, CryptoKeyID: this.CryptoKeyID, Markdown: this.Markdown, + TimeOffset: -(new Date().getTimezoneOffset()), } this.app.request('/node/update', req) .then(callback)