#include "abstractsearchclient.h"
+#include "utils/timeutils.h"
+
#include <QMutexLocker>
#include <iostream>
_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++;
}
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);
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;
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()) {
url->addQueryItem("defaultloc", _location);
}
}
+#else
+ Q_UNUSED(url);
+#endif
}
QMutex AbstractSearchClient::_next_search_task_id_mutex;