Added automatic retries to call listener.
[jenirok] / src / daemon / calllistener.cpp
index 344b73b..16ee0d5 100644 (file)
@@ -37,7 +37,7 @@ namespace
 
 QDBusConnection CallListener::systemBus_ = QDBusConnection::systemBus();
 
-CallListener::CallListener(): eniro_(0), contactManager_(0), box_(0), label_(0)
+CallListener::CallListener(): eniro_(0), contactManager_(0), box_(0), label_(0), retries_(-1)
 {
 }
 
@@ -119,11 +119,13 @@ void CallListener::search(Eniro::SearchDetails const& details)
 
         showDelayedResult(createResult(result.name,
                                  result.street,
-                                 result.city));
+                                 result.city), BANNER_DELAY);
     }
     else
     {
         showResult(tr("Searching..."));
+        retries_ = 0;
+        currentSearch_ = details;
         eniro_->search(details);
     }
 
@@ -146,7 +148,17 @@ void CallListener::requestFinished(QVector <Eniro::Result> const& results,
     if(error)
     {
         qDebug() << "Error: " << eniro_->errorString();
-        message = tr("Search failed:") + " " + eniro_->errorString() + ".";
+
+        if(retries_ < NUMBER_OF_RETRIES && retries_ >= 0)
+        {
+               retries_++;
+               eniro_->search(currentSearch_);
+               return;
+        }
+        else
+        {
+               message = tr("Search failed:") + " " + eniro_->errorString() + ".";
+        }
     }
     else if(results.size() == 0)
     {
@@ -160,10 +172,12 @@ void CallListener::requestFinished(QVector <Eniro::Result> const& results,
         Cache::instance().addItem(result);
     }
 
+    retries_ = -1;
+
     timedMessage_ = message;
 
     // Show banner after small delay
-    showDelayedResult(message);
+    showDelayedResult(message, BANNER_DELAY);
 
 }
 
@@ -230,10 +244,10 @@ void CallListener::callTerminate()
        }
 }
 
-void CallListener::showDelayedResult(QString const& text)
+void CallListener::showDelayedResult(QString const& text, int delay)
 {
        timedMessage_ = text;
-       QTimer::singleShot(BANNER_DELAY, this, SLOT(showTimedMessage()));
+       QTimer::singleShot(delay, this, SLOT(showTimedMessage()));
 }
 
 void CallListener::showTimedMessage()