Minor fix for another change in Google's movie pages and a fix in
[movie-schedule] / src / searchclients / moviesearchclient.cpp
index 670c569..dd44a6a 100644 (file)
@@ -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,12 +92,22 @@ 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;
                 }
             } else if (state == PARSE_EXPECT_DIV2 && xml.name() == "div") {
                 state = PARSE_DIV2;
-            } else if (state == PARSE_DIV2 && xml.name() == "span" && attr_class.isEmpty()) {
+            } else if (state == PARSE_DIV2 && xml.name() == "span") {
                 movie_spans.append("");
                 state = PARSE_SPAN;
             } else if (state == PARSE_DIV2 && xml.name() == "img") {
@@ -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);