diff -r 5ef31a21fdd5 -r e7325f632549 activityfw/activityserviceplugin/win/activitydatabase_p.cpp --- a/activityfw/activityserviceplugin/win/activitydatabase_p.cpp Fri Jun 11 16:25:06 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,249 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -#include "activitydatabase_p.h" - -#include -#include -#include -#include -#include - -#include - -const char KConnectionName[] = "ActivityDatabase"; - -ActivityDatabasePrivate::ActivityDatabasePrivate() -{ - // determine database localization - QSettings settings("nokia", "activities"); - if (!settings.contains("activitydatabase")) { - settings.setValue("activitydatabase", "C:\\activitydatabase.db"); - } - QString databaseFile = settings.value("activitydatabase").toString(); - - QSqlDatabase database; - if (QSqlDatabase::contains(KConnectionName)) { - database = QSqlDatabase::database(KConnectionName); - } else { - database = QSqlDatabase::addDatabase("QSQLITE", KConnectionName); - database.setDatabaseName(databaseFile); - if (!database.open()) { - qFatal(qPrintable(database.lastError().text())); - } - } - - if (!checkTables()) { - recreateTables(); - } -} - -ActivityDatabasePrivate::~ActivityDatabasePrivate() -{ - QSqlDatabase::database(KConnectionName).close(); -} - -void ActivityDatabasePrivate::saveActivity(const QString &applicationName, const QString &activityName, const QVariantHash &activityMetadata) -{ - if (applicationName.isEmpty() || activityName.isEmpty() || activityMetadata.value("screenshot").isNull()) { - qWarning("Activity entry is invalid, aborting save"); - return; - } - - QVariantHash activityData(activityMetadata); - activityData.insert(ActivityApplicationKeyword, applicationName); - activityData.insert(ActivityActivityKeyword, activityName); - - // stream whole entry to bytearray - QByteArray streamedData; - { - QDataStream stream(&streamedData, QIODevice::WriteOnly); - stream << activityData; - } - - QSqlDatabase database = QSqlDatabase::database(KConnectionName); - - if (!database.transaction()) { - qFatal(qPrintable(database.lastError().text())); - } - - // update or insert data - { - QSqlQuery query(database); - if (!query.exec(QString("SELECT ApplicationName FROM Activities WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName))) { - qFatal(qPrintable(query.lastError().text())); - } - - if (query.next()) { - if (!query.prepare("UPDATE Activities SET Data = :Data WHERE ApplicationName = :ApplicationName AND ActivityName = :ActivityName")) { - qFatal(qPrintable(query.lastError().text())); - } - query.bindValue(":Data", streamedData); - query.bindValue(":ApplicationName", applicationName); - query.bindValue(":ActivityName", activityName); - if (!query.exec()) { - qFatal(qPrintable(query.lastError().text())); - } - } else { - if (!query.prepare("INSERT INTO Activities(ApplicationName, ActivityName, Data) VALUES(:ApplicationName, :ActivityName, :Data)")) { - qFatal(qPrintable(query.lastError().text())); - } - query.bindValue(":ApplicationName", applicationName); - query.bindValue(":ActivityName", activityName); - query.bindValue(":Data", streamedData); - if (!query.exec()) { - qFatal(qPrintable(query.lastError().text())); - } - } - } - - if (!database.commit()) { - qFatal(qPrintable(database.lastError().text())); - } -} - -void ActivityDatabasePrivate::deleteActivity(const QString &applicationName, const QString &activityName) -{ - QString sqlCommand = QString("DELETE FROM Activities WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName); - QSqlQuery query(QSqlDatabase::database(KConnectionName)); - if (!query.exec(sqlCommand)) { - qFatal(qPrintable(query.lastError().text())); - } -} - -void ActivityDatabasePrivate::deleteApplicationActivities(const QString &applicationName) -{ - QString sqlCommand = QString("DELETE FROM Activities WHERE ApplicationName = '%1'").arg(applicationName); - QSqlQuery query(QSqlDatabase::database(KConnectionName)); - if (!query.exec(sqlCommand)) { - qFatal(qPrintable(query.lastError().text())); - } -} - -QList ActivityDatabasePrivate::allActivitiesList() -{ - return activitiesList("SELECT Data FROM Activities"); -} - -QList ActivityDatabasePrivate::applicationActivitiesList(const QString &applicationName) -{ - return activitiesList(QString("SELECT Data FROM Activities WHERE ApplicationName = '%1'").arg(applicationName)); -} - -QList ActivityDatabasePrivate::activitiesList(const QString &sqlCommand) -{ - QSqlQuery query(QSqlDatabase::database(KConnectionName)); - if (!query.exec(sqlCommand)) { - qFatal(qPrintable(query.lastError().text())); - } - - QList result; - while (query.next()) { - QVariantHash activityEntry; - { - QByteArray data(query.value(0).toByteArray()); - QDataStream stream(&data, QIODevice::ReadOnly); - stream >> activityEntry; - } - result.append(activityEntry); - } - return result; -} - -QString ActivityDatabasePrivate::requestedActivityName(const QString &applicationName) -{ - QSqlQuery query(QSqlDatabase::database(KConnectionName)); - if (!query.exec(QString("SELECT ActivityName FROM Activities WHERE ApplicationName = '%1' AND RequestFlag").arg(applicationName))) { - qFatal(qPrintable(query.lastError().text())); - } - - QString result; - if (query.next()) { - result = query.value(0).toString(); - } - return result; -} - -void ActivityDatabasePrivate::setActivityRequestFlag(const QString &applicationName, const QString &activityName) -{ - QSqlQuery query(QSqlDatabase::database(KConnectionName)); - - // clear old requests for given application - if (!query.exec(QString("UPDATE Activities SET RequestFlag=0 WHERE ApplicationName = '%1'").arg(applicationName))) { - qFatal(qPrintable(query.lastError().text())); - } - - // set new request - if (!query.exec(QString("UPDATE Activities SET RequestFlag=1 WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName))) { - qFatal(qPrintable(query.lastError().text())); - } -} - -void ActivityDatabasePrivate::clearActivityRequestFlag(const QString &applicationName, const QString &activityName) -{ - QSqlQuery query(QSqlDatabase::database(KConnectionName)); - - // just clear the given request - if (!query.exec(QString("UPDATE Activities SET RequestFlag=0 WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName))) { - qFatal(qPrintable(query.lastError().text())); - } -} - -bool ActivityDatabasePrivate::checkTables() -{ - QStringList expectedTables("Activities"); - QStringList actualTables = QSqlDatabase::database(KConnectionName).tables(); - return (expectedTables == actualTables); -} - -void ActivityDatabasePrivate::recreateTables() -{ - QSqlDatabase database = QSqlDatabase::database(KConnectionName); - - if (!database.transaction()) { - qFatal(qPrintable(database.lastError().text())); - } - - // drop any existing tables - { - QSqlQuery dropQuery(database); - foreach(const QString &tableName, database.tables()) { - if (!dropQuery.exec(QString("DROP TABLE %1").arg(tableName))) { - qFatal(qPrintable(dropQuery.lastError().text())); - } - } - } - - // create new table - { - QSqlQuery createQuery(database); - QString statement( - "CREATE TABLE Activities(" - "ApplicationName TEXT NOT NULL," - "ActivityName TEXT NOT NULL," - "RequestFlag BOOL NOT NULL DEFAULT FALSE," - "Data BLOB NOT NULL," - "PRIMARY KEY(ActivityName, ApplicationName))"); - - if (!createQuery.exec(statement)) { - qFatal(qPrintable(createQuery.lastError().text())); - } - } - - if (!database.commit()) { - qFatal(qPrintable(database.lastError().text())); - } -}