/////////////////////////////////////////////////////////////////////////// The 'Task' object, among others, is shared between projects. To make this easier, it has been decoupled from Context.
| 1113 | // The 'Task' object, among others, is shared between projects. To make this |
| 1114 | // easier, it has been decoupled from Context. |
| 1115 | void Context::staticInitialization() { |
| 1116 | CLI2::minimumMatchLength = config.getInteger("abbreviation.minimum"); |
| 1117 | Lexer::minimumMatchLength = config.getInteger("abbreviation.minimum"); |
| 1118 | |
| 1119 | Task::defaultProject = config.get("default.project"); |
| 1120 | Task::defaultDue = config.get("default.due"); |
| 1121 | Task::defaultScheduled = config.get("default.scheduled"); |
| 1122 | |
| 1123 | Task::searchCaseSensitive = Variant::searchCaseSensitive = |
| 1124 | config.getBoolean("search.case.sensitive"); |
| 1125 | Task::regex = Variant::searchUsingRegex = config.getBoolean("regex"); |
| 1126 | Lexer::dateFormat = Variant::dateFormat = config.get("dateformat"); |
| 1127 | |
| 1128 | auto weekStart = Datetime::dayOfWeek(config.get("weekstart")); |
| 1129 | if (weekStart != 0 && weekStart != 1) |
| 1130 | throw std::string( |
| 1131 | "The 'weekstart' configuration variable may only contain 'Sunday' or 'Monday'."); |
| 1132 | Datetime::weekstart = weekStart; |
| 1133 | Datetime::isoEnabled = config.getBoolean("date.iso"); |
| 1134 | Datetime::standaloneDateEnabled = false; |
| 1135 | Datetime::standaloneTimeEnabled = false; |
| 1136 | Duration::standaloneSecondsEnabled = false; |
| 1137 | |
| 1138 | TDB2::debug_mode = config.getBoolean("debug"); |
| 1139 | |
| 1140 | for (auto& rc : config) { |
| 1141 | if (rc.first.substr(0, 4) == "uda." && rc.first.substr(rc.first.length() - 7, 7) == ".values") { |
| 1142 | std::string name = rc.first.substr(4, rc.first.length() - 7 - 4); |
| 1143 | auto values = split(rc.second, ','); |
| 1144 | |
| 1145 | for (auto r = values.rbegin(); r != values.rend(); ++r) Task::customOrder[name].push_back(*r); |
| 1146 | } |
| 1147 | } |
| 1148 | |
| 1149 | for (auto& col : columns) { |
| 1150 | Task::attributes[col.first] = col.second->type(); |
| 1151 | Lexer::attributes[col.first] = col.second->type(); |
| 1152 | } |
| 1153 | |
| 1154 | Task::urgencyProjectCoefficient = config.getReal("urgency.project.coefficient"); |
| 1155 | Task::urgencyActiveCoefficient = config.getReal("urgency.active.coefficient"); |
| 1156 | Task::urgencyScheduledCoefficient = config.getReal("urgency.scheduled.coefficient"); |
| 1157 | Task::urgencyWaitingCoefficient = config.getReal("urgency.waiting.coefficient"); |
| 1158 | Task::urgencyBlockedCoefficient = config.getReal("urgency.blocked.coefficient"); |
| 1159 | Task::urgencyAnnotationsCoefficient = config.getReal("urgency.annotations.coefficient"); |
| 1160 | Task::urgencyTagsCoefficient = config.getReal("urgency.tags.coefficient"); |
| 1161 | Task::urgencyDueCoefficient = config.getReal("urgency.due.coefficient"); |
| 1162 | Task::urgencyBlockingCoefficient = config.getReal("urgency.blocking.coefficient"); |
| 1163 | Task::urgencyAgeCoefficient = config.getReal("urgency.age.coefficient"); |
| 1164 | Task::urgencyAgeMax = config.getReal("urgency.age.max"); |
| 1165 | |
| 1166 | // Tag- and project-specific coefficients. |
| 1167 | for (auto& var : config.all()) |
| 1168 | if (var.substr(0, 13) == "urgency.user." || var.substr(0, 12) == "urgency.uda.") |
| 1169 | Task::coefficients[var] = config.getReal(var); |
| 1170 | } |
| 1171 | |
| 1172 | //////////////////////////////////////////////////////////////////////////////// |