X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fcommon%2Fcache.cpp;h=ab076470159ca0b88661bb348c30e682bddef68e;hb=025fdd7f0873866945886e692fd559289f1efeef;hp=fcbbcb5eeb0ea82d52aa9674520e52a7f133fb4c;hpb=d187495fd3566da1ee1eb94cc313c2f561a0fac5;p=jenirok diff --git a/src/common/cache.cpp b/src/common/cache.cpp index fcbbcb5..ab07647 100644 --- a/src/common/cache.cpp +++ b/src/common/cache.cpp @@ -54,6 +54,7 @@ int Cache::clear() return ret; } + bool Cache::findItem(QString const& number, Source::Result& result) { bool connected = DB::connected(); @@ -63,13 +64,14 @@ bool Cache::findItem(QString const& number, Source::Result& result) DB::connect(); } - QSqlQuery query; - query.prepare("SELECT name, street, city FROM cache WHERE number = :number"); - query.bindValue(":number", number); + QSqlQuery query("SELECT name, street, city FROM cache WHERE number LIKE '%" + number.right(7) + "'"); + + //query.prepare("SELECT name, street, city FROM cache WHERE number = :number"); + //query.bindValue(":number", number); bool ret = false; - if(query.exec() && query.next()) + if(query.next()) { result.number = number; result.name = query.value(0).toString(); @@ -106,7 +108,6 @@ bool Cache::addItem(Source::Result const& result) query.bindValue(":street", result.street); query.bindValue(":city", result.city); - if(!query.exec()) { ret = false; @@ -155,6 +156,134 @@ bool Cache::addItem(Source::Result const& result) } +bool Cache::logItem(Source::Result const& result, bool missed, unsigned int time) +{ + bool connected = DB::connected(); + + if(!connected) + { + DB::connect(); + } + + bool ret = true; + + QSqlQuery query; + + query.prepare("INSERT INTO log(number, name, street, city, country, time, missed) VALUES(:number, :name, :street, :city, :country, :time, :missed)"); + query.bindValue(":number", result.number); + query.bindValue(":name", result.name); + query.bindValue(":street", result.street); + query.bindValue(":city", result.city); + query.bindValue(":country", result.country); + query.bindValue(":time", time); + int misVal = missed ? 1 : 0; + + query.bindValue(":missed", misVal); + + if(!query.exec()) + { + ret = false; + } + + query.clear(); + + // Delete old entries from cache + if(LOG_MAX_SIZE > 0) + { + if(query.exec("SELECT COUNT(*) FROM log") && query.next()) + { + int itemsToDelete = query.value(0).toInt() - LOG_MAX_SIZE; + + for(int i = 0; i < itemsToDelete; i++) + { + query.clear(); + + if(!query.exec("DELETE FROM cache WHERE id = (SELECT MIN(id) FROM cache)")) + { + QSqlError error = query.lastError(); + qDebug() << "Unable to delete old cache entries: " << error.text(); + ret = false; + } + } + } + else + { + QSqlError error = query.lastError(); + qDebug() << "Unable to get count for cache entries: " << error.text(); + ret = false; + } + + } + + if(!connected) + { + DB::disconnect(); + } + + return ret; + +} + +void Cache::getLogItems(QList& items, int limit) +{ + bool connected = DB::connected(); + + if(!connected) + { + DB::connect(); + } + + QSqlQuery query("SELECT number, name, street, city, country, time, missed FROM log ORDER BY time DESC LIMIT " + QString::number(limit)); + + while(query.next()) + { + LogDetails details; + details.result.number = query.value(0).toString(); + details.result.name = query.value(1).toString(); + details.result.street = query.value(2).toString(); + details.result.city = query.value(3).toString(); + details.result.country = query.value(4).toString(); + details.time = query.value(5).toInt(); + + int missed = query.value(6).toInt(); + + details.missed = missed ? true : false; + + items.push_back(details); + } + + if(!connected) + { + DB::disconnect(); + } + +} + +int Cache::clearLog() +{ + bool connected = DB::connected(); + + if(!connected) + { + DB::connect(); + } + + QSqlQuery query; + int ret = -1; + + if(query.exec("DELETE FROM log")) + { + ret = query.numRowsAffected(); + } + + if(!connected) + { + DB::disconnect(); + } + + return ret; +} + Cache& Cache::instance() { if(!instance_)