X-Git-Url: http://git.maemo.org/git/?p=jenirok;a=blobdiff_plain;f=src%2Fdaemon%2Fcalllistener.cpp;h=344b73b184d9d53ead4e65c2464583ec38f45d1b;hp=9071713375fcaa78f63d9dad4bd4a609b23298ad;hb=f47fcb3ca78e8b27cace31fb18becd9dfa35d3d8;hpb=cf883c1283eb6b096592ef875a32696fee9dd6ff diff --git a/src/daemon/calllistener.cpp b/src/daemon/calllistener.cpp index 9071713..344b73b 100644 --- a/src/daemon/calllistener.cpp +++ b/src/daemon/calllistener.cpp @@ -17,10 +17,12 @@ */ #include +#include #include +#include #include "calllistener.h" #include "settings.h" -#include "db.h" +#include "cache.h" namespace { @@ -66,6 +68,7 @@ void CallListener::begin() eniro_->setMaxResults(1); eniro_->setFindNumber(false); + eniro_->setTimeout(REQUEST_TIMEOUT); connect(eniro_, SIGNAL(requestFinished(QVector const&, Eniro::SearchDetails const&, bool)), @@ -74,9 +77,11 @@ void CallListener::begin() box_ = new InformationBox(); label_ = new QLabel("", box_); - label_->setMargin(10); + label_->setMargin(8); box_->setWidget(label_); + qDebug() << "Starting..."; + } void CallListener::end() @@ -105,29 +110,23 @@ void CallListener::end() void CallListener::search(Eniro::SearchDetails const& details) { - label_->setText(tr("Searching...")); - box_->show(); + qDebug() << "Search called"; - DB::connect(); + Eniro::Result result; - QSqlQuery query; - query.prepare("SELECT name, street, city FROM cache WHERE number = :number"); - query.bindValue(":number", details.query); - - if(query.exec() && query.next()) + if(Cache::instance().findItem(details.query, result)) { - showResult(createResult(query.value(0).toString(), - query.value(1).toString(), - query.value(2).toString())); + showDelayedResult(createResult(result.name, + result.street, + result.city)); } else { + showResult(tr("Searching...")); eniro_->search(details); } - DB::disconnect(); - } void CallListener::requestFinished(QVector const& results, @@ -147,7 +146,7 @@ void CallListener::requestFinished(QVector const& results, if(error) { qDebug() << "Error: " << eniro_->errorString(); - message = tr("Search failed:") + " " + eniro_->errorString(); + message = tr("Search failed:") + " " + eniro_->errorString() + "."; } else if(results.size() == 0) { @@ -156,36 +155,15 @@ void CallListener::requestFinished(QVector const& results, else { message = createResult(results.at(0).name, results.at(0).street, results.at(0).city); - QSqlQuery query; - - DB::connect(); - - query.prepare("INSERT INTO cache(number, name, street, city) VALUES(:number, :name, :street, :city)"); - query.bindValue(":number", details.query); - query.bindValue(":name", results.at(0).name); - query.bindValue(":street", results.at(0).street); - query.bindValue(":city", results.at(0).city); - - if(!query.exec()) - { - qDebug() << "Unable to save cache"; - } - - QString cacheSize = Settings::instance()->get("cache_size"); - - // Delete old entries from cache - if(cacheSize.toInt() > 0) - { - if(!query.exec("DELETE c1 FROM cache AS c1 LEFT JOIN (SELECT id FROM cache ORDER BY id DESC LIMIT " + cacheSize + ") AS c2 ON c1.id = c2.id WHERE c2.id IS NULL")) - { - qDebug() << "Unable to delete old cache entries"; - } - } - - DB::disconnect(); + Eniro::Result result = results.at(0); + result.number = details.query; + Cache::instance().addItem(result); } - showResult(message); + timedMessage_ = message; + + // Show banner after small delay + showDelayedResult(message); } @@ -210,17 +188,22 @@ QString CallListener::createResult(QString const& name, QString const& street, Q void CallListener::showResult(QString const& text) { - label_->setText(text); - box_->hide(); + label_->setText("" + text + ""); + + if(box_->isVisible()) + { + 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(), @@ -229,11 +212,38 @@ 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(); + } +} + +void CallListener::showDelayedResult(QString const& text) +{ + timedMessage_ = text; + QTimer::singleShot(BANNER_DELAY, this, SLOT(showTimedMessage())); +} + +void CallListener::showTimedMessage() +{ + if(timedMessage_.size() == 0) + { + return; + } + + showResult(timedMessage_); + + timedMessage_ = ""; }