From 3a9505f56ced215a7138facac7f6194219a70f96 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Thu, 16 Jul 2015 16:12:31 -0400 Subject: [PATCH] DOM: Durations may now be ISO8601p or Duration --- src/DOM.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/DOM.cpp b/src/DOM.cpp index fc8e32b17..ff224f25c 100644 --- a/src/DOM.cpp +++ b/src/DOM.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -318,7 +319,19 @@ bool DOM::get (const std::string& name, const Task& task, Variant& value) if (column->type () == "date") value = Variant (ref.get_date (canonical), Variant::type_date); else if (column->type () == "duration") - value = Variant ((time_t) Duration (ref.get (canonical)), Variant::type_duration); + { + std::string period = ref.get (canonical); + context.debug ("ref.get(" + canonical + ") --> " + period); + + ISO8601p iso; + std::string::size_type cursor = 0; + if (iso.parse (period, cursor)) + value = Variant ((time_t) iso._value, Variant::type_duration); + else + value = Variant ((time_t) Duration (ref.get (canonical)), Variant::type_duration); + + context.debug ("value --> " + (std::string) value); + } else if (column->type () == "numeric") value = Variant (ref.get_float (canonical)); else