/*
- * Copyright (C) 2010-2012 jeanfi@gmail.com
+ * Copyright (C) 2012-2013 jeanfi@gmail.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/stat.h>
+#include <json/json.h>
+
+#include "note.h"
+#include "tw.h"
-char *task_exec(char *opts)
+static int has_taskrc()
+{
+ char *home, *path;
+ int ret;
+ struct stat st;
+
+ home = getenv("HOME");
+
+ if (!home) {
+ fprintf(stderr, "HOME environment variable not defined\n");
+ return 0;
+ }
+
+ path = malloc(strlen(home) + 1 + strlen(".taskrc") + 1);
+ sprintf(path, "%s/%s", home, ".taskrc");
+
+ ret = lstat(path, &st);
+
+ free(path);
+
+ return ret == 0;
+
+}
+
+static char *task_exec(char *opts)
{
FILE *f;
int ret;
size_t s;
char *str, *tmp, *cmd, buf[1024];
+ if (!has_taskrc())
+ return NULL;
+
cmd = malloc(strlen("task rc.json.array=on ") + strlen(opts) + 1);
strcpy(cmd, "task rc.json.array=on ");
strcat(cmd, opts);
return str;
}
-#include <json/json.h>
-
-#include "tw.h"
-
static struct json_object *task_exec_json(char *opts)
{
struct json_object *o;
return NULL;
}
-struct task **get_all_tasks(const char *status)
+struct task **tw_get_all_tasks(const char *status)
{
int i, n;
struct json_object *jtasks, *jtask, *json;
else
tasks[i]->project = NULL;
+ json = json_object_object_get(jtask, "priority");
+ if (json)
+ tasks[i]->priority
+ = strdup(json_object_get_string(json));
+ else
+ tasks[i]->priority = strdup("");
+
json = json_object_object_get(jtask, "uuid");
tasks[i]->uuid = strdup(json_object_get_string(json));
- tasks[i]->note = NULL;
+ tasks[i]->note = note_get(tasks[i]->uuid);
}
tasks[n] = NULL;
return tasks;
}
-char *escape(const char *txt)
+static char *escape(const char *txt)
{
char *result;
char *c;
return result;
}
+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("\"")
+ + 1);
+ sprintf(opts, " %s modify \"%s\"", uuid, str);
+
+ task_exec(opts);
+
+ free(str);
+ free(opts);
+}
+
+void tw_modify_project(const char *uuid, const char *newproject)
+{
+ char *str;
+ char *opts;
+
+ str = escape(newproject);
+
+ opts = malloc(1
+ + strlen(uuid)
+ + strlen(" modify project:\"")
+ + strlen(str)
+ + strlen("\"")
+ + 1);
+ sprintf(opts, " %s modify project:\"%s\"", uuid, str);
+
+ task_exec(opts);
+
+ free(str);
+ free(opts);
+}
+
+void tw_modify_priority(const char *uuid, const char *priority)
+{
+ char *str;
+ char *opts;
+
+ str = escape(priority);
+
+ opts = malloc(1
+ + strlen(uuid)
+ + strlen(" modify priority:\"")
+ + strlen(str)
+ + strlen("\"")
+ + 1);
+ sprintf(opts, " %s modify priority:\"%s\"", uuid, str);
+
+ task_exec(opts);
+
+ free(str);
+ free(opts);
+}
+
+void tw_add(const char *newdesc)
+{
+ char *str;
+ char *opts;
+
+ str = escape(newdesc);
+
+ opts = malloc(1
+ + strlen(" add \"")
+ + strlen(str)
+ + strlen("\"")
+ + 1);
+ sprintf(opts, " add \"%s\"", str);
+
+ task_exec(opts);
+
+ free(str);
+ free(opts);
+}
+
+void tw_done(const char *uuid)
+{
+ char *opts;
+
+ opts = malloc(1
+ + strlen(uuid)
+ + strlen(" done")
+ + 1);
+ sprintf(opts, " %s done", uuid);
+
+ task_exec(opts);
+
+ free(opts);
+}
+
+static void task_free(struct task *task)
+{
+ if (!task)
+ return ;
+
+ free(task->description);
+ free(task->status);
+ free(task->uuid);
+ free(task->note);
+ free(task->project);
+ free(task->priority);
+
+ free(task);
+}
+
+void tw_task_list_free(struct task **tasks)
+{
+ struct task **cur;
+
+ if (!tasks)
+ return ;
+
+ for (cur = tasks; *cur; cur++)
+ task_free(*cur);
+
+ free(tasks);
+}