Fix delay parsing
[quandoparte] / application / stationschedulemodel.cpp
index 3f9fa70..986d015 100644 (file)
@@ -27,15 +27,13 @@ Boston, MA 02110-1301, USA.
 #include <QtGlobal>
 #include <QDebug>
 #if (QT_VERSION >= QT_VERSION_CHECK(5, 1, 0))
-#include <QtWebKitWidgets/QtWebKitWidgets>
+#include <QtWebKitWidgets>
 #else
 #include <QWebElement>
 #include <QWebFrame>
 #include <QWebPage>
 #endif
 
-static QHash<int, QByteArray> roles;
-
 StationScheduleModel::StationScheduleModel(const QString &name, QObject *parent) :
     QAbstractListModel(parent),
     m_name(name),
@@ -43,27 +41,15 @@ StationScheduleModel::StationScheduleModel(const QString &name, QObject *parent)
 
 {
     DataProvider *provider = DataProvider::instance();
-    QHash<int, QByteArray> roles;
-    roles[TrainRole] = "train";
-    roles[DepartureStationRole] = "departureStation";
-    roles[DepartureTimeRole] = "departureTime";
-    roles[ArrivalStationRole] = "arrivalStation";
-    roles[ArrivalTimeRole] = "arrivalTime";
-    roles[DetailsUrlRole] = "detailsUrl";
-    roles[DelayRole] = "delay";
-    roles[DelayClassRole] = "delayClass";
-    roles[ExpectedPlatformRole] = "expectedPlatform";
-    roles[ActualPlatformRole] = "actualPlatform";
-#if (QT_VERSION <= QT_VERSION_CHECK(5, 0, 0))
-    setRoleNames(roles);
-#endif
-
     connect(provider, SIGNAL(stationScheduleReady(QByteArray,QUrl)),
             this, SLOT(parse(QByteArray,QUrl)));
     connect(provider, SIGNAL(error()),
             this, SLOT(onNetworkError()));
     Settings *settings = Settings::instance();
     m_scheduleType = settings->showArrivalsPreferred() ? ArrivalSchedule : DepartureSchedule;
+#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
+    setRoleNames(roleNames());
+#endif
 }
 
 const QString &StationScheduleModel::name()
@@ -107,6 +93,18 @@ void StationScheduleModel::setError(const QString &error)
 
 QHash<int, QByteArray> StationScheduleModel::roleNames() const
 {
+    QHash<int, QByteArray> roles;
+    roles[TrainRole] = "train";
+    roles[DepartureStationRole] = "departureStation";
+    roles[DepartureTimeRole] = "departureTime";
+    roles[ArrivalStationRole] = "arrivalStation";
+    roles[ArrivalTimeRole] = "arrivalTime";
+    roles[DetailsUrlRole] = "detailsUrl";
+    roles[DelayRole] = "delay";
+    roles[DelayClassRole] = "delayClass";
+    roles[ExpectedPlatformRole] = "expectedPlatform";
+    roles[ActualPlatformRole] = "actualPlatform";
+
     return roles;
 }
 
@@ -178,7 +176,19 @@ static void parseTrain(const QString &text, StationScheduleItem &item)
             item.setArrivalStation(filter.cap(2));
             item.setArrivalTime(filter.cap(3));
         }
-        item.setDelay(filter.cap(6));
+        QString delayDescription = filter.cap(6);
+        if (delayDescription == "in orario") {
+            item.setDelay(QObject::tr("On time"));
+        } else {
+            QRegExp delayRegExp("ritardo ([0-9]+)(| minuti)");
+            int pos = delayRegExp.indexIn(delayDescription);
+            if (pos >= 0) {
+                item.setDelay(QString(QObject::tr("Delay: %1 minutes")).arg(delayRegExp.cap(1)));
+            } else {
+                // Does not match, let the user parse it
+                item.setDelay(delayDescription);
+            }
+        }
         item.setExpectedPlatform(filter.cap(4));
         item.setActualPlatform(filter.cap(5));
     } else {
@@ -222,7 +232,6 @@ void StationScheduleModel::parse(const QByteArray &htmlReply, const QUrl &baseUr
 
     emit layoutAboutToBeChanged();
     beginResetModel();
-#if (QT_VERSION <= QT_VERSION_CHECK(5, 0, 0))
     QWebPage page;
     page.mainFrame()->setContent(htmlReply, "text/html", baseUrl);
     QWebElement doc = page.mainFrame()->documentElement();
@@ -282,7 +291,6 @@ void StationScheduleModel::parse(const QByteArray &htmlReply, const QUrl &baseUr
         if (current.isNull())
             break;
     }
-#endif
     endResetModel();
     emit layoutChanged();
 }