added urgency column
[ptask.git] / src / tw.c
index 6c25697..8235784 100644 (file)
--- 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;
 }
 
@@ -193,6 +197,9 @@ 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");
+               tasks[i]->urgency = strdup(json_object_get_string(json));
+
                tasks[i]->note = note_get(tasks[i]->uuid);
        }
 
@@ -276,6 +283,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 +299,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 +322,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 +337,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 +362,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 +388,7 @@ static void task_free(struct task *task)
        free(task->note);
        free(task->project);
        free(task->priority);
+       free(task->urgency);
 
        free(task);
 }
@@ -375,13 +406,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 +457,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 +470,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;
 }