Skip to content
Permalink
Browse files

JSON encode/decode string UDAs

Previously, multiline string UDAs were not preserved when editing
a task via 'task X edit'. String UDAs are now JSON encoded/decoded
during the edit cycle to allow preservation of multiline
  • Loading branch information...
thehunmonkgroup authored and pbeckingham committed Mar 20, 2019
1 parent e961181 commit cd62e65a13b404ecc7459d458bec8fd73f74d1b5
Showing with 8 additions and 1 deletion.
  1. +8 −1 src/commands/CmdEdit.cpp
@@ -299,7 +299,12 @@ std::string CmdEdit::formatTask (Task task, const std::string& dateformat)

std::string type = Context::getContext ().config.get ("uda." + uda + ".type");
if (type == "string" || type == "numeric")
before << " UDA " << uda << ": " << padding << task.get (uda) << '\n';
{
auto value = task.get (uda);
if (type == "string")
value = json::encode (value);
before << " UDA " << uda << ": " << padding << value << '\n';
}
else if (type == "date")
before << " UDA " << uda << ": " << padding << formatDate (task, uda, dateformat) << '\n';
else if (type == "duration")
@@ -663,6 +668,8 @@ void CmdEdit::parseTask (Task& task, const std::string& after, const std::string
if (type != "")
{
auto value = findValue (after, "\n UDA " + col.first + ":");
if (type == "string")
value = json::decode (value);
if ((task.get (col.first) != value) && (type != "date" ||
(task.get (col.first) != Datetime (value, dateformat).toEpochString ())) &&
(type != "duration" ||

0 comments on commit cd62e65

Please sign in to comment.
You can’t perform that action at this time.