Fixed searchclients to handle new Google URLs correctly; added GUI
[movie-schedule] / src / searchclients / movieschedulesearchclient.cpp
index 7041c5e..235f549 100644 (file)
@@ -78,6 +78,7 @@ enum State {
     PARSE_LINK,
     PARSE_BR,
     PARSE_SPAN,
     PARSE_LINK,
     PARSE_BR,
     PARSE_SPAN,
+    PARSE_NEXT_PAGE_LINK
 };
 
 void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
 };
 
 void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
@@ -92,6 +93,8 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
     QString theater_phone;
     QList<QString> schedule;
     QRegExp time_pattern("\\d+:\\d+([aApP][mM])*");
     QString theater_phone;
     QList<QString> schedule;
     QRegExp time_pattern("\\d+:\\d+([aApP][mM])*");
+    QString next_page_url;
+    int next_page_start;
     while (!xml.atEnd()) {
         QXmlStreamReader::TokenType token = xml.readNext();
         if (token == QXmlStreamReader::StartElement) {
     while (!xml.atEnd()) {
         QXmlStreamReader::TokenType token = xml.readNext();
         if (token == QXmlStreamReader::StartElement) {
@@ -102,7 +105,7 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
                 //std::cout << "LINK " << qPrintable(attr_href) << std::endl;
                 if (url.hasQueryItem("date")) {
                     QString v = url.queryItemValue("date");
                 //std::cout << "LINK " << qPrintable(attr_href) << std::endl;
                 if (url.hasQueryItem("date")) {
                     QString v = url.queryItemValue("date");
-                    std::cout << "FOUND Date Link " << qPrintable(v) << " from " << qPrintable(url.toString()) << std::endl;
+                    //std::cout << "FOUND Date Link " << qPrintable(v) << " from " << qPrintable(url.toString()) << std::endl;
                     if (!_dates_seen.contains(v)) {
                         // TODO replace location with user selected location (Google simplifies to much)
                         _dates_seen.insert(v);
                     if (!_dates_seen.contains(v)) {
                         // TODO replace location with user selected location (Google simplifies to much)
                         _dates_seen.insert(v);
@@ -115,6 +118,16 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
                     theater_phone = "";
                     schedule.clear();
                     state = PARSE_THEATER_LINK;
                     theater_phone = "";
                     schedule.clear();
                     state = PARSE_THEATER_LINK;
+                } else if (url.hasQueryItem("start")) {
+                    QString sort = url.queryItemValue("sort");
+                    QString start = url.queryItemValue("start");
+                    int istart = start.toInt();
+                    if (sort == "0" && 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 {
                     state = PARSE_HTML;
                 }
@@ -176,6 +189,8 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
                         }
                     }
                 }
                         }
                     }
                 }
+            } else if (state == PARSE_NEXT_PAGE_LINK) {
+                state = PARSE_HTML;
             }
         } else if (token == QXmlStreamReader::Characters) {
             if (state == PARSE_THEATER_LINK) {
             }
         } else if (token == QXmlStreamReader::Characters) {
             if (state == PARSE_THEATER_LINK) {
@@ -214,9 +229,9 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply)
         emit SearchFinished(GetSearchTaskId(), false);
         deleteLater();
     } else {
         emit SearchFinished(GetSearchTaskId(), false);
         deleteLater();
     } else {
-        if (found > 0) {
+        if (!next_page_url.isEmpty()) {
             emit Reply(GetSearchTaskId(), true);
             emit Reply(GetSearchTaskId(), true);
-            Search(GetStartIndex() + found);
+            SearchEncodedUrl(next_page_url, next_page_start);
         } else {
             if (!_date_urls.isEmpty()) {
                 SearchNextDate();
         } else {
             if (!_date_urls.isEmpty()) {
                 SearchNextDate();