example/flickrcontactfetcherplugin/flickrcontactfetcherplugin.cpp
changeset 10 1d94eb8df9c2
parent 9 b85b0c039c14
--- a/example/flickrcontactfetcherplugin/flickrcontactfetcherplugin.cpp	Fri May 21 15:40:57 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,517 +0,0 @@
-
-// Include files
-#include <QtPlugin>
-#include <QCryptographicHash>
-#include <QDataStream>
-#include <QTextStream>
-#include <QFile>
-#include <QNetworkReply>
-#include <QXmlStreamReader>
-#include <parser.h>
-#include <QMap>
-#include <QListIterator>
-
-#include "flickrcontactfetcherplugin.h"
-
-// HARD CODED AS CSM IS NOT AVAILABLE - START - use your rigistered app's keys here
-static const QString apiKey = "";
-static const QString apiSecret = "";
-static const QString miniToken = "";
-QString fullToken = "";
-// HARD CODED AS CSM IS NOT AVAILABLE - END
-
-
-/**
- * Method called by plugins for logging
- * @param log string to be logged
- */
-void FlickrContactFetcherPlugin::writeLog(QString log) const
-	{
-	QFile file("c:\\data\\PluginLogs.txt");
-    if (!file.open(QIODevice::Append | QIODevice::Text))
-	         ;
-    QTextStream out(&file);
-    out << log << "\n";
-    file.close();
-	}
-
-/**
- * Destructor
- */
-FlickrContactFetcherPlugin::~FlickrContactFetcherPlugin( )
-	{
-	if(m_provider)
-		delete m_provider;
-	}
-
-/**
- * Method to get the list of friends
- * @param aRequest [out] The request data to be sent to network
- * @param aPageNum The page to be extracted
- * @param aItemsPerPage Number of items per page
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::friends( SmfPluginRequestData &aRequest,
-		const int aPageNum,
-		const int aItemsPerPage )
-	{
-	writeLog("FlickrContactFetcherPlugin::friends");
-
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-
-	// invalid arguments
-	if( aPageNum < 0 || aItemsPerPage < 0 )
-		return error;
-	else
-		{
-		// Create the API signature string
-		QString baseString;
-		baseString.append(apiSecret);
-		baseString.append("api_key"+apiKey);
-		baseString.append("auth_token"+fullToken);
-		baseString.append("filterfriends");
-		baseString.append("formatjson");
-		baseString.append("methodflickr.contacts.getList");
-		baseString.append("page"+QString::number(aPageNum));
-		baseString.append("per_page"+QString::number(aItemsPerPage));
-
-		// Create the url
-		QUrl url("http://api.flickr.com/services/rest/?");
-		url.addQueryItem("method", "flickr.contacts.getList");
-		url.addQueryItem("api_key", apiKey);
-		url.addQueryItem("filter", "friends");
-		url.addQueryItem("format", "json");
-		url.addQueryItem("page", QString::number(aPageNum));
-		url.addQueryItem("per_page", QString::number(aItemsPerPage));
-		url.addQueryItem("auth_token", fullToken);
-		url.addQueryItem("api_sig", generateSignature(baseString));
-
-		// Create the request, set the url
-		writeLog("final url = "+url.toString());
-		aRequest.iNetworkRequest.setUrl(url);
-		aRequest.iRequestType = SmfContactGetFriends;
-		aRequest.iPostData = NULL;
-		aRequest.iHttpOperationType = QNetworkAccessManager::GetOperation;
-		error = SmfPluginErrNone;
-		}
-	writeLog("Url string is : "+aRequest.iNetworkRequest.url().toString());
-	return error;
-	}
-
-/**
- * Method called by plugins to generate a signature string from a base string
- * @param aBaseString The base string
- * @return The md5 hash of the base string
- */
-QString FlickrContactFetcherPlugin::generateSignature(const QString aBaseString)
-	{
-	writeLog("FlickrContactFetcherPlugin::generateSignature");
-
-	// Create md5 hash of the signature string
-    QByteArray byteArray;
-    byteArray.insert(0, aBaseString.toAscii());
-
-    QByteArray md5Hash = QCryptographicHash::hash(byteArray,QCryptographicHash::Md5 ).toHex();
-    QString returnString (md5Hash);
-    writeLog("generated signature = "+QString(returnString));
-    return returnString;
-	}
-
-/**
- * Method to get the list of followers
- * @param aRequest [out] The request data to be sent to network
- * @param aPageNum The page to be extracted
- * @param aItemsPerPage Number of items per page
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::followers( SmfPluginRequestData &aRequest,
-		const int aPageNum ,
-		const int aItemsPerPage  )
-	{
-	Q_UNUSED(aRequest)
-Q_UNUSED(aPageNum)
-Q_UNUSED(aItemsPerPage)
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-	return error;
-	}
-
-/**
- * Method to search for a contact
- * @param aRequest [out] The request data to be sent to network
- * @param aContact contact to be searched
- * @param aPageNum The page to be extracted
- * @param aItemsPerPage Number of items per page
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::search( SmfPluginRequestData &aRequest,
-		const SmfContact &aContact,
-		const int aPageNum ,
-		const int aItemsPerPage  )
-	{
-	Q_UNUSED(aRequest)
-Q_UNUSED(aContact)
-Q_UNUSED(aPageNum)
-Q_UNUSED(aItemsPerPage)
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-	return error;
-	}
-
-/**
- * Method to search for contacts (friends) who are near the user.
- * Proximity defines accuracy level
- * @param aRequest [out] The request data to be sent to network
- * @param aLocation The location search criteria
- * @param aProximity location search boundary
- * @param aPageNum The page to be extracted
- * @param aItemsPerPage Number of items per page
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::searchNear( SmfPluginRequestData &aRequest,
-		const SmfLocation &aLocation,
-		const SmfLocationSearchBoundary &aProximity,
-		const int aPageNum ,
-		const int aItemsPerPage  )
-	{
-	Q_UNUSED(aRequest)
-Q_UNUSED(aLocation)
-Q_UNUSED(aProximity)
-Q_UNUSED(aPageNum)
-Q_UNUSED(aItemsPerPage)
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-	return error;
-	}
-
-/**
- * Method to get the list of groups
- * @param aRequest [out] The request data to be sent to network
- * @param aPageNum The page to be extracted
- * @param aItemsPerPage Number of items per page
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::groups( SmfPluginRequestData &aRequest,
-		const int aPageNum ,
-		const int aItemsPerPage  )
-	{
-	Q_UNUSED(aRequest)
-Q_UNUSED(aPageNum)
-Q_UNUSED(aItemsPerPage)
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-	return error;
-	}
-
-/**
- * Method to search for a contact in a group
- * @param aRequest [out] The request data to be sent to network
- * @param aGroup the group in which to search
- * @param aPageNum The page to be extracted
- * @param aItemsPerPage Number of items per page
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::searchInGroup( SmfPluginRequestData &aRequest,
-		const SmfGroup &aGroup,
-		const int aPageNum ,
-		const int aItemsPerPage  )
-	{
-	Q_UNUSED(aRequest)
-Q_UNUSED(aGroup)
-Q_UNUSED(aPageNum)
-Q_UNUSED(aItemsPerPage)
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-	return error;
-	}
-
-/**
- * Customised method for SmfContactFetcherPlugin interface
- * @param aRequest [out] The request data to be sent to network
- * @param aOperation The operation type (should be known between
- * the client interface and the plugin)
- * @param aData The data required to form the request (The type
- * of data should be known between client and the plugin)
- * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
- */
-SmfPluginError FlickrContactFetcherPlugin::customRequest( SmfPluginRequestData &aRequest,
-		const int &aOperation, QByteArray *aData )
-	{
-	Q_UNUSED(aRequest)
-Q_UNUSED(aOperation)
-Q_UNUSED(aData)
-	SmfPluginError error = SmfPluginErrInvalidRequest;
-	return error;
-	}
-
-/**
- * The first method to be called in the plugin that implements this interface.
- * If this method is not called, plugin may not behave as expected.
- * Plugins are expected to save the aUtil handle and use and when required.
- * @param aUtil The instance of SmfPluginUtil
- */
-void FlickrContactFetcherPlugin::initialize( SmfPluginUtil *aUtil )
-	{
-	// Save the SmfPluginUtil handle
-	m_util = aUtil;
-
-	// Create an instance of FlickrProviderBase
-	m_provider = new FlickrProviderBase;
-	m_provider->initialize();
-	}
-
-/**
- * Method to get the provider information
- * @return Instance of SmfProviderBase
- */
-SmfProviderBase* FlickrContactFetcherPlugin::getProviderInfo( )
-	{
-	return m_provider;
-	}
-
-/**
- * Method to get the result for a network request.
- * @param aTransportResult The result of transport operation
- * @param aResponse The QByteArray instance containing the network response.
- * The plugins should delete this instance once they have read the
- * data from it.
- * @param aResult [out] An output parameter to the plugin manager.If the
- * return value is SmfSendRequestAgain, QVariant will be of type
- * SmfPluginRequestData.
- * For SmfGalleryPlugin: If last operation was pictures(), aResult will
- * be of type QList<SmfPicture>. If last operation was description(),
- * aResult will be of type QString. If last operation was upload() or
- * postComment(), aResult will be of type bool.
- * @param aRetType [out] SmfPluginRetType
- * @param aPageResult [out] The SmfResultPage structure variable
- */
-SmfPluginError FlickrContactFetcherPlugin::responseAvailable(
-		const SmfTransportResult &aTransportResult,
-		QByteArray *aResponse,
-		QVariant* aResult,
-		SmfPluginRetType &aRetType,
-		SmfResultPage &aPageResult )
-	{
-	writeLog("FlickrContactFetcherPlugin::responseAvailable");
-	Q_UNUSED(aPageResult)
-	SmfPluginError error;
-	QList<SmfContact> list;
-
-	if(SmfTransportOpNoError == aTransportResult)
-		{
-		writeLog("No transport error");
-
-		QByteArray response(aResponse->data());
-		delete aResponse;
-		writeLog("Flickr response = "+QString(response));
-
-#if 1
-		// For getting contacts from json response
-		QJson::Parser parser;
-		bool ok;
-
-		// To remove the "jsonFlickrApi(" and also remove the last ")" from the response,
-		// as these gives a Json parsing error
-		response.remove(0, 14);
-		response.chop(1);
-
-		QVariantMap result = parser.parse(response, &ok).toMap();
-		if (!ok) {
-			writeLog("An error occurred during json parsing");
-			aResult->setValue(list);
-			error = SmfPluginErrParsingFailed;
-			return error;
-		}
-
-		QVariantMap map1 = result["contacts"].toMap();
-		writeLog("page = "+map1["page"].toString());
-		writeLog("pages = "+map1["pages"].toString());
-		writeLog("per_page = "+map1["per_page"].toString());
-		writeLog("perpage = "+map1["perpage"].toString());
-		writeLog("total = "+map1["perpage"].toString());
-
-		QList<QVariant> list1 = map1["contact"].toList();
-
-		QListIterator<QVariant> i(list1);
-		while(i.hasNext())
-			{
-			SmfContact contact;
-			QVariantMap map2 = i.next().toMap();
-			writeLog("nsid = "+map2["nsid"].toString());
-			writeLog("username = "+map2["username"].toString());
-			writeLog("iconserver = "+map2["iconserver"].toString());
-			writeLog("iconfarm = "+map2["iconfarm"].toString());
-			writeLog("ignored = "+map2["ignored"].toString());
-			writeLog("realname = "+map2["realname"].toString());
-			writeLog("friend = "+map2["friend"].toString());
-			writeLog("family = "+map2["family"].toString());
-			writeLog("path_alias = "+map2["path_alias"].toString());
-			writeLog("location = "+map2["location"].toString());
-
-			QContactName contactname;
-			QString username = map2["username"].toString();
-			writeLog("Username = "+username);
-			contactname.setFirstName(username);
-			contactname.setLastName(username);
-			QVariant nameVar = QVariant::fromValue(contactname);
-			contact.setValue("Name",nameVar);
-			list.append(contact);
-			}
-#endif
-
-#if 0
-		// For getting contacts from xml response
-		QXmlStreamReader xml(response);
-		while (!xml.atEnd())
-			{
-			xml.readNext();
-			if (xml.tokenType() == QXmlStreamReader::StartElement)
-				{
-				// If the tag is contact
-				if (xml.name() == "contact")
-					{
-					writeLog("Contact tag found");
-					SmfContact contact;
-					QStringRef str;
-					QContactName contactname;
-					QString username = xml.attributes().value("username").toString();
-					writeLog("Username = ");
-					writeLog(username);
-					contactname.setFirstName(username);
-					contactname.setLastName(username);
-					QVariant namevar1 = QVariant::fromValue(contactname);
-					contact.setValue("Name",namevar1);
-                    list.append(contact);
-					}
-				}
-			}
-#endif
-
-		writeLog("list count = "+QString::number(list.count(),10));
-		aRetType = SmfRequestComplete;
-		error = SmfPluginErrNone;
-		}
-
-	else
-		{
-		error = SmfPluginErrInvalidRequest;
-		aRetType = SmfRequestError;
-		}
-
-	aResult->setValue(list);
-	return error;
-	}
-
-
-/**
- * Destructor
- */
-FlickrProviderBase::~FlickrProviderBase( )
-	{
-	}
-
-/**
- * Method to get the Localisable name of the service.
- * @return The Localisable name of the service.
- */
-QString FlickrProviderBase::serviceName( ) const
-	{
-	return m_serviceName;
-	}
-
-/**
- * Method to get the Logo of the service
- * @return The Logo of the service
- */
-QImage FlickrProviderBase::serviceIcon( ) const
-	{
-	return m_serviceIcon;
-	}
-
-/**
- * Method to get the Readable service description
- * @return The Readable service description
- */
-QString FlickrProviderBase::description( ) const
-	{
-	return m_description;
-	}
-
-/**
- * Method to get the Website of the service
- * @return The Website of the service
- */
-QUrl FlickrProviderBase::serviceUrl( ) const
-	{
-	return m_serviceUrl;
-	}
-
-/**
- * Method to get the URL of the Application providing this service
- * @return The URL of the Application providing this service
- */
-QUrl FlickrProviderBase::applicationUrl( ) const
-	{
-	return m_applicationUrl;
-	}
-
-/**
- * Method to get the Icon of the application
- * @return The Icon of the application
- */
-QImage FlickrProviderBase::applicationIcon( ) const
-	{
-	return m_applicationIcon;
-	}
-
-/**
- * Method to get the Plugin specific ID
- * @return The Plugin specific ID
- */
-QString FlickrProviderBase::pluginId( ) const
-	{
-	return m_pluginId;
-	}
-
-/**
- * Method to get the ID of the authentication application
- * for this service
- * @param aProgram The authentication application name
- * @param aArguments List of arguments required for authentication app
- * @param aMode Strting mode for authentication application
- * @return The ID of the authentication application
- */
-QString FlickrProviderBase::authenticationApp( QString &aProgram,
-		QStringList & aArguments,
-		QIODevice::OpenModeFlag aMode ) const
-	{
-	Q_UNUSED(aProgram)
-Q_UNUSED(aArguments)
-Q_UNUSED(aMode)
-	return m_authAppId;
-	}
-
-/**
- * Method to get the unique registration ID provided by the
- * Smf for authorised plugins
- * @return The unique registration ID/token provided by the Smf for
- * authorised plugins
- */
-QString FlickrProviderBase::smfRegistrationId( ) const
-	{
-	return m_smfRegToken;
-	}
-
-void FlickrProviderBase::initialize()
-	{
-	m_serviceName = "Flickr";
-	m_description = "Flickr plugin description";
-	m_serviceUrl = QUrl(QString("http://api.flickr.com"));
-	m_pluginId = "flickrcontactfetcherplugin.qtplugin";
-	m_authAppId = "Flickr AuthAppId";
-	m_smfRegToken = "Flickr RegToken";
-	}
-
-
-/*
- * Export Macro
- * plugin name : flickrcontactfetcherplugin
- * plugin class : FlickrContactFetcherPlugin
- */
-Q_EXPORT_PLUGIN2( flickrcontactfetcherplugin, FlickrContactFetcherPlugin )
-