X-Git-Url: http://git.maemo.org/git/?p=movie-schedule;a=blobdiff_plain;f=src%2Fsearchclients%2Fmoviesearchclient.cpp;h=ec642ec2d69e28c811675893c12b9134c77802f4;hp=670c56914f7cf968e42cf501fdfbf8524135f115;hb=bb467534ecac666816ae036272a474174d9d8449;hpb=99e8e1c020bfbffa186db00899b0b40c07a3b89f diff --git a/src/searchclients/moviesearchclient.cpp b/src/searchclients/moviesearchclient.cpp index 670c569..ec642ec 100644 --- a/src/searchclients/moviesearchclient.cpp +++ b/src/searchclients/moviesearchclient.cpp @@ -48,6 +48,7 @@ void MovieSearchClient::CancelAllRunningSearchs() void MovieSearchClient::Search(int start) { QUrl url("http://www.google.com/m/movies"); + url.addQueryItem("action","chgloc"); url.addQueryItem("loc", _town); url.addQueryItem("sort", QString::number(1)); AbstractSearchClient::Search(url, start); @@ -58,7 +59,8 @@ enum State { PARSE_MOVIE_LINK, PARSE_EXPECT_DIV1, PARSE_EXPECT_DIV2, PARSE_DIV2, - PARSE_SPAN, PARSE_RATING, PARSE_TRAILER + PARSE_SPAN, PARSE_RATING, PARSE_TRAILER, + PARSE_NEXT_PAGE_LINK }; void MovieSearchClient::ReplyFinished(QNetworkReply *reply) @@ -73,6 +75,8 @@ void MovieSearchClient::ReplyFinished(QNetworkReply *reply) QString movie_theaters_url; QRegExp duration_pattern("((\\d+)hr )?(\\d+)min"); QRegExp reviews_pattern("\\d+ review(s)?"); + QString next_page_url; + int next_page_start; while (!xml.atEnd()) { QXmlStreamReader::TokenType token = xml.readNext(); if (token == QXmlStreamReader::StartElement) { @@ -88,6 +92,16 @@ void MovieSearchClient::ReplyFinished(QNetworkReply *reply) movie_rating = -1.0; movie_theaters_url = attr_href; state = PARSE_MOVIE_LINK; + } else if (url.hasQueryItem("start")) { + QString sort = url.queryItemValue("sort"); + QString start = url.queryItemValue("start"); + int istart = start.toInt(); + if (sort == "1" && istart > GetStartIndex()) { + //std::cout << "next page LINK " << qPrintable(attr_href) << std::endl; + next_page_url = attr_href; + next_page_start = istart; + } + state = PARSE_NEXT_PAGE_LINK; } else { state = PARSE_HTML; } @@ -151,6 +165,8 @@ void MovieSearchClient::ReplyFinished(QNetworkReply *reply) } } state = PARSE_HTML; + } else if (state == PARSE_NEXT_PAGE_LINK) { + state = PARSE_HTML; } } else if (token == QXmlStreamReader::Characters) { if (state == PARSE_MOVIE_LINK) { @@ -178,9 +194,9 @@ void MovieSearchClient::ReplyFinished(QNetworkReply *reply) emit SearchFinished(GetSearchTaskId(), false); deleteLater(); } else { - if (found > 0) { + if (!next_page_url.isEmpty()) { emit Reply(GetSearchTaskId(), true); - Search(GetStartIndex() + found); + SearchEncodedUrl(next_page_url, next_page_start); } else { emit Reply(GetSearchTaskId(), false); emit SearchFinished(GetSearchTaskId(), true);