Compare commits

..

2 commits

Author SHA1 Message Date
cbbbf68db0 bug fixing 2025-06-09 02:41:58 +02:00
9905e9fada bug fixing 2025-06-09 02:41:11 +02:00
4 changed files with 60 additions and 41 deletions

View file

@ -30,7 +30,7 @@ struct klist_user_context {
}; };
typedef struct klist_user_context 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); void klist_user_context_deinit(klist_user_context *ctx);
enum klist_list_command { enum klist_list_command {
@ -49,7 +49,7 @@ struct klist_list_context {
}; };
typedef struct klist_list_context 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, klist_list_context *klist_list_context_get_by_id(klist_list_context *ctx,
u_int id); u_int id);
void klist_list_context_deinit(klist_list_context *ctx); void klist_list_context_deinit(klist_list_context *ctx);

View file

@ -29,7 +29,7 @@ int main(int argc, char **argv) {
case USER_GET: case USER_GET:
if (user) { if (user) {
fprintf(stderr, "User: %p\nID: %lu\n", user->name, user->id); 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 **lists =
klist_list_get_all_by_user(ctx, user->id, &lists_len); klist_list_get_all_by_user(ctx, user->id, &lists_len);
fprintf(stderr, "Lists: %lu\n", lists_len); fprintf(stderr, "Lists: %lu\n", lists_len);
@ -55,7 +55,7 @@ int main(int argc, char **argv) {
break; break;
case LIST: case LIST:
klist_list_context *list_ctx = ctx->cmd_ctx; 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"); fprintf(stderr, "Missing name.\n");
break; break;
} }
@ -83,21 +83,35 @@ int main(int argc, char **argv) {
fprintf(stderr, "Not implemented\n"); fprintf(stderr, "Not implemented\n");
break; break;
case LIST_GET: case LIST_GET:
klist_assure_user(ctx, getuid(), getlogin()); size_t lists_len = 0;
user = klist_user_get_by_local(ctx, getuid()); klist_list **lists = NULL;
list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name); if (list_ctx->name) {
if (list) { klist_list *list =
size_t tasks_len = 0; klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name);
klist_task **tasks = if (list) {
klist_task_get_for_list(ctx, list->id, &tasks_len); lists_len = 1;
fprintf(stderr, "Name: %s\nDescription: %s\nTasks: %ld\n", lists = &list;
(char *)list->name, (char *)list->desc, tasks_len); };
int i = 0;
for (; i < tasks_len; i++)
klist_task_deinit(tasks[i]);
free(tasks);
} else } 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 if (list_ctx->name)
fprintf(stderr, "List '%s' not found.\n", list_ctx->name); fprintf(stderr, "List '%s' not found.\n", list_ctx->name);
else
fprintf(stderr, "No lists found.\n");
break; break;
case LIST_DELETE: case LIST_DELETE:
list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name); list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name);
@ -105,7 +119,7 @@ int main(int argc, char **argv) {
size_t tasks_len = 0; size_t tasks_len = 0;
klist_task **tasks = klist_task **tasks =
klist_task_get_for_list(ctx, list->id, &tasks_len); klist_task_get_for_list(ctx, list->id, &tasks_len);
int i = 0; i = 0;
for (; i < tasks_len; i++) { for (; i < tasks_len; i++) {
klist_task_delete(ctx, tasks[i]); klist_task_delete(ctx, tasks[i]);
klist_task_deinit(tasks[i]); klist_task_deinit(tasks[i]);
@ -224,8 +238,8 @@ int main(int argc, char **argv) {
} else } else
fprintf(stderr, "Task not found, only deletion by name is " fprintf(stderr, "Task not found, only deletion by name is "
"currently supoprted.\n"); "currently supoprted.\n");
} } else
fprintf(stderr, "Not implemented\n"); fprintf(stderr, "Not implemented\n");
} }
klist_task_context_deinit(task_ctx); klist_task_context_deinit(task_ctx);
default:; default:;
@ -259,7 +273,7 @@ void setup(klist *ctx, int argc, char **argv) {
switch (ctx->cmd) { switch (ctx->cmd) {
case USER: case USER:
optind = 2; 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) while ((opt = getopt(argc, argv, "cdg")) != -1)
switch (opt) { switch (opt) {
case 'c': case 'c':
@ -277,14 +291,15 @@ void setup(klist *ctx, int argc, char **argv) {
ctx->cmd_ctx = user_ctx; ctx->cmd_ctx = user_ctx;
break; break;
case LIST: case LIST:
klist_list_context *list_ctx = klist_list_context_init();
ctx->cmd_ctx = list_ctx;
if (argc < 3) { if (argc < 3) {
fprintf(stderr, "Prints all lists.\n"); list_ctx->cmd = LIST_GET;
break; break;
} }
klist_list_context *list_ctx = malloc(sizeof(struct klist_list_context));
optind = 3; optind = 3;
while ((opt = getopt(argc, argv, "adep:s:")) != -1) while ((opt = getopt(argc, argv, "aden:p:s:")) != -1)
switch (opt) { switch (opt) {
case 'a': case 'a':
list_ctx->cmd = LIST_ADD; list_ctx->cmd = LIST_ADD;
@ -299,20 +314,23 @@ void setup(klist *ctx, int argc, char **argv) {
list_ctx->preset = malloc((strlen(optarg) + 1) * sizeof(char)); list_ctx->preset = malloc((strlen(optarg) + 1) * sizeof(char));
strcpy(list_ctx->preset, optarg); strcpy(list_ctx->preset, optarg);
break; break;
case 'n':
list_ctx->name = malloc((strlen(optarg) + 1) * sizeof(char));
strcpy(list_ctx->name, optarg);
break;
default: default:
print_help(argv); print_help(argv);
fprintf( fprintf(stderr,
stderr, ""
"" "list options:\n"
"list options:\n" "-a\t\tadd a list\n"
"-a\t\tadd a list\n" "-e\t\tedit a list\n"
"-e\t\tedit a list\n" "-d\t\tdelete a list\n"
"-d\t\tdelete a list\n" "-p <preset>\tdefine as preset or use existing one with name "
"-p <preset>\tdefine as preset or use existing one with name " "<preset>\n"
"<preset>" "Not providing a parameter prints all lists and existing "
"Not providing a parameter prints all lists and existing presets."); "presets.\n\n");
} }
ctx->cmd_ctx = list_ctx;
break; break;
case TASK: case TASK:
if (argc < 3) { if (argc < 3) {

View file

@ -42,6 +42,7 @@ klist_user *klist_user_get_by_local(klist *ctx, u_int local_id) {
sqlite3_clear_bindings(stmt); sqlite3_clear_bindings(stmt);
return klist_user_init_from_sql(stmt); return klist_user_init_from_sql(stmt);
} }
fprintf(stderr, "failed to get user by local id %u\n", local_id);
return NULL; return NULL;
} }
@ -50,7 +51,7 @@ void klist_user_save(klist *ctx, klist_user *user) {
int result = 0; int result = 0;
sqlite3_bind_text(stmt, 1, (char *)user->name, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 1, (char *)user->name, -1, SQLITE_STATIC);
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) if ((result = sqlite3_step(stmt)) == SQLITE_ROW)
user->id = sqlite3_column_int(stmt, 1); user->id = sqlite3_column_int(stmt, 0);
else else
fprintf(stderr, "failed to save user: %s - %d\n", sqlite3_errmsg(ctx->db), fprintf(stderr, "failed to save user: %s - %d\n", sqlite3_errmsg(ctx->db),
result); 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, 1, (char *)stage->name, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, (char *)stage->name, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 2, (char *)stage->name, -1, SQLITE_STATIC);
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) { 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); sqlite3_clear_bindings(stmt);
} else } else
fprintf(stderr, "failed to save stage: %s - %d\n", sqlite3_errmsg(ctx->db), 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, 1, (char *)list->name, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, (char *)list->desc, -1, SQLITE_STATIC); sqlite3_bind_text(stmt, 2, (char *)list->desc, -1, SQLITE_STATIC);
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) { 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); sqlite3_clear_bindings(stmt);
} else } else
fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db), 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) if (task->target_stage)
sqlite3_bind_int(stmt, 5, task->target_stage); sqlite3_bind_int(stmt, 5, task->target_stage);
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) { 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); sqlite3_clear_bindings(stmt);
} else } else
fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db), fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db),

View file

@ -32,14 +32,14 @@ void klist_deinit(klist *ctx) {
free(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)); klist_user_context *ctx = malloc(sizeof(klist_user_context));
ctx->cmd = -1; ctx->cmd = -1;
return ctx; return ctx;
} }
void klist_user_context_deinit(klist_user_context *ctx) { free(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)); klist_list_context *ctx = malloc(sizeof(klist_list_context));
ctx->cmd = -1; ctx->cmd = -1;
ctx->name = NULL; ctx->name = NULL;