Urgency
- Set initial urgency value to zero.
This commit is contained in:
301
src/Task.cpp
301
src/Task.cpp
@@ -895,190 +895,193 @@ int Task::determineVersion (const std::string& line)
|
|||||||
//
|
//
|
||||||
float Task::urgency ()
|
float Task::urgency ()
|
||||||
{
|
{
|
||||||
if (! recalc_urgency)
|
if (recalc_urgency)
|
||||||
return urgency_value;
|
{
|
||||||
|
urgency_value = 0.0;
|
||||||
|
|
||||||
// urgency.priority.coefficient
|
// urgency.priority.coefficient
|
||||||
float coefficient = context.config.getReal ("urgency.priority.coefficient");
|
float coefficient = context.config.getReal ("urgency.priority.coefficient");
|
||||||
float term;
|
float term;
|
||||||
|
|
||||||
std::string value = get ("priority");
|
std::string value = get ("priority");
|
||||||
if (value == "H") term = 1.0;
|
if (value == "H") term = 1.0;
|
||||||
else if (value == "M") term = 0.65;
|
else if (value == "M") term = 0.65;
|
||||||
else if (value == "L") term = 0.3;
|
else if (value == "L") term = 0.3;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.project.coefficient
|
// urgency.project.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.project.coefficient");
|
coefficient = context.config.getReal ("urgency.project.coefficient");
|
||||||
|
|
||||||
value = get ("project");
|
value = get ("project");
|
||||||
if (value != "") term = 1.0;
|
if (value != "") term = 1.0;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.active.coefficient
|
// urgency.active.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.active.coefficient");
|
coefficient = context.config.getReal ("urgency.active.coefficient");
|
||||||
|
|
||||||
value = get ("start");
|
value = get ("start");
|
||||||
if (value != "") term = 1.0;
|
if (value != "") term = 1.0;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.waiting.coefficient
|
// urgency.waiting.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.waiting.coefficient");
|
coefficient = context.config.getReal ("urgency.waiting.coefficient");
|
||||||
|
|
||||||
value = get ("status");
|
value = get ("status");
|
||||||
if (value == "pending") term = 1.0;
|
if (value == "pending") term = 1.0;
|
||||||
else if (value == "waiting") term = 0.0;
|
else if (value == "waiting") term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.blocked.coefficient
|
// urgency.blocked.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.blocked.coefficient");
|
coefficient = context.config.getReal ("urgency.blocked.coefficient");
|
||||||
|
|
||||||
value = get ("depends");
|
value = get ("depends");
|
||||||
if (value != "") term = 1.0;
|
if (value != "") term = 1.0;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.annotations.coefficient
|
// urgency.annotations.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.annotations.coefficient");
|
coefficient = context.config.getReal ("urgency.annotations.coefficient");
|
||||||
|
|
||||||
std::vector <Att> annos;
|
std::vector <Att> annos;
|
||||||
getAnnotations (annos);
|
getAnnotations (annos);
|
||||||
if (annos.size () >= 3) term = 1.0;
|
if (annos.size () >= 3) term = 1.0;
|
||||||
else if (annos.size () == 2) term = 0.9;
|
else if (annos.size () == 2) term = 0.9;
|
||||||
else if (annos.size () == 1) term = 0.8;
|
else if (annos.size () == 1) term = 0.8;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.tags.coefficient
|
// urgency.tags.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.tags.coefficient");
|
coefficient = context.config.getReal ("urgency.tags.coefficient");
|
||||||
|
|
||||||
int count = getTagCount ();
|
int count = getTagCount ();
|
||||||
if (count >= 3) term = 1.0;
|
if (count >= 3) term = 1.0;
|
||||||
else if (count == 2) term = 0.9;
|
else if (count == 2) term = 0.9;
|
||||||
else if (count == 1) term = 0.8;
|
else if (count == 1) term = 0.8;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.next.coefficient
|
// urgency.next.coefficient
|
||||||
coefficient = context.config.getReal ("urgency.next.coefficient");
|
coefficient = context.config.getReal ("urgency.next.coefficient");
|
||||||
|
|
||||||
if (hasTag ("next")) term = 1.0;
|
if (hasTag ("next")) term = 1.0;
|
||||||
else term = 0.0;
|
else term = 0.0;
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
// urgency.due.coefficient
|
// urgency.due.coefficient
|
||||||
// overdue days 7 -> 1.0
|
// overdue days 7 -> 1.0
|
||||||
// 6 -> 0.96
|
// 6 -> 0.96
|
||||||
// 5 -> 0.92
|
// 5 -> 0.92
|
||||||
// 5 -> 0.88
|
// 5 -> 0.88
|
||||||
// 5 -> 0.84
|
// 5 -> 0.84
|
||||||
// 5 -> 0.80
|
// 5 -> 0.80
|
||||||
// 5 -> 0.76
|
// 5 -> 0.76
|
||||||
// 0 -> 0.72
|
// 0 -> 0.72
|
||||||
// -1 -> 0.68
|
// -1 -> 0.68
|
||||||
// -2 -> 0.64
|
// -2 -> 0.64
|
||||||
// -3 -> 0.60
|
// -3 -> 0.60
|
||||||
// -4 -> 0.56
|
// -4 -> 0.56
|
||||||
// -5 -> 0.52
|
// -5 -> 0.52
|
||||||
// -6 -> 0.48
|
// -6 -> 0.48
|
||||||
// -7 -> 0.44
|
// -7 -> 0.44
|
||||||
// -8 -> 0.40
|
// -8 -> 0.40
|
||||||
// -9 -> 0.36
|
// -9 -> 0.36
|
||||||
// -10 -> 0.32
|
// -10 -> 0.32
|
||||||
// -11 -> 0.28
|
// -11 -> 0.28
|
||||||
// -12 -> 0.24
|
// -12 -> 0.24
|
||||||
// -13 -> 0.20
|
// -13 -> 0.20
|
||||||
// -14 -> 0.16
|
// -14 -> 0.16
|
||||||
// no due date -> 0.0
|
// no due date -> 0.0
|
||||||
coefficient = context.config.getReal ("urgency.due.coefficient");
|
coefficient = context.config.getReal ("urgency.due.coefficient");
|
||||||
if (has ("due"))
|
if (has ("due"))
|
||||||
{
|
|
||||||
Date now;
|
|
||||||
Date due (get ("due"));
|
|
||||||
int days_overdue = (now - due) / 86400;
|
|
||||||
|
|
||||||
if (days_overdue >= 7) term = 1.0;
|
|
||||||
else if (days_overdue >= 6) term = 0.96;
|
|
||||||
else if (days_overdue >= 5) term = 0.92;
|
|
||||||
else if (days_overdue >= 4) term = 0.88;
|
|
||||||
else if (days_overdue >= 3) term = 0.84;
|
|
||||||
else if (days_overdue >= 2) term = 0.80;
|
|
||||||
else if (days_overdue >= 1) term = 0.76;
|
|
||||||
else if (days_overdue >= 0) term = 0.72;
|
|
||||||
else if (days_overdue >= -1) term = 0.68;
|
|
||||||
else if (days_overdue >= -2) term = 0.64;
|
|
||||||
else if (days_overdue >= -3) term = 0.60;
|
|
||||||
else if (days_overdue >= -4) term = 0.56;
|
|
||||||
else if (days_overdue >= -5) term = 0.52;
|
|
||||||
else if (days_overdue >= -6) term = 0.48;
|
|
||||||
else if (days_overdue >= -7) term = 0.44;
|
|
||||||
else if (days_overdue >= -8) term = 0.40;
|
|
||||||
else if (days_overdue >= -9) term = 0.36;
|
|
||||||
else if (days_overdue >= -10) term = 0.32;
|
|
||||||
else if (days_overdue >= -11) term = 0.28;
|
|
||||||
else if (days_overdue >= -12) term = 0.24;
|
|
||||||
else if (days_overdue >= -13) term = 0.20;
|
|
||||||
else term = 0.16;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
term = 0.0;
|
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
|
||||||
|
|
||||||
// Tag- and project-specific coefficients.
|
|
||||||
std::vector <std::string> all;
|
|
||||||
context.config.all (all);
|
|
||||||
|
|
||||||
foreach (var, all)
|
|
||||||
{
|
|
||||||
if (var->substr (0, 13) == "urgency.user.")
|
|
||||||
{
|
{
|
||||||
// urgency.user.project.<project>.coefficient
|
Date now;
|
||||||
std::string::size_type end = std::string::npos;
|
Date due (get ("due"));
|
||||||
if (var->substr (13, 8) == "project." &&
|
int days_overdue = (now - due) / 86400;
|
||||||
(end = var->find (".coefficient")) != std::string::npos)
|
|
||||||
|
if (days_overdue >= 7) term = 1.0;
|
||||||
|
else if (days_overdue >= 6) term = 0.96;
|
||||||
|
else if (days_overdue >= 5) term = 0.92;
|
||||||
|
else if (days_overdue >= 4) term = 0.88;
|
||||||
|
else if (days_overdue >= 3) term = 0.84;
|
||||||
|
else if (days_overdue >= 2) term = 0.80;
|
||||||
|
else if (days_overdue >= 1) term = 0.76;
|
||||||
|
else if (days_overdue >= 0) term = 0.72;
|
||||||
|
else if (days_overdue >= -1) term = 0.68;
|
||||||
|
else if (days_overdue >= -2) term = 0.64;
|
||||||
|
else if (days_overdue >= -3) term = 0.60;
|
||||||
|
else if (days_overdue >= -4) term = 0.56;
|
||||||
|
else if (days_overdue >= -5) term = 0.52;
|
||||||
|
else if (days_overdue >= -6) term = 0.48;
|
||||||
|
else if (days_overdue >= -7) term = 0.44;
|
||||||
|
else if (days_overdue >= -8) term = 0.40;
|
||||||
|
else if (days_overdue >= -9) term = 0.36;
|
||||||
|
else if (days_overdue >= -10) term = 0.32;
|
||||||
|
else if (days_overdue >= -11) term = 0.28;
|
||||||
|
else if (days_overdue >= -12) term = 0.24;
|
||||||
|
else if (days_overdue >= -13) term = 0.20;
|
||||||
|
else term = 0.16;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
term = 0.0;
|
||||||
|
|
||||||
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
|
// Tag- and project-specific coefficients.
|
||||||
|
std::vector <std::string> all;
|
||||||
|
context.config.all (all);
|
||||||
|
|
||||||
|
foreach (var, all)
|
||||||
|
{
|
||||||
|
if (var->substr (0, 13) == "urgency.user.")
|
||||||
{
|
{
|
||||||
std::string project = var->substr (21, end - 21);
|
// urgency.user.project.<project>.coefficient
|
||||||
coefficient = context.config.getReal (*var);
|
std::string::size_type end = std::string::npos;
|
||||||
|
if (var->substr (13, 8) == "project." &&
|
||||||
|
(end = var->find (".coefficient")) != std::string::npos)
|
||||||
|
{
|
||||||
|
std::string project = var->substr (21, end - 21);
|
||||||
|
coefficient = context.config.getReal (*var);
|
||||||
|
|
||||||
if (get ("project").find (project) == 0)
|
if (get ("project").find (project) == 0)
|
||||||
urgency_value += coefficient;
|
urgency_value += coefficient;
|
||||||
}
|
}
|
||||||
|
|
||||||
// urgency.user.tag.<tag>.coefficient
|
// urgency.user.tag.<tag>.coefficient
|
||||||
if (var->substr (13, 4) == "tag." &&
|
if (var->substr (13, 4) == "tag." &&
|
||||||
(end = var->find (".coefficient")) != std::string::npos)
|
(end = var->find (".coefficient")) != std::string::npos)
|
||||||
{
|
{
|
||||||
std::string tag = var->substr (17, end - 17);
|
std::string tag = var->substr (17, end - 17);
|
||||||
coefficient = context.config.getReal (*var);
|
coefficient = context.config.getReal (*var);
|
||||||
|
|
||||||
if (hasTag (tag))
|
if (hasTag (tag))
|
||||||
urgency_value += coefficient;
|
urgency_value += coefficient;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// urgency.blocking.coefficient
|
||||||
|
coefficient = context.config.getReal ("urgency.blocking.coefficient");
|
||||||
|
|
||||||
|
if (dependencyIsBlocking (*this)) term = 1.0;
|
||||||
|
else term = 0.0;
|
||||||
|
|
||||||
|
urgency_value += term * coefficient;
|
||||||
|
|
||||||
|
// Return the sum of all terms.
|
||||||
|
recalc_urgency = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// urgency.blocking.coefficient
|
|
||||||
coefficient = context.config.getReal ("urgency.blocking.coefficient");
|
|
||||||
|
|
||||||
if (dependencyIsBlocking (*this)) term = 1.0;
|
|
||||||
else term = 0.0;
|
|
||||||
|
|
||||||
urgency_value += term * coefficient;
|
|
||||||
|
|
||||||
// Return the sum of all terms.
|
|
||||||
recalc_urgency = false;
|
|
||||||
return urgency_value;
|
return urgency_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user