X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Fmobil1881.cpp;h=a51d29377f243994ec7861d2d20680c835ddd955;hb=f99718e69b270a89094113a26b22c694b79382f0;hp=ba1907a389aef10df42cbd66553b74cbc7d9e73d;hpb=d187495fd3566da1ee1eb94cc313c2f561a0fac5;p=jenirok diff --git a/src/common/mobil1881.cpp b/src/common/mobil1881.cpp index ba1907a..a51d293 100644 --- a/src/common/mobil1881.cpp +++ b/src/common/mobil1881.cpp @@ -47,25 +47,42 @@ void Mobil1881::search(Source::SearchDetails const& details) { resetTimeout(); - int id = sendQuery(details, 1); - SearchData* newData = new SearchData; newData->details = details; - newData->searchIds.insert(id); newData->currentPage = 1; + newData->finishedSearches = 0; + + if(details.type == Source::BOTH) + { + newData->totalSearches = 2; + Source::SearchDetails tmpDetails = details; + tmpDetails.type = Source::PERSONS; + int id1 = sendQuery(tmpDetails, 1); + tmpDetails.type = Source::YELLOW_PAGES; + int id2 = sendQuery(tmpDetails, 1); + newData->searchIds.insert(id1); + newData->searchIds.insert(id2); + } + else + { + newData->totalSearches = 1; + int id = sendQuery(details, 1); + newData->searchIds.insert(id); + } pendingSearches_.push_back(newData); } -void Mobil1881::handleHttpData(int id, QString const& data) +void Mobil1881::handleHttpData(int id, QByteArray const& data) { + QString decoded = QString::fromUtf8(data.data()); + for(int i = 0; i < pendingSearches_.size(); i++) { if(pendingSearches_.at(i) && pendingSearches_.at(i)->searchIds.find(id) != pendingSearches_.at(i)->searchIds.end()) { - - addNumbers(pendingSearches_.at(i), data, i); + addNumbers(pendingSearches_.at(i), decoded, i); break; } } @@ -78,7 +95,6 @@ void Mobil1881::handleHttpError(int id) if(pendingSearches_.at(i) && pendingSearches_.at(i)->searchIds.find(id) != pendingSearches_.at(i)->searchIds.end()) { - setError(Source::CONNECTION_FAILURE, http_.errorString()); emitRequestFinished(pendingSearches_.at(i), true, i); break; @@ -90,6 +106,14 @@ void Mobil1881::addNumbers(SearchData* searchData, QString const& data, int index) { + if(data.isEmpty()) + { + qDebug() << "Server returned no data"; + setError(CONNECTION_FAILURE, "Server returned no data"); + emitRequestFinished(searchData, true, index); + return; + } + if(data.indexOf("Last ned vCard") > 0) { addOnlyNumber(searchData, data, index); @@ -97,10 +121,10 @@ void Mobil1881::addNumbers(SearchData* searchData, } int pos = 0; - QRegExp rx("(.*)"); - QRegExp name("
(.*)
"); - QRegExp address("
(.*),
(.*)
"); - QRegExp number("
(.*)
"); + static QRegExp rx("(.*)"); + static QRegExp name("
(.*)
"); + static QRegExp address("
(.*),
(.*)
"); + static QRegExp number("
(.*)
"); rx.setMinimal(true); name.setMinimal(true); address.setMinimal(true); @@ -149,20 +173,26 @@ void Mobil1881::addNumbers(SearchData* searchData, } + searchData->finishedSearches++; + if(searchData->results.size() >= maxResults) { emitRequestFinished(searchData, false, index); + + if(searchData->totalSearches > 1) + { + abort(); + } } else { - if(data.indexOf("Neste") > 0) { searchData->currentPage++; int id = sendQuery(searchData->details, searchData->currentPage); searchData->searchIds.insert(id); } - else + else if(searchData->finishedSearches >= searchData->totalSearches) { emitRequestFinished(searchData, false, index); } @@ -174,9 +204,9 @@ void Mobil1881::addOnlyNumber(SearchData* searchData, QString const& data, int index) { - QRegExp name("
(.*)
"); - QRegExp number("class=\"srlttxt\">(.*)"); - QRegExp address("class=\"srlttxt\">(.*),
(.*)
"); + static QRegExp name("
(.*)
"); + static QRegExp number("class=\"srlttxt\">(.*)"); + static QRegExp address("class=\"srlttxt\">(.*),
(.*)
"); name.setMinimal(true); number.setMinimal(true); address.setMinimal(true); @@ -219,16 +249,20 @@ bool Mobil1881::formatResult(QString& name, QString& number, Source::Result& result) { name = stripTags(name); + name = htmlEntityDecode(name); result.name = name.trimmed(); number = stripTags(number); number = cleanUpNumber(number); result.number = number.trimmed(); street = stripTags(street); + street = htmlEntityDecode(street); city = stripTags(city); + city = htmlEntityDecode(city); result.street = street.trimmed(); result.city = city.trimmed(); + result.country = "Norway"; - if(!result.name.isEmpty() && !result.number.isEmpty()) + if(!result.name.isEmpty() && (!getFindNumber() || !result.number.isEmpty())) { return true; } @@ -258,7 +292,7 @@ int Mobil1881::sendQuery(Source::SearchDetails const& details, if(!details.location.isEmpty()) { - query += details.location; + query += " " + details.location; } url.addQueryItem("s", query);