diff -r 000000000000 -r fa475d6462b2 bookmarksengine/bookmarksserver/src/bookmarkserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bookmarksengine/bookmarksserver/src/bookmarkserver.cpp Tue May 04 12:39:38 2010 +0300 @@ -0,0 +1,325 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/**============================================================== + * Description: Constructor of BookMarkServer + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +BookMarkServer::BookMarkServer() : + m_sessionCount(0) + { + + m_server = new WRT::ServiceFwIPCServer(this, this); + createDatabase(); + bool ret = m_server->listen(BOOKMARKSENGINESERVER); + if (!ret) + { + qDebug() << " Failed to LISTEN" << '\n'; + QTimer::singleShot(1, this, SLOT(closeServer())); + return; + } + + m_server->configIpcServerLifetime(true); + + } + +/**============================================================== + * Description:Destructor of BookMarkServer + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +BookMarkServer::~BookMarkServer() + { + + if (m_server) + { + m_server->disconnect(); + delete m_server; + m_server = NULL; + } + } + +/**============================================================== + * Description:closes the bookmark Server connection + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::closeServer() + { + // before shutting down, check if any active session exists + + if (m_sessionCount <= 0) + QCoreApplication::quit(); + } + +/**============================================================== + * Description:Handles the client request + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +bool BookMarkServer::handleRequest(WRT::ServiceIPCRequest *aRequest) + { + + WRT::ClientInfo* clientInfo = + const_cast (aRequest->clientInfo()); + int sessionID = clientInfo->sessionId(); + bool val(false); + bool result = true; + int command = aRequest->getOperation().toInt(&val); + QString msg = aRequest->getData(); + QStringList list = msg.split(BOOKMARKSENGINESEPARATOR); + switch (command) + { + case (EDeleteBookMark): + deleteBookMark(aRequest); + break; + case (EAddBookMark): + addBookMark(aRequest); + break; + case (EFetchBookmark): + fetchBookMarkData(aRequest); + break; + case (EFetchAllBookmarks): + fetchBookMarkData(aRequest); + break; + default: + result=false; + break; + } + return result; + } + +/**============================================================== + * Description:Adds the bookmark to the database + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::addBookMark(WRT::ServiceIPCRequest *aRequest) + { + + QString msg = aRequest->getData(); + QStringList list = msg.split(BOOKMARKSENGINESEPARATOR); + + QString title = list[0]; + QString url = list[1]; + QString adate = list[2]; + QString tags = list[3]; + + QSqlDatabase db = QSqlDatabase::database(m_connectionName); + + if (db.isOpen()) + { + + QSqlQuery query(db); + query.prepare("INSERT INTO BookMarkTable (title, url, adate, tags) " + "VALUES (:title, :url, :adate, :tags)"); + + query.bindValue(":title", QVariant(title)); + query.bindValue(":url", QVariant(url)); + query.bindValue(":adate", QVariant(adate)); + query.bindValue(":tags", QVariant(tags)); + query.exec(); + QSqlError error = query.lastError(); + + } + QString strResponse; + WRT::ClientInfo* clientInfo = + const_cast (aRequest->clientInfo()); + strResponse.append(QString::number(EServerMsgBookmarkAdded)); + strResponse.append(BOOKMARKSENGINESEPARATOR); + strResponse.append(title); + strResponse.append(BOOKMARKSENGINESEPARATOR); + aRequest->write(strResponse.toAscii()); + aRequest->completeRequest(); + m_server->broadcast(strResponse.toAscii()); + + } + +/**============================================================== + * Description:Deletes the bookmark from the database + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::deleteBookMark(WRT::ServiceIPCRequest *aRequest) + { + + QString msg = aRequest->getData(); + QStringList list = msg.split(";"); + QString title = list[0]; + QSqlDatabase db = QSqlDatabase::database(m_connectionName); + if (db.isOpen()) + { + QSqlQuery query(db); + query.prepare("DELETE FROM BookMarkTable WHERE title=:title"); + query.bindValue(":title", title); + query.exec(); + QSqlError error = query.lastError(); + } + QString strResponse; + strResponse.append(QString::number(EServerMsgBookmarkDeleted)); + strResponse.append(BOOKMARKSENGINESEPARATOR); + strResponse.append(title); + strResponse.append(BOOKMARKSENGINESEPARATOR); + aRequest->write(strResponse.toAscii()); + aRequest->completeRequest(); + } + +/**============================================================== + * Description:Fetches the bookmark data from the database + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::fetchBookMarkData(WRT::ServiceIPCRequest *request) + { + + QSqlDatabase db = QSqlDatabase::database(m_connectionName); + + QString strResponse; + + bool dbopen = db.isOpen(); + + if (dbopen) + { + + QSqlQuery query(db); + + query.prepare("SELECT title,url,adate,tags FROM BookMarkTable"); + query.exec(); + QSqlError error = query.lastError(); + + while (query.next()) + { + + QString title = query.value(0).toString(); + QString url = query.value(1).toString(); + QString date = query.value(2).toString(); + QString tag = query.value(3).toString(); + + strResponse.append(title); + strResponse.append(BOOKMARKSENGINESEPARATOR); + strResponse.append(url); + strResponse.append(BOOKMARKSENGINESEPARATOR); + strResponse.append(tag); + strResponse.append(BOOKMARKSENGINESEPARATOR); + strResponse.append(date); + strResponse.append(BOOKMARKSENGINESEPARATOR); + } + } + + WRT::ClientInfo* clientInfo = + const_cast (request->clientInfo()); + QByteArray res = strResponse.toAscii(); + + request->write(strResponse.toAscii()); + request->completeRequest(); + + } + +/**============================================================== + * Description:Handles the client cancel request + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::handleCancelRequest(WRT::ServiceIPCRequest *aRequest) + { + qDebug() << " Not supported Right now"; + } + +/**============================================================== + * Description:Handles the client connection requests + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::handleClientConnect(WRT::ClientInfo *aClient) + { + + int sessionID = aClient->sessionId(); + m_clients.insert(sessionID, aClient->name()); + m_sessionCount++; + + } + +/**============================================================== + * Description:Handles the client disconnect request + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +void BookMarkServer::handleClientDisconnect(WRT::ClientInfo *aClient) + { + int sessionID = aClient->sessionId(); + QMutableHashIterator itr(m_clients); + while (itr.hasNext()) + { + itr.next(); + if (itr.key() == sessionID) + { + itr.remove(); + break; + } + } + + if (--m_sessionCount <= 0) + { + closeServer(); + + } + + } + +/**============================================================== + * Description:Handles the creation of bookmarks databse + * Author: Chandrashekar.V + * EmpId: 10289207 + ================================================================*/ +int BookMarkServer::createDatabase() + { + + m_connectionName = "bookmark_"; + + QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", m_connectionName); + db.setHostName("Simulator"); + db.setDatabaseName(dbLocation); + + if (!db.open()) + return -1; + + QFileInfo dbFile(dbLocation); + if (dbFile.exists() && dbFile.size() == 0) + { + QSqlQuery query(db); + query.exec( + "CREATE TABLE BookMarkTable (title VARCHAR(40) NOT NULL,url VARCHAR(100),adate VARCHAR(40),tags VARCHAR(40),CONSTRAINT pk_BookMarkTable PRIMARY KEY(title))"); + + } + + + return 0; + } +