mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-09-06 17:37:21 +02:00
Add Task.is_empty, needed to identify "dummy" tasks (simple refactor)
getDOM takes an &Task that may be a reference to a dummy, or may be a real task. The is_empty method replaces `task.data.size() == 0` as a way to distinguish the two.
This commit is contained in:
parent
dede40bc4e
commit
0d9e402d3e
3 changed files with 24 additions and 11 deletions
25
src/DOM.cpp
25
src/DOM.cpp
|
@ -245,14 +245,16 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
if (name == "")
|
||||
return false;
|
||||
|
||||
auto have_task = !task.is_empty();
|
||||
|
||||
// Quickly deal with the most common cases.
|
||||
if (task.data_removeme ().size () && name == "id")
|
||||
if (have_task && name == "id")
|
||||
{
|
||||
value = Variant (static_cast<int> (task.id));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (task.data_removeme ().size () && name == "urgency")
|
||||
if (have_task && name == "urgency")
|
||||
{
|
||||
value = Variant (task.urgency_c ());
|
||||
return true;
|
||||
|
@ -310,6 +312,7 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
return task;
|
||||
|
||||
} ();
|
||||
auto have_ref = !ref.is_empty();
|
||||
|
||||
auto size = elements.size ();
|
||||
|
||||
|
@ -318,13 +321,13 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
{
|
||||
// Now that 'ref' is the contextual task, and any ID/UUID is chopped off the
|
||||
// elements vector, DOM resolution is now simple.
|
||||
if (ref.data_removeme ().size () && size == 1 && canonical == "id")
|
||||
if (have_ref && size == 1 && canonical == "id")
|
||||
{
|
||||
value = Variant (static_cast<int> (ref.id));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ref.data_removeme ().size () && size == 1 && canonical == "urgency")
|
||||
if (have_ref && size == 1 && canonical == "urgency")
|
||||
{
|
||||
value = Variant (ref.urgency_c ());
|
||||
return true;
|
||||
|
@ -332,7 +335,7 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
|
||||
// Special handling of status required for virtual waiting status
|
||||
// implementation. Remove in 3.0.0.
|
||||
if (ref.data_removeme ().size () && size == 1 && canonical == "status")
|
||||
if (have_ref && size == 1 && canonical == "status")
|
||||
{
|
||||
value = Variant (ref.statusToText (ref.getStatus ()));
|
||||
return true;
|
||||
|
@ -340,7 +343,7 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
|
||||
Column* column = Context::getContext ().columns[canonical];
|
||||
|
||||
if (ref.data_removeme ().size () && size == 1 && column)
|
||||
if (have_ref && size == 1 && column)
|
||||
{
|
||||
if (column->is_uda () && ! ref.has (canonical))
|
||||
{
|
||||
|
@ -375,13 +378,13 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (ref.data_removeme ().size () && size == 2 && canonical == "tags")
|
||||
if (have_ref && size == 2 && canonical == "tags")
|
||||
{
|
||||
value = Variant (ref.hasTag (elements[1]) ? elements[1] : "");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ref.data_removeme ().size () && size == 2 && column && column->type () == "date")
|
||||
if (have_ref && size == 2 && column && column->type () == "date")
|
||||
{
|
||||
Datetime date (ref.get_date (canonical));
|
||||
if (elements[1] == "year") { value = Variant (static_cast<int> (date.year ())); return true; }
|
||||
|
@ -396,13 +399,13 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
}
|
||||
}
|
||||
|
||||
if (ref.data_removeme ().size () && size == 2 && elements[0] == "annotations" && elements[1] == "count")
|
||||
if (have_ref && size == 2 && elements[0] == "annotations" && elements[1] == "count")
|
||||
{
|
||||
value = Variant (static_cast<int> (ref.getAnnotationCount ()));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ref.data_removeme ().size () && size == 3 && elements[0] == "annotations")
|
||||
if (have_ref && size == 3 && elements[0] == "annotations")
|
||||
{
|
||||
auto annos = ref.getAnnotations ();
|
||||
|
||||
|
@ -430,7 +433,7 @@ bool getDOM (const std::string& name, const Task& task, Variant& value)
|
|||
}
|
||||
}
|
||||
|
||||
if (ref.data_removeme ().size () && size == 4 && elements[0] == "annotations" && elements[2] == "entry")
|
||||
if (have_ref && size == 4 && elements[0] == "annotations" && elements[2] == "entry")
|
||||
{
|
||||
auto annos = ref.getAnnotations ();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue