X-Git-Url: http://git.maemo.org/git/?p=movie-schedule;a=blobdiff_plain;f=src%2Fsearchclients%2Fabstractsearchclient.cpp;h=eea2103611806bc659707a30bc857663696cd63e;hp=dc1219f1032893843fc0d8154ee0673185a2fd4c;hb=HEAD;hpb=99e8e1c020bfbffa186db00899b0b40c07a3b89f diff --git a/src/searchclients/abstractsearchclient.cpp b/src/searchclients/abstractsearchclient.cpp index dc1219f..eea2103 100644 --- a/src/searchclients/abstractsearchclient.cpp +++ b/src/searchclients/abstractsearchclient.cpp @@ -17,6 +17,8 @@ #include "abstractsearchclient.h" +#include "utils/timeutils.h" + #include #include @@ -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 AbstractSearchClient::TimesFromString(const QList &time_strings) +{ + QList 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;