X-Git-Url: http://git.maemo.org/git/?p=jenirok;a=blobdiff_plain;f=src%2Fdaemon%2Fcalllistener.cpp;h=7990f8a4775b5b7083747561d8c0e044cce18ec6;hp=16ee0d56b3a9c7f2eade4e16c92ae95ed1daba27;hb=0af3d645aa8497392ab6bcf176c5cbf538a76240;hpb=3b351b70de898f507f94a3d1b5a6654cfbd32bea diff --git a/src/daemon/calllistener.cpp b/src/daemon/calllistener.cpp index 16ee0d5..7990f8a 100644 --- a/src/daemon/calllistener.cpp +++ b/src/daemon/calllistener.cpp @@ -23,6 +23,7 @@ #include "calllistener.h" #include "settings.h" #include "cache.h" +#include "contactmanager.h" namespace { @@ -37,7 +38,9 @@ namespace QDBusConnection CallListener::systemBus_ = QDBusConnection::systemBus(); -CallListener::CallListener(): eniro_(0), contactManager_(0), box_(0), label_(0), retries_(-1) +CallListener::CallListener(): eniro_(0), connectionManager_(0), +closeConnection_(false), initialized_(false), box_(0), label_(0), +retries_(-1), site_(Eniro::FI) { } @@ -62,23 +65,8 @@ void CallListener::begin() this, SLOT(callTerminate())); - contactManager_ = new ContactManager; - - eniro_ = new Eniro(Eniro::stringToSite(Settings::instance()->get("site"))); - - eniro_->setMaxResults(1); - eniro_->setFindNumber(false); - eniro_->setTimeout(REQUEST_TIMEOUT); - - connect(eniro_, SIGNAL(requestFinished(QVector const&, - Eniro::SearchDetails const&, bool)), - this, SLOT(requestFinished(QVector const&, - Eniro::SearchDetails const&, bool))); - - box_ = new InformationBox(); - label_ = new QLabel("", box_); - label_->setMargin(8); - box_->setWidget(label_); + site_ = Eniro::stringToSite(Settings::instance()->get("site")); + Settings::close(); qDebug() << "Starting..."; @@ -100,32 +88,46 @@ void CallListener::end() this, SLOT(callTerminate())); - delete eniro_; - eniro_ = 0; - delete box_; - box_ = 0; - delete label_; - label_ = 0; + searchClose(); + } void CallListener::search(Eniro::SearchDetails const& details) { - qDebug() << "Search called"; + qDebug() << "Search called"; + + searchInit(); Eniro::Result result; if(Cache::instance().findItem(details.query, result)) { + qDebug() << "Found from cache"; + showDelayedResult(createResult(result.name, - result.street, - result.city), BANNER_DELAY); + result.street, + result.city), BANNER_DELAY); } else { - showResult(tr("Searching...")); retries_ = 0; - currentSearch_ = details; + currentSearch_ = details.query; + + showDelayedResult(tr("Searching..."), BANNER_DELAY); + + if(!connectionManager_->isConnected()) + { + connectionManager_->connect(); + closeConnection_ = true; + } + else + { + closeConnection_ = false; + } + + qDebug() << "Starting to search..."; + eniro_->search(details); } @@ -135,10 +137,8 @@ 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()) + if(!initialized_ || !box_->isVisible()) { return; } @@ -151,34 +151,45 @@ void CallListener::requestFinished(QVector const& results, if(retries_ < NUMBER_OF_RETRIES && retries_ >= 0) { - retries_++; - eniro_->search(currentSearch_); - return; + retries_++; + eniro_->search(Eniro::SearchDetails(currentSearch_)); + return; } else { - message = tr("Search failed:") + " " + eniro_->errorString() + "."; + timedMessage_ = ""; + message = tr("Search failed:") + " " + eniro_->errorString() + "."; + showResult(message); } } - else if(results.size() == 0) - { - message = tr("Phone number was not found"); - } else { - message = createResult(results.at(0).name, results.at(0).street, results.at(0).city); - Eniro::Result result = results.at(0); - result.number = details.query; - Cache::instance().addItem(result); + timedMessage_ = ""; + + if(results.size() == 0) + { + message = tr("Phone number was not found"); + showResult(message); + } + else + { + message = createResult(results.at(0).name, results.at(0).street, + results.at(0).city); + showResult(message); + Eniro::Result result = results.at(0); + result.number = details.query; + Cache::instance().addItem(result); + } } retries_ = -1; + currentSearch_ = ""; - timedMessage_ = message; - - // Show banner after small delay - showDelayedResult(message, BANNER_DELAY); - + if(closeConnection_ && connectionManager_) + { + connectionManager_->disconnect(true); + closeConnection_ = false; + } } QString CallListener::createResult(QString const& name, QString const& street, QString const& city) @@ -202,12 +213,18 @@ QString CallListener::createResult(QString const& name, QString const& street, Q void CallListener::showResult(QString const& text) { + if(!initialized_) + { + return; + } + label_->setText("" + text + ""); if(box_->isVisible()) { box_->hide(); } + box_->show(); } @@ -215,9 +232,11 @@ void CallListener::incomingCall(QDBusObjectPath path, QString number) { qDebug() << "Incoming: " << number; - if(!contactManager_->numberExists(number)) + ContactManager cm; + + if(!cm.numberExists(number)) { - qDebug() << "Number doesn't exist"; + qDebug() << "Number doesn't exist"; systemBus_.connect(CALL_SERVICE_NAME, path.path(), @@ -226,38 +245,88 @@ void CallListener::incomingCall(QDBusObjectPath path, QString number) this, SLOT(callTerminate())); - qDebug() << "Going to search"; - search(Eniro::SearchDetails(number)); } else { - qDebug() << "Number exists"; + qDebug() << "Number exists"; } } void CallListener::callTerminate() { - if(box_->isVisible()) - { - box_->hide(); - } + if(initialized_ && box_ && box_->isVisible()) + { + box_->hide(); + } + + if(closeConnection_ && connectionManager_) + { + connectionManager_->disconnect(true); + closeConnection_ = false; + } + + searchClose(); } void CallListener::showDelayedResult(QString const& text, int delay) { - timedMessage_ = text; - QTimer::singleShot(delay, this, SLOT(showTimedMessage())); + timedMessage_ = text; + QTimer::singleShot(delay, this, SLOT(showTimedMessage())); } void CallListener::showTimedMessage() { - if(timedMessage_.size() == 0) - { - return; - } + if(timedMessage_.size() == 0 || !initialized_) + { + return; + } + + showResult(timedMessage_); + + timedMessage_ = ""; +} + +void CallListener::searchInit() +{ + qDebug() << "Initializing search..."; + + connectionManager_ = new ConnectionManager; + + eniro_ = new Eniro(site_); + eniro_->setMaxResults(1); + eniro_->setFindNumber(false); + eniro_->setTimeout(REQUEST_TIMEOUT); + + connect(eniro_, SIGNAL(requestFinished(QVector const&, + Eniro::SearchDetails const&, bool)), + this, SLOT(requestFinished(QVector const&, + Eniro::SearchDetails const&, bool))); + box_ = new InformationBox; + label_ = new QLabel("", box_); + label_->setMargin(8); + box_->setWidget(label_); + initialized_ = true; +} + +void CallListener::searchClose() +{ + initialized_ = false; - showResult(timedMessage_); + qDebug() << "Closing search..."; - timedMessage_ = ""; + if(eniro_) + { + disconnect(eniro_, SIGNAL(requestFinished(QVector const&, + Eniro::SearchDetails const&, bool)), + this, SLOT(requestFinished(QVector const&, + Eniro::SearchDetails const&, bool))); + } + + delete connectionManager_; + connectionManager_ = 0; + delete eniro_; + eniro_ = 0; + delete box_; + box_ = 0; }