diff options
Diffstat (limited to 'src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp')
-rw-r--r-- | src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp b/src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp index 7b4e4094e6..8dd2afb0fc 100644 --- a/src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp +++ b/src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp @@ -153,9 +153,54 @@ void CDatabaseManagerServer::initDbPath() } } + //Merge the Db files,if there are multiple DB's. + mergeDbFiles(dir.path(), dbName); + iDb->open(); } +QStringList CDatabaseManagerServer::getExistingDbfiles(const QString &dirPath) +{ + QDir dir(dirPath); + QStringList filters; + dir.setSorting(QDir::Time); + + filters << "*.db"; + dir.setNameFilters(filters); + + return (dir.entryList(QDir::Files)); +} + +void CDatabaseManagerServer::mergeDbFiles(const QString &dbDirPath, const QString &dbFileName) +{ + QStringList dbList = getExistingDbfiles(dbDirPath); + if(dbList.contains(dbFileName)) { + //Remove dstDb + dbList.removeAll(dbFileName); + int dbListCount = dbList.count(); + if(dbListCount > 0) { + QString dstDbFileName = dbDirPath + QDir::separator() + dbFileName; + ServiceDatabase *dstDatabase = new ServiceDatabase(); + dstDatabase->setDatabasePath(dstDbFileName); + //Merge the DB's + QString srcDbFileName; + for(int i = 0; i < dbListCount; i++) { + srcDbFileName = dbDirPath + QDir::separator() + dbList[i]; + //Merge the src DB with dst DB. + if(dstDatabase->mergeDatabase(srcDbFileName)) { + #ifdef QT_SFW_SERVICEDATABASE_DEBUG + qDebug() << "CDatabaseManagerServer::initDbPath():-" + << "dstDatabase->mergeDatabase Success"; + #endif + QFile::remove(srcDbFileName); + } + } + delete dstDatabase; + } + } + +} + void CDatabaseManagerServer::DiscoverServices() { QString path = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()); @@ -185,12 +230,12 @@ void CDatabaseManagerServer::DiscoverServices() continue; } } - QFile *f = new QFile(imports + QDir::separator() + file); + QFile f(imports + QDir::separator() + file); // read contents, register - ServiceMetaData parser(f); + ServiceMetaData parser(&f); if (!parser.extractMetadata()) { - f->remove(); - f->close(); + f.remove(); + f.close(); continue; } const ServiceMetaDataResults data = parser.parseResults(); @@ -200,7 +245,7 @@ void CDatabaseManagerServer::DiscoverServices() if(iDb->registerService(results, tok)){ iDb->serviceInitialized(results.name, tok); } - f->close(); + f.close(); settings.setValue(file, fileinfo.lastModified()); settings.setValue(file + "/service_name", servicename); } @@ -211,7 +256,7 @@ void CDatabaseManagerServer::DiscoverServices() if(old.contains('/')) continue; QString servicename = settings.value(old + "/service_name").toString(); - iDb->unregisterService(servicename, QString("Auto Registration")); + iDb->unregisterService(servicename, tok); settings.remove(old); } } |