bug fixing (you can now actually move tasks between stages :3)

This commit is contained in:
theBreadCompany 2025-06-12 13:54:05 +02:00
parent 307c671a65
commit 45d537d264
3 changed files with 30 additions and 13 deletions

View file

@ -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:

View file

@ -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

View file

@ -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: