[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [krusader] krusader/Filter: FIXED: [ 374175 ] wrong date format parsing using date filter in search 
From:       Alexander Bikadorov <null () kde ! org>
Date:       2016-12-31 15:55:37
Message-ID: E1cNM0P-0004f1-Ma () code ! kde ! org
[Download RAW message or body]

Git commit 4d509bb88b6b8bf40050e1d83af9611362bfaa6a by Alexander Bikadorov.
Committed on 31/12/2016 at 15:42.
Pushed by abikadorov into branch 'master'.

FIXED: [ 374175 ] wrong date format parsing using date filter in search dialog

Plus fixed wrong century: number '16' is made to year '1916' by QLocale

BUG: 374175

M  +8    -11   krusader/Filter/advancedfilter.cpp
M  +7    -0    krusader/Filter/advancedfilter.h

https://commits.kde.org/krusader/4d509bb88b6b8bf40050e1d83af9611362bfaa6a

diff --git a/krusader/Filter/advancedfilter.cpp b/krusader/Filter/advancedfilter.cpp
index d1165262..ce4fdc83 100644
--- a/krusader/Filter/advancedfilter.cpp
+++ b/krusader/Filter/advancedfilter.cpp
@@ -449,14 +449,14 @@ void AdvancedFilter::notModifiedAfterSetDate()
 void AdvancedFilter::changeDate(KLineEdit *p)
 {
     // check if the current date is valid
-    QDate d = QLocale().toDate(p->text());
+    QDate d = stringToDate(p->text());
     if (!d.isValid()) d = QDate::currentDate();
 
     KRGetDate *gd = new KRGetDate(d, this);
     d = gd->getDate();
     // if a user pressed ESC or closed the dialog, we'll return an invalid date
     if (d.isValid())
-        p->setText(QLocale().toString(d, QLocale::ShortFormat));
+        p->setText(dateToString(d));
     delete gd;
 }
 
@@ -504,8 +504,8 @@ bool AdvancedFilter::getSettings(FilterSettings &s)
     }
 
     s.modifiedBetweenEnabled = modifiedBetweenEnabled->isChecked();
-    s.modifiedBetween1 = QLocale().toDate(modifiedBetweenData1->text());
-    s.modifiedBetween2 = QLocale().toDate(modifiedBetweenData2->text());
+    s.modifiedBetween1 = stringToDate(modifiedBetweenData1->text());
+    s.modifiedBetween2 = stringToDate(modifiedBetweenData2->text());
 
     if (s.modifiedBetweenEnabled) {
         // check if date is valid
@@ -526,7 +526,7 @@ bool AdvancedFilter::getSettings(FilterSettings &s)
     }
 
     s.notModifiedAfterEnabled = notModifiedAfterEnabled->isChecked();
-    s.notModifiedAfter = QLocale().toDate(notModifiedAfterData->text());
+    s.notModifiedAfter = stringToDate(notModifiedAfterData->text());
 
     if(s.notModifiedAfterEnabled && !s.notModifiedAfter.isValid()) {
         invalidDateMessage(notModifiedAfterData);
@@ -586,13 +586,10 @@ void AdvancedFilter::applySettings(const FilterSettings &s)
     else
         anyDateEnabled->setChecked(true);
 
-    modifiedBetweenData1->setText(
-        QLocale().toString(s.modifiedBetween1, QLocale::ShortFormat));
-    modifiedBetweenData2->setText(
-        QLocale().toString(s.modifiedBetween2, QLocale::ShortFormat));
+    modifiedBetweenData1->setText(dateToString(s.modifiedBetween1));
+    modifiedBetweenData2->setText(dateToString(s.modifiedBetween2));
 
-    notModifiedAfterData->setText(
-        QLocale().toString(s.notModifiedAfter, QLocale::ShortFormat));
+    notModifiedAfterData->setText(dateToString(s.notModifiedAfter));
 
     modifiedInTheLastData->setValue(s.modifiedInTheLast.amount);
     modifiedInTheLastType->setCurrentIndex(s.modifiedInTheLast.unit);
diff --git a/krusader/Filter/advancedfilter.h b/krusader/Filter/advancedfilter.h
index 57051abb..ac50990b 100644
--- a/krusader/Filter/advancedfilter.h
+++ b/krusader/Filter/advancedfilter.h
@@ -116,6 +116,13 @@ private:
     void changeDate(KLineEdit *p);
     void fillList(KComboBox *list, QString filename);
     void invalidDateMessage(KLineEdit *p);
+    static QDate stringToDate(const QString& text) {
+        // 30.12.16 is interpreted as 1916-12-30
+        return QLocale().toDate(text, QLocale::ShortFormat).addYears(100);
+    }
+    static QString dateToString(const QDate& date) {
+        return QLocale().toString(date, QLocale::ShortFormat);
+    }
 };
 
 #endif /* ADVANCEDFILTER_H */
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic