2023-07-12 11:08:40 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <time.h>
|
|
|
|
|
|
|
|
#include "include/colors.h"
|
|
|
|
#include "include/config.h"
|
|
|
|
#include "include/tasks.h"
|
|
|
|
#include "include/db.h"
|
|
|
|
|
|
|
|
void help(char* name) {
|
|
|
|
printf(BLUE "\t-- TaKl " VERSION " --\n" RESET);
|
2023-07-12 22:00:57 +02:00
|
|
|
printf("Utilisation: %s ( list | add | info | rm | done )\n", name);
|
|
|
|
printf("\tlist [-a:voir les tâches complétées]\n");
|
2023-07-12 11:08:40 +02:00
|
|
|
printf("\tadd <task> [date]\n");
|
|
|
|
printf("\tFormat de la date:\n");
|
|
|
|
printf("\t\tRelatif: min+%%d, h+%%d, j+%%d\n");
|
2023-07-12 22:00:57 +02:00
|
|
|
printf("\t\tAbsolu: dd/mm (pas de changement d'année pour l'instant)\n");
|
2023-07-12 21:56:05 +02:00
|
|
|
printf("\tinfo <id1> <id2> ...\n");
|
|
|
|
printf("\tdone <id1> <id2> ...\n");
|
|
|
|
printf("\trm <id1> <id2> ...\n");
|
2023-07-12 11:08:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
time_t parseDateTime(const char* input) {
|
|
|
|
struct tm date = {0}; // Initialize with zeros
|
|
|
|
|
|
|
|
// Get current time
|
|
|
|
time_t now = time(NULL);
|
|
|
|
struct tm* current_time = localtime(&now);
|
|
|
|
|
|
|
|
// Copy current time to 'date' structure
|
|
|
|
date.tm_year = current_time->tm_year;
|
|
|
|
date.tm_mon = current_time->tm_mon;
|
|
|
|
date.tm_mday = current_time->tm_mday;
|
|
|
|
date.tm_hour = current_time->tm_hour;
|
|
|
|
date.tm_min = current_time->tm_min;
|
|
|
|
date.tm_sec = current_time->tm_sec;
|
|
|
|
|
|
|
|
|
|
|
|
int offset;
|
|
|
|
// Accepted formats: min+%d, h+%d, j+%d
|
|
|
|
if (sscanf(input, "min+%d", &offset)) {
|
|
|
|
date.tm_min += offset;
|
|
|
|
return mktime(&date);
|
|
|
|
} else if (sscanf(input, "h+%d", &offset)) {
|
|
|
|
date.tm_hour += offset;
|
|
|
|
return mktime(&date);
|
|
|
|
} else if (sscanf(input, "j+%d", &offset)) {
|
|
|
|
date.tm_mday += offset;
|
|
|
|
return mktime(&date);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if the input format is "dd/mm"
|
|
|
|
if (sscanf(input, "%d/%d", &date.tm_mday, &date.tm_mon) == 2) {
|
|
|
|
// Set the year to the current year
|
|
|
|
date.tm_year = current_time->tm_year;
|
|
|
|
// Adjust month and day values to be zero-based
|
|
|
|
date.tm_hour = 0;
|
|
|
|
date.tm_min = 0;
|
|
|
|
date.tm_sec = 0;
|
|
|
|
// Convert 'date' structure to 'time_t' value
|
|
|
|
return mktime(&date);
|
|
|
|
}
|
|
|
|
|
|
|
|
return -1; // Return an error value
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int add(int argc, char* argv[]) {
|
|
|
|
if (argc < 3) {
|
|
|
|
printf(BOLD YELLOW "Argument manquant\n" RESET);
|
|
|
|
help(argv[0]);
|
2023-07-12 21:29:17 +02:00
|
|
|
return 1;
|
2023-07-12 11:08:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
time_t due_to = 0;
|
|
|
|
if (argc > 3) {
|
|
|
|
due_to = parseDateTime(argv[3]);
|
|
|
|
|
|
|
|
if (due_to == -1) {
|
|
|
|
printf(BOLD YELLOW "Échéance invalide, la tâche sera créé sans échéance.\n" RESET);
|
|
|
|
due_to = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
task_t t = create_task(argv[2], due_to);
|
2023-07-12 21:56:05 +02:00
|
|
|
if (t.id == -1) {
|
|
|
|
return 1;
|
|
|
|
}
|
2023-07-12 11:08:40 +02:00
|
|
|
|
|
|
|
if (add_task(t) != 0) {
|
|
|
|
printf("Erreur lors de l'ajout à la base de données\n");
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
printf(BOLD YELLOW "[%d]" RESET " ajoutée\n", t.id);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2023-07-13 12:00:05 +02:00
|
|
|
int list_tasks(bool show_completed) {
|
|
|
|
task_list_t* tasks = get_task_list(show_completed);
|
|
|
|
print_task_list(tasks, show_completed); // show_completed: true would work as all the tasks are not loaded if false
|
|
|
|
free_task_list(tasks);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2023-07-12 11:08:40 +02:00
|
|
|
|
|
|
|
int info(int argc, char* argv[]) {
|
|
|
|
if (argc < 3) {
|
|
|
|
printf(BOLD YELLOW "Argument manquant\n" RESET);
|
|
|
|
help(argv[0]);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
for (int i=2; i < argc; i++) {
|
|
|
|
int id = strtol(argv[i], NULL, 10);
|
2023-07-12 11:08:40 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
task_t t;
|
|
|
|
t.id = -1;
|
|
|
|
get_task(id, &t);
|
2023-07-12 11:08:40 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
if (t.id == -1) {
|
|
|
|
printf(YELLOW "Tâche " BOLD "[%s]" RESET YELLOW " inexistante. Vérifiez que l'identifiant est bien correct\n" RESET, argv[i]);
|
|
|
|
return 1;
|
|
|
|
}
|
2023-07-12 11:08:40 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
print_task(t);
|
|
|
|
free(t.text);
|
|
|
|
}
|
2023-07-12 11:08:40 +02:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2023-07-12 21:29:17 +02:00
|
|
|
int mark_done(int argc, char* argv[]) {
|
|
|
|
if (argc < 3) {
|
|
|
|
printf(BOLD YELLOW "Argument manquant\n" RESET);
|
|
|
|
help(argv[0]);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
for (int i=2; i < argc; i++) {
|
|
|
|
int id = strtol(argv[i], NULL, 10);
|
2023-07-12 21:29:17 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
task_t t;
|
|
|
|
t.id = -1;
|
|
|
|
get_task(id, &t);
|
2023-07-12 21:29:17 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
if (t.id == -1) {
|
|
|
|
printf(YELLOW "Tâche " BOLD "[%s]" RESET YELLOW " inexistante. Vérifiez que l'identifiant est bien correct\n" RESET, argv[i]);
|
|
|
|
return 1;
|
|
|
|
}
|
2023-07-12 21:29:17 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
t.done = true;
|
|
|
|
update_task(t);
|
|
|
|
}
|
2023-07-12 21:29:17 +02:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int delete(int argc, char* argv[]) {
|
|
|
|
if (argc < 3) {
|
|
|
|
printf(BOLD YELLOW "Argument manquant\n" RESET);
|
|
|
|
help(argv[0]);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
for (int i=2; i < argc; i++) {
|
|
|
|
int id = strtol(argv[i], NULL, 10);
|
2023-07-12 21:29:17 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
task_t t;
|
|
|
|
t.id = -1;
|
|
|
|
get_task(id, &t);
|
2023-07-12 21:29:17 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
if (t.id == -1) {
|
|
|
|
printf(YELLOW "Tâche " BOLD "[%s]" RESET YELLOW " inexistante. Vérifiez que l'identifiant est bien correct\n" RESET, argv[i]);
|
|
|
|
return 1;
|
|
|
|
}
|
2023-07-12 21:29:17 +02:00
|
|
|
|
2023-07-12 21:56:05 +02:00
|
|
|
delete_task(t.id);
|
|
|
|
}
|
2023-07-12 21:29:17 +02:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
2023-07-12 11:08:40 +02:00
|
|
|
|
|
|
|
int main(int argc, char* argv[]) {
|
2023-07-12 21:29:17 +02:00
|
|
|
srand(time(NULL));
|
|
|
|
|
2023-07-12 11:08:40 +02:00
|
|
|
if (argc <= 1) {
|
|
|
|
help(argv[0]);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!strcmp(argv[1], "add")) {
|
|
|
|
return add(argc, argv);
|
|
|
|
} else if (!strcmp(argv[1], "list")) {
|
2023-07-12 22:00:57 +02:00
|
|
|
return list_tasks(argc > 2 && !strcmp(argv[2], "-a"));
|
2023-07-12 11:08:40 +02:00
|
|
|
} else if (!strcmp(argv[1], "info")) {
|
|
|
|
return info(argc, argv);
|
2023-07-12 21:29:17 +02:00
|
|
|
} else if (!strcmp(argv[1], "done")) {
|
|
|
|
return mark_done(argc, argv);
|
|
|
|
} else if (!strcmp(argv[1], "rm")) {
|
|
|
|
return delete(argc, argv);
|
2023-07-12 11:08:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
printf(YELLOW "Option invalide " BOLD "%s\n" RESET, argv[1]);
|
|
|
|
return 1;
|
|
|
|
}
|