Minor fix for another change in Google's movie pages and a fix in
[movie-schedule] / src / searchclients / abstractsearchclient.cpp
index dc1219f..eea2103 100644 (file)
@@ -17,6 +17,8 @@
 
 #include "abstractsearchclient.h"
 
+#include "utils/timeutils.h"
+
 #include <QMutexLocker>
 #include <iostream>
 
@@ -27,7 +29,7 @@ AbstractSearchClient::AbstractSearchClient(QObject *parent)
     _start(0)
 {
     connect(_network, SIGNAL(finished(QNetworkReply *)),
-             this, SLOT(ReplyFinished(QNetworkReply*)));
+            this, SLOT(ReplyFinished(QNetworkReply*)));
     {
         QMutexLocker locker(&_next_search_task_id_mutex);
         _search_task_id = _next_search_task_id++;
@@ -46,20 +48,21 @@ void AbstractSearchClient::Search(const QUrl &url, int start)
     }
     QNetworkRequest request;
     QUrl xurl(url);
-    if (_start != 0) {
+    if (_start != 0 && !url.hasQueryItem("start")) {
         xurl.addQueryItem("start", QString::number(_start));
     }
     FixLocation(&xurl);
     //std::cout << "URL: " << qPrintable(QString(xurl.toEncoded())) << std::endl;
     request.setUrl(xurl);
-    //request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.9) Gecko/20100401 Ubuntu/9.10 (karmic) Firefox/3.5.9");
+    //request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.2.8) Gecko/20100723 Ubuntu/9.10 (karmic) Firefox/3.6.8");
     request.setRawHeader("User-Agent", "Mozilla/5.0");
     //request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
     request.setRawHeader("Accept", "application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
     request.setRawHeader("Accept-Language", "en-gb;q=1.0,en;q=0.9,de-de;q=0.5,de;q=0.3");
+    //request.setRawHeader("Accept-Language", "en-us,en;q=0.8,de-de;q=0.5,de;q=0.3");
     //request.setRawHeader("Accept-Encoding", "gzip,deflate");
     request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
-    request.setRawHeader("Keep-Alive", "300");
+    request.setRawHeader("Keep-Alive", "115");
     request.setRawHeader("Connection", "keep-alive");
     request.setRawHeader("Cache-Control", "max-age=0");
     QNetworkReply *reply = _network->get(request);
@@ -67,6 +70,12 @@ void AbstractSearchClient::Search(const QUrl &url, int start)
     connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(NetworkError(QNetworkReply::NetworkError)));
 }
 
+void AbstractSearchClient::SearchEncodedUrl(const QString &encoded_url, int start)
+{
+    QUrl url = QUrl::fromEncoded((QString("http://www.google.com") + encoded_url).toAscii());
+    Search(url, start);
+}
+
 void AbstractSearchClient::DownloadProgress(qint64 a,qint64 b)
 {
     //std::cout << "Search Progress of " << qPrintable(objectName()) << " - " << a << ", " << b << std::endl;
@@ -83,8 +92,68 @@ void AbstractSearchClient::NetworkError(QNetworkReply::NetworkError error)
     deleteLater();
 }
 
+QList<QTime> AbstractSearchClient::TimesFromString(const QList<QString> &time_strings)
+{
+    QList<QTime> schedule_times;
+    bool am_pm = false;
+    Q_FOREACH(const QString time_str, time_strings) {
+        if (time_str.endsWith("am", Qt::CaseInsensitive) || time_str.endsWith("pm", Qt::CaseInsensitive)) {
+            am_pm = true;
+        }
+    }
+    if (am_pm) {
+        int i = 0;
+        bool am = true;
+        while (i < time_strings.length()) {
+            int j = i;
+            while (i < time_strings.length()) {
+                if (time_strings[i].endsWith("am", Qt::CaseInsensitive)) {
+                    am = true;
+                    break;
+                } else if (time_strings[i].endsWith("pm", Qt::CaseInsensitive)) {
+                    am = false;
+                    break;
+                }
+                ++i;
+            }
+            while (j < i) {
+                QString time_str = time_strings[j] + (am ? "am" : "pm");
+                QTime time = TimeUtils::FromTimeString(time_str);
+                if (time.isValid()) {
+                    schedule_times.append(time);
+                } else {
+                    std::cout << "ERROR: time " << qPrintable(time_str) << " is invalid." << std::endl;
+                }
+                ++j;
+            }
+            if (i < time_strings.length()) {
+                QString time_str = time_strings[i];
+                QTime time = TimeUtils::FromTimeString(time_str);
+                if (time.isValid()) {
+                    schedule_times.append(time);
+                } else {
+                    std::cout << "ERROR: time " << qPrintable(time_str) << " is invalid." << std::endl;
+                }
+                schedule_times.append(time);
+            }
+            ++i;
+        }
+    } else {
+        Q_FOREACH(const QString time_str, time_strings) {
+            QTime time = TimeUtils::FromTimeString(time_str);
+            if (time.isValid()) {
+                schedule_times.append(time);
+            } else {
+                std::cout << "ERROR: time " << qPrintable(time_str) << " is invalid." << std::endl;
+            }
+        }
+    }
+    return schedule_times;
+}
+
 void AbstractSearchClient::FixLocation(QUrl *url)
 {
+#if 0
     // Try to fix the Google url which returns
     // wrong locations in some links
     if (_location.isNull()) {
@@ -111,6 +180,9 @@ void AbstractSearchClient::FixLocation(QUrl *url)
             url->addQueryItem("defaultloc", _location);
         }
     }
+#else
+    Q_UNUSED(url);
+#endif
 }
 
 QMutex AbstractSearchClient::_next_search_task_id_mutex;