--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/pluginmgr/smfpluginmanagerutil.cpp Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,1178 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "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:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * The Plugin Manager util class performs all plugin functional
+ * specific functionalities
+ *
+ */
+
+// plugin interfaces
+#include <smfcontactfetcherplugin.h>
+#include <smfpostproviderplugin.h>
+#include <smflyricsserviceplugin.h>
+#include <smfmusiceventsplugin.h>
+#include <smfmusicsearchplugin.h>
+#include <smfmusicserviceplugin.h>
+#include <smfplaylistserviceplugin.h>
+#include <smfgalleryplugin.h>
+#include <smfprovider.h>
+
+#include "smfpluginmanagerutil.h"
+#include "smfpluginmanager.h"
+
+// Static data initialisation
+SmfPluginManagerUtil* SmfPluginManagerUtil::m_myInstance = NULL;
+
+
+/**
+ * Method to get the instance of SmfPluginManagerUtil class
+ * @param aParent The parent object
+ * @return The instance of SmfPluginManagerUtil class
+ */
+SmfPluginManagerUtil* SmfPluginManagerUtil::getInstance ( QObject *aParent )
+ {
+ if(NULL == m_myInstance)
+ m_myInstance = new SmfPluginManagerUtil( aParent );
+ return m_myInstance;
+ }
+
+
+/**
+ * Constructor with default argument
+ * @param aParent The parent object
+ */
+SmfPluginManagerUtil::SmfPluginManagerUtil ( QObject */*aParent*/ )
+ {
+ }
+
+
+/**
+ * Destructor
+ */
+SmfPluginManagerUtil::~SmfPluginManagerUtil ( )
+ {
+ if(m_myInstance)
+ delete m_myInstance;
+ }
+
+
+/**
+ * Method called by Plugin Manager to create a web query.
+ * This method calls the respective plugin methods for creation of
+ * web queries using the aOperation and aInputData parameters.
+ * @param aInstance Instance of the loaded plugin that perform this operation
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @see smfglobal.h
+ */
+void SmfPluginManagerUtil::createRequest ( QObject* aInstance,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createRequest");
+ SmfPluginError pluginErrorVal;
+
+ // Find the type of service required
+ switch(aOperation)
+ {
+ case SmfContactGetFriends:
+ case SmfContactGetFollowers:
+ case SmfContactSearch:
+ case SmfContactSearchNear:
+ case SmfContactGetGroups:
+ case SmfContactSearchInGroup:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createContactFetcherRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfContactRetrievePosts:
+ case SmfContactPost:
+ case SmfContactUpdatePost:
+ case SmfContactPostDirected:
+ case SmfContactCommentOnAPost:
+ case SmfContactPostAppearence:
+ case SmfContactSharePost:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createContactPostRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfMusicGetLyrics:
+ case SmfMusicGetSubtitle:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createMusicLyricsRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfMusicGetEventsOnLoc:
+ case SmfMusicGetVenueOnLoc:
+ case SmfMusicGetEventsOnVenue:
+ case SmfMusicPostEvents:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createMusicEventsRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfMusicGetRecommendations:
+ case SmfMusicGetTracks:
+ case SmfMusicGetTrackInfo:
+ case SmfMusicGetStores:
+ case SmfMusicPostCurrentPlaying:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createMusicSearchRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfMusicGetUserInfo:
+ case SmfMusicSearchUser:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createMusicServiceRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfMusicGetPlaylists:
+ case SmfMusicGetPlaylistsOfUser:
+ case SmfMusicAddToPlaylist:
+ case SmfMusicPostCurrentPlayingPlaylist:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createMusicPlaylistRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ case SmfPictureGetPictures:
+ case SmfPictureDescription:
+ case SmfPictureUpload:
+ case SmfPictureMultiUpload:
+ case SmfPicturePostComment:
+ // Authorise the plugin and call create request methods
+ pluginErrorVal = createGalleryRequest(aInstance, aOperation,
+ aInputData, aReqData, aResult);
+ break;
+
+ default:
+ SmfPluginManager::getInstance()->server()->writeLog("Unknown service type!!!");
+ aResult = SmfPluginUnknownService;
+ }
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginRequestCreationFailed;
+ }
+
+
+/**
+ * Method to create a web query to fetch contact details.
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createContactFetcherRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createContactFetcherRequest");
+
+ // typecast instance to the contact - fetcher type, here SmfContactFetcherPlugin
+ SmfContactFetcherPlugin *plugin = qobject_cast<SmfContactFetcherPlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ int pageNum, itemPerPage;
+
+ switch(aOperation)
+ {
+ case SmfContactGetFriends:
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->friends(aReqData, pageNum, itemPerPage);
+ break;
+
+ case SmfContactGetFollowers:
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->followers(aReqData, pageNum, itemPerPage);
+ break;
+
+ case SmfContactSearch:
+ {
+ SmfContact searchContact;
+ stream>>searchContact;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->search(aReqData, searchContact, pageNum, itemPerPage);
+ break;
+ }
+
+ case SmfContactSearchNear:
+ {
+ SmfLocation location;
+ int i;
+ stream>>i;
+ SmfLocationSearchBoundary proximity = (SmfLocationSearchBoundary)i;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->searchNear(aReqData, location, proximity, pageNum, itemPerPage);
+ break;
+ }
+
+ case SmfContactGetGroups:
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->groups(aReqData, pageNum, itemPerPage);
+ break;
+
+ case SmfContactSearchInGroup:
+ {
+ SmfGroup group;
+ stream>>group;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->searchInGroup(aReqData, group, pageNum, itemPerPage);
+ break;
+ }
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+/**
+ * Method to create a web query to do post operation on contacts
+ * (like scraps or messages)
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createContactPostRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createContactPostRequest");
+
+ // typecast instance to SmfPostProviderPlugin
+ SmfPostProviderPlugin *plugin = qobject_cast<SmfPostProviderPlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ SmfContact contact;
+ SmfPost post;
+ SmfLocation location;
+ int pageNum, itemPerPage;
+
+ switch(aOperation)
+ {
+ case SmfContactRetrievePosts:
+ stream>>contact;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->retrieve(aReqData, &contact, pageNum, itemPerPage);
+ break;
+
+ case SmfContactPost:
+ stream>>post;
+ stream>>location;
+ pluginErrorVal = plugin->post(aReqData, post, location);
+ break;
+
+ case SmfContactUpdatePost:
+ stream>>post;
+ pluginErrorVal = plugin->updatePost(aReqData, post);
+ break;
+
+ case SmfContactPostDirected:
+ stream>>post;
+ stream>>contact;
+ stream>>location;
+ pluginErrorVal = plugin->postDirected(aReqData, post, contact, &location);
+ break;
+
+ case SmfContactCommentOnAPost:
+ {
+ SmfPost post2;
+ stream>>post;
+ stream>>post2;
+ stream>>location;
+ pluginErrorVal = plugin->commentOnAPost(aReqData, post, post2, &location);
+ break;
+ }
+
+ case SmfContactPostAppearence:
+ {
+ QString status;
+ int i;
+ stream>>i;
+ SmfPresenceInfo presence = (SmfPresenceInfo)i;
+ stream>>status;
+ pluginErrorVal = plugin->postAppearence(aReqData, presence, status);
+ break;
+ }
+
+ case SmfContactSharePost:
+ {
+ bool edited;
+ stream>>post;
+ stream>>contact;
+ stream>>edited;
+ pluginErrorVal = plugin->sharePost(aReqData, post, contact, edited);
+ break;
+ }
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+
+/**
+ * Method to create a web query to do music lyrics or subtitle search
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicLyricsRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicLyricsRequest");
+
+ // typecast instance to SmfLyricsServicePlugin
+ SmfLyricsServicePlugin *plugin = qobject_cast<SmfLyricsServicePlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ SmfTrackInfo trackInfo;
+ int pageNum, itemPerPage;
+
+ switch(aOperation)
+ {
+ case SmfMusicGetLyrics:
+ stream>>trackInfo;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->lyrics(aReqData, trackInfo, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicGetSubtitle:
+ {
+ stream>>trackInfo;
+ int i;
+ stream>>i;
+ SmfSubtitleSearchFilter filter = (SmfSubtitleSearchFilter)i;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->subtitles(aReqData, trackInfo, filter, pageNum, itemPerPage);
+ break;
+ }
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+/**
+ * Method to create a web query to do music event search or event post operation
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicEventsRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicEventsRequest");
+
+ // typecast instance to SmfMusicEventsPlugin
+ SmfMusicEventsPlugin *plugin = qobject_cast<SmfMusicEventsPlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ int pageNum, itemPerPage;
+ QtMobility::QGeoPositionInfo location;
+
+ switch(aOperation)
+ {
+ case SmfMusicGetEventsOnLoc:
+ stream>>location;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->events(aReqData, location, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicGetVenueOnLoc:
+ stream>>location;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->venues(aReqData, location, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicGetEventsOnVenue:
+ {
+ SmfLocation venue;
+ stream>>venue;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->events(aReqData, venue, pageNum, itemPerPage);
+ break;
+ }
+
+ case SmfMusicPostEvents:
+ {
+ QList<SmfEvent> list;
+ stream>>list;
+ pluginErrorVal = plugin->postEvents(aReqData, list);
+ break;
+ }
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+
+/**
+ * Method to create a web query to do music search operation
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicSearchRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicSearchRequest");
+
+ // typecast instance to SmfMusicSearchPlugin
+ SmfMusicSearchPlugin *plugin = qobject_cast<SmfMusicSearchPlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ int pageNum, itemPerPage;
+ SmfTrackInfo trackInfo;
+
+ switch(aOperation)
+ {
+ case SmfMusicGetRecommendations:
+ stream>>trackInfo;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->recommendations(aReqData, trackInfo, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicGetTracks:
+ stream>>trackInfo;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->tracks(aReqData, trackInfo, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicGetTrackInfo:
+ {
+ SmfMusicFingerPrint fp;
+ stream>>fp;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->trackInfo(aReqData, fp, pageNum, itemPerPage);
+ break;
+ }
+
+ case SmfMusicGetStores:
+ stream>>trackInfo;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->stores(aReqData, trackInfo, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicPostCurrentPlaying:
+ stream>>trackInfo;
+ pluginErrorVal = plugin->postCurrentPlaying(aReqData, trackInfo);
+ break;
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+/**
+ * Method to create a web query to do music service request operation
+ * like getting self profile or search profiles of other users
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicServiceRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicServiceRequest");
+
+ // typecast instance to SmfMusicServicePlugin
+ SmfMusicServicePlugin *plugin = qobject_cast<SmfMusicServicePlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ int pageNum, itemPerPage;
+
+ switch(aOperation)
+ {
+ case SmfMusicGetUserInfo:
+ pluginErrorVal = plugin->userInfo(aReqData);
+ break;
+
+ case SmfMusicSearchUser:
+ {
+ SmfLocation place;
+ stream>>place;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->searchUser(aReqData, place, pageNum, itemPerPage);
+ break;
+ }
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+
+/**
+ * Method to create a web query to do music playlist related operation
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicPlaylistRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicPlaylistRequest");
+
+ // typecast instance to SmfPlaylistServicePlugin
+ SmfPlaylistServicePlugin *plugin = qobject_cast<SmfPlaylistServicePlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ int pageNum, itemPerPage;
+ SmfPlaylist playlist;
+
+ switch(aOperation)
+ {
+ case SmfMusicGetPlaylists:
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->playlists(aReqData, pageNum, itemPerPage);
+ break;
+
+ case SmfMusicGetPlaylistsOfUser:
+ {
+ SmfMusicProfile user;
+ stream>>user;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->playlistsOf(aReqData, user, pageNum, itemPerPage);
+ break;
+ }
+
+ case SmfMusicAddToPlaylist:
+ {
+ QList<SmfTrackInfo> list;
+ stream>>playlist;
+ stream>>list;
+ pluginErrorVal = plugin->addToPlaylist(aReqData, playlist, list);
+ break;
+ }
+
+ case SmfMusicPostCurrentPlayingPlaylist:
+ stream>>playlist;
+ pluginErrorVal = plugin->postCurrentPlayingPlaylist(aReqData, playlist);
+ break;
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+/**
+ * Method to create a web query to do gallery related operation
+ * @param aPlugin The instance of the loaded plugin that performs the
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createGalleryRequest ( QObject *aPlugin,
+ const SmfRequestTypeID &aOperation,
+ QByteArray &aInputData,
+ SmfPluginRequestData &aReqData,
+ SmfPluginManagerResult &aResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createGalleryRequest");
+
+ // typecast instance to SmfGalleryPlugin
+ SmfGalleryPlugin *plugin = qobject_cast<SmfGalleryPlugin *>(aPlugin);
+ SmfPluginError pluginErrorVal;
+
+ if(plugin)
+ {
+ QDataStream stream(aInputData);
+ SmfPicture picture;
+
+ switch(aOperation)
+ {
+ case SmfPictureGetPictures:
+ {
+ int pageNum, itemPerPage;
+ stream>>pageNum;
+ stream>>itemPerPage;
+ pluginErrorVal = plugin->pictures(aReqData, pageNum, itemPerPage);
+ break;
+ }
+
+ case SmfPictureDescription:
+ stream>>picture;
+ pluginErrorVal = plugin->description(aReqData, picture);
+ break;
+
+ case SmfPictureUpload:
+ stream>>picture;
+ pluginErrorVal = plugin->upload(aReqData, picture);
+ break;
+
+ case SmfPictureMultiUpload:
+ {
+ QList<SmfPicture> list;
+ stream>>list;
+ pluginErrorVal = plugin->upload(aReqData, list);
+ break;
+ }
+
+ case SmfPicturePostComment:
+ {
+ SmfComment comment;
+ stream>>picture;
+ stream>>comment;
+ pluginErrorVal = plugin->postComment(aReqData, picture, comment);
+ break;
+ }
+
+ default:
+ // do nothing, unknown service
+ aResult = SmfPluginUnknownService;
+ SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+ return SmfPluginErrInvalidRequest;
+ }
+
+ if(SmfPluginErrNone == pluginErrorVal)
+ aResult = SmfPluginRequestCreated;
+ else
+ aResult = SmfPluginServiceError;
+ }
+ else
+ aResult = SmfPluginLoadError;
+
+ return pluginErrorVal;
+ }
+
+
+/**
+ * Method called by Plugin Manager when network response is available
+ * @param aInstance The instance of the loaded plugin that requested
+ * the network operation.
+ * @param aOperation The type of operation to be performed
+ * @param aTransportResult The result of Transport Operation
+ * @param aResponse The network response data
+ * @param aResult [out] An output parameter to the plugin manager
+ * containing the data parsed by the plugins
+ * @param aRetType [out] The Plugin return value
+ * @param aPageResult [out] The page information filled by the plugins
+ * @return SmfPluginManagerResult, The result of the operation
+ * @see smfglobal.h
+ */
+SmfPluginManagerResult SmfPluginManagerUtil::responseAvailable (
+ SmfPluginBase *aInstance,
+ const SmfRequestTypeID &aOperation,
+ const SmfTransportResult &aTransportResult,
+ QByteArray *aResponse,
+ QVariant *aResult,
+ SmfPluginRetType &aRetType,
+ SmfResultPage &aPageResult )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::responseAvailable");
+
+ SmfPluginError pluginRet;
+ SmfPluginManagerResult result = SmfPluginUnknownError;
+
+ switch(aOperation)
+ {
+ case SmfContactGetFriends:
+ case SmfContactGetFollowers:
+ case SmfContactSearch:
+ case SmfContactSearchNear:
+ case SmfContactGetGroups:
+ case SmfContactSearchInGroup:
+ case SmfContactRetrievePosts:
+ case SmfContactPost:
+ case SmfContactUpdatePost:
+ case SmfContactPostDirected:
+ case SmfContactCommentOnAPost:
+ case SmfContactPostAppearence:
+ case SmfContactSharePost:
+ case SmfMusicGetLyrics:
+ case SmfMusicGetSubtitle:
+ case SmfMusicGetEventsOnLoc:
+ case SmfMusicGetVenueOnLoc:
+ case SmfMusicGetEventsOnVenue:
+ case SmfMusicPostEvents:
+ case SmfMusicGetRecommendations:
+ case SmfMusicGetTracks:
+ case SmfMusicGetTrackInfo:
+ case SmfMusicGetStores:
+ case SmfMusicPostCurrentPlaying:
+ case SmfMusicGetUserInfo:
+ case SmfMusicSearchUser:
+ case SmfMusicGetPlaylists:
+ case SmfMusicGetPlaylistsOfUser:
+ case SmfMusicAddToPlaylist:
+ case SmfMusicPostCurrentPlayingPlaylist:
+ case SmfPictureGetPictures:
+ case SmfPictureDescription:
+ case SmfPictureUpload:
+ case SmfPictureMultiUpload:
+ case SmfPicturePostComment:
+ {
+ pluginRet = aInstance->responseAvailable(aTransportResult, aResponse,
+ aResult, aRetType, aPageResult );
+
+ // When plugin returns no error
+ if( SmfPluginErrNone == pluginRet )
+ {
+ // Request is complete, parsed data available with aResult
+ if( SmfRequestComplete == aRetType )
+ result = SmfPluginResponseParsed;
+
+ // Send the request again
+ else if(SmfSendRequestAgain == aRetType )
+ result = SmfPluginSendRequestAgain;
+ else
+ result = SmfPluginResponseParseFailure;
+ }
+ // Parsing failed
+ else
+ result = SmfPluginResponseParseFailure;
+
+ break;
+ }
+
+ default:
+ // Unknown service, saved data in Plugin manager is corrupted
+ SmfPluginManager::getInstance()->server()->writeLog("No operation type found!!!");
+ }
+
+ return result;
+ }
+
+
+/**
+ * Method to serialize the result of parsing (which is done by the
+ * plugins) to QByteArray to be sent to Smf server.
+ * @param aOperation The type of operation to be performed
+ * @param aResult The data to be serialized
+ * @param aDataStream Stream to be written
+ */
+void SmfPluginManagerUtil::serializeResult (
+ const SmfRequestTypeID &aOperation,
+ QVariant* aResult,
+ QDataStream &aDataStream )
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::serializeResult");
+ switch(aOperation)
+ {
+ // FOR CONTACT - FETCHER
+ case SmfContactGetFriends:
+ case SmfContactGetFollowers:
+ case SmfContactSearch:
+ case SmfContactSearchNear:
+ case SmfContactSearchInGroup:
+ {
+ QList<SmfContact> contactList;
+ if( aResult->canConvert<SmfContactList>() )
+ contactList = aResult->value<SmfContactList>();
+ aDataStream<<contactList;
+ break;
+ }
+
+ case SmfContactGetGroups:
+ {
+ QList<SmfGroup> groupList;
+ if( aResult->canConvert<SmfGroupList>() )
+ groupList = aResult->value<SmfGroupList>();
+ aDataStream<<groupList;
+
+ break;
+ }
+
+ // FOR CONTACT - POSTS
+ case SmfContactRetrievePosts:
+ {
+ SmfPluginManager::getInstance()->server()->writeLog("Serialize - retrieveposts() result");
+
+ QList<SmfPost> postList;
+ if( aResult->canConvert<SmfPostList>() )
+ postList = aResult->value<SmfPostList>();
+ aDataStream<<postList;
+ break;
+ }
+
+ case SmfContactPost:
+ case SmfContactUpdatePost:
+ case SmfContactPostDirected:
+ case SmfContactCommentOnAPost:
+ case SmfContactPostAppearence:
+ case SmfContactSharePost:
+ {
+ bool value;
+ if( QVariant::Bool == aResult->type() )
+ value = aResult->toBool();
+ aDataStream<<value;
+ break;
+ }
+
+ // FOR MUSIC - LYRICS SERVICE
+ case SmfMusicGetLyrics:
+ {
+ QList<SmfLyrics> lyricsList;
+ if( aResult->canConvert<SmfLyricsList>() )
+ lyricsList = aResult->value<SmfLyricsList>();
+ aDataStream<<lyricsList;
+
+ break;
+ }
+
+ case SmfMusicGetSubtitle:
+ {
+ QList<SmfSubtitle> subtitleList;
+ if( aResult->canConvert<SmfSubtitleList>() )
+ subtitleList = aResult->value<SmfSubtitleList>();
+ aDataStream<<subtitleList;
+
+ break;
+ }
+
+ // FOR MUSIC - EVENTS
+ case SmfMusicGetEventsOnLoc:
+ case SmfMusicGetEventsOnVenue:
+ {
+ QList<SmfEvent> eventList;
+ if( aResult->canConvert<SmfEventList>() )
+ eventList = aResult->value<SmfEventList>();
+ aDataStream<<eventList;
+
+ break;
+ }
+
+ case SmfMusicGetVenueOnLoc:
+ {
+ QList<SmfLocation> venueList;
+ if( aResult->canConvert<SmfLocationList>() )
+ venueList = aResult->value<SmfLocationList>();
+ aDataStream<<venueList;
+ break;
+ }
+
+ case SmfMusicPostEvents:
+ {
+ bool value;
+ if( QVariant::Bool == aResult->type() )
+ value = aResult->toBool();
+ aDataStream<<value;
+ break;
+ }
+
+ // FOR MUSIC - SEARCH
+ case SmfMusicGetRecommendations:
+ case SmfMusicGetTracks:
+ case SmfMusicGetTrackInfo:
+ {
+ QList<SmfTrackInfo> trackList;
+ if( aResult->canConvert<SmfTrackInfoList>() )
+ trackList = aResult->value<SmfTrackInfoList>();
+ aDataStream<<trackList;
+
+ break;
+ }
+
+ case SmfMusicGetStores:
+ {
+ QList<SmfProvider> storeList;
+ if( aResult->canConvert<SmfProviderList>() )
+ storeList = aResult->value<SmfProviderList>();
+ aDataStream<<storeList;
+ break;
+ }
+
+ case SmfMusicPostCurrentPlaying:
+ {
+ bool value;
+ if( QVariant::Bool == aResult->type() )
+ value = aResult->toBool();
+ aDataStream<<value;
+ break;
+ }
+
+
+ // FOR MUSIC - SERVICE
+ case SmfMusicGetUserInfo:
+ {
+ SmfMusicProfile user;
+ if(aResult->canConvert<SmfMusicProfile>())
+ user = aResult->value<SmfMusicProfile>();
+ aDataStream<<user;
+ break;
+ }
+
+ case SmfMusicSearchUser:
+ {
+ QList<SmfMusicProfile> userList;
+ if( aResult->canConvert<SmfMusicProfileList>() )
+ userList = aResult->value<SmfMusicProfileList>();
+ aDataStream<<userList;
+ break;
+ }
+
+ // FOR MUSIC - PLAYLIST SERVICE
+ case SmfMusicGetPlaylists:
+ case SmfMusicGetPlaylistsOfUser:
+ {
+ QList<SmfPlaylist> playlists;
+ if( aResult->canConvert<SmfPlaylistList>() )
+ playlists = aResult->value<SmfPlaylistList>();
+ aDataStream<<playlists;
+ break;
+ }
+
+ case SmfMusicAddToPlaylist:
+ case SmfMusicPostCurrentPlayingPlaylist:
+ {
+ bool value;
+ if( QVariant::Bool == aResult->type() )
+ value = aResult->toBool();
+ aDataStream<<value;
+ break;
+ }
+
+ // FOR PICTURES - GALLERY SERVICES
+ case SmfPictureGetPictures:
+ {
+ QList<SmfPicture> picList;
+ if( aResult->canConvert<SmfPictureList>() )
+ picList = aResult->value<SmfPictureList>();
+ aDataStream<<picList;
+ break;
+ }
+
+ case SmfPictureDescription:
+ {
+ QString str;
+ if( QVariant::String == aResult->type() )
+ str = aResult->toString();
+ aDataStream<<str;
+ break;
+ }
+
+ case SmfPictureUpload:
+ case SmfPictureMultiUpload:
+ case SmfPicturePostComment:
+ {
+ bool value;
+ if( QVariant::Bool == aResult->type() )
+ value = aResult->toBool();
+ aDataStream<<value;
+ break;
+ }
+
+ default:
+ // Unknown service, saved data in Plugin manager is corrupted
+ SmfPluginManager::getInstance()->server()->writeLog("No operation type found!!!");
+ }
+ }
+