Skip to content

Commit 0f18031

Browse files
committed
ColumnUDADuration: add "countdown" style
In the same format as ColTypeDatetime. Fixes #3738
1 parent bd83144 commit 0f18031

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/columns/ColUDA.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,8 @@ ColumnUDADuration::ColumnUDADuration() {
243243
_style = "default";
244244
_label = "";
245245
_uda = true;
246-
_styles = {_style, "indicator", "age", "iso"};
247-
_examples = {"P30D", "U", "4w", "P30D"};
246+
_styles = {_style, "indicator", "age", "countdown", "iso"};
247+
_examples = {"P30D", "U", "4w", "30d 0:00:00", "P30D"};
248248
}
249249

250250
////////////////////////////////////////////////////////////////////////////////
@@ -272,6 +272,9 @@ void ColumnUDADuration::measure(Task& task, unsigned int& minimum, unsigned int&
272272
} else if (_style == "age") {
273273
auto value = task.get(_name);
274274
if (value != "") minimum = maximum = Duration(value).formatVague(true).length();
275+
} else if (_style == "countdown") {
276+
auto value = task.get(_name);
277+
if (value != "") minimum = maximum = Duration(value).format().length();
275278
} else if (_style == "indicator") {
276279
if (task.has(_name)) {
277280
auto indicator = Context::getContext().config.get("uda." + _name + ".indicator");
@@ -294,6 +297,9 @@ void ColumnUDADuration::render(std::vector<std::string>& lines, Task& task, int
294297
} else if (_style == "age") {
295298
auto value = task.get(_name);
296299
renderStringRight(lines, width, color, Duration(value).formatVague(true));
300+
} else if (_style == "countdown") {
301+
auto value = task.get(_name);
302+
renderStringRight(lines, width, color, Duration(value).format());
297303
} else if (_style == "indicator") {
298304
auto indicator = Context::getContext().config.get("uda." + _name + ".indicator");
299305
if (indicator == "") indicator = "U";

test/columns.test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,14 @@ def test_uda_duration_format_age(self):
590590
self.assertRegex(out, r"3\s+[0-9]+[wmin]+")
591591
self.assertRegex(out, r"4\s+[0-9]+[wmin]+")
592592

593+
def test_uda_duration_format_countdown(self):
594+
"""Verify uda_duration.countdown formatting"""
595+
code, out, err = self.t("xxx rc.report.xxx.columns:id,uda_duration.countdown")
596+
self.assertRegex(out, r"1\s+")
597+
self.assertRegex(out, r"2\s+(\d+d )?\d+:\d{2}:\d{2}")
598+
self.assertRegex(out, r"3\s+(\d+d )?\d+:\d{2}:\d{2}")
599+
self.assertRegex(out, r"4\s+(\d+d )?\d+:\d{2}:\d{2}")
600+
593601

594602
class TestFeature1061(TestCase):
595603
def setUp(self):

0 commit comments

Comments
 (0)