From 114c5f901fd23b44038cae12e2eb37a695328673 Mon Sep 17 00:00:00 2001 From: augustin64 Date: Sun, 16 Jul 2023 11:07:04 +0200 Subject: [PATCH] daemon: send basic notifications --- src/daemon.c | 49 +++++++++++++++++++++++++++++++++++++++ src/main/include/config.h | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/daemon.c b/src/daemon.c index d201a83..1d5dc5b 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -1,16 +1,65 @@ #include #include +#include +#include #include "main/include/colors.h" #include "main/include/config.h" +#include "main/include/tasks.h" #include "main/include/db.h" #include "log/log.h" +task_t next_task(task_list_t* tasks) { + time_t now = time(0); + + task_t next; + next.due_to = 0; + + task_list_t* cur = tasks; + + while (cur) { + task_t t = cur->task; + + if (!t.done && (difftime(now, t.due_to) <= 0 || t.due_to == 0)) { // La tâche a une échéance, qui n'est pas passée + if (next.due_to == 0 || difftime(next.due_to, t.due_to) >= 0) { + next = t; + } + } + + cur = cur->next; + } + + return next; +} + int main() { log_info("TaKl " VERSION " -- Daemon started"); + + task_list_t* tasks = get_task_list(false); + while (1) { + task_t next = next_task(tasks); + + if (next.due_to == 0) { + log_fatal("Plus de tâches avec échéance dans la liste"); + free_task_list(tasks); + return 1; + } + + time_t now = time(0); + double wait = difftime(next.due_to, now) + 5; + log_debug("Attente de %0.1lfs", wait); + sleep(wait); + + log_debug("Envoi de la notification tâche [%d]", next.id); + desktop_notification(next); + //! si deux tâches sont à la même date à moins de 0.1s près, + //! l'une des deux seulement sera affichée + } + + free_task_list(tasks); return 0; } \ No newline at end of file diff --git a/src/main/include/config.h b/src/main/include/config.h index 32b9000..a979e96 100644 --- a/src/main/include/config.h +++ b/src/main/include/config.h @@ -1,7 +1,7 @@ #ifndef DEF_CONFIG_H #define DEF_CONFIG_H -#define VERSION "1.0.2" +#define VERSION "1.0.3" // By default, $HOME/.config/takl.sqlite3 is used. You can change this behaviour here //#define DB_FILE "takl.sqlite3"