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();
klist_stage *klist_stage_init_from_sql(sqlite3_stmt *); klist_stage *klist_stage_init_from_sql(sqlite3_stmt *);
klist_stage *klist_stage_get_by_id(klist *, u_int); 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 *); 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_init_from_sql(sqlite3_stmt *);
klist_list *klist_list_get_by_id(klist *, u_int); klist_list *klist_list_get_by_id(klist *, u_int);
klist_list **klist_list_get_all_by_user(klist *, u_int, size_t *); 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 *); 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();
klist_task *klist_task_init_from_sql(sqlite3_stmt *); klist_task *klist_task_init_from_sql(sqlite3_stmt *);
klist_task *klist_task_get_by_id(klist *, u_int); 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 *); void klist_task_deinit(klist_task *);

View file

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

View file

@ -19,12 +19,11 @@ int main(int argc, char **argv) {
if (!ctx->error) { if (!ctx->error) {
setup(ctx, argc, argv); setup(ctx, argc, argv);
klist_user *user; klist_user *user = klist_user_get_by_local(ctx, getuid());
switch (ctx->cmd) { switch (ctx->cmd) {
case USER: case USER:
switch (((klist_user_context *)ctx->cmd_ctx)->cmd) { switch (((klist_user_context *)ctx->cmd_ctx)->cmd) {
case USER_GET: case USER_GET:
user = klist_user_get_by_local(ctx, getuid());
if (user) { if (user) {
fprintf( fprintf(
stderr, stderr,
@ -34,7 +33,6 @@ int main(int argc, char **argv) {
size_t lists_len, i = 0; size_t lists_len, i = 0;
klist_list **lists = klist_list_get_all_by_user(ctx, user->id, &lists_len); klist_list **lists = 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);
klist_user_deinit(user);
for (; i < lists_len; i++) klist_list_deinit(lists[i]); for (; i < lists_len; i++) klist_list_deinit(lists[i]);
} else fprintf(stderr, "No user for '%s' found.\n", getlogin()); } else fprintf(stderr, "No user for '%s' found.\n", getlogin());
break; break;
@ -47,30 +45,49 @@ int main(int argc, char **argv) {
); );
break; break;
case USER_DELETE: case USER_DELETE:
user = klist_user_get_by_local(ctx, getuid());
if (user) { if (user) {
klist_user_delete(ctx, 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; break;
} }
case LIST: 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: 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_EDIT:
case LIST_GET: case LIST_GET:
case LIST_DELETE: ; case LIST_DELETE:
fprintf(stderr, "Not implemented\n");
} }
case TASK: case TASK:
switch (((klist_task_context *)ctx->cmd_ctx)->cmd) { switch (((klist_task_context *)ctx->cmd_ctx)->cmd) {
case TASK_ADD: case TASK_ADD:
case TASK_EDIT: case TASK_EDIT:
case TASK_GET: case TASK_GET:
case TASK_DELETE: ; case TASK_DELETE:
fprintf(stderr, "Not implemented\n");
;
} }
default: ; default: ;
} }
if (user) klist_user_deinit(user);
} }
const int error = ctx->error; 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)); klist_list_context *ctx = malloc(sizeof(klist_list_context));
ctx->cmd = -1; ctx->cmd = -1;
ctx->name = NULL; ctx->name = NULL;
ctx->desc = NULL;
ctx->stages = NULL; ctx->stages = NULL;
ctx->stages_len = 0; ctx->stages_len = 0;
return ctx; return ctx;
@ -82,12 +83,8 @@ void klist_sql_prepare(klist *ctx, char *db) {
for (; i < _KLIST_SQL_COUNT; i++) for (; i < _KLIST_SQL_COUNT; i++)
if (sqlite3_prepare(ctx->db, klist_sql_get(i), -1, &ctx->stmts[i], NULL) != SQLITE_OK) 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)); fprintf(stderr, "sqlite3_prepare: %s\n", sqlite3_errmsg(ctx->db));
char *err; if (sqlite3_step(ctx->stmts[INIT]) != SQLITE_DONE)
sqlite3_exec(ctx->db, klist_sql_get(INIT), NULL, NULL, &err); fprintf(stderr, "Database initialization failed (%s), expect issues.\n", sqlite3_errmsg(ctx->db));
if (err) {
fprintf(stderr, "Failed to initialize, expect errors: %s\n", err);
sqlite3_free(err);
}
} }
/* /*