summaryrefslogtreecommitdiff
path: root/src/taskmanager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/taskmanager.cc')
-rw-r--r--src/taskmanager.cc546
1 files changed, 297 insertions, 249 deletions
diff --git a/src/taskmanager.cc b/src/taskmanager.cc
index 38d7893..3fafb4e 100644
--- a/src/taskmanager.cc
+++ b/src/taskmanager.cc
@@ -43,317 +43,365 @@ TaskManager task_manager;
static bool isProtected(taskid_t id)
{
- return id < FIRST_TASK_ID;
+ return id < FIRST_TASK_ID;
}
-TaskManager::TaskManager() {
- idCount = FIRST_TASK_ID;
+TaskManager::TaskManager()
+{
+ idCount = FIRST_TASK_ID;
}
-TaskManager::~TaskManager() {
+TaskManager::~TaskManager()
+{
}
void TaskManager::init(std::string filename)
{
- DEBUG(taskmgr, "Reading tasks from file: %s\n", filename.c_str());
- file = filename;
-
- FILE *fp = fopen(file.c_str(), "r");
- if(fp) {
- std::string xml;
- while(!feof(fp)) {
- char buf[64];
- size_t sz = fread(buf, 1, sizeof(buf), fp);
- xml.append(buf, sz);
- }
- tree.fromXML(xml);
- fclose(fp);
- } else {
-
- // Create new basis config
- task_t t;
-
- t.attributes["title"] = "root";
- t.id = ROOT_ID;
- tree.insertAsChild(0, ROOT_ID, t);
-
- t.attributes["title"] = "Finished";
- t.id = FINISHED_ID;
- tree.insertAsChild(ROOT_ID, FINISHED_ID, t);
-
- t.attributes["title"] = "Backlog";
- t.id = BACKLOG_ID;
- tree.insertAsChild(ROOT_ID, BACKLOG_ID, t);
-
- t.attributes["title"] = "Lost+Found";
- t.id = LOSTFOUND_ID;
- tree.insertAsChild(ROOT_ID, LOSTFOUND_ID, t);
-
- t.attributes["title"] = "Projects";
- t.id = PROJECTS_ID;
- tree.insertAsChild(ROOT_ID, PROJECTS_ID, t);
- }
-
- tree.toStdOut();
+ DEBUG(taskmgr, "Reading tasks from file: %s\n", filename.c_str());
+ file = filename;
+
+ FILE *fp = fopen(file.c_str(), "r");
+ if(fp)
+ {
+ std::string xml;
+ while(!feof(fp))
+ {
+ char buf[64];
+ size_t sz = fread(buf, 1, sizeof(buf), fp);
+ xml.append(buf, sz);
+ }
+ tree.fromXML(xml);
+ fclose(fp);
+ }
+ else
+ {
+
+ // Create new basis config
+ task_t t;
+
+ t.attributes["title"] = "root";
+ t.id = ROOT_ID;
+ tree.insertAsChild(0, ROOT_ID, t);
+
+ t.attributes["title"] = "Finished";
+ t.id = FINISHED_ID;
+ tree.insertAsChild(ROOT_ID, FINISHED_ID, t);
+
+ t.attributes["title"] = "Backlog";
+ t.id = BACKLOG_ID;
+ tree.insertAsChild(ROOT_ID, BACKLOG_ID, t);
+
+ t.attributes["title"] = "Lost+Found";
+ t.id = LOSTFOUND_ID;
+ tree.insertAsChild(ROOT_ID, LOSTFOUND_ID, t);
+
+ t.attributes["title"] = "Projects";
+ t.id = PROJECTS_ID;
+ tree.insertAsChild(ROOT_ID, PROJECTS_ID, t);
+ }
+
+ tree.toStdOut();
}
-task_t TaskManager::task(taskid_t t) {
- return tree.data(t);
+task_t TaskManager::task(taskid_t t)
+{
+ return tree.data(t);
}
-taskid_t TaskManager::createId() {
- return tree.createId();
+taskid_t TaskManager::createId()
+{
+ return tree.createId();
}
-TaskIdListPair TaskManager::moveTask(taskid_t id, taskid_t to)
- throw (std::exception) {
-
- if(isProtected(id)) return TaskIdListPair();
+TaskIdListPair TaskManager::moveTask(taskid_t id, taskid_t to)
+ throw (std::exception)
+{
+ if(isProtected(id))
+ {
+ return TaskIdListPair();
+ }
- if(id == to) throw std::exception(); // Node and new parent are the same node.
+ if(id == to)
+ {
+ throw std::exception(); // Node and new parent are the same node.
+ }
- //task_t t = tree.data(id);
+ //task_t t = tree.data(id);
- // Make sure the new parent exists. This will throw an exception if it doesn't
- //task_t t_ = tree.data(to);
+ // Make sure the new parent exists. This will throw an exception if it doesn't
+ //task_t t_ = tree.data(to);
- // t.parentid = to;
+ //t.parentid = to;
- // TaskIdList tilremove = tree.remove(id);
- TaskIdList tilremove;
- tilremove.push_back(id);
- TaskIdList ancestors = tree.ancestorList(id);
- tilremove.insert(tilremove.end(), ancestors.begin(), ancestors.end());
+ //TaskIdList tilremove = tree.remove(id);
+ TaskIdList tilremove;
+ tilremove.push_back(id);
+ TaskIdList ancestors = tree.ancestorList(id);
+ tilremove.insert(tilremove.end(), ancestors.begin(), ancestors.end());
- // TaskIdList tilcreate = tree.insertAsChild(to, id, t);
- TaskIdList tilcreate;
- tilcreate.push_back(to);
- ancestors = tree.ancestorList(to);
- tilcreate.insert(tilcreate.end(), ancestors.begin(), ancestors.end());
+ // TaskIdList tilcreate = tree.insertAsChild(to, id, t);
+ TaskIdList tilcreate;
+ tilcreate.push_back(to);
+ ancestors = tree.ancestorList(to);
+ tilcreate.insert(tilcreate.end(), ancestors.begin(), ancestors.end());
- tree.move(id, to);
+ tree.move(id, to);
- TaskIdListPair tilpair;
- tilpair.first = tilremove;
- tilpair.second = tilcreate;
+ TaskIdListPair tilpair;
+ tilpair.first = tilremove;
+ tilpair.second = tilcreate;
- flushTasks();
+ flushTasks();
- return tilpair;
+ return tilpair;
}
-TaskIdList TaskManager::removeTask(taskid_t id)
- throw (std::exception) {
-
- if(isProtected(id)) return TaskIdList();
-
- TaskIdList affectedTasks;
-
- if(tree.bfs(id).size() > 1) throw std::exception();
-
- try {
- affectedTasks = tree.remove(id);
- }
- catch(std::exception& e) {
- throw e;
- }
-
- flushTasks();
-
- return affectedTasks;
+TaskIdList TaskManager::removeTask(taskid_t id)
+ throw (std::exception)
+{
+ if(isProtected(id))
+ {
+ return TaskIdList();
+ }
+
+ TaskIdList affectedTasks;
+
+ if(tree.bfs(id).size() > 1)
+ {
+ throw std::exception();
+ }
+
+ try
+ {
+ affectedTasks = tree.remove(id);
+ }
+ catch(std::exception& e)
+ {
+ throw e;
+ }
+
+ flushTasks();
+
+ return affectedTasks;
}
TaskIdList TaskManager::updateTask(taskid_t id, const std::string &name,
- const std::string &value)
- throw (std::exception) {
-
- if(isProtected(id)) return TaskIdList();
+ const std::string &value)
+ throw (std::exception)
+{
+ if(isProtected(id))
+ {
+ return TaskIdList();
+ }
- TaskIdList affectedTasks;
+ TaskIdList affectedTasks;
- try {
- affectedTasks = tree.updateData(id, name, value);
- }
- catch (std::exception& e) {
- throw e;
- }
+ try
+ {
+ affectedTasks = tree.updateData(id, name, value);
+ }
+ catch(std::exception& e)
+ {
+ throw e;
+ }
- flushTasks();
+ flushTasks();
- return affectedTasks;
+ return affectedTasks;
}
TaskIdList TaskManager::createTask(taskid_t parentid, taskid_t *pid)
- throw (std::exception) {
- TaskIdList affectedTasks;
-
- task_t t;
- taskid_t id = *pid;//createId();
- t.attributes["title"] = "";
- t.id = id;
- if(pid) *pid = id;
-
- try {
- affectedTasks = tree.insertAsChild(parentid, id, t);
- }
- catch (std::exception& e) {
- throw e;
- }
-
- flushTasks();
-
- return affectedTasks;
+ throw (std::exception)
+{
+ TaskIdList affectedTasks;
+
+ task_t t;
+ taskid_t id = *pid;//createId();
+ t.attributes["title"] = "";
+ t.id = id;
+ if(pid)
+ {
+ *pid = id;
+ }
+
+ try
+ {
+ affectedTasks = tree.insertAsChild(parentid, id, t);
+ }
+ catch(std::exception& e)
+ {
+ throw e;
+ }
+
+ flushTasks();
+
+ return affectedTasks;
}
TaskIdList TaskManager::subTasks(taskid_t t)
- throw (std::exception) {
-
- TaskIdList affectedTasks;
-
- try {
- affectedTasks = tree.bfs(t);
- }
- catch (std::exception& e) {
- throw e;
- }
-
- return affectedTasks;
+ throw (std::exception)
+{
+ TaskIdList affectedTasks;
+
+ try
+ {
+ affectedTasks = tree.bfs(t);
+ }
+ catch(std::exception& e)
+ {
+ throw e;
+ }
+
+ return affectedTasks;
}
-/*
-TaskIdList TaskManager::ancestorList(taskid_t id)
- throw (std::exception) {
- TaskIdList ancestors;
-
- try {
- ancestors = tree.ancestorList(id);
- goto finish;
- }
- catch (std::exception& e) {
- throw e;
- }
-
- finish:
- return ancestors;
-}
-*/
+//TaskIdList TaskManager::ancestorList(taskid_t id)
+// throw (std::exception)
+//{
+// TaskIdList ancestors;
+//
+// try
+// {
+// ancestors = tree.ancestorList(id);
+// goto finish;
+// }
+// catch(std::exception& e)
+// {
+// throw e;
+// }
+//
+//finish:
+// return ancestors;
+//}
void TaskManager::flushTasks()
{
- FILE *fp = fopen(file.c_str(), "w");
- if(!fp) return;
- std::string xml = tree.toXML();
- fwrite(xml.c_str(), xml.size(), 1, fp);
- fclose(fp);
+ FILE *fp = fopen(file.c_str(), "w");
+ if(!fp)
+ {
+ return;
+ }
+ std::string xml = tree.toXML();
+ fwrite(xml.c_str(), xml.size(), 1, fp);
+ fclose(fp);
}
-
#if 0
TaskList tasklist;
-task_t create_task(std::string title, std::string desc) {
-
- task_t t;
- t.parent_id = current_id_count();
- t.attributes["title"] = title;
- t.desc = desc;
- t.id = id_count; id_count++;
-
- return t;
-}
-
-TaskList load_tasklist_from_file(std::string file) {
- TaskList list;
-
- // create MuniaDb class which handles tasks, db-flush and db-init.
+task_t create_task(std::string title, std::string desc)
+{
+ task_t t;
+ t.parent_id = current_id_count();
+ t.attributes["title"] = title;
+ t.desc = desc;
+ t.id = id_count; id_count++;
- return list;
+ return t;
}
-bool save_tasklist_to_file(TaskList list, std::string file) {
-
- FILE* fp;
-
- if(! (fp = fopen(file.c_str(), "w"))) {
- return false;
- }
-
- if(!fprintf(fp, "<tasklist>\n")) {
- fclose(fp);
- return false;
- }
-
- TaskList::iterator it;
- for(it = tasklist.begin(); it != tasklist.end(); it++) {
- task_t t = *it;
- int r = 1;
-
-// printf("Flushing task %d\n", t.id);
-
- r |= fprintf(fp, " <task id=\"%d\" parent_id=\"%d\">\n", t.id, t.parent_id);
- r |= fprintf(fp, " <title>%s</title>\n", xml_encode(t.attributes["title"]).c_str());
- r |= fprintf(fp, " <desc>%s</desc>\n", xml_encode(t.attributes["description"]).c_str());
- r |= fprintf(fp, " </task>)\n");
+TaskList load_tasklist_from_file(std::string file)
+{
+ TaskList list;
- if(!r) {
- fclose(fp);
- return false;
- }
- }
+ // create MuniaDb class which handles tasks, db-flush and db-init.
- if(!fprintf(fp, "</tasklist>\n")) {
- fclose(fp);
- return false;
- }
+ return list;
+}
- fclose(fp);
- return true;
+bool save_tasklist_to_file(TaskList list, std::string file)
+{
+ FILE* fp;
+
+ if(! (fp = fopen(file.c_str(), "w")))
+ {
+ return false;
+ }
+
+ if(!fprintf(fp, "<tasklist>\n"))
+ {
+ fclose(fp);
+ return false;
+ }
+
+ TaskList::iterator it;
+ for(it = tasklist.begin(); it != tasklist.end(); it++)
+ {
+ task_t t = *it;
+ int r = 1;
+
+ //printf("Flushing task %d\n", t.id);
+ r |= fprintf(fp, " <task id=\"%d\" parent_id=\"%d\">\n", t.id, t.parent_id);
+ r |= fprintf(fp, " <title>%s</title>\n", xml_encode(t.attributes["title"]).c_str());
+ r |= fprintf(fp, " <desc>%s</desc>\n", xml_encode(t.attributes["description"]).c_str());
+ r |= fprintf(fp, " </task>)\n");
+
+ if(!r)
+ {
+ fclose(fp);
+ return false;
+ }
+ }
+
+ if(!fprintf(fp, "</tasklist>\n"))
+ {
+ fclose(fp);
+ return false;
+ }
+
+ fclose(fp);
+ return true;
}
static void delete_task(task_t t, TaskList& graveyard);
-static void delete_children(task_t t, TaskList& graveyard) {
- TaskList::iterator it;
- for(it = tasklist.begin(); it != tasklist.end(); it++) {
- if(it->parent_id == t.id) {
- delete_task(*it, graveyard);
- }
- }
+static void delete_children(task_t t, TaskList& graveyard)
+{
+ TaskList::iterator it;
+ for(it = tasklist.begin(); it != tasklist.end(); it++)
+ {
+ if(it->parent_id == t.id) {
+ delete_task(*it, graveyard);
+ }
+ }
}
-
-static void delete_task(task_t t, TaskList& graveyard) {
-
- TaskList::iterator it;
- for(it = tasklist.begin(); it != tasklist.end(); it++) {
- if(it->id == t.id) {
- break;
- }
- }
-
- if(it != tasklist.end()) {
- graveyard.push_back(*it);
- delete_children(*it, graveyard);
- }
-
+static void delete_task(task_t t, TaskList& graveyard)
+{
+ TaskList::iterator it;
+ for(it = tasklist.begin(); it != tasklist.end(); it++)
+ {
+ if(it->id == t.id)
+ {
+ break;
+ }
+ }
+
+ if(it != tasklist.end())
+ {
+ graveyard.push_back(*it);
+ delete_children(*it, graveyard);
+ }
}
-void delete_task(int id, TaskList& graveyard) {
- task_t t;
- t.id = id;
- delete_task(t, graveyard);
-
- for(TaskList::iterator it = graveyard.begin();
- it != graveyard.end(); it++) {
-
- for(TaskList::iterator it_tl = tasklist.begin();
- it_tl != tasklist.end(); it_tl++) {
-
- if(it_tl->id == it->id) {
- tasklist.erase(it_tl);
- break;
- }
- }
- }
+void delete_task(int id, TaskList& graveyard)
+{
+ task_t t;
+ t.id = id;
+ delete_task(t, graveyard);
+
+ for(TaskList::iterator it = graveyard.begin();
+ it != graveyard.end(); it++)
+ {
+ for(TaskList::iterator it_tl = tasklist.begin();
+ it_tl != tasklist.end(); it_tl++)
+ {
+ if(it_tl->id == it->id)
+ {
+ tasklist.erase(it_tl);
+ break;
+ }
+ }
+ }
}
#endif