begin list command implementation
This commit is contained in:
parent
be20e4fab1
commit
de12720d2a
4 changed files with 37 additions and 16 deletions
|
@ -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 *);
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue