diff --git a/src/main.h b/src/main.h index e75d53ce1..410fa252f 100644 --- a/src/main.h +++ b/src/main.h @@ -42,6 +42,8 @@ bool validPriority (const std::string&); bool validDate (std::string&); bool validDuration (std::string&); bool validDescription (const std::string&); +void validReportColumns (const std::vector &); +void validSortColumns (const std::vector &, const std::vector &); // task.cpp void gatherNextTasks (/*const TDB&,*/ T&, std::vector &, std::vector &); @@ -101,14 +103,11 @@ std::string handleReportActive (); std::string handleReportOverdue (); std::string handleReportStats (); std::string handleReportTimesheet (); - std::string handleCustomReport (const std::string&); -void validReportColumns (const std::vector &); -void validSortColumns (const std::vector &, const std::vector &); // rules.cpp void initializeColorRules (); -void autoColorize (T&, Text::color&, Text::color&); +void autoColorize (Task&, Text::color&, Text::color&); // import.cpp std::string handleImport (); diff --git a/src/parse.cpp b/src/parse.cpp index 171c6215b..86d1f9c2e 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -424,6 +424,7 @@ bool validDuration (std::string& input) // | \d+ "-" \d+ ; // // description (whatever isn't one of the above) +/* void parse ( std::vector & args, std::string& command, @@ -552,6 +553,66 @@ void parse ( if (validDescription (descCandidate)) task.setDescription (descCandidate); } +*/ + +//////////////////////////////////////////////////////////////////////////////// +void validReportColumns (const std::vector & columns) +{ + std::vector bad; + + std::vector ::const_iterator it; + for (it = columns.begin (); it != columns.end (); ++it) + if (*it != "id" && + *it != "uuid" && + *it != "project" && + *it != "priority" && + *it != "entry" && + *it != "start" && + *it != "due" && + *it != "age" && + *it != "age_compact" && + *it != "active" && + *it != "tags" && + *it != "recur" && + *it != "recurrence_indicator" && + *it != "tag_indicator" && + *it != "description_only" && + *it != "description") + bad.push_back (*it); + + if (bad.size ()) + { + std::string error; + join (error, ", ", bad); + throw std::string ("Unrecognized column name: ") + error; + } +} + +//////////////////////////////////////////////////////////////////////////////// +void validSortColumns ( + const std::vector & columns, + const std::vector & sortColumns) +{ + std::vector bad; + std::vector ::const_iterator sc; + for (sc = sortColumns.begin (); sc != sortColumns.end (); ++sc) + { + std::vector ::const_iterator co; + for (co = columns.begin (); co != columns.end (); ++co) + if (sc->substr (0, sc->length () - 1) == *co) + break; + + if (co == columns.end ()) + bad.push_back (*sc); + } + + if (bad.size ()) + { + std::string error; + join (error, ", ", bad); + throw std::string ("Sort column is not part of the report: ") + error; + } +} //////////////////////////////////////////////////////////////////////////////// diff --git a/src/recur.cpp b/src/recur.cpp index 28bae5ac4..67fd90da4 100644 --- a/src/recur.cpp +++ b/src/recur.cpp @@ -390,7 +390,7 @@ int getDueState (const std::string& due) if (dt < midnight) return 2; - Date nextweek = midnight + 7 * 86400; + Date nextweek = midnight + context.config.get ("due", 7) * 86400; if (dt < nextweek) return 1; } diff --git a/src/report.cpp b/src/report.cpp index 5cdbab15f..fcb457268 100644 --- a/src/report.cpp +++ b/src/report.cpp @@ -3034,63 +3034,4 @@ std::string handleCustomReport (const std::string& report) return out.str (); } -//////////////////////////////////////////////////////////////////////////////// -void validReportColumns (const std::vector & columns) -{ - std::vector bad; - - std::vector ::const_iterator it; - for (it = columns.begin (); it != columns.end (); ++it) - if (*it != "id" && - *it != "uuid" && - *it != "project" && - *it != "priority" && - *it != "entry" && - *it != "start" && - *it != "due" && - *it != "age" && - *it != "age_compact" && - *it != "active" && - *it != "tags" && - *it != "recur" && - *it != "recurrence_indicator" && - *it != "tag_indicator" && - *it != "description_only" && - *it != "description") - bad.push_back (*it); - - if (bad.size ()) - { - std::string error; - join (error, ", ", bad); - throw std::string ("Unrecognized column name: ") + error; - } -} - -//////////////////////////////////////////////////////////////////////////////// -void validSortColumns ( - const std::vector & columns, - const std::vector & sortColumns) -{ - std::vector bad; - std::vector ::const_iterator sc; - for (sc = sortColumns.begin (); sc != sortColumns.end (); ++sc) - { - std::vector ::const_iterator co; - for (co = columns.begin (); co != columns.end (); ++co) - if (sc->substr (0, sc->length () - 1) == *co) - break; - - if (co == columns.end ()) - bad.push_back (*sc); - } - - if (bad.size ()) - { - std::string error; - join (error, ", ", bad); - throw std::string ("Sort column is not part of the report: ") + error; - } -} - -//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// diff --git a/src/rules.cpp b/src/rules.cpp index 3d2fab931..831662521 100644 --- a/src/rules.cpp +++ b/src/rules.cpp @@ -32,6 +32,7 @@ #include "T.h" #include "text.h" #include "util.h" +#include "main.h" extern Context context; @@ -84,7 +85,7 @@ void initializeColorRules () //////////////////////////////////////////////////////////////////////////////// void autoColorize ( - T& task, + Task& task, Text::color& fg, Text::color& bg) { @@ -95,9 +96,7 @@ void autoColorize ( if (gsFg["color.tagged"] != Text::nocolor || gsBg["color.tagged"] != Text::nocolor) { - std::vector tags; - task.getTags (tags); - if (tags.size ()) + if (task.getTagCount ()) { fg = gsFg["color.tagged"]; bg = gsBg["color.tagged"]; @@ -108,7 +107,7 @@ void autoColorize ( if (gsFg["color.pri.L"] != Text::nocolor || gsBg["color.pri.L"] != Text::nocolor) { - if (task.getAttribute ("priority") == "L") + if (task.get ("priority") == "L") { fg = gsFg["color.pri.L"]; bg = gsBg["color.pri.L"]; @@ -119,7 +118,7 @@ void autoColorize ( if (gsFg["color.pri.M"] != Text::nocolor || gsBg["color.pri.M"] != Text::nocolor) { - if (task.getAttribute ("priority") == "M") + if (task.get ("priority") == "M") { fg = gsFg["color.pri.M"]; bg = gsBg["color.pri.M"]; @@ -130,7 +129,7 @@ void autoColorize ( if (gsFg["color.pri.H"] != Text::nocolor || gsBg["color.pri.H"] != Text::nocolor) { - if (task.getAttribute ("priority") == "H") + if (task.get ("priority") == "H") { fg = gsFg["color.pri.H"]; bg = gsBg["color.pri.H"]; @@ -141,7 +140,7 @@ void autoColorize ( if (gsFg["color.pri.none"] != Text::nocolor || gsBg["color.pri.none"] != Text::nocolor) { - if (task.getAttribute ("priority") == "") + if (task.get ("priority") == "") { fg = gsFg["color.pri.none"]; bg = gsBg["color.pri.none"]; @@ -152,7 +151,7 @@ void autoColorize ( if (gsFg["color.active"] != Text::nocolor || gsBg["color.active"] != Text::nocolor) { - if (task.getAttribute ("start") != "") + if (task.has ("start")) { fg = gsFg["color.active"]; bg = gsBg["color.active"]; @@ -180,7 +179,7 @@ void autoColorize ( if (it->first.substr (0, 14) == "color.project.") { std::string value = it->first.substr (14, std::string::npos); - if (task.getAttribute ("project") == value) + if (task.get ("project") == value) { fg = gsFg[it->first]; bg = gsBg[it->first]; @@ -194,7 +193,7 @@ void autoColorize ( if (it->first.substr (0, 14) == "color.keyword.") { std::string value = lowerCase (it->first.substr (14, std::string::npos)); - std::string desc = lowerCase (task.getDescription ()); + std::string desc = lowerCase (task.get ("description")); if (desc.find (value) != std::string::npos) { fg = gsFg[it->first]; @@ -204,25 +203,24 @@ void autoColorize ( } // Colorization of the due and overdue. - std::string due = task.getAttribute ("due"); - if (due != "") + if (task.has ("due")) { - Date dueDate (::atoi (due.c_str ())); - Date now; - Date then (now + context.config.get ("due", 7) * 86400); - - // Overdue - if (dueDate < now) - { - fg = gsFg["color.overdue"]; - bg = gsBg["color.overdue"]; - } - - // Imminent - else if (dueDate < then) + std::string due = task.get ("due"); + switch (getDueState (due)) { + case 1: // imminent fg = gsFg["color.due"]; bg = gsBg["color.due"]; + break; + + case 2: // overdue + fg = gsFg["color.overdue"]; + bg = gsBg["color.overdue"]; + break; + + case 0: // not due at all + default: + break; } } @@ -230,7 +228,7 @@ void autoColorize ( if (gsFg["color.recurring"] != Text::nocolor || gsBg["color.recurring"] != Text::nocolor) { - if (task.getAttribute ("recur") != "") + if (task.has ("recur")) { fg = gsFg["color.recurring"]; bg = gsBg["color.recurring"];