- Age-dependet urgency calculation now normalizes.
This commit is contained in:
Johannes Schlatow 2011-12-17 19:08:31 +01:00
parent 3d33d90d57
commit 69fecbb2c0
4 changed files with 15 additions and 19 deletions

View file

@ -961,10 +961,9 @@ Urgency coefficients for annotations
.RS .RS
Urgency coefficients for the age of tasks Urgency coefficients for the age of tasks
.RE .RE
.B urgency.age.max=0.0 .B urgency.age.max=365
.RS .RS
Maximum (or minimum if negative) urgency a task can reach due to aging. If Maximum age in days. After this number of days has elapsed, the urgency of a task won't increase any more because of aging.
this is set to zero, the term will be unlimited.
.RE .RE
The coefficients reflect the relative importance of the various terms in the The coefficients reflect the relative importance of the various terms in the

View file

@ -148,7 +148,7 @@ std::string Config::_defaults =
"urgency.tags.coefficient=2.0 # Urgency coefficients for tags\n" "urgency.tags.coefficient=2.0 # Urgency coefficients for tags\n"
"urgency.annotations.coefficient=1.0 # Urgency coefficients for annotations\n" "urgency.annotations.coefficient=1.0 # Urgency coefficients for annotations\n"
"urgency.age.coefficient=0 # Urgency coefficients for age\n" "urgency.age.coefficient=0 # Urgency coefficients for age\n"
"urgency.age.max=0 # Maximum urgency offset for age\n" "urgency.age.max=365 # Maximum age in days\n"
"\n" "\n"
"#urgency.user.project.foo.coefficient=5.0 # Urgency coefficients for 'foo' project\n" "#urgency.user.project.foo.coefficient=5.0 # Urgency coefficients for 'foo' project\n"
"#urgency.user.tag.foo.coefficient=5.0 # Urgency coefficients for 'foo' tag\n" "#urgency.user.tag.foo.coefficient=5.0 # Urgency coefficients for 'foo' tag\n"

View file

@ -1231,8 +1231,7 @@ float Task::urgency_c () const
value += urgency_next () * context.config.getReal ("urgency.next.coefficient"); value += urgency_next () * context.config.getReal ("urgency.next.coefficient");
value += urgency_due () * context.config.getReal ("urgency.due.coefficient"); value += urgency_due () * context.config.getReal ("urgency.due.coefficient");
value += urgency_blocking () * context.config.getReal ("urgency.blocking.coefficient"); value += urgency_blocking () * context.config.getReal ("urgency.blocking.coefficient");
value += urgency_age (context.config.getReal ("urgency.age.coefficient"), value += urgency_age () * context.config.getReal ("urgency.age.coefficient");
context.config.getReal ("urgency.age.max"));
// Tag- and project-specific coefficients. // Tag- and project-specific coefficients.
std::vector <std::string> all; std::vector <std::string> all;
@ -1402,24 +1401,22 @@ float Task::urgency_due () const
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
float Task::urgency_age (float coefficient, float max) const float Task::urgency_age () const
{ {
if (coefficient == 0) { if (has ("entry"))
return 0.0;
}
else if (has ("entry"))
{ {
Date now; Date now;
Date entry (get_date ("entry")); Date entry (get_date ("entry"));
int age = (now - entry) / 86400; // in days
float max = context.config.getReal ("urgency.age.max");
int age = (now - entry) / 86400; if (max == 0)
float result = age * coefficient; return 1.0;
if (max == 0) // unlimited
return result; if (age > max)
else if (max > 0) return 1.0;
return (result > max) ? max : result;
else else
return (result < max) ? max : result; return (1.0 * age/max);
} }
return 0.0; return 0.0;

View file

@ -117,7 +117,7 @@ private:
inline float urgency_next () const; inline float urgency_next () const;
inline float urgency_due () const; inline float urgency_due () const;
inline float urgency_blocking () const; inline float urgency_blocking () const;
inline float urgency_age (float, float) const; inline float urgency_age () const;
}; };
#endif #endif