mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Enhancement
- Added virtual tag support for the first batch. There will be follow-up work, tests and so on.
This commit is contained in:
parent
d73766484d
commit
8d66d801c0
4 changed files with 84 additions and 16 deletions
93
src/Task.cpp
93
src/Task.cpp
|
@ -329,6 +329,60 @@ void Task::setStatus (Task::status status)
|
|||
recalc_urgency = true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Task::is_due () const
|
||||
{
|
||||
if (has ("due"))
|
||||
{
|
||||
Task::status status = getStatus ();
|
||||
|
||||
if (status != Task::completed &&
|
||||
status != Task::deleted)
|
||||
{
|
||||
if (getDueState (get ("due")) == 1)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Task::is_duetoday () const
|
||||
{
|
||||
if (has ("due"))
|
||||
{
|
||||
Task::status status = getStatus ();
|
||||
|
||||
if (status != Task::completed &&
|
||||
status != Task::deleted)
|
||||
{
|
||||
if (getDueState (get ("due")) == 2)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Task::is_overdue () const
|
||||
{
|
||||
if (has ("due"))
|
||||
{
|
||||
Task::status status = getStatus ();
|
||||
|
||||
if (status != Task::completed &&
|
||||
status != Task::deleted)
|
||||
{
|
||||
if (getDueState (get ("due")) == 3)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Attempt an FF4 parse first, using Task::parse, and in the event of an error
|
||||
// try a legacy parse (F3, FF2). Note that FF1 is no longer supported.
|
||||
|
@ -885,6 +939,15 @@ int Task::getTagCount () const
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool Task::hasTag (const std::string& tag) const
|
||||
{
|
||||
// Synthetic tags - dynamically generated, but do not occupy storage space.
|
||||
if (tag == "BLOCKED") return is_blocked;
|
||||
if (tag == "UNBLOCKED") return !is_blocked;
|
||||
if (tag == "BLOCKING") return is_blocking;
|
||||
if (tag == "DUE") return is_due ();
|
||||
if (tag == "DUETODAY") return is_duetoday ();
|
||||
if (tag == "OVERDUE") return is_overdue ();
|
||||
|
||||
// Concrete tags.
|
||||
std::vector <std::string> tags;
|
||||
split (tags, get ("tags"), ',');
|
||||
|
||||
|
@ -1324,19 +1387,19 @@ float Task::urgency_c () const
|
|||
|
||||
/*
|
||||
// Very useful for debugging urgency problems.
|
||||
std::cout << "# Urgency for " << id << ":\n"
|
||||
<< "# pri " << (urgency_priority () * urgencyPriorityCoefficient)
|
||||
<< "# pro " << (urgency_project () * urgencyProjectCoefficient)
|
||||
<< "# act " << (urgency_active () * urgencyActiveCoefficient)
|
||||
<< "# sch " << (urgency_scheduled () * urgencyScheduledCoefficient)
|
||||
<< "# wai " << (urgency_waiting () * urgencyWaitingCoefficient)
|
||||
<< "# blk " << (urgency_blocked () * urgencyBlockedCoefficient)
|
||||
<< "# ann " << (urgency_annotations () * urgencyAnnotationsCoefficient)
|
||||
<< "# tag " << (urgency_tags () * urgencyTagsCoefficient)
|
||||
<< "# nex " << (urgency_next () * urgencyNextCoefficient)
|
||||
<< "# due " << (urgency_due () * urgencyDueCoefficient)
|
||||
<< "# bkg " << (urgency_blocking () * urgencyBlockingCoefficient)
|
||||
<< "# age " << (urgency_age () * urgencyAgeCoefficient);
|
||||
std::cout << "# Urgency for " << get ("uuid") << ":\n"
|
||||
<< "# pri " << (urgency_priority () * urgencyPriorityCoefficient) << "\n"
|
||||
<< "# pro " << (urgency_project () * urgencyProjectCoefficient) << "\n"
|
||||
<< "# act " << (urgency_active () * urgencyActiveCoefficient) << "\n"
|
||||
<< "# sch " << (urgency_scheduled () * urgencyScheduledCoefficient) << "\n"
|
||||
<< "# wai " << (urgency_waiting () * urgencyWaitingCoefficient) << "\n"
|
||||
<< "# blk " << (urgency_blocked () * urgencyBlockedCoefficient) << "\n"
|
||||
<< "# ann " << (urgency_annotations () * urgencyAnnotationsCoefficient) << "\n"
|
||||
<< "# tag " << (urgency_tags () * urgencyTagsCoefficient) << "\n"
|
||||
<< "# nex " << (urgency_next () * urgencyNextCoefficient) << "\n"
|
||||
<< "# due " << (urgency_due () * urgencyDueCoefficient) << "\n"
|
||||
<< "# bkg " << (urgency_blocking () * urgencyBlockingCoefficient) << "\n"
|
||||
<< "# age " << (urgency_age () * urgencyAgeCoefficient) << "\n";
|
||||
*/
|
||||
|
||||
// Tag- and project-specific coefficients.
|
||||
|
@ -1498,7 +1561,7 @@ float Task::urgency_due () const
|
|||
Date due (get_date ("due"));
|
||||
int days_overdue = (now - due) / 86400;
|
||||
|
||||
if (days_overdue >= 7) return 1.0;
|
||||
if (days_overdue >= 7) return 1.0; // 7 days ago
|
||||
else if (days_overdue >= 6) return 0.96;
|
||||
else if (days_overdue >= 5) return 0.92;
|
||||
else if (days_overdue >= 4) return 0.88;
|
||||
|
@ -1519,7 +1582,7 @@ float Task::urgency_due () const
|
|||
else if (days_overdue >= -11) return 0.28;
|
||||
else if (days_overdue >= -12) return 0.24;
|
||||
else if (days_overdue >= -13) return 0.20;
|
||||
else return 0.16;
|
||||
else return 0.16; // two weeks from now
|
||||
}
|
||||
|
||||
return 0.0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue