clang-format
This commit is contained in:
parent
4ed84f160d
commit
ed063a7483
7 changed files with 844 additions and 763 deletions
|
@ -21,7 +21,6 @@ void klist_user_save(klist *, klist_user *);
|
|||
void klist_user_delete(klist *, klist_user *);
|
||||
void klist_user_deinit(klist_user *);
|
||||
|
||||
|
||||
struct klist_list {
|
||||
ssize_t id;
|
||||
unsigned char *name;
|
||||
|
@ -39,7 +38,6 @@ void klist_list_save(klist *, klist_list *);
|
|||
void klist_list_delete(klist *, klist_list *);
|
||||
void klist_list_deinit(klist_list *);
|
||||
|
||||
|
||||
struct klist_stage {
|
||||
ssize_t id;
|
||||
unsigned char *name;
|
||||
|
@ -56,7 +54,6 @@ void klist_stage_save(klist *, klist_stage *);
|
|||
void klist_stage_delete(klist *, klist_stage *);
|
||||
void klist_stage_deinit(klist_stage *);
|
||||
|
||||
|
||||
struct klist_task {
|
||||
ssize_t id;
|
||||
unsigned char *name;
|
||||
|
@ -64,7 +61,6 @@ struct klist_task {
|
|||
int stage_id;
|
||||
time_t due;
|
||||
int target_stage;
|
||||
|
||||
};
|
||||
typedef struct klist_task klist_task;
|
||||
|
||||
|
|
|
@ -18,19 +18,13 @@ struct klist {
|
|||
u_int cmd;
|
||||
void *cmd_ctx;
|
||||
int error;
|
||||
|
||||
};
|
||||
typedef struct klist klist;
|
||||
|
||||
klist *klist_init(char *db);
|
||||
void klist_deinit(klist *list);
|
||||
|
||||
|
||||
enum klist_user_command {
|
||||
USER_GET,
|
||||
USER_CREATE,
|
||||
USER_DELETE
|
||||
};
|
||||
enum klist_user_command { USER_GET, USER_CREATE, USER_DELETE };
|
||||
struct klist_user_context {
|
||||
enum klist_user_command cmd;
|
||||
};
|
||||
|
@ -39,7 +33,6 @@ typedef struct klist_user_context klist_user_context;
|
|||
klist_user_context *klist_user_context_init(klist *list);
|
||||
void klist_user_context_deinit(klist_user_context *ctx);
|
||||
|
||||
|
||||
enum klist_list_command {
|
||||
LIST_ADD,
|
||||
LIST_EDIT,
|
||||
|
@ -57,10 +50,10 @@ struct 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_get_by_id(klist_list_context *ctx, u_int id);
|
||||
klist_list_context *klist_list_context_get_by_id(klist_list_context *ctx,
|
||||
u_int id);
|
||||
void klist_list_context_deinit(klist_list_context *ctx);
|
||||
|
||||
|
||||
enum klist_task_command {
|
||||
TASK_ADD,
|
||||
TASK_EDIT,
|
||||
|
@ -79,16 +72,12 @@ typedef struct klist_task_context klist_task_context;
|
|||
klist_task_context *klist_task_context_init(klist *list);
|
||||
void klist_task_context_deinit(klist_task_context *ctx);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* sql preparations
|
||||
*/
|
||||
|
||||
void klist_sql_prepare(klist *, char *);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* assuring things
|
||||
*/
|
||||
|
|
126
src/main/main.c
126
src/main/main.c
|
@ -1,7 +1,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "models.h"
|
||||
#include "util.h"
|
||||
|
@ -28,39 +28,43 @@ int main(int argc, char **argv) {
|
|||
switch (user_ctx->cmd) {
|
||||
case USER_GET:
|
||||
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;
|
||||
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);
|
||||
for (; i < lists_len; i++) klist_list_deinit(lists[i]);
|
||||
} else fprintf(stderr, "No user for '%s' found.\n", getlogin());
|
||||
for (; i < lists_len; i++)
|
||||
klist_list_deinit(lists[i]);
|
||||
} else
|
||||
fprintf(stderr, "No user for '%s' found.\n", getlogin());
|
||||
break;
|
||||
case USER_CREATE:
|
||||
fprintf(
|
||||
stderr,
|
||||
(klist_assure_user(ctx, getuid(), getlogin()))
|
||||
fprintf(stderr, (klist_assure_user(ctx, getuid(), getlogin()))
|
||||
? "User created.\n"
|
||||
: "User already exists.\n"
|
||||
);
|
||||
: "User already exists.\n");
|
||||
break;
|
||||
case USER_DELETE:
|
||||
if (user) {
|
||||
klist_user_delete(ctx, user);
|
||||
fprintf(stderr, "User deleted.\n");
|
||||
} else fprintf(stderr, "User not found, no changes done.\n");
|
||||
} else
|
||||
fprintf(stderr, "User not found, no changes done.\n");
|
||||
break;
|
||||
}
|
||||
klist_user_context_deinit(user_ctx);
|
||||
break;
|
||||
case LIST:
|
||||
klist_list_context *list_ctx = ctx->cmd_ctx;
|
||||
if (!list_ctx->name) { fprintf(stderr, "Missing name.\n"); break; }
|
||||
if (!list_ctx->name) {
|
||||
fprintf(stderr, "Missing name.\n");
|
||||
break;
|
||||
}
|
||||
switch (list_ctx->cmd) {
|
||||
case LIST_ADD:
|
||||
if (!list_ctx->stages_len) { fprintf(stderr, "Missing stages.\n"); break; }
|
||||
if (!list_ctx->stages_len) {
|
||||
fprintf(stderr, "Missing stages.\n");
|
||||
break;
|
||||
}
|
||||
list = klist_list_init();
|
||||
list->name = (unsigned char *)list_ctx->name;
|
||||
list->desc = (unsigned char *)list_ctx->desc;
|
||||
|
@ -84,10 +88,13 @@ int main(int argc, char **argv) {
|
|||
list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name);
|
||||
if (list) {
|
||||
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);
|
||||
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);
|
||||
int i = 0;
|
||||
for(; i < tasks_len; i++) klist_task_deinit(tasks[i]);
|
||||
for (; i < tasks_len; i++)
|
||||
klist_task_deinit(tasks[i]);
|
||||
free(tasks);
|
||||
} else
|
||||
fprintf(stderr, "List '%s' not found.\n", list_ctx->name);
|
||||
|
@ -96,7 +103,8 @@ int main(int argc, char **argv) {
|
|||
list = klist_list_get_by_user_and_name(ctx, user->id, list_ctx->name);
|
||||
if (list) {
|
||||
size_t tasks_len = 0;
|
||||
klist_task **tasks = klist_task_get_for_list(ctx, list->id, &tasks_len);
|
||||
klist_task **tasks =
|
||||
klist_task_get_for_list(ctx, list->id, &tasks_len);
|
||||
int i = 0;
|
||||
for (; i < tasks_len; i++) {
|
||||
klist_task_delete(ctx, tasks[i]);
|
||||
|
@ -105,19 +113,22 @@ int main(int argc, char **argv) {
|
|||
free(tasks);
|
||||
}
|
||||
}
|
||||
if (list_ctx) klist_list_context_deinit(list_ctx);
|
||||
if (list_ctx)
|
||||
klist_list_context_deinit(list_ctx);
|
||||
break;
|
||||
case TASK:
|
||||
klist_task_context *task_ctx = ctx->cmd_ctx;
|
||||
switch (((klist_task_context *)ctx->cmd_ctx)->cmd) {
|
||||
case TASK_ADD: // basically the same things happen and edit can create if nescessary
|
||||
case TASK_ADD: // basically the same things happen and edit can create if
|
||||
// nescessary
|
||||
case TASK_EDIT:
|
||||
klist_assure_user(ctx, getuid(), getlogin());
|
||||
user = klist_user_get_by_local(ctx, getuid());
|
||||
list = klist_list_get_by_user_and_name(ctx, user->id, task_ctx->list);
|
||||
if (list) {
|
||||
size_t stages_len = 0;
|
||||
klist_stage **stages = klist_stage_get_all_for_list(ctx, list->id, &stages_len);
|
||||
klist_stage **stages =
|
||||
klist_stage_get_all_for_list(ctx, list->id, &stages_len);
|
||||
if (!task_ctx->stage) {
|
||||
fprintf(stderr, "Stage missing/wrong, please pass one of: ");
|
||||
i = 0;
|
||||
|
@ -133,7 +144,8 @@ int main(int argc, char **argv) {
|
|||
stage_id = stages[i]->id;
|
||||
|
||||
if (stage_id == -1) {
|
||||
fprintf(stderr, "Stage %s not found. Use one of: ", (char *)task_ctx->stage);
|
||||
fprintf(stderr, "Stage %s not found. Use one of: ",
|
||||
(char *)task_ctx->stage);
|
||||
i = 0;
|
||||
for (; i < stages_len; i++)
|
||||
fprintf(stderr, "%s ", (char *)stages[i]->name);
|
||||
|
@ -143,16 +155,21 @@ int main(int argc, char **argv) {
|
|||
for (; i < stages_len; i++)
|
||||
klist_stage_deinit(stages[i]);
|
||||
free(stages);
|
||||
if (ctx->error) break;
|
||||
if (ctx->error)
|
||||
break;
|
||||
|
||||
klist_task *task = klist_task_get_for_list_by_name(ctx, list->id, task_ctx->name);
|
||||
if (!task) task = klist_task_init();
|
||||
klist_task *task =
|
||||
klist_task_get_for_list_by_name(ctx, list->id, task_ctx->name);
|
||||
if (!task)
|
||||
task = klist_task_init();
|
||||
task->name = (unsigned char *)task_ctx->name;
|
||||
if (task_ctx->desc) task->desc = (unsigned char*)task_ctx->desc;
|
||||
if (task_ctx->desc)
|
||||
task->desc = (unsigned char *)task_ctx->desc;
|
||||
task->stage_id = stage_id;
|
||||
klist_task_save(ctx, task);
|
||||
klist_task_deinit(task);
|
||||
} else fprintf(stderr, "List not found.\n");
|
||||
} else
|
||||
fprintf(stderr, "List not found.\n");
|
||||
break;
|
||||
case TASK_GET:
|
||||
klist_assure_user(ctx, getuid(), getlogin());
|
||||
|
@ -160,7 +177,8 @@ int main(int argc, char **argv) {
|
|||
list = klist_list_get_by_user_and_name(ctx, user->id, task_ctx->list);
|
||||
if (list) {
|
||||
if (task_ctx->name) {
|
||||
klist_task *task = klist_task_get_for_list_by_name(ctx, list->id, task_ctx->name);
|
||||
klist_task *task =
|
||||
klist_task_get_for_list_by_name(ctx, list->id, task_ctx->name);
|
||||
if (task) {
|
||||
fprintf(stderr, "Name: %s\n", (char *)task->name);
|
||||
fprintf(stderr, "Description: %s\n", (char *)task->desc);
|
||||
|
@ -168,44 +186,54 @@ int main(int argc, char **argv) {
|
|||
fprintf(stderr, "Stage: %s\n", (char *)stage->name);
|
||||
klist_stage_deinit(stage);
|
||||
klist_task_deinit(task);
|
||||
} else fprintf(stderr, "Task not found.\n");
|
||||
} else
|
||||
fprintf(stderr, "Task not found.\n");
|
||||
} else {
|
||||
size_t tasks_len = 0;
|
||||
klist_task **tasks = klist_task_get_for_list(ctx, list->id, &tasks_len);
|
||||
klist_task **tasks =
|
||||
klist_task_get_for_list(ctx, list->id, &tasks_len);
|
||||
i = 0;
|
||||
for (; i < tasks_len; i++) {
|
||||
fprintf(stderr, "Name: %s\n", (char *)tasks[i]->name);
|
||||
fprintf(stderr, "Description: %s\n", (char *)tasks[i]->desc);
|
||||
klist_stage *stage = klist_stage_get_by_id(ctx, tasks[i]->stage_id);
|
||||
klist_stage *stage =
|
||||
klist_stage_get_by_id(ctx, tasks[i]->stage_id);
|
||||
fprintf(stderr, "Stage: %s\n", (char *)stage->name);
|
||||
klist_stage_deinit(stage);
|
||||
klist_task_deinit(tasks[i]);
|
||||
if ((i+1) < tasks_len) fprintf(stderr, "\n");
|
||||
if ((i + 1) < tasks_len)
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
}
|
||||
} else fprintf(stderr, "List not found");
|
||||
} else
|
||||
fprintf(stderr, "List not found");
|
||||
case TASK_DELETE:
|
||||
klist_assure_user(ctx, getuid(), getlogin());
|
||||
user = klist_user_get_by_local(ctx, getuid());
|
||||
list = klist_list_get_by_user_and_name(ctx, user->id, task_ctx->list);
|
||||
if (list) {
|
||||
if (task_ctx) {
|
||||
klist_task *task = klist_task_get_for_list_by_name(ctx, list->id, task_ctx->name);
|
||||
klist_task *task =
|
||||
klist_task_get_for_list_by_name(ctx, list->id, task_ctx->name);
|
||||
if (task) {
|
||||
fprintf(stderr, "Deleting task '%s'.\n", (char *)task->name);
|
||||
klist_task_delete(ctx, task);
|
||||
klist_task_deinit(task);
|
||||
} else fprintf(stderr, "Task not found.\n");
|
||||
} else fprintf(stderr, "Task not found, only deletion by name is currently supoprted.\n");
|
||||
|
||||
} else
|
||||
fprintf(stderr, "Task not found.\n");
|
||||
} else
|
||||
fprintf(stderr, "Task not found, only deletion by name is "
|
||||
"currently supoprted.\n");
|
||||
}
|
||||
fprintf(stderr, "Not implemented\n");
|
||||
}
|
||||
klist_task_context_deinit(task_ctx);
|
||||
default:;
|
||||
}
|
||||
if (list) klist_list_deinit(list);
|
||||
if (user) klist_user_deinit(user);
|
||||
if (list)
|
||||
klist_list_deinit(list);
|
||||
if (user)
|
||||
klist_user_deinit(user);
|
||||
}
|
||||
|
||||
const int error = ctx->error;
|
||||
|
@ -224,7 +252,8 @@ void setup(klist *ctx, int argc, char **argv) {
|
|||
ctx->cmd = LIST;
|
||||
else if (strcmp(argv[1], "task") == 0)
|
||||
ctx->cmd = TASK;
|
||||
else print_help(argv);
|
||||
else
|
||||
print_help(argv);
|
||||
|
||||
int opt;
|
||||
switch (ctx->cmd) {
|
||||
|
@ -272,12 +301,15 @@ void setup(klist *ctx, int argc, char **argv) {
|
|||
break;
|
||||
default:
|
||||
print_help(argv);
|
||||
fprintf(stderr, ""
|
||||
fprintf(
|
||||
stderr,
|
||||
""
|
||||
"list options:\n"
|
||||
"-a\t\tadd a list\n"
|
||||
"-e\t\tedit a list\n"
|
||||
"-d\t\tdelete a list\n"
|
||||
"-p <preset>\tdefine as preset or use existing one with name <preset>"
|
||||
"-p <preset>\tdefine as preset or use existing one with name "
|
||||
"<preset>"
|
||||
"Not providing a parameter prints all lists and existing presets.");
|
||||
}
|
||||
ctx->cmd_ctx = list_ctx;
|
||||
|
@ -304,7 +336,8 @@ void setup(klist *ctx, int argc, char **argv) {
|
|||
break;
|
||||
default:
|
||||
print_help(argv);
|
||||
fprintf(stderr, ""
|
||||
fprintf(stderr,
|
||||
""
|
||||
"task options:"
|
||||
"-a\tadd a task"
|
||||
"-e\tedit a task"
|
||||
|
@ -315,7 +348,8 @@ void setup(klist *ctx, int argc, char **argv) {
|
|||
ctx->cmd_ctx = task_ctx;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "How did we land here?! Pls report argv[1] = %s\n", argv[1]);
|
||||
fprintf(stderr, "How did we land here?! Pls report argv[1] = %s\n",
|
||||
argv[1]);
|
||||
print_help(argv);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,8 @@ void klist_user_save(klist *ctx, klist_user *user) {
|
|||
if ((result = sqlite3_step(stmt)) == SQLITE_ROW)
|
||||
user->id = sqlite3_column_int(stmt, 1);
|
||||
else
|
||||
fprintf(stderr, "failed to save user: %s - %d\n", sqlite3_errmsg(ctx->db), result);
|
||||
fprintf(stderr, "failed to save user: %s - %d\n", sqlite3_errmsg(ctx->db),
|
||||
result);
|
||||
sqlite3_clear_bindings(stmt);
|
||||
|
||||
if (user->local_id != -1) {
|
||||
|
@ -61,7 +62,8 @@ void klist_user_save(klist *ctx, klist_user *user) {
|
|||
sqlite3_bind_int(stmt, 1, user->id);
|
||||
sqlite3_bind_int(stmt, 2, user->local_id);
|
||||
if ((result = sqlite3_step(stmt)) != SQLITE_ROW)
|
||||
fprintf(stderr, "failed to save logins for user: %s - %d\n", sqlite3_errmsg(ctx->db), result);
|
||||
fprintf(stderr, "failed to save logins for user: %s - %d\n",
|
||||
sqlite3_errmsg(ctx->db), result);
|
||||
sqlite3_clear_bindings(stmt);
|
||||
}
|
||||
}
|
||||
|
@ -78,7 +80,6 @@ void klist_user_deinit(klist_user *user) {
|
|||
free(user);
|
||||
}
|
||||
|
||||
|
||||
klist_stage *klist_stage_init() {
|
||||
klist_stage *stage = malloc(sizeof(klist_stage));
|
||||
stage->id = -1;
|
||||
|
@ -113,7 +114,8 @@ klist_stage *klist_stage_get_by_id(klist *ctx, u_int id) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
klist_stage **klist_stage_get_all_for_list(klist *ctx, u_int id, size_t *count) {
|
||||
klist_stage **klist_stage_get_all_for_list(klist *ctx, u_int id,
|
||||
size_t *count) {
|
||||
sqlite3_stmt *stmt = ctx->stmts[GET_STAGES_FOR_LIST];
|
||||
sqlite3_bind_int(stmt, 1, id);
|
||||
klist_stage **stages = NULL;
|
||||
|
@ -126,7 +128,8 @@ klist_stage **klist_stage_get_all_for_list(klist *ctx, u_int id, size_t *count)
|
|||
stages[stages_len - 1] = klist_stage_init(stmt);
|
||||
}
|
||||
}
|
||||
if (count != NULL) *count = stages_len;
|
||||
if (count != NULL)
|
||||
*count = stages_len;
|
||||
return stages;
|
||||
}
|
||||
|
||||
|
@ -138,16 +141,19 @@ void klist_stage_save(klist *ctx, klist_stage *stage) {
|
|||
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) {
|
||||
stage->id = sqlite3_column_int(stmt, 1);
|
||||
sqlite3_clear_bindings(stmt);
|
||||
} else fprintf(stderr, "failed to save stage: %s - %d\n", sqlite3_errmsg(ctx->db), result);
|
||||
} else
|
||||
fprintf(stderr, "failed to save stage: %s - %d\n", sqlite3_errmsg(ctx->db),
|
||||
result);
|
||||
}
|
||||
|
||||
void klist_stage_deinit(klist_stage *stage) {
|
||||
if (stage->name) free(stage->name);
|
||||
if (stage->desc) free(stage->desc);
|
||||
if (stage->name)
|
||||
free(stage->name);
|
||||
if (stage->desc)
|
||||
free(stage->desc);
|
||||
free(stage);
|
||||
}
|
||||
|
||||
|
||||
klist_list *klist_list_init() {
|
||||
klist_list *list = malloc(sizeof(klist_list));
|
||||
list->id = -1;
|
||||
|
@ -183,7 +189,8 @@ klist_list *klist_list_get_by_id(klist *ctx, u_int id) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
klist_list **klist_list_get_all_by_user(klist *ctx, u_int user_id, size_t *count) {
|
||||
klist_list **klist_list_get_all_by_user(klist *ctx, u_int user_id,
|
||||
size_t *count) {
|
||||
sqlite3_stmt *stmt = ctx->stmts[GET_LISTS_BY_USER];
|
||||
sqlite3_bind_int(stmt, 1, user_id);
|
||||
klist_list **lists = NULL;
|
||||
|
@ -196,11 +203,13 @@ klist_list **klist_list_get_all_by_user(klist *ctx, u_int user_id, size_t *count
|
|||
lists[lists_len - 1] = klist_list_init(stmt);
|
||||
}
|
||||
}
|
||||
if (count != NULL) *count = lists_len;
|
||||
if (count != NULL)
|
||||
*count = lists_len;
|
||||
return lists;
|
||||
}
|
||||
|
||||
klist_list *klist_list_get_by_user_and_name(klist *ctx, u_int user_id, const char *name) {
|
||||
klist_list *klist_list_get_by_user_and_name(klist *ctx, u_int user_id,
|
||||
const char *name) {
|
||||
sqlite3_stmt *stmt = ctx->stmts[GET_LISTS_BY_USER];
|
||||
sqlite3_bind_int(stmt, 1, user_id);
|
||||
sqlite3_bind_text(stmt, 2, name, -1, SQLITE_STATIC);
|
||||
|
@ -220,16 +229,19 @@ void klist_list_save(klist *ctx, klist_list *list) {
|
|||
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) {
|
||||
list->id = sqlite3_column_int(stmt, 1);
|
||||
sqlite3_clear_bindings(stmt);
|
||||
} else fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db), result);
|
||||
} else
|
||||
fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db),
|
||||
result);
|
||||
}
|
||||
|
||||
void klist_list_deinit(klist_list *list) {
|
||||
if (list->name) free(list->name);
|
||||
if (list->desc) free(list->desc);
|
||||
if (list->name)
|
||||
free(list->name);
|
||||
if (list->desc)
|
||||
free(list->desc);
|
||||
free(list);
|
||||
}
|
||||
|
||||
|
||||
klist_task *klist_task_init() {
|
||||
klist_task *task = malloc(sizeof(klist_task));
|
||||
task->id = -1;
|
||||
|
@ -278,7 +290,8 @@ klist_task **klist_task_get_for_list(klist *ctx, u_int list_id, size_t *count) {
|
|||
return tasks;
|
||||
}
|
||||
|
||||
klist_task *klist_task_get_for_list_by_name(klist *ctx, u_int list_id, const char *name) {
|
||||
klist_task *klist_task_get_for_list_by_name(klist *ctx, u_int list_id,
|
||||
const char *name) {
|
||||
sqlite3_stmt *stmt = ctx->stmts[GET_TASKS_FOR_LIST_BY_NAME];
|
||||
sqlite3_bind_int(stmt, 1, list_id);
|
||||
sqlite3_bind_text(stmt, 2, name, -1, SQLITE_STATIC);
|
||||
|
@ -296,23 +309,30 @@ void klist_task_save(klist *ctx, klist_task *task) {
|
|||
sqlite3_bind_text(stmt, 1, (char *)task->name, -1, SQLITE_STATIC);
|
||||
sqlite3_bind_text(stmt, 2, (char *)task->desc, -1, SQLITE_STATIC);
|
||||
sqlite3_bind_int(stmt, 3, task->stage_id);
|
||||
if (task->due) sqlite3_bind_int(stmt, 4, task->due);
|
||||
if (task->target_stage) sqlite3_bind_int(stmt, 5, task->target_stage);
|
||||
if (task->due)
|
||||
sqlite3_bind_int(stmt, 4, task->due);
|
||||
if (task->target_stage)
|
||||
sqlite3_bind_int(stmt, 5, task->target_stage);
|
||||
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) {
|
||||
task->id = sqlite3_column_int(stmt, 1);
|
||||
sqlite3_clear_bindings(stmt);
|
||||
} else fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db), result);
|
||||
} else
|
||||
fprintf(stderr, "failed to save list: %s - %d\n", sqlite3_errmsg(ctx->db),
|
||||
result);
|
||||
}
|
||||
void klist_task_delete(klist *ctx, klist_task *task) {
|
||||
sqlite3_stmt *stmt = ctx->stmts[DEL_TASK];
|
||||
sqlite3_bind_int(stmt, 1, task->id);
|
||||
if (sqlite3_step(stmt) == SQLITE_DONE)
|
||||
sqlite3_clear_bindings(stmt);
|
||||
else fprintf(stderr, "failed to delete task: %s\n", sqlite3_errmsg(ctx->db));
|
||||
else
|
||||
fprintf(stderr, "failed to delete task: %s\n", sqlite3_errmsg(ctx->db));
|
||||
}
|
||||
|
||||
void klist_task_deinit(klist_task *task) {
|
||||
if (task->name) free(task->name);
|
||||
if (task->desc) free(task->desc);
|
||||
if (task->name)
|
||||
free(task->name);
|
||||
if (task->desc)
|
||||
free(task->desc);
|
||||
free(task);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
#include "include/sql.h"
|
||||
|
||||
|
||||
const char *klist_sql_get(const enum KLIST_SQL sql) {
|
||||
switch (sql) {
|
||||
case INIT: return
|
||||
"create table if not exists users (\n"
|
||||
case INIT:
|
||||
return "create table if not exists users (\n"
|
||||
" id integer primary key,\n"
|
||||
" name text not null\n"
|
||||
");\n"
|
||||
|
@ -34,7 +33,8 @@ const char *klist_sql_get(const enum KLIST_SQL sql) {
|
|||
" list_id integer not null,\n"
|
||||
" foreign key (list_id) references lists(id)\n"
|
||||
");\n"
|
||||
"-- this currently enables moving tasks _between lists_ (planned of course)\n"
|
||||
"-- this currently enables moving tasks _between lists_ (planned of "
|
||||
"course)\n"
|
||||
"create table if not exists tasks (\n"
|
||||
" id integer primary key,\n"
|
||||
" name text not null,\n"
|
||||
|
@ -45,33 +45,70 @@ const char *klist_sql_get(const enum KLIST_SQL sql) {
|
|||
" foreign key (stage) references task_stages(id),\n"
|
||||
" foreign key (target_stage) references task_stages(id)\n"
|
||||
")";
|
||||
case ADD_LOGIN: return "insert into user_logins (user_id, local_id) values (?1, ?2) on conflict (id) do update set user_id=excluded.user_id, local_id=excluded.local_id returning id";
|
||||
case ADD_USER: return "insert into users (name) values (?1) on conflict (id) do update set name=excluded.name returning id";
|
||||
case GET_USER: return "select users.*, user_logins.local_id from users inner join user_logins on user_logins.user_id = users.id where users.id = ?1";
|
||||
case GET_USER_BY_LOCAL: return "select * from users inner join user_logins on user_logins.user_id = users.id where user_logins.local_id = ?1";
|
||||
case GET_USERS: return "select * from users";
|
||||
case MOD_USER_NAME: return "update users set name = ?1 where id = ?2";
|
||||
case DEL_USER: return "delete from users where id = ?1";
|
||||
case ADD_LIST: return "insert into lists (name, desc, is_preset) values (?1, ?2, ?3)";
|
||||
case GET_LIST: return "select * from lists where id = ?1";
|
||||
case GET_LISTS: return "select * from lists";
|
||||
case GET_LISTS_BY_USER: return "select * from lists inner join user_lists on user_lists.list_id = lists.id where user_lists.user_id = ?1";
|
||||
case GET_LISTS_BY_USER_NAME: return "select * from lists inner join user_lists on user_lists.list_id = lists.id where user_lists.user_id = ?1 and lists.name like '?2'";
|
||||
case MOD_LIST_NAME: return "update lists set name = ?1 where id = ?2";
|
||||
case DEL_LIST: return "delete from lists where id = ?1";
|
||||
case ADD_STAGE: return "insert into task_stages (name, desc, list_id) values (?1, ?2, ?3)";
|
||||
case GET_STAGE: return "select * from task_stages where id = ?1";
|
||||
case GET_STAGES_FOR_LIST: return "select * from task_stages where list_id = ?1";
|
||||
case DEL_STAGE: return "delete from task_stages where id = ?1";
|
||||
case ADD_TASK: return "insert into tasks (name, desc, stage, due, target_stage) values (?1, ?2, ?3, ?4, ?5);";
|
||||
case GET_TASK: return "select * from tasks where id = ?1";
|
||||
case GET_TASKS: return "select * from tasks;";
|
||||
case GET_TASKS_FOR_LIST: return "select tasks.* from tasks join task_stages on task_stages.id = tasks.stage where task_stages.list_id = ?1";
|
||||
case GET_TASKS_FOR_LIST_BY_NAME: return "select tasks.* from tasks join task_stages on task_stages.id = tasks.stage where task_stages.list_id = ?1 and tasks.name like ?2";
|
||||
case MOD_TASK_NAME: return "update tasks set name = ?1 where id = ?2";
|
||||
case MOD_TASK_DESCRIPTION: return "update tasks set desc = ?1 where id = ?2";
|
||||
case DEL_TASK: return "delete from tasks where id = ?1";
|
||||
case _KLIST_SQL_COUNT: return "";
|
||||
case ADD_LOGIN:
|
||||
return "insert into user_logins (user_id, local_id) values (?1, ?2) on "
|
||||
"conflict (id) do update set user_id=excluded.user_id, "
|
||||
"local_id=excluded.local_id returning id";
|
||||
case ADD_USER:
|
||||
return "insert into users (name) values (?1) on conflict (id) do update "
|
||||
"set name=excluded.name returning id";
|
||||
case GET_USER:
|
||||
return "select users.*, user_logins.local_id from users inner join "
|
||||
"user_logins on user_logins.user_id = users.id where users.id = ?1";
|
||||
case GET_USER_BY_LOCAL:
|
||||
return "select * from users inner join user_logins on user_logins.user_id "
|
||||
"= users.id where user_logins.local_id = ?1";
|
||||
case GET_USERS:
|
||||
return "select * from users";
|
||||
case MOD_USER_NAME:
|
||||
return "update users set name = ?1 where id = ?2";
|
||||
case DEL_USER:
|
||||
return "delete from users where id = ?1";
|
||||
case ADD_LIST:
|
||||
return "insert into lists (name, desc, is_preset) values (?1, ?2, ?3)";
|
||||
case GET_LIST:
|
||||
return "select * from lists where id = ?1";
|
||||
case GET_LISTS:
|
||||
return "select * from lists";
|
||||
case GET_LISTS_BY_USER:
|
||||
return "select * from lists inner join user_lists on user_lists.list_id = "
|
||||
"lists.id where user_lists.user_id = ?1";
|
||||
case GET_LISTS_BY_USER_NAME:
|
||||
return "select * from lists inner join user_lists on user_lists.list_id = "
|
||||
"lists.id where user_lists.user_id = ?1 and lists.name like '?2'";
|
||||
case MOD_LIST_NAME:
|
||||
return "update lists set name = ?1 where id = ?2";
|
||||
case DEL_LIST:
|
||||
return "delete from lists where id = ?1";
|
||||
case ADD_STAGE:
|
||||
return "insert into task_stages (name, desc, list_id) values (?1, ?2, ?3)";
|
||||
case GET_STAGE:
|
||||
return "select * from task_stages where id = ?1";
|
||||
case GET_STAGES_FOR_LIST:
|
||||
return "select * from task_stages where list_id = ?1";
|
||||
case DEL_STAGE:
|
||||
return "delete from task_stages where id = ?1";
|
||||
case ADD_TASK:
|
||||
return "insert into tasks (name, desc, stage, due, target_stage) values "
|
||||
"(?1, ?2, ?3, ?4, ?5);";
|
||||
case GET_TASK:
|
||||
return "select * from tasks where id = ?1";
|
||||
case GET_TASKS:
|
||||
return "select * from tasks;";
|
||||
case GET_TASKS_FOR_LIST:
|
||||
return "select tasks.* from tasks join task_stages on task_stages.id = "
|
||||
"tasks.stage where task_stages.list_id = ?1";
|
||||
case GET_TASKS_FOR_LIST_BY_NAME:
|
||||
return "select tasks.* from tasks join task_stages on task_stages.id = "
|
||||
"tasks.stage where task_stages.list_id = ?1 and tasks.name like ?2";
|
||||
case MOD_TASK_NAME:
|
||||
return "update tasks set name = ?1 where id = ?2";
|
||||
case MOD_TASK_DESCRIPTION:
|
||||
return "update tasks set desc = ?1 where id = ?2";
|
||||
case DEL_TASK:
|
||||
return "delete from tasks where id = ?1";
|
||||
case _KLIST_SQL_COUNT:
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
|
@ -37,9 +37,7 @@ klist_user_context *klist_user_context_init(klist *list) {
|
|||
ctx->cmd = -1;
|
||||
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 *ctx = malloc(sizeof(klist_list_context));
|
||||
|
@ -52,12 +50,16 @@ klist_list_context *klist_list_context_init(klist *list) {
|
|||
return ctx;
|
||||
}
|
||||
void klist_list_context_deinit(klist_list_context *ctx) {
|
||||
if (ctx->name) free(ctx->name);
|
||||
if (ctx->desc) free(ctx->desc);
|
||||
if (ctx->preset) free(ctx->preset);
|
||||
if (ctx->name)
|
||||
free(ctx->name);
|
||||
if (ctx->desc)
|
||||
free(ctx->desc);
|
||||
if (ctx->preset)
|
||||
free(ctx->preset);
|
||||
if (ctx->stages) {
|
||||
int i = 0;
|
||||
for (; i < ctx->stages_len; i++) free(ctx->stages[i]);
|
||||
for (; i < ctx->stages_len; i++)
|
||||
free(ctx->stages[i]);
|
||||
free(ctx->stages);
|
||||
}
|
||||
free(ctx);
|
||||
|
@ -72,9 +74,12 @@ klist_task_context *klist_task_context_init(klist *list) {
|
|||
return ctx;
|
||||
}
|
||||
void klist_task_context_deinit(klist_task_context *ctx) {
|
||||
if (ctx->name) free(ctx->name);
|
||||
if (ctx->list) free(ctx->list);
|
||||
if (ctx->stage) free(ctx->stage);
|
||||
if (ctx->name)
|
||||
free(ctx->name);
|
||||
if (ctx->list)
|
||||
free(ctx->list);
|
||||
if (ctx->stage)
|
||||
free(ctx->stage);
|
||||
free(ctx);
|
||||
}
|
||||
|
||||
|
@ -90,18 +95,18 @@ void klist_sql_prepare(klist *ctx, char *db) {
|
|||
char *errmsg = NULL;
|
||||
sqlite3_exec(ctx->db, klist_sql_get(INIT), NULL, NULL, &errmsg);
|
||||
if (errmsg) {
|
||||
fprintf(stderr, "Database initialization failed (%s), expect issues.\n", sqlite3_errmsg(ctx->db));
|
||||
fprintf(stderr, "Database initialization failed (%s), expect issues.\n",
|
||||
sqlite3_errmsg(ctx->db));
|
||||
sqlite3_free(errmsg);
|
||||
}
|
||||
int i = 0;
|
||||
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));
|
||||
}
|
||||
|
||||
void klist_sql_seed(klist *ctx) {
|
||||
|
||||
}
|
||||
void klist_sql_seed(klist *ctx) {}
|
||||
|
||||
/*
|
||||
* assuring things
|
||||
|
|
Loading…
Add table
Reference in a new issue