From 2ac1787dae75540ca5684ee29065452de54e67be 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 a8ff452ed..eda3e557c 100644 --- a/src/commands/CmdEdit.cpp +++ b/src/commands/CmdEdit.cpp @@ -298,7 +298,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") @@ -662,6 +667,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" ||