diff -r c39a6cfd1fb9 -r be09cf1f39dd smf/smfservermodule/smfserver/pluginmgr/smfpluginmanagerutil.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include + +#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(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(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(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(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 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(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(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(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 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(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 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 contactList; + if( aResult->canConvert() ) + contactList = aResult->value(); + aDataStream< groupList; + if( aResult->canConvert() ) + groupList = aResult->value(); + aDataStream<server()->writeLog("Serialize - retrieveposts() result"); + + QList postList; + if( aResult->canConvert() ) + postList = aResult->value(); + aDataStream<type() ) + value = aResult->toBool(); + aDataStream< lyricsList; + if( aResult->canConvert() ) + lyricsList = aResult->value(); + aDataStream< subtitleList; + if( aResult->canConvert() ) + subtitleList = aResult->value(); + aDataStream< eventList; + if( aResult->canConvert() ) + eventList = aResult->value(); + aDataStream< venueList; + if( aResult->canConvert() ) + venueList = aResult->value(); + aDataStream<type() ) + value = aResult->toBool(); + aDataStream< trackList; + if( aResult->canConvert() ) + trackList = aResult->value(); + aDataStream< storeList; + if( aResult->canConvert() ) + storeList = aResult->value(); + aDataStream<type() ) + value = aResult->toBool(); + aDataStream<canConvert()) + user = aResult->value(); + aDataStream< userList; + if( aResult->canConvert() ) + userList = aResult->value(); + aDataStream< playlists; + if( aResult->canConvert() ) + playlists = aResult->value(); + aDataStream<type() ) + value = aResult->toBool(); + aDataStream< picList; + if( aResult->canConvert() ) + picList = aResult->value(); + aDataStream<type() ) + str = aResult->toString(); + aDataStream<type() ) + value = aResult->toBool(); + aDataStream<server()->writeLog("No operation type found!!!"); + } + } +