Small fix to Eniro setting handling.
[jenirok] / src / common / eniro.cpp
index 0958893..d3ebf5b 100644 (file)
@@ -45,7 +45,8 @@ namespace
     static const QString INVALID_LOGIN_STRING = "Invalid login details";
     static const QString TIMEOUT_STRING = "Request timed out";
     static const QString PERSON_REGEXP = "<td class=\"hTd2\">(.*)<b>(.*)</td>";
-    static const QString YELLOW_REGEXP = "<td class=\"hTd2\">(.*)<span class=\"gray\"\\}>(.*)</td>";
+    static const QString YELLOW_REGEXP = "<td class=\"hTd2\">(.*)<span class=\"gray\">(.*)</td>";
+    static const QString SINGLE_REGEXP = "<div class=\"header\">(.*)</div>(.*)<div class=\"callRow\">(.*)</div>";
     static const QString NUMBER_REGEXP = "<div class=\"callRow\">(.*)</div>";
     static const QString LOGIN_CHECK = "<input class=\"inpTxt\" id=\"loginformUsername\"";
 }
@@ -163,6 +164,7 @@ void Eniro::search(SearchDetails const& details)
 
         default:
             what = "moball";
+            break;
         }
 
     }
@@ -190,9 +192,8 @@ void Eniro::search(SearchDetails const& details)
 
 }
 
-void Eniro::handleHttpData(int id, QString const& data)
+void Eniro::handleHttpData(int id, QByteArray const& data)
 {
-    qDebug() << "Handle:" << id;
     searchMap::const_iterator searchIt;
     numberMap::const_iterator numberIt;
 
@@ -200,7 +201,6 @@ void Eniro::handleHttpData(int id, QString const& data)
     if((searchIt = pendingSearches_.find(id)) !=
         pendingSearches_.end())
     {
-        qDebug() << "Load results";
         // Load results from html data
         loadResults(id, data);
     }
@@ -265,21 +265,8 @@ void Eniro::handleHttpError(int id)
 void Eniro::loadResults(int id, QString const& httpData)
 {
     searchMap::iterator it = pendingSearches_.find(id);
-    QString expr;
-
-    switch(it.value()->details.type)
-    {
-    case YELLOW_PAGES:
-        expr = YELLOW_REGEXP;
-        break;
-    case PERSONS:
-        expr = PERSON_REGEXP;
-        break;
-    default:
-        return;
-    }
 
-    QRegExp rx(expr);
+    QRegExp rx("((" + YELLOW_REGEXP + ")|(" + PERSON_REGEXP + ")|(" + SINGLE_REGEXP + "))");
     rx.setMinimal(true);
 
     bool requestsPending = false;
@@ -291,7 +278,8 @@ void Eniro::loadResults(int id, QString const& httpData)
     {
         pos += rx.matchedLength();
 
-        data = rx.cap(2);
+        data = rx.cap(1);
+
         data = stripTags(data);
         QStringList rows = data.split('\n');
 
@@ -329,9 +317,18 @@ void Eniro::loadResults(int id, QString const& httpData)
             break;
 
         case 3:
-            result.name = rows[0];
-            result.street = rows[1];
-            result.city = rows[2];
+            if(isPhoneNumber(rows[1]))
+            {
+                result.name = rows[0];
+                result.number = cleanUpNumber(rows[1]);
+                result.city = rows[2];
+            }
+            else
+            {
+                result.name = rows[0];
+                result.street = rows[1];
+                result.city = rows[2];
+            }
             break;
 
         case 4:
@@ -515,7 +512,6 @@ void Eniro::emitRequestFinished(int key, SearchData* data, bool error)
 QMap <Eniro::Site, Eniro::SiteDetails> Eniro::getSites()
 {
     QMap <Site, SiteDetails> sites;
-    SiteDetails details;
 
     for(int i = 0; i < SITE_COUNT; i++)
     {