X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Ftw.c;h=6c256977c6e607613a1ee6f32abf366be3629982;hb=1ff664c141ac890095ba33d96d28aca87f8b2ff7;hp=cbf3d610efef631c5abbbe3735708a294f0ed377;hpb=2a51512c32c229eb2d6a8aeb9aa4a78d1f52256d;p=ptask.git diff --git a/src/tw.c b/src/tw.c index cbf3d61..6c25697 100644 --- a/src/tw.c +++ b/src/tw.c @@ -24,6 +24,7 @@ #include +#include #include #include "note.h" #include @@ -180,7 +181,7 @@ struct task **tw_get_all_tasks(const char *status) tasks[i]->project = strdup(json_object_get_string(json)); else - tasks[i]->project = NULL; + tasks[i]->project = strdup(""); json = json_object_object_get(jtask, "priority"); if (json) @@ -234,22 +235,18 @@ static char *escape(const char *txt) void tw_modify_description(const char *uuid, const char *newdesc) { - char *str; char *opts; - str = escape(newdesc); - opts = malloc(1 + strlen(uuid) + strlen(" modify :\"") - + strlen(str) + + strlen(newdesc) + strlen("\"") + 1); - sprintf(opts, " %s modify \"%s\"", uuid, str); + sprintf(opts, " %s modify \"%s\"", uuid, newdesc); tw_exec(opts); - free(str); free(opts); } @@ -377,3 +374,54 @@ void tw_task_list_free(struct task **tasks) free(tasks); } + +static struct project *project_list_get(struct project **prj, const char *name) +{ + while (*prj) + if (!strcmp((*prj)->name, name)) + return *prj; + else + prj++; + return NULL; +} + +static struct project *project_new(const char *name, int count) +{ + struct project *prj; + + prj = malloc(sizeof(struct project)); + + prj->name = strdup(name); + prj->count = count; + + return prj; +} + +struct project **tw_get_projects(struct task **tasks) +{ + struct task **t_cur; + struct project **prjs, **tmp, *prj; + const char *prj_name; + + log_debug("tw_get_projects()"); + + prjs = malloc(sizeof(struct project *)); + *prjs = NULL; + + for (t_cur = tasks; *t_cur; t_cur++) { + prj_name = (*t_cur)->project; + prj = project_list_get(prjs, prj_name); + if (prj) { + prj->count++; + } else { + prj = project_new(prj_name, 1); + + tmp = (struct project **)list_add((void **)prjs, prj); + + list_free((void **)prjs); + prjs = tmp; + } + } + + return prjs; +}