X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fsearchclients%2Fmovieschedulesearchclient.cpp;h=235f549e36275fc2abe49dd89322302e9b7d76e6;hb=9fe6a9fd6616b5327422a523cc896bf73c9fb324;hp=cb2ac42306eae9555739995af31fe388928e2f4d;hpb=99e8e1c020bfbffa186db00899b0b40c07a3b89f;p=movie-schedule diff --git a/src/searchclients/movieschedulesearchclient.cpp b/src/searchclients/movieschedulesearchclient.cpp index cb2ac42..235f549 100644 --- a/src/searchclients/movieschedulesearchclient.cpp +++ b/src/searchclients/movieschedulesearchclient.cpp @@ -78,6 +78,7 @@ enum State { PARSE_LINK, PARSE_BR, PARSE_SPAN, + PARSE_NEXT_PAGE_LINK }; void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply) @@ -90,8 +91,10 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply) QString theater_name; QString theater_address; QString theater_phone; - QList schedule; + QList 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) { @@ -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 << "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); @@ -115,6 +118,16 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply) 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; } @@ -164,12 +177,20 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply) if (!theater_phone.isEmpty()) { cinema->SetTelephone(theater_phone); } - Q_FOREACH(const QTime time, schedule) { - _cinema_schedule->AddSchedule(cinema, movie, time, _date); + QList schedule_times = TimesFromString(schedule); + Q_FOREACH(const QTime time, schedule_times) { + if (time.hour() < 3) { + // interpret very early times as shifted by 1 day (seems to be a Google logic) + _cinema_schedule->AddSchedule(cinema, movie, time, _date.addDays(1)); + } else { + _cinema_schedule->AddSchedule(cinema, movie, time, _date); + } } } } } + } else if (state == PARSE_NEXT_PAGE_LINK) { + state = PARSE_HTML; } } else if (token == QXmlStreamReader::Characters) { if (state == PARSE_THEATER_LINK) { @@ -185,11 +206,8 @@ void MovieScheduleSearchClient::ReplyFinished(QNetworkReply *reply) while ((i = time_pattern.indexIn(t, i)) != -1) { int length = time_pattern.matchedLength(); //std::cout << "time " << qPrintable(t.mid(i, length)) << std::endl; - QTime time = TimeUtils::FromTimeString(t.mid(i, length)); - if (time.isValid()) { - schedule.append(time); - } else { - std::cout << "ERROR: time " << qPrintable(t.mid(i, length)) << " is invalid." << std::endl; + if (length > 0) { + schedule.append(t.mid(i, length)); } i += length; found = true; @@ -211,9 +229,9 @@ void MovieScheduleSearchClient::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 { if (!_date_urls.isEmpty()) { SearchNextDate();