From cd62e65a13b404ecc7459d458bec8fd73f74d1b5 Mon Sep 17 00:00:00 2001 From: Chad Phillips Date: Tue, 19 Mar 2019 21:28:30 -0700 Subject: [PATCH] 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 --- src/commands/CmdEdit.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/commands/CmdEdit.cpp b/src/commands/CmdEdit.cpp index 07fee1b0f..b695bc760 100644 --- a/src/commands/CmdEdit.cpp +++ b/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" ||