X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Ftw.c;h=e48ab59f01ce3a43c0b04f75cddf6e593a3082e0;hb=017d1fb012447d9b60b71e55fc637bf2422f8d5b;hp=6c256977c6e607613a1ee6f32abf366be3629982;hpb=1ff664c141ac890095ba33d96d28aca87f8b2ff7;p=ptask.git diff --git a/src/tw.c b/src/tw.c index 6c25697..e48ab59 100644 --- a/src/tw.c +++ b/src/tw.c @@ -37,6 +37,8 @@ static char *task_exec(char *opts) size_t s; char *str, *tmp, *cmd, buf[1024]; + log_fct_enter(); + cmd = malloc(strlen("task ") + strlen(opts) + 1); strcpy(cmd, "task "); strcat(cmd, opts); @@ -67,6 +69,8 @@ static char *task_exec(char *opts) if (ret == -1) log_err("pclose fails"); + log_fct_exit(); + return str; } @@ -146,6 +150,7 @@ struct task **tw_get_all_tasks(const char *status) struct json_object *jtasks, *jtask, *json; struct task **tasks; char *opts; + const char *urg; opts = malloc(strlen("export status:") + strlen(status) + 1); @@ -193,6 +198,13 @@ struct task **tw_get_all_tasks(const char *status) json = json_object_object_get(jtask, "uuid"); tasks[i]->uuid = strdup(json_object_get_string(json)); + json = json_object_object_get(jtask, "urgency"); + urg = json_object_get_string(json); + if (urg) + tasks[i]->urgency = strdup(urg); + else + tasks[i]->urgency = NULL; + tasks[i]->note = note_get(tasks[i]->uuid); } @@ -276,6 +288,8 @@ void tw_modify_priority(const char *uuid, const char *priority) char *str; char *opts; + log_fct_enter(); + str = escape(priority); opts = malloc(1 @@ -290,15 +304,19 @@ void tw_modify_priority(const char *uuid, const char *priority) free(str); free(opts); + + log_fct_exit(); } void tw_add(const char *newdesc, const char *prj, const char *prio) { char *opts, *eprj; + log_fct_enter(); + eprj = escape(prj); - opts = malloc(strlen(" add") + opts = malloc(strlen("add") + strlen(" priority:") + 1 + strlen(" project:\\\"") @@ -309,7 +327,7 @@ void tw_add(const char *newdesc, const char *prj, const char *prio) + strlen("\"") + 1); - strcpy(opts, " add"); + strcpy(opts, "add"); if (prio && strlen(prio) == 1) { strcat(opts, " priority:"); @@ -324,12 +342,14 @@ void tw_add(const char *newdesc, const char *prj, const char *prio) strcat(opts, " \""); strcat(opts, newdesc); - strcat(opts, " \""); + strcat(opts, "\""); tw_exec(opts); free(opts); free(eprj); + + log_fct_exit(); } void tw_done(const char *uuid) @@ -347,6 +367,21 @@ void tw_done(const char *uuid) free(opts); } +void tw_task_remove(const char *uuid) +{ + char *opts; + + opts = malloc(1 + + strlen(uuid) + + strlen(" delete") + + 1); + sprintf(opts, " %s delete", uuid); + + tw_exec(opts); + + free(opts); +} + static void task_free(struct task *task) { if (!task) @@ -358,6 +393,7 @@ static void task_free(struct task *task) free(task->note); free(task->project); free(task->priority); + free(task->urgency); free(task); } @@ -375,13 +411,36 @@ void tw_task_list_free(struct task **tasks) free(tasks); } -static struct project *project_list_get(struct project **prj, const char *name) +static void project_free(struct project *p) { - while (*prj) - if (!strcmp((*prj)->name, name)) - return *prj; - else - prj++; + if (!p) + return ; + + free(p->name); + free(p); +} + +void tw_project_list_free(struct project **prjs) +{ + struct project **cur; + + if (!prjs) + return ; + + for (cur = prjs; *cur; cur++) + project_free(*cur); + + free(prjs); +} + +static struct project *project_list_get(struct project **prjs, const char *name) +{ + struct project **cur; + + for (cur = prjs; *cur; cur++) + if (!strcmp((*cur)->name, name)) + return *cur; + return NULL; } @@ -403,10 +462,11 @@ struct project **tw_get_projects(struct task **tasks) struct project **prjs, **tmp, *prj; const char *prj_name; - log_debug("tw_get_projects()"); + log_fct_enter(); - prjs = malloc(sizeof(struct project *)); - *prjs = NULL; + prjs = malloc(2 * sizeof(struct project *)); + prjs[0] = project_new("ALL", 0); + prjs[1] = NULL; for (t_cur = tasks; *t_cur; t_cur++) { prj_name = (*t_cur)->project; @@ -415,13 +475,16 @@ struct project **tw_get_projects(struct task **tasks) prj->count++; } else { prj = project_new(prj_name, 1); - + tmp = (struct project **)list_add((void **)prjs, prj); - - list_free((void **)prjs); + + free(prjs); prjs = tmp; } + prjs[0]->count++; } + log_fct_exit(); + return prjs; }