From f05fedfc7afdc8742717789019f4faad3ea43881 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 8 May 2011 11:04:57 -0400 Subject: [PATCH] Urgency - Set initial urgency value to zero. --- src/Task.cpp | 301 ++++++++++++++++++++++++++------------------------- 1 file changed, 152 insertions(+), 149 deletions(-) diff --git a/src/Task.cpp b/src/Task.cpp index 4152e79be..460d2ccdc 100644 --- a/src/Task.cpp +++ b/src/Task.cpp @@ -895,190 +895,193 @@ int Task::determineVersion (const std::string& line) // float Task::urgency () { - if (! recalc_urgency) - return urgency_value; + if (recalc_urgency) + { + urgency_value = 0.0; - // urgency.priority.coefficient - float coefficient = context.config.getReal ("urgency.priority.coefficient"); - float term; + // urgency.priority.coefficient + float coefficient = context.config.getReal ("urgency.priority.coefficient"); + float term; - std::string value = get ("priority"); - if (value == "H") term = 1.0; - else if (value == "M") term = 0.65; - else if (value == "L") term = 0.3; - else term = 0.0; + std::string value = get ("priority"); + if (value == "H") term = 1.0; + else if (value == "M") term = 0.65; + else if (value == "L") term = 0.3; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.project.coefficient - coefficient = context.config.getReal ("urgency.project.coefficient"); + // urgency.project.coefficient + coefficient = context.config.getReal ("urgency.project.coefficient"); - value = get ("project"); - if (value != "") term = 1.0; - else term = 0.0; + value = get ("project"); + if (value != "") term = 1.0; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.active.coefficient - coefficient = context.config.getReal ("urgency.active.coefficient"); + // urgency.active.coefficient + coefficient = context.config.getReal ("urgency.active.coefficient"); - value = get ("start"); - if (value != "") term = 1.0; - else term = 0.0; + value = get ("start"); + if (value != "") term = 1.0; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.waiting.coefficient - coefficient = context.config.getReal ("urgency.waiting.coefficient"); + // urgency.waiting.coefficient + coefficient = context.config.getReal ("urgency.waiting.coefficient"); - value = get ("status"); - if (value == "pending") term = 1.0; - else if (value == "waiting") term = 0.0; + value = get ("status"); + if (value == "pending") term = 1.0; + else if (value == "waiting") term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.blocked.coefficient - coefficient = context.config.getReal ("urgency.blocked.coefficient"); + // urgency.blocked.coefficient + coefficient = context.config.getReal ("urgency.blocked.coefficient"); - value = get ("depends"); - if (value != "") term = 1.0; - else term = 0.0; + value = get ("depends"); + if (value != "") term = 1.0; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.annotations.coefficient - coefficient = context.config.getReal ("urgency.annotations.coefficient"); + // urgency.annotations.coefficient + coefficient = context.config.getReal ("urgency.annotations.coefficient"); - std::vector annos; - getAnnotations (annos); - if (annos.size () >= 3) term = 1.0; - else if (annos.size () == 2) term = 0.9; - else if (annos.size () == 1) term = 0.8; - else term = 0.0; + std::vector annos; + getAnnotations (annos); + if (annos.size () >= 3) term = 1.0; + else if (annos.size () == 2) term = 0.9; + else if (annos.size () == 1) term = 0.8; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.tags.coefficient - coefficient = context.config.getReal ("urgency.tags.coefficient"); + // urgency.tags.coefficient + coefficient = context.config.getReal ("urgency.tags.coefficient"); - int count = getTagCount (); + int count = getTagCount (); if (count >= 3) term = 1.0; - else if (count == 2) term = 0.9; - else if (count == 1) term = 0.8; - else term = 0.0; + else if (count == 2) term = 0.9; + else if (count == 1) term = 0.8; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.next.coefficient - coefficient = context.config.getReal ("urgency.next.coefficient"); + // urgency.next.coefficient + coefficient = context.config.getReal ("urgency.next.coefficient"); - if (hasTag ("next")) term = 1.0; - else term = 0.0; + if (hasTag ("next")) term = 1.0; + else term = 0.0; - urgency_value += term * coefficient; + urgency_value += term * coefficient; - // urgency.due.coefficient - // overdue days 7 -> 1.0 - // 6 -> 0.96 - // 5 -> 0.92 - // 5 -> 0.88 - // 5 -> 0.84 - // 5 -> 0.80 - // 5 -> 0.76 - // 0 -> 0.72 - // -1 -> 0.68 - // -2 -> 0.64 - // -3 -> 0.60 - // -4 -> 0.56 - // -5 -> 0.52 - // -6 -> 0.48 - // -7 -> 0.44 - // -8 -> 0.40 - // -9 -> 0.36 - // -10 -> 0.32 - // -11 -> 0.28 - // -12 -> 0.24 - // -13 -> 0.20 - // -14 -> 0.16 - // no due date -> 0.0 - coefficient = context.config.getReal ("urgency.due.coefficient"); - 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 all; - context.config.all (all); - - foreach (var, all) - { - if (var->substr (0, 13) == "urgency.user.") + // urgency.due.coefficient + // overdue days 7 -> 1.0 + // 6 -> 0.96 + // 5 -> 0.92 + // 5 -> 0.88 + // 5 -> 0.84 + // 5 -> 0.80 + // 5 -> 0.76 + // 0 -> 0.72 + // -1 -> 0.68 + // -2 -> 0.64 + // -3 -> 0.60 + // -4 -> 0.56 + // -5 -> 0.52 + // -6 -> 0.48 + // -7 -> 0.44 + // -8 -> 0.40 + // -9 -> 0.36 + // -10 -> 0.32 + // -11 -> 0.28 + // -12 -> 0.24 + // -13 -> 0.20 + // -14 -> 0.16 + // no due date -> 0.0 + coefficient = context.config.getReal ("urgency.due.coefficient"); + if (has ("due")) { - // urgency.user.project..coefficient - std::string::size_type end = std::string::npos; - if (var->substr (13, 8) == "project." && - (end = var->find (".coefficient")) != std::string::npos) + 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 all; + context.config.all (all); + + foreach (var, all) + { + if (var->substr (0, 13) == "urgency.user.") { - std::string project = var->substr (21, end - 21); - coefficient = context.config.getReal (*var); + // urgency.user.project..coefficient + 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) - urgency_value += coefficient; - } + if (get ("project").find (project) == 0) + urgency_value += coefficient; + } - // urgency.user.tag..coefficient - if (var->substr (13, 4) == "tag." && - (end = var->find (".coefficient")) != std::string::npos) - { - std::string tag = var->substr (17, end - 17); - coefficient = context.config.getReal (*var); + // urgency.user.tag..coefficient + if (var->substr (13, 4) == "tag." && + (end = var->find (".coefficient")) != std::string::npos) + { + std::string tag = var->substr (17, end - 17); + coefficient = context.config.getReal (*var); - if (hasTag (tag)) - urgency_value += coefficient; + if (hasTag (tag)) + 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; }