diff --git a/src/main/include/models.h b/src/main/include/models.h index cb72680..24406e0 100644 --- a/src/main/include/models.h +++ b/src/main/include/models.h @@ -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 *); \ No newline at end of file diff --git a/src/main/include/util.h b/src/main/include/util.h index 60a1c20..e4524e4 100644 --- a/src/main/include/util.h +++ b/src/main/include/util.h @@ -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; }; diff --git a/src/main/main.c b/src/main/main.c index 250d6f6..94033e2 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -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; diff --git a/src/main/util.c b/src/main/util.c index 7549871..4d7ee67 100644 --- a/src/main/util.c +++ b/src/main/util.c @@ -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)); } /*