bug fixing (you can now actually move tasks between stages :3)
This commit is contained in:
parent
307c671a65
commit
45d537d264
3 changed files with 30 additions and 13 deletions
|
@ -165,8 +165,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: ", task_ctx->stage);
|
||||
i = 0;
|
||||
for (; i < stages_len; i++)
|
||||
fprintf(stderr, "%s ", (char *)stages[i]->name);
|
||||
|
@ -231,7 +231,7 @@ int main(int argc, char **argv) {
|
|||
}
|
||||
}
|
||||
} else
|
||||
fprintf(stderr, "List not found");
|
||||
fprintf(stderr, "list not found\n");
|
||||
case TASK_DELETE:
|
||||
klist_assure_user(ctx, getuid(), getlogin());
|
||||
user = klist_user_get_by_local(ctx, getuid());
|
||||
|
@ -361,12 +361,12 @@ void setup(klist *ctx, int argc, char **argv) {
|
|||
|
||||
while ((opt = getopt(argc, argv, "aedl:n:s:")) != -1)
|
||||
switch (opt) {
|
||||
case 'a':
|
||||
/*case 'a':
|
||||
task_ctx->cmd = TASK_ADD;
|
||||
break;
|
||||
case 'e':
|
||||
task_ctx->cmd = TASK_EDIT;
|
||||
break;
|
||||
break;*/
|
||||
case 'd':
|
||||
task_ctx->cmd = TASK_DELETE;
|
||||
break;
|
||||
|
@ -390,6 +390,8 @@ void setup(klist *ctx, int argc, char **argv) {
|
|||
"Not providing a parameter prints all tasks of a list.");
|
||||
}
|
||||
|
||||
if (task_ctx->cmd != TASK_DELETE)
|
||||
task_ctx->cmd = TASK_ADD;
|
||||
ctx->cmd_ctx = task_ctx;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -266,6 +266,9 @@ klist_task *klist_task_init_from_sql(sqlite3_stmt *stmt) {
|
|||
task->name = (unsigned char *)strdup((char *)sqlite3_column_text(stmt, 1));
|
||||
if (sqlite3_column_bytes(stmt, 2) > 0)
|
||||
task->desc = (unsigned char *)strdup((char *)sqlite3_column_text(stmt, 2));
|
||||
task->stage_id = sqlite3_column_int(stmt, 3);
|
||||
task->due = sqlite3_column_int(stmt, 4);
|
||||
task->target_stage = sqlite3_column_int(stmt, 5);
|
||||
return task;
|
||||
}
|
||||
|
||||
|
@ -305,6 +308,9 @@ klist_task *klist_task_get_for_list_by_name(klist *ctx, u_int list_id,
|
|||
sqlite3_bind_text(stmt, 2, name, -1, SQLITE_STATIC);
|
||||
if (sqlite3_step(stmt) == SQLITE_ROW)
|
||||
task = klist_task_init_from_sql(stmt);
|
||||
else
|
||||
fprintf(stderr, "no tasks found for list %d, name '%s': %s\n", list_id,
|
||||
name, sqlite3_errmsg(ctx->db));
|
||||
sqlite3_reset(stmt);
|
||||
return task;
|
||||
}
|
||||
|
@ -312,13 +318,15 @@ klist_task *klist_task_get_for_list_by_name(klist *ctx, u_int list_id,
|
|||
void klist_task_save(klist *ctx, klist_task *task) {
|
||||
sqlite3_stmt *stmt = ctx->stmts[ADD_TASK];
|
||||
int result = 0;
|
||||
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->id > -1)
|
||||
sqlite3_bind_int(stmt, 1, task->id);
|
||||
sqlite3_bind_text(stmt, 2, (char *)task->name, -1, SQLITE_STATIC);
|
||||
sqlite3_bind_text(stmt, 3, (char *)task->desc, -1, SQLITE_STATIC);
|
||||
sqlite3_bind_int(stmt, 4, task->stage_id);
|
||||
if (task->due)
|
||||
sqlite3_bind_int(stmt, 4, task->due);
|
||||
sqlite3_bind_int(stmt, 5, task->due);
|
||||
if (task->target_stage)
|
||||
sqlite3_bind_int(stmt, 5, task->target_stage);
|
||||
sqlite3_bind_int(stmt, 6, task->target_stage);
|
||||
if ((result = sqlite3_step(stmt)) == SQLITE_ROW) {
|
||||
task->id = sqlite3_column_int(stmt, 0);
|
||||
} else
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
#include "include/sql.h"
|
||||
|
||||
/*
|
||||
* TODO: update queries so that upserts actually can be used as such.
|
||||
* details: ids are mostly missing in the insert statements meaning that there
|
||||
* can be no id conflicts
|
||||
*/
|
||||
|
||||
const char *klist_sql_get(const enum KLIST_SQL sql) {
|
||||
switch (sql) {
|
||||
case INIT:
|
||||
|
@ -95,8 +101,9 @@ const char *klist_sql_get(const enum KLIST_SQL sql) {
|
|||
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) on conflict (id) do update set "
|
||||
return "insert into tasks (id, name, desc, stage, due, target_stage) "
|
||||
"values "
|
||||
"(?1, ?2, ?3, ?4, ?5, ?6) on conflict (id) do update set "
|
||||
"name=excluded.name, desc=excluded.desc, stage=excluded.stage, "
|
||||
"due=excluded.due, target_stage=excluded.target_stage returning id";
|
||||
case GET_TASK:
|
||||
|
@ -108,7 +115,7 @@ const char *klist_sql_get(const enum KLIST_SQL sql) {
|
|||
"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";
|
||||
"tasks.stage where task_stages.list_id = ?1 and tasks.name = ?2";
|
||||
case MOD_TASK_NAME:
|
||||
return "update tasks set name = ?1 where id = ?2";
|
||||
case MOD_TASK_DESCRIPTION:
|
||||
|
|
Loading…
Add table
Reference in a new issue