begin list command implementation

This commit is contained in:
theBreadCompany 2025-06-05 09:59:29 +02:00
parent be20e4fab1
commit de12720d2a
4 changed files with 37 additions and 16 deletions

View file

@ -35,6 +35,8 @@ typedef struct klist_stage klist_stage;
klist_stage *klist_stage_init();
klist_stage *klist_stage_init_from_sql(sqlite3_stmt *);
klist_stage *klist_stage_get_by_id(klist *, u_int);
void klist_stage_save(klist *, klist_stage *);
void klist_stage_delete(klist *, klist_stage *);
void klist_stage_deinit(klist_stage *);
@ -49,6 +51,8 @@ klist_list *klist_list_init();
klist_list *klist_list_init_from_sql(sqlite3_stmt *);
klist_list *klist_list_get_by_id(klist *, u_int);
klist_list **klist_list_get_all_by_user(klist *, u_int, size_t *);
void klist_list_save(klist *, klist_list *);
void klist_list_delete(klist *, klist_list *);
void klist_list_deinit(klist_list *);
@ -62,4 +66,6 @@ typedef struct klist_task klist_task;
klist_task *klist_task_init();
klist_task *klist_task_init_from_sql(sqlite3_stmt *);
klist_task *klist_task_get_by_id(klist *, u_int);
void klist_task_save(klist *, klist_task *);
void klist_task_delete(klist *, klist_task *);
void klist_task_deinit(klist_task *);

View file

@ -49,6 +49,7 @@ enum klist_list_command {
struct klist_list_context {
enum klist_list_command cmd;
char *name;
char *desc;
char **stages;
size_t stages_len;
};

View file

@ -19,12 +19,11 @@ int main(int argc, char **argv) {
if (!ctx->error) {
setup(ctx, argc, argv);
klist_user *user;
klist_user *user = klist_user_get_by_local(ctx, getuid());
switch (ctx->cmd) {
case USER:
switch (((klist_user_context *)ctx->cmd_ctx)->cmd) {
case USER_GET:
user = klist_user_get_by_local(ctx, getuid());
if (user) {
fprintf(
stderr,
@ -34,7 +33,6 @@ int main(int argc, char **argv) {
size_t lists_len, i = 0;
klist_list **lists = klist_list_get_all_by_user(ctx, user->id, &lists_len);
fprintf(stderr, "Lists: %lu\n", lists_len);
klist_user_deinit(user);
for (; i < lists_len; i++) klist_list_deinit(lists[i]);
} else fprintf(stderr, "No user for '%s' found.\n", getlogin());
break;
@ -47,30 +45,49 @@ int main(int argc, char **argv) {
);
break;
case USER_DELETE:
user = klist_user_get_by_local(ctx, getuid());
if (user) {
klist_user_delete(ctx, user);
klist_user_deinit(user);
}
fprintf(stderr, "User deleted.\n");
} else fprintf(stderr, "User not found, no changes done.\n");
break;
}
case LIST:
switch (((klist_list_context *)ctx->cmd_ctx)->cmd) {
klist_list_context *list_ctx = ctx->cmd_ctx;
switch (list_ctx->cmd) {
case LIST_ADD:
if (!list_ctx->name) { fprintf(stderr, "Missing name.\n"); break; }
if (!list_ctx->stages_len) { fprintf(stderr, "Missing stages.\n"); break; }
klist_list *list = klist_list_init();
list->name = (unsigned char*)list_ctx->name;
list->desc = (unsigned char*)list_ctx->desc;
klist_list_save(ctx, list);
int i = 0;
for (; i < list_ctx->stages_len; i++) {
klist_stage *stage = klist_stage_init();
stage->name = (unsigned char*)list_ctx->stages[i];
stage->list_id = list->id;
klist_stage_save(ctx, stage);
klist_stage_deinit(stage);
}
klist_list_deinit(list);
break;
case LIST_EDIT:
case LIST_GET:
case LIST_DELETE: ;
case LIST_DELETE:
fprintf(stderr, "Not implemented\n");
}
case TASK:
switch (((klist_task_context *)ctx->cmd_ctx)->cmd) {
case TASK_ADD:
case TASK_EDIT:
case TASK_GET:
case TASK_DELETE: ;
case TASK_DELETE:
fprintf(stderr, "Not implemented\n");
;
}
default: ;
}
if (user) klist_user_deinit(user);
}
const int error = ctx->error;

View file

@ -45,6 +45,7 @@ klist_list_context *klist_list_context_init(klist *list) {
klist_list_context *ctx = malloc(sizeof(klist_list_context));
ctx->cmd = -1;
ctx->name = NULL;
ctx->desc = NULL;
ctx->stages = NULL;
ctx->stages_len = 0;
return ctx;
@ -82,12 +83,8 @@ void klist_sql_prepare(klist *ctx, char *db) {
for (; i < _KLIST_SQL_COUNT; i++)
if (sqlite3_prepare(ctx->db, klist_sql_get(i), -1, &ctx->stmts[i], NULL) != SQLITE_OK)
fprintf(stderr, "sqlite3_prepare: %s\n", sqlite3_errmsg(ctx->db));
char *err;
sqlite3_exec(ctx->db, klist_sql_get(INIT), NULL, NULL, &err);
if (err) {
fprintf(stderr, "Failed to initialize, expect errors: %s\n", err);
sqlite3_free(err);
}
if (sqlite3_step(ctx->stmts[INIT]) != SQLITE_DONE)
fprintf(stderr, "Database initialization failed (%s), expect issues.\n", sqlite3_errmsg(ctx->db));
}
/*