Some fixes to connection manager.
[jenirok] / src / common / mobil1881.cpp
index ba1907a..69327b0 100644 (file)
@@ -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,12 @@ void Mobil1881::addNumbers(SearchData* searchData,
                            QString const& data,
                            int index)
 {
+    if(data.isEmpty())
+    {
+        qDebug() << "Server returned no data";
+        qDebug() << "Headers: " << http_.lastResponse().toString();
+    }
+
     if(data.indexOf("<b>Last ned vCard</b>") > 0)
     {
         addOnlyNumber(searchData, data, index);
@@ -97,10 +119,10 @@ void Mobil1881::addNumbers(SearchData* searchData,
     }
 
     int pos = 0;
-    QRegExp rx("<td valign=\"top\" width=\"99%\">(.*)</td>");
-    QRegExp name("<div class=\"srln\">(.*)</div>");
-    QRegExp address("<div class=\"srla\">(.*),<br/>(.*)</div>");
-    QRegExp number("<div class=\"srlp\">(.*)</div>");
+    static QRegExp rx("<td valign=\"top\" width=\"99%\">(.*)</td>");
+    static QRegExp name("<div class=\"srln\">(.*)</div>");
+    static QRegExp address("<div class=\"srla\">(.*),<br/>(.*)</div>");
+    static QRegExp number("<div class=\"srlp\">(.*)</div>");
     rx.setMinimal(true);
     name.setMinimal(true);
     address.setMinimal(true);
@@ -149,20 +171,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 +202,9 @@ void Mobil1881::addOnlyNumber(SearchData* searchData,
                               QString const& data,
                               int index)
 {
-    QRegExp name("<div class=\"srsln\">(.*)</div>");
-    QRegExp number("class=\"srlttxt\"><b>(.*)</b>");
-    QRegExp address("class=\"srlttxt\"><span>(.*),<br/>(.*)</span>");
+    static QRegExp name("<div class=\"srsln\">(.*)</div>");
+    static QRegExp number("class=\"srlttxt\"><b>(.*)</b>");
+    static QRegExp address("class=\"srlttxt\"><span>(.*),<br/>(.*)</span>");
     name.setMinimal(true);
     number.setMinimal(true);
     address.setMinimal(true);
@@ -219,16 +247,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 +290,7 @@ int Mobil1881::sendQuery(Source::SearchDetails const& details,
 
     if(!details.location.isEmpty())
     {
-        query += details.location;
+        query += " " + details.location;
     }
 
     url.addQueryItem("s", query);