X-Git-Url: http://git.maemo.org/git/?p=jenirok;a=blobdiff_plain;f=src%2Fdaemon%2Fcalllistener.cpp;h=cbeb837d66ba829c4643ca151fae0570786f0586;hp=114a05e30921e1a9965f0fd5b9699def6a5bb399;hb=ee9cbde6d8233ae35e57771468588e6a198ec246;hpb=72f0ccb17472f83c1cba569879e185eb7cd60e31 diff --git a/src/daemon/calllistener.cpp b/src/daemon/calllistener.cpp index 114a05e..cbeb837 100644 --- a/src/daemon/calllistener.cpp +++ b/src/daemon/calllistener.cpp @@ -17,6 +17,7 @@ */ #include +#include #include #include #include "calllistener.h" @@ -36,7 +37,9 @@ namespace QDBusConnection CallListener::systemBus_ = QDBusConnection::systemBus(); -CallListener::CallListener(): eniro_(0), contactManager_(0), box_(0), label_(0) +CallListener::CallListener(): eniro_(0), contactManager_(0), +connectionManager_(0), closeConnection_(false), box_(0), label_(0), +retries_(-1) { } @@ -79,6 +82,8 @@ void CallListener::begin() label_->setMargin(8); box_->setWidget(label_); + qDebug() << "Starting..."; + } void CallListener::end() @@ -97,6 +102,10 @@ void CallListener::end() this, SLOT(callTerminate())); + delete contactManager_; + contactManager_ = 0; + delete connectionManager_; + connectionManager_ = 0; delete eniro_; eniro_ = 0; delete box_; @@ -107,18 +116,41 @@ void CallListener::end() void CallListener::search(Eniro::SearchDetails const& details) { + qDebug() << "Search called"; + Eniro::Result result; if(Cache::instance().findItem(details.query, result)) { - showResult(createResult(result.name, - result.street, - result.city)); + showDelayedResult(createResult(result.name, + result.street, + result.city), BANNER_DELAY); } else { showResult(tr("Searching...")); + retries_ = 0; + currentSearch_ = details.query; + + if(connectionManager_) + { + delete connectionManager_; + connectionManager_ = 0; + } + + connectionManager_ = new ConnectionManager; + + if(!connectionManager_->isConnected()) + { + connectionManager_->connect(); + closeConnection_ = true; + } + else + { + closeConnection_ = false; + } + eniro_->search(details); } @@ -128,8 +160,6 @@ void CallListener::requestFinished(QVector const& results, Eniro::SearchDetails const& details, bool error) { - qDebug() << "Found: " << results.size(); - // If box is not visible, the call must have been terminated already if(!box_->isVisible()) { @@ -141,7 +171,17 @@ void CallListener::requestFinished(QVector const& results, if(error) { qDebug() << "Error: " << eniro_->errorString(); - message = tr("Search failed:") + " " + eniro_->errorString() + "."; + + if(retries_ < NUMBER_OF_RETRIES && retries_ >= 0) + { + retries_++; + eniro_->search(Eniro::SearchDetails(currentSearch_)); + return; + } + else + { + message = tr("Search failed:") + " " + eniro_->errorString() + "."; + } } else if(results.size() == 0) { @@ -155,6 +195,18 @@ void CallListener::requestFinished(QVector const& results, Cache::instance().addItem(result); } + retries_ = -1; + currentSearch_ = ""; + + if(closeConnection_) + { + connectionManager_->disconnect(); + closeConnection_ = false; + } + + delete connectionManager_; + connectionManager_ = 0; + showResult(message); } @@ -186,15 +238,17 @@ void CallListener::showResult(QString const& text) { box_->hide(); } + box_->show(); } void CallListener::incomingCall(QDBusObjectPath path, QString number) { - qDebug() << number; + qDebug() << "Incoming: " << number; if(!contactManager_->numberExists(number)) { + qDebug() << "Number doesn't exist"; systemBus_.connect(CALL_SERVICE_NAME, path.path(), @@ -203,11 +257,47 @@ void CallListener::incomingCall(QDBusObjectPath path, QString number) this, SLOT(callTerminate())); + qDebug() << "Going to search"; + search(Eniro::SearchDetails(number)); } + else + { + qDebug() << "Number exists"; + } } void CallListener::callTerminate() { - box_->hide(); + if(box_->isVisible()) + { + box_->hide(); + } + + if(closeConnection_ && connectionManager_) + { + connectionManager_->disconnect(); + closeConnection_ = false; + } + + delete connectionManager_; + connectionManager_ = 0; +} + +void CallListener::showDelayedResult(QString const& text, int delay) +{ + timedMessage_ = text; + QTimer::singleShot(delay, this, SLOT(showTimedMessage())); +} + +void CallListener::showTimedMessage() +{ + if(timedMessage_.size() == 0) + { + return; + } + + showResult(timedMessage_); + + timedMessage_ = ""; }