summaryrefslogtreecommitdiffstats
path: root/src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp')
-rw-r--r--src/serviceframework/databasemanagerserver_symbian/databasemanagerserver.cpp57
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);
}
}