From da679d3f209be71b293367fbf13f052b94b5acee Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Thu, 25 Dec 2014 09:12:34 +0000 Subject: [PATCH] Add Date arithmetic to DataFilter .. use "Date" and "Today" which evaluate to the number of days since 1st Jan 1900. .. so a filter for the last 90 days would be: (Today - Date) < 30 .. will add date strings next. --- src/DataFilter.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/DataFilter.cpp b/src/DataFilter.cpp index a0403f82d..bb591a058 100644 --- a/src/DataFilter.cpp +++ b/src/DataFilter.cpp @@ -106,7 +106,9 @@ bool Leaf::isNumber(DataFilter *df, Leaf *leaf) { QString symbol = *(leaf->lvalue.n); if (symbol == "isRun") return true; - if (isCoggan(symbol)) return true; + else if (!symbol.compare("Date", Qt::CaseInsensitive)) return true; + else if (!symbol.compare("Today", Qt::CaseInsensitive)) return true; + else if (isCoggan(symbol)) return true; else return df->lookupType.value(symbol, false); } break; @@ -158,7 +160,9 @@ void Leaf::validateFilter(DataFilter *df, Leaf *leaf) if (lookup == "") { // isRun isa special, we may add more later (e.g. date) - if (symbol != "isRun" && !isCoggan(symbol)) + if (symbol.compare("Date", Qt::CaseInsensitive) && + symbol.compare("Today", Qt::CaseInsensitive) && + symbol != "isRun" && !isCoggan(symbol)) DataFiltererrors << QString(QObject::tr("%1 is unknown")).arg(symbol); } } @@ -438,6 +442,16 @@ double Leaf::eval(Context *context, DataFilter *df, Leaf *leaf, RideItem *m) lhsdouble = m->isRun ? 1 : 0; lhsisNumber = true; + } else if (!symbol.compare("Today", Qt::CaseInsensitive)) { + + lhsdouble = QDate(1900,01,01).daysTo(QDate::currentDate()); + lhsisNumber = true; + + } else if (!symbol.compare("Date", Qt::CaseInsensitive)) { + + lhsdouble = QDate(1900,01,01).daysTo(m->dateTime.date()); + lhsisNumber = true; + } else if (isCoggan(symbol)) { // a coggan PMC metric PMCData *pmcData = context->athlete->getPMCFor("coggan_tss"); @@ -503,6 +517,16 @@ double Leaf::eval(Context *context, DataFilter *df, Leaf *leaf, RideItem *m) rhsdouble = m->isRun ? 1 : 0; rhsisNumber = true; + } else if (!symbol.compare("Today", Qt::CaseInsensitive)) { + + rhsdouble = QDate(1900,01,01).daysTo(QDate::currentDate()); + rhsisNumber = true; + + } else if (!symbol.compare("Date", Qt::CaseInsensitive)) { + + rhsdouble = QDate(1900,01,01).daysTo(m->dateTime.date()); + rhsisNumber = true; + } else if (isCoggan(symbol)) { // a coggan PMC metric