From 9905e9fadac8dfff4aed69120fdea9435e963201 Mon Sep 17 00:00:00 2001 From: theBreadCompany Date: Mon, 9 Jun 2025 02:41:11 +0200 Subject: [PATCH] bug fixing --- src/main/include/util.h | 4 +-- src/main/main.c | 70 ++++++++++++++++++++++++++--------------- src/main/models.c | 9 +++--- src/main/sql.c | 3 +- src/main/util.c | 4 +-- 5 files changed, 54 insertions(+), 36 deletions(-) diff --git a/src/main/include/util.h b/src/main/include/util.h index a572cda..d3ef110 100644 --- a/src/main/include/util.h +++ b/src/main/include/util.h @@ -30,7 +30,7 @@ struct klist_user_context { }; typedef struct klist_user_context klist_user_context; -klist_user_context *klist_user_context_init(klist *list); +klist_user_context *klist_user_context_init(void); void klist_user_context_deinit(klist_user_context *ctx); enum klist_list_command { @@ -49,7 +49,7 @@ struct klist_list_context { }; typedef struct klist_list_context klist_list_context; -klist_list_context *klist_list_context_init(klist *list); +klist_list_context *klist_list_context_init(void); klist_list_context *klist_list_context_get_by_id(klist_list_context *ctx, u_int id); void klist_list_context_deinit(klist_list_context *ctx); diff --git a/src/main/main.c b/src/main/main.c index 84bc11b..3f07d6d 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -29,7 +29,7 @@ int main(int argc, char **argv) { case USER_GET: if (user) { fprintf(stderr, "User: %p\nID: %lu\n", user->name, user->id); - size_t lists_len, i = 0; + size_t lists_len = 0; klist_list **lists = klist_list_get_all_by_user(ctx, user->id, &lists_len); fprintf(stderr, "Lists: %lu\n", lists_len); @@ -55,7 +55,7 @@ int main(int argc, char **argv) { break; case LIST: klist_list_context *list_ctx = ctx->cmd_ctx; - if (!list_ctx->name) { + if (!list_ctx->name && list_ctx->cmd != LIST_GET) { fprintf(stderr, "Missing name.\n"); break; } @@ -83,21 +83,34 @@ int main(int argc, char **argv) { fprintf(stderr, "Not implemented\n"); break; case LIST_GET: - klist_assure_user(ctx, getuid(), getlogin()); - user = klist_user_get_by_local(ctx, getuid()); - list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name); - if (list) { - size_t tasks_len = 0; - klist_task **tasks = - klist_task_get_for_list(ctx, list->id, &tasks_len); - fprintf(stderr, "Name: %s\nDescription: %s\nTasks: %ld\n", - (char *)list->name, (char *)list->desc, tasks_len); - int i = 0; - for (; i < tasks_len; i++) - klist_task_deinit(tasks[i]); - free(tasks); + size_t lists_len = 0; + klist_list **lists = NULL; + if (list_ctx->name) { + klist_list *list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name); + if (list) { + lists_len = 1; + lists = &list; + }; + } else lists = klist_list_get_all_by_user(ctx, user->id, &lists_len); + if (lists) { + i = 0; + for (; i < lists_len; i++) { + klist_list *list = lists[i]; + size_t tasks_len = 0; + klist_task **tasks = + klist_task_get_for_list(ctx, list->id, &tasks_len); + fprintf(stderr, "Name: %s\nDescription: %s\nTasks: %ld\n", + (char *)list->name, (char *)list->desc, tasks_len); + i = 0; + for (; i < tasks_len; i++) + klist_task_deinit(tasks[i]); + free(tasks); + } } else - fprintf(stderr, "List '%s' not found.\n", list_ctx->name); + if (list_ctx->name) + fprintf(stderr, "List '%s' not found.\n", list_ctx->name); + else + fprintf(stderr, "No lists found.\n"); break; case LIST_DELETE: list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name); @@ -105,7 +118,7 @@ int main(int argc, char **argv) { size_t tasks_len = 0; klist_task **tasks = klist_task_get_for_list(ctx, list->id, &tasks_len); - int i = 0; + i = 0; for (; i < tasks_len; i++) { klist_task_delete(ctx, tasks[i]); klist_task_deinit(tasks[i]); @@ -224,8 +237,8 @@ int main(int argc, char **argv) { } else fprintf(stderr, "Task not found, only deletion by name is " "currently supoprted.\n"); - } - fprintf(stderr, "Not implemented\n"); + } else + fprintf(stderr, "Not implemented\n"); } klist_task_context_deinit(task_ctx); default:; @@ -259,7 +272,7 @@ void setup(klist *ctx, int argc, char **argv) { switch (ctx->cmd) { case USER: optind = 2; - klist_user_context *user_ctx = klist_user_context_init(ctx); + klist_user_context *user_ctx = klist_user_context_init(); while ((opt = getopt(argc, argv, "cdg")) != -1) switch (opt) { case 'c': @@ -277,14 +290,16 @@ void setup(klist *ctx, int argc, char **argv) { ctx->cmd_ctx = user_ctx; break; case LIST: + klist_list_context *list_ctx = klist_list_context_init(); + ctx->cmd_ctx = list_ctx; if (argc < 3) { - fprintf(stderr, "Prints all lists.\n"); + list_ctx->cmd = LIST_GET; + break; } - klist_list_context *list_ctx = malloc(sizeof(struct klist_list_context)); optind = 3; - while ((opt = getopt(argc, argv, "adep:s:")) != -1) + while ((opt = getopt(argc, argv, "aden:p:s:")) != -1) switch (opt) { case 'a': list_ctx->cmd = LIST_ADD; @@ -299,6 +314,10 @@ void setup(klist *ctx, int argc, char **argv) { list_ctx->preset = malloc((strlen(optarg) + 1) * sizeof(char)); strcpy(list_ctx->preset, optarg); break; + case 'n': + list_ctx->name = malloc((strlen(optarg) + 1) * sizeof(char)); + strcpy(list_ctx->name, optarg); + break; default: print_help(argv); fprintf( @@ -309,10 +328,9 @@ void setup(klist *ctx, int argc, char **argv) { "-e\t\tedit a list\n" "-d\t\tdelete a list\n" "-p \tdefine as preset or use existing one with name " - "" - "Not providing a parameter prints all lists and existing presets."); + "\n" + "Not providing a parameter prints all lists and existing presets.\n\n"); } - ctx->cmd_ctx = list_ctx; break; case TASK: if (argc < 3) { diff --git a/src/main/models.c b/src/main/models.c index 8b17bc9..ddc63ff 100644 --- a/src/main/models.c +++ b/src/main/models.c @@ -42,6 +42,7 @@ klist_user *klist_user_get_by_local(klist *ctx, u_int local_id) { sqlite3_clear_bindings(stmt); return klist_user_init_from_sql(stmt); } + fprintf(stderr, "failed to get user by local id %u\n", local_id); return NULL; } @@ -50,7 +51,7 @@ void klist_user_save(klist *ctx, klist_user *user) { int result = 0; sqlite3_bind_text(stmt, 1, (char *)user->name, -1, SQLITE_STATIC); if ((result = sqlite3_step(stmt)) == SQLITE_ROW) - user->id = sqlite3_column_int(stmt, 1); + user->id = sqlite3_column_int(stmt, 0); else fprintf(stderr, "failed to save user: %s - %d\n", sqlite3_errmsg(ctx->db), result); @@ -139,7 +140,7 @@ void klist_stage_save(klist *ctx, klist_stage *stage) { sqlite3_bind_text(stmt, 1, (char *)stage->name, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 2, (char *)stage->name, -1, SQLITE_STATIC); if ((result = sqlite3_step(stmt)) == SQLITE_ROW) { - stage->id = sqlite3_column_int(stmt, 1); + stage->id = sqlite3_column_int(stmt, 0); sqlite3_clear_bindings(stmt); } else fprintf(stderr, "failed to save stage: %s - %d\n", sqlite3_errmsg(ctx->db), @@ -227,7 +228,7 @@ void klist_list_save(klist *ctx, klist_list *list) { sqlite3_bind_text(stmt, 1, (char *)list->name, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 2, (char *)list->desc, -1, SQLITE_STATIC); if ((result = sqlite3_step(stmt)) == SQLITE_ROW) { - list->id = sqlite3_column_int(stmt, 1); + list->id = sqlite3_column_int(stmt, 0); sqlite3_clear_bindings(stmt); } else fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db), @@ -314,7 +315,7 @@ void klist_task_save(klist *ctx, klist_task *task) { if (task->target_stage) sqlite3_bind_int(stmt, 5, task->target_stage); if ((result = sqlite3_step(stmt)) == SQLITE_ROW) { - task->id = sqlite3_column_int(stmt, 1); + task->id = sqlite3_column_int(stmt, 0); sqlite3_clear_bindings(stmt); } else fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db), diff --git a/src/main/sql.c b/src/main/sql.c index 2d989ad..9eb73ff 100644 --- a/src/main/sql.c +++ b/src/main/sql.c @@ -56,8 +56,7 @@ const char *klist_sql_get(const enum KLIST_SQL sql) { return "select users.*, user_logins.local_id from users inner join " "user_logins on user_logins.user_id = users.id where users.id = ?1"; case GET_USER_BY_LOCAL: - return "select * from users inner join user_logins on user_logins.user_id " - "= users.id where user_logins.local_id = ?1"; + return "select * from users inner join user_logins on user_logins.user_id = users.id where user_logins.local_id = ?1"; case GET_USERS: return "select * from users"; case MOD_USER_NAME: diff --git a/src/main/util.c b/src/main/util.c index 3d8e0ec..affb921 100644 --- a/src/main/util.c +++ b/src/main/util.c @@ -32,14 +32,14 @@ void klist_deinit(klist *ctx) { free(ctx); } -klist_user_context *klist_user_context_init(klist *list) { +klist_user_context *klist_user_context_init() { klist_user_context *ctx = malloc(sizeof(klist_user_context)); ctx->cmd = -1; return ctx; } void klist_user_context_deinit(klist_user_context *ctx) { free(ctx); } -klist_list_context *klist_list_context_init(klist *list) { +klist_list_context *klist_list_context_init() { klist_list_context *ctx = malloc(sizeof(klist_list_context)); ctx->cmd = -1; ctx->name = NULL;