From 7d2583b6f01d0d6e7052d1f022bcb942e9f45d09 Mon Sep 17 00:00:00 2001 From: itwrx Date: Sat, 17 May 2025 07:10:54 -0500 Subject: [PATCH] fix nim compiler warnings and clearAllReminders() after updating sendDate --- helpers/auth.nim | 2 +- helpers/reminder.nim | 16 +++++++++++++--- models/reminder.nim | 16 +++++++++++++++- post_handlers/reminder_post_handler.nim | 4 ++-- templates/main_template_top.nimf | 2 +- templates/reminder_create.nimf | 4 ++-- templates/reminder_update.nimf | 4 ++-- templates/reminders.nimf | 14 +++++++------- 8 files changed, 43 insertions(+), 19 deletions(-) diff --git a/helpers/auth.nim b/helpers/auth.nim index 2998fac..1610b19 100644 --- a/helpers/auth.nim +++ b/helpers/auth.nim @@ -3,7 +3,7 @@ This file is part of Simple Site Manager. Simple Site Manager is released under the GNU Affero General Public License 3.0. See COPYING or for details.]# -import std/[strutils, cgi, strtabs, cookies, sysrand, base64] +import std/[cgi, strtabs, cookies, sysrand, base64] import guildenstern/[httpserver], sqliteral import "../models/session", "db", "global" diff --git a/helpers/reminder.nim b/helpers/reminder.nim index 9849322..a4eaaa2 100644 --- a/helpers/reminder.nim +++ b/helpers/reminder.nim @@ -1,4 +1,4 @@ -import std/[times, osproc, strutils], smtp +import std/[times, osproc], smtp import ../models/reminder, ../models/user, datetime proc setFutureSendDate(reminderId: int) = @@ -10,24 +10,33 @@ proc setFutureSendDate(reminderId: int) = newSendDate = now() + 1.days reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") updateReminderSendDate(reminder) + clearAllReminders() of "week": newSendDate = nextWeekday(reminder.weeklyOn) reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") updateReminderSendDate(reminder) + clearAllReminders() of "month": if reminder.monthlyOnDay > 0: #create DateTime with current month and year and reminder.monthlyOnDay newSendDate = dateTime(year(now()), month(now()), reminder.monthlyOnDay) + echo newSendDate #add 1 month only if monthlyOnDay hasn't occured in current month yet. + echo reminder.monthlyOnDay + echo monthDay(now()) if reminder.monthlyOnDay < monthDay(now()): newSendDate = newSendDate + 1.months + echo newSendDate reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + echo reminder.sendDate updateReminderSendDate(reminder) + clearAllReminders() else: #monthly on week number and weekday. e.g. "third thursday of every month". newSendDate = nextMonthlyOnWeekdayOfWeek($reminder.monthlyOnWeekday, $reminder.monthlyOnWeek) reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") updateReminderSendDate(reminder) + clearAllReminders() of "year": #yearly on month and day. #string zeros (db artifacts) have a length of 1... @@ -35,14 +44,15 @@ proc setFutureSendDate(reminderId: int) = newSendDate = nextYearlyDate(reminder.yearlyOnMonth, reminder.yearlyOnDay) reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") updateReminderSendDate(reminder) + clearAllReminders() #yearly on weekday of week of month. e.g. third thursday of november of each year. else: newSendDate = nextYearlyOnWeekdayOfWeekOfMonth($reminder.yearlyOnWeekday, $reminder.yearlyOnWeek, $reminder.yearlyOnMonth2) reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") updateReminderSendDate(reminder) + clearAllReminders() else: - echo "Invalid value for reminder.repeatFreq in setFutureSendDate()" - clearAllReminders() + echo "Invalid value for reminder.repeatFreq in setFutureSendDate()" proc sendEmail(reminderMsg: string) = let userEmailAddress = getEmailByUserId("1") diff --git a/models/reminder.nim b/models/reminder.nim index 3fe35e8..d786514 100644 --- a/models/reminder.nim +++ b/models/reminder.nim @@ -3,7 +3,8 @@ This file is part of Simple Site Manager. Simple Site Manager is released under the GNU Affero General Public License 3.0. See COPYING or for details.]# -import sqliteral, "../helpers/db", "../helpers/global.nim", sequtils +#import sqliteral, "../helpers/db", "../helpers/global.nim", sequtils, algorithm, times +import sqliteral, "../helpers/db", algorithm, times type Reminder* = object @@ -12,11 +13,24 @@ type var allReminders: seq[Reminder] +#proc myCmp(x, y: Reminder): int = +# cmp(x.sendDate, y.sendDate) + +proc getReminderSendDatetime*(reminder: Reminder): DateTime = + let sendDateDTString = $reminder.sendDate & " " & $reminder.sendTimeHr & ":" & $reminder.sendTimeMin & ":" & $reminder.sendTimeAmPm + #single digits for minutes, as db send_time_min is integer and won't use "00", which results in runtime parse error. + let sendDateDT = parse(sendDateDTString, "yyyy-M-d h:m:tt") + return sendDateDT + +proc myCmp(x, y: Reminder): int = + cmp(getReminderSendDatetime(x), getReminderSendDatetime(y)) + proc getAllReminders*(): seq[Reminder] = {.gcsafe.}: if allReminders.len == 0: for row in db1.rows(SelectAllReminders): allReminders.add(Reminder(id: row.getInt(0), title: row.getString(1), message: row.getString(2), notifyVia: row.getString(3), repeats: row.getInt(4), repeatFreq: row.getString(5), weeklyOn: row.getString(6), monthlyOnDay: row.getInt(7), monthlyOnWeekday: row.getString(8), monthlyOnWeek: row.getString(9), yearlyOnMonth: row.getString(10), yearlyOnDay: row.getInt(11), yearlyOnWeek: row.getString(12), yearlyOnWeekday: row.getString(13), yearlyOnMonth2: row.getString(14), sendDate: row.getString(15), sendTimeHr: row.getInt(16), sendTimeMin: row.getInt(17), sendTimeAmPm: row.getString(18))) + allReminders.sort(myCmp) return allReminders proc clearAllReminders*() = diff --git a/post_handlers/reminder_post_handler.nim b/post_handlers/reminder_post_handler.nim index 9e207ff..96b6b37 100644 --- a/post_handlers/reminder_post_handler.nim +++ b/post_handlers/reminder_post_handler.nim @@ -3,8 +3,8 @@ This file is part of Simple Site Manager. Simple Site Manager is released under the GNU Affero General Public License 3.0. See COPYING or for details.]# -import guildenstern/httpserver, jsony -import "../helpers/form", "../helpers/global", "../helpers/validation", "../helpers/auth" +import guildenstern/httpserver +import "../helpers/form", "../helpers/global", "../helpers/validation" import "../models/reminder" proc reminderCreatePostHandler*() = diff --git a/templates/main_template_top.nimf b/templates/main_template_top.nimf index 15035b7..31378c7 100644 --- a/templates/main_template_top.nimf +++ b/templates/main_template_top.nimf @@ -1,5 +1,5 @@ #? stdtmpl(subsChar = '$', metaChar = '#') -#import "../helpers/global", "../models/reminder", "../helpers/auth" +#import "../helpers/global", "../models/reminder" #proc mainTemplateTop*(title, csrfToken: string): string = #let sections = getAllReminders() # result = "" diff --git a/templates/reminder_create.nimf b/templates/reminder_create.nimf index bc0aa3a..c4f93ea 100644 --- a/templates/reminder_create.nimf +++ b/templates/reminder_create.nimf @@ -1,5 +1,5 @@ #? stdtmpl(subsChar = '$', metaChar = '#') -#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder" +#import "../helpers/global", "../helpers/form" #import "main_template_top.nimf", "main_template_bottom.nimf" #proc reminderCreateTemplate*(csrfToken: string, fr: FormResult): string = #let pageTitle = "Create a Reminder" @@ -12,7 +12,7 @@
diff --git a/templates/reminder_update.nimf b/templates/reminder_update.nimf index 21f7676..bb15e3f 100644 --- a/templates/reminder_update.nimf +++ b/templates/reminder_update.nimf @@ -1,5 +1,5 @@ #? stdtmpl(subsChar = '$', metaChar = '#') -#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder" +#import "../helpers/global", "../helpers/form", "../models/reminder" #import "main_template_top.nimf", "main_template_bottom.nimf" #proc reminderUpdateTemplate*(reminderId:int, csrfToken: string, fr: FormResult): string = #let reminder = getReminderById(reminderId) @@ -21,7 +21,7 @@
diff --git a/templates/reminders.nimf b/templates/reminders.nimf index 6a3ff1c..d9fa3da 100644 --- a/templates/reminders.nimf +++ b/templates/reminders.nimf @@ -1,5 +1,5 @@ #? stdtmpl(subsChar = '$', metaChar = '#') -#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder" +#import "../helpers/form", "../models/reminder", std/times #import "main_template_top.nimf", "main_template_bottom.nimf" #proc remindersTemplate*(allReminders: seq[Reminder], csrfToken: string, fr: FormResult): string = # result = "" @@ -8,11 +8,11 @@ Upcoming Reminders+ New Reminder
#if allReminders.len > 0: -
-
Title
-
Repeats?
-
Next Send Date
-
Actions
+
+
Title
+
Repeats?
+
Next Send Date & Time
+
Actions
#else:

You don't have any Reminders yet.

@@ -27,7 +27,7 @@ Yes #end if
-
${reminder.sendDate}
+
${$format(getReminderSendDatetime(reminder), "MM-dd-yyyy h:mm:tt")}