X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Ftw.c;h=8c685926e8fdae94b465e8a5cb4ebb79f2cc4203;hb=5b28468c1d7f28cdb664c6e23d71c48d4645901f;hp=bad97fcf2bd8059ff600da72770e162b5288ea89;hpb=f8fe1a50296d8bb04d9a4438beefc8cd57e29978;p=ptask.git diff --git a/src/tw.c b/src/tw.c index bad97fc..8c68592 100644 --- a/src/tw.c +++ b/src/tw.c @@ -16,13 +16,15 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ +#define _GNU_SOURCE #include #include #include #include +#include -#include +#include #include #include @@ -30,6 +32,17 @@ #include #include "tw.h" +struct tm *parse_time(const char *t) +{ + struct tm *tm; + + tm = malloc(sizeof(struct tm)); + memset(tm, 0, sizeof(struct tm)); + strptime(t, "%Y%m%dT%H%M%S%Z", tm); + + return tm; +} + static char *task_exec(char *opts) { FILE *f; @@ -150,7 +163,7 @@ struct task **tw_get_all_tasks(const char *status) struct json_object *jtasks, *jtask, *json; struct task **tasks; char *opts; - const char *urg; + const char *urg; opts = malloc(strlen("export status:") + strlen(status) + 1); @@ -199,13 +212,30 @@ struct task **tw_get_all_tasks(const char *status) 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; + 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); + + json = json_object_object_get(jtask, "entry"); + tasks[i]->entry = parse_time(json_object_get_string(json)); + + json = json_object_object_get(jtask, "due"); + if (json) + tasks[i]->due + = parse_time(json_object_get_string(json)); + else + tasks[i]->due = NULL; + + json = json_object_object_get(jtask, "start"); + if (json) + tasks[i]->start + = parse_time(json_object_get_string(json)); + else + tasks[i]->start = NULL; } tasks[n] = NULL; @@ -394,6 +424,9 @@ static void task_free(struct task *task) free(task->project); free(task->priority); free(task->urgency); + free(task->entry); + free(task->due); + free(task->start); free(task); }