Updating the interfaces for SMFClient and SMFPlugins
authorcgandhi <chandradeep.gandhi@sasken.com>
Thu, 25 Mar 2010 14:44:08 +0530
changeset 1 4b1e636e8a71
parent 0 5d2360e70d9f
child 2 86af6c333601
Updating the interfaces for SMFClient and SMFPlugins
example/clientapi/example_usage.cpp
example/clientapi/smf/inc/common/SmfClientGlobal.h
example/clientapi/smf/inc/common/smfcontacts/smfcontact.h
example/clientapi/smf/inc/common/smfcontacts/smfgroup.h
example/clientapi/smf/inc/common/smfcontacts/smfpost.h
example/clientapi/smf/inc/common/smfmusic/smfevent.h
example/clientapi/smf/inc/common/smfmusic/smflyrics.h
example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint.h
example/clientapi/smf/inc/common/smfmusic/smfmusicprofile.h
example/clientapi/smf/inc/common/smfmusic/smfmusicrating.h
example/clientapi/smf/inc/common/smfmusic/smfplaylist.h
example/clientapi/smf/inc/common/smfmusic/smfsubtitle.h
example/clientapi/smf/inc/common/smfmusic/smfsubtitlesearchfilter.h
example/clientapi/smf/inc/common/smfmusic/smftrackinfo.h
example/clientapi/smf/inc/common/smfmusic/smfvenue.h
example/clientapi/smf/inc/common/smfpictures/smfcomment.h
example/clientapi/smf/inc/common/smfpictures/smfpicture.h
example/clientapi/smf/inc/smfclient/smfcontactfetcher.h
example/clientapi/smf/inc/smfclient/smfgallery.h
example/clientapi/smf/inc/smfclient/smfmusic.h
example/clientapi/smf/inc/smfclient/smfpostprovider.h
example/clientapi/smf/inc/smfclient/smfprovider.h
example/clientapi/smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h
example/clientapi/smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h
example/clientapi/smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h
example/clientapi/smf/inc/smfplugins/smfpictures/smfgalleryplugin.h
example/clientapi/smf/inc/smfplugins/smfprovider/smfproviderbase.h
example/clientapi/smf/smfcontact.h
example/clientapi/smf/smffcontactfetcher.h
example/clientapi/smf/smfgallery.h
example/clientapi/smf/smfmusic.h
example/clientapi/smf/smfpostprovider.h
example/clientapi/smf/smfprovider.h
example/clientapi/smf/smfrelationmgr.h
--- a/example/clientapi/example_usage.cpp	Tue Mar 02 16:24:32 2010 +0530
+++ b/example/clientapi/example_usage.cpp	Thu Mar 25 14:44:08 2010 +0530
@@ -8,168 +8,185 @@
 /** 1. Display a gallery on the screen for some remote service.
  * assume m_view is some gallery view object in the application.*/
 void MyApplication::displayGallery()
-{
-  // Some common interface for finding implementations.
-  QList<SmfGallery> galleries = Smf::GetServices("org.symbian.smf.gallery");
+	{
+	// Some common interface for finding implementations.
+	QList<SmfGallery> galleries = Smf::GetServices("org.symbian.smf.gallery\0.2");
 
-  // We will use the first one now
-  SmfGallery myGallery = galleries[0];
+	// We will use the first one now
+	SmfGallery myGallery = galleries[0];
+
+	// Adjust our view to show where these pictures came from
+	m_view.setIcon(myGallery.serviceIcon());
+	m_view.setProvder(myGallery.serviceName());
+	m_view.setDescription(myGallery.description());
 
-  // Adjust our view to show where these pictures came from
-  m_view.setIcon(myGallery.serviceIcon());
-  m_view.setProvder(myGallery.serviceName());
-  m_view.setDescription(myGallery.description());
+	/**
+	 * Asynchrnous request to fetch the pictures.
+	 * The picturesAvailable() signal is emitted 
+	 * with SmfPictureList once the pictures have arrived.
+	 */
+	myGallery.pictures();
+	QObject::connect(myGallery,SIGNAL(picturesAvailable(SmfPictureList*, QString, int)),this,SLOT(showPicsSlot(SmfPictureList*, QString)));
+	}
+}
+void MyApplication::showPicsSlot(SmfPictureList* pics, QString err)
+	{
+	//check err string if there is any error
 
-  QList<SmfPicture> pics = myGallery.pictures();
-  foreach(SmfPicture pic, pics) {
-    m_view.add(pic); // do something with the picture in this gallery
-  }
-}
+	//if no error
+	foreach(SmfPicture* pic, pics) {
+		m_view.add(pic); // do something with the picture in this gallery
+	}
+	}
 
 /** 2. Upload a picture captured by the user to some selection of galeries.*/
 void MyApplication::uploadPicture(QImage picture, QList<SmfGallery> galleries)
-{
-  // The list could be from a selection of galleries chosen by the user,
-  // think multiple TweetDeck accounts?
-  foreach(SmfGallery gallery, galleries) {
-    gallery.upload(picture);
-  }
-}
-
-
-/**
-  * 3. This is an example of displaying the friends profile image in a view from one or more
-  * service provider. Note that this service can be provided by any kind of service provider,
-  * e.g. last.fm music service where users maintain profiles and friends.
-  */
-void MyApplication::displayFriends()
-{
-    // Some common interface for finding implementations.
-    QList<SmfContactFetcher> contactFetcherList = Smf::GetServices("org.symbian.smf.contact.fetcher");
-
-    //let us show list of friends from first one
-    showlist(contactFetcherList [ 0 ]);
-
-    //now from the second provider
-    showlist(contactFetcherList [ 1 ]);
-
-    //user now matches one contact from list 1 to another contact in list 2 -
-	SmfRelationMgr mgr = Smf::GetRelationMgr();
-	SmfRelationId id = mgr.create(contactFetcherList [ 0 ], selectedContact1);
-	mgr.associate(id,contactFetcherList [ 1 ], selectedContact2);
-
-	//now show user all the relations he has made so far
-	QList<SmfRelationId> relations = mgr.getAll();
-	foreach(SmfRelationId id, relations) {
-		QList<SmfRelationItem> items =  mgr.get(id);
-		foreach(SmfRelationItem item,items) {
-			SmfProvider provider* = item.getProvider();
-        	m_view.setIcon(provider.serviceIcon());
-        	m_view.setTitle(item.value("Name"));
+	{
+	/**
+	 * When uploading is finished we can check the success of the uploading
+	 */	
+	QObject::connect(myGallery,SIGNAL(uploadFinished(bool)),this,SLOT(uploaded(bool)));
+	// The list could be from a selection of galleries chosen by the user,
+	// think multiple TweetDeck accounts?
+	foreach(SmfGallery gallery, galleries) {
+		gallery.upload(picture);
+	}
+	}
+void MyApplication::uploaded(bool success)
+	{
+	if(!success)
+		{
+	//error occured while uploading
 		}
 	}
-}
-
-void MyApplication::showlist(SmfContactFetcher fetcher)
-{
-    //get users friend list
-    QList<SmfContact> friendsList  =  fetcher.friends();
-
-    // Adjust our view to show where these pictures came from
-    //display service name description and the logo
-    m_view.setIcon( myFetcher.serviceIcon() );
-    m_view.setProvider( myFetcher.serviceName() );
-    m_view.setDescription( myFetcher.description() );
-
-    //now display the images
-    foreach(SmfContact contact, friendsList) {
-        QImage pic = contact.value("Avatar");
-        m_view.setPicture(pic);
-        m_view.setTitle(contact.value("Name"));
-    }
-}
-/**
-  * 4. This is an example of posting and reading user updates to social netowrking sites
-  */
-void MyApplication::postUpdate()
-{
-    // Some common interface for finding implementations.
-    QList<SmfPostProvider> postServices = Smf::GetServices("org.symbian.smf.contact.posts");
-
-    //let us use the first one
-    SmfPostProvider myPostServer = postServices[ 0 ];
-
-    //Adjust our view to show where these posts came from (e.g. tweets from twitter)
-    //display service name description and the logo
-    m_view.setIcon( myPostServer.serviceIcon() );
-    m_view.setProvider( myPostServer.serviceName() );
-    m_view.setDescription( myPostServer.description() );
-
-    SmfPost reply = new SmfPost(sampleString,samplmage, sampleUrl);
-    //post my udpate to be visible to all
-    myPostServer.updatePost(reply);
-
-    //get all posts to me in my profle (e.g. twits from all friends)
-    QList <SmfPost> posts = postServices.getPosts();
-
-    //read the first post
-    SmfPost firstPost =  posts.at(0);
-    SmfContact currentContact = firstPost.contact();
-
-    //reply only to the sender - can check availability this service before sending
-    myPostServer.postDirected(currentContact,reply);
-    //presentation layout to be decided
-
-    //now display the latest post
-    qSort(posts.begin(),posts.end(),caseCompareTimeMoreThan);
-    m_view.setPostData(posts.at(0));
-
-}
 
 /**
-  * 5. This is an example of getting song recommendations from a social netowrking sites
-  */
-void MyApplication::getMusic()
-{
-    // Some common interface for finding implementations.
-    QList<SmfMusicSearch> musicServices = Smf::GetServices("org.symbian.smf.music");
+ * 3. This is an example of displaying the friends profile image in a view from one or more
+ * service provider. Note that this service can be provided by any kind of service provider,
+ * e.g. last.fm music service where users maintain profiles and friends.
+ */
+void MyApplication::displayFriends()
+	{
+	// Some common interface for finding implementations.
+	QList<SmfContactFetcher> contactFetcherList = Smf::GetServices("org.symbian.smf.contact.fetcher\0.2");
+	//Request friend list,
+	//The friendsListAvailable() signal
+	//is emitted with SmfContactList once data is arrived.
+	QObject::Connect(contactFetcherList[0],SIGNAL(friendsListAvailable(SmfContactList*, QString, int)),
+			this,SLOT(showlist(SmfContactList*));
+	fetcher.friends();
+	}
+
+void MyApplication::showlist(SmfContactList* friendsList)
+	{
+
+	// Adjust our view to show where these pictures came from
+	//display service name description and the logo
+	m_view.setIcon( myFetcher.serviceIcon() );
+	m_view.setProvider( myFetcher.serviceName() );
+	m_view.setDescription( myFetcher.description() );
 
-    //let us use the first one
-    SmfMusicSearch mServer = musicServices.at(0);
+	//now display the images
+	foreach(SmfContact* contact, friendsList) {
+		QImage pic = contact.value("Avatar");
+		m_view.setPicture(pic);
+		m_view.setTitle(contact.value("Name"));
+	}
+	}
+/**
+ * 4. This is an example of posting and reading user updates to social netowrking sites
+ */
+void MyApplication::postUpdate()
+	{
+	// Some common interface for finding implementations.
+	QList<SmfPostProvider> postServices = Smf::GetServices("org.symbian.smf.contact.posts\0.2");
 
-    //search songs similar to currently playing
-    QList<SmfTrackInfo> songs = mServer.recommendations(currTrack);
+	//let us use the first one
+	SmfPostProvider myPostServer = postServices[ 0 ];
+
+	//Adjust our view to show where these posts came from (e.g. tweets from twitter)
+	//display service name description and the logo
+	m_view.setIcon( myPostServer.serviceIcon() );
+	m_view.setProvider( myPostServer.serviceName() );
+	m_view.setDescription( myPostServer.description() );
+
+	SmfPost reply = new SmfPost(sampleString,samplmage, sampleUrl);
+	//post my udpate to be visible to all, connect to updatePostFinished()
+	// signal of SmfPostProvider to track the success
+	myPostServer.updatePost(reply);
 
-    //display to the user
-    m_view.setIcon( mServer.serviceIcon() );
-    m_view.setProvider( mServer.serviceName() );
-    m_view.setDescription( mServer.description() );
-    foreach(SmfTrackInfo track, songs)    {
-		m_view.add(track);
-		}
+	//Asynchronously get all posts to me in my profle (e.g. twits from all friends)
+	//connect to postsAvailable to show the post
+	postServices.getPosts();
+
+	QObject::Connect(myPostServer,SIGNAL(postsAvailable(SmfPostList*, QString, int)),this,SLOT(showPosts(SmfPostList*, QString)));
+	}
+void MyApplication::showPosts(SmfPostList* posts, QString err)
+	{
+	//Show the first post  
+	m_view.setPostData(posts->at(0));
+	}
+/**
+ * 5. This is an example of getting song recommendations from a social netowrking sites
+ */
+void MyApplication::getMusic()
+	{
+	// Some common interface for finding implementations.
+	QList<SmfMusicSearch> musicServices = Smf::GetServices("org.symbian.smf.music\0.2");
 
-    //allow user to select a track and get purchase links
-    QList<SmfProvider> stores = mServer.stores(selectedTrack);
+	//let us use the first one
+	SmfMusicSearch mServer = musicServices.at(0);
+	QObject::Connect(mServer,SIGNAL(trackSearchAvailable(SmfTrackInfoList*, QString,int)),this,SLOT(showTrackSearch(SmfTrackInfoList*)));
+	QObject::Connect(mServer,SIGNAL(storeSearchAvailable(SmfProviderList*, QString,int)),this,SLOT(showStoreSearch(SmfProviderList*)));
+	//search songs similar to currently playing,
+	//connect to trackSearchAvailable signal to get the result
+	mServer.recommendations(currTrack);
+	//display to the user
+	m_view.setIcon( mServer.serviceIcon() );
+	m_view.setProvider( mServer.serviceName() );
+	m_view.setDescription( mServer.description() );
 
-}
+
 
+	}
+void MyApplication::showTrackSearch(SmfTrackInfoList* songs)
+	{
+	foreach(SmfTrackInfo* track, songs){
+		m_view.add(track);
+	}
+	//allow user to select a track and get purchase links
+	//connect to showStoreSearch signal to display the stores for that track
+	mServer.stores(selectedTrack);
+	}
+void MyApplication::showStoreSearch(SmfProviderList* stores)
+	{
+	//show stores
+	}
 void MyApplication::updateCurrentPlaying(QList<SmfMusicSearch> musicServices, SmfTrackInfo currTrack)
-{
-    //after purchasing and downloading is over, user plays the track
-    //now post the current platying track to all service providers
-    foreach(SmfMusicSearch provider, musicServices) {
+	{
+	//after purchasing and downloading is over, user plays the track
+	//now post the current platying track to all service providers
+	//postFinished() signal of SmfMusicSearch can be tracked to check the success of the posts
+	foreach(SmfMusicSearch provider, musicServices) {
 		provider.postCurrentPlaying(currTrack);
 	}
-    //postCurrentPlaying is also a slot funtion, may be application can use connect
-}
+	//postCurrentPlaying is also a slot funtion, may be application can use connect
+	}
 
 void MyApplication::displayLyrics(SmfTrackInfo currTrack)
-{
+	{
 	// Some common interface for finding implementations.
-	SmfLyricsService lyricsService = Smf::GetServices("org.symbian.smf.music.lyrics","lyricsfly.com");
+	SmfLyricsService lyricsService = Smf::GetServices("org.symbian.smf.music.lyrics\0.2","lyricsfly.com");
+	QObject::connect(lyricsService,SIGNAL(lyricsAvailable(SmfLyricsList*, QString, int)),this,SLOT(showLyrics(SmfLyricsList*));
 
-	QList<SmfLyrics> list = lyricsService.lyrics(currTrack);
-    //now display the latest edited lyrics
-    qSort(list.begin(),list.end(),caseCompareTimeMoreThan);
-    m_view.setLyricsData(list.at(0));
-}
+	//Request to get the lyrics
+	//lyricsAvailable() signal of SmfLyricsService is emitted when lyrics is available
+	lyricsService.lyrics(currTrack);
+
+	}
+void MyApplication::showLyrics(SmfLyricsList* list)
+	{
+	//now display the latest edited lyrics
+	qSort(list->begin(),list->end(),caseCompareTimeMoreThan);
+	m_view.setLyricsData(list->at(0));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/SmfClientGlobal.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,33 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Mansij Roy, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Interface spefication for sfm service provider
+*
+*/
+
+#ifndef SMFCLIENTDEFS_H_
+#define SMFCLIENTDEFS_H_
+
+ #include <QtCore/QtGlobal>
+
+ #ifdef SMFCLIENT_LIBRARY
+ #  define SMFCLIENT_EXPORT Q_DECL_EXPORT
+ #else
+ #  define SMFCLIENT_EXPORT Q_DECL_IMPORT
+ #endif
+/**
+ * To be designed later
+ */
+#define SMF_GETSERVICES(INTERFACE,INTERFACESTRING) ;
+#endif /* SMFCLIENTDEFS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfcontact.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,147 @@
+/**************************************************************************************************
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+* Manasij Roy
+* Description:
+* Interface spefication for profile of a contact in a social networking site
+*
+/*************************************************************************************************/
+
+#ifndef SMFPROFILE_H
+#define SMFPROFILE_H
+
+#include <QObject>
+
+//From Qt mobility project
+#include "qtcontacts.h"
+#include "../common/SmfClientGlobal.h"
+#include "smfprovider.h"
+/**
+ * Interface for a contact from a service provider. This class
+ * provides basic functionality to allow applications to obtain details of a
+ * contact (self or friends) in a social networking service.
+ * 
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ * Note this class has dependencies on QtMobility project
+ */
+class SMFCLIENT_EXPORT SmfContact : public QObject
+{
+  Q_OBJECT
+
+public:
+  /** 
+   * Constructs SmfContact with base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+  SmfContact(SmfProvider* baseProvider = 0);
+  ~SmfContact();
+
+
+  /**
+   * Returns the available sub fields for contacts.
+    * The following subtypes are available,-
+    * QString userIdInProvider;
+    * QtMobility::QContactAddress Adress;
+    * QtMobility::QContactAnniversary Anniversary;
+    * QtMobility::QContactAvatar  Avatar;
+    * QtMobility::QContactBirthday Birthday;
+    * QtMobility::QContactEmailAddress EmailAddress;
+    * QtMobility::QContactGender Gender;
+    * QtMobility::QContactGeolocation Geolocation;
+    * QtMobility::QContactGuid Guid;
+    * QtMobility::QContactName Name;
+    * QtMobility::QContactNickname Nickname;
+    * QtMobility::QContactNote Note;
+    * QtMobility::QContactOnlineAccount OnlineAccount;
+    * QtMobility::QContactOrganization  Organization;
+    * QtMobility::QContactPhoneNumber PhoneNumber;
+    * QtMobility::QContactTimestamp Timestamp;
+    * QtMobility::QContactType Type;
+    * QtMobility::QContactUrl  Url;
+   */
+  virtual QStringList subTypes() const;
+  
+  //APIs to get base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info, note setting the provider is not permitted here
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+public slots:
+
+/**
+ * Gets value of the sub field for any contact.
+ * @param  subType sub field type 
+ * @param info value of the sub field subType
+ * @see subTypes()
+ * The following subtypes are available,-
+ * QString userIdInProvider;
+ * QtMobility::QContactAddress Adress;
+ * QtMobility::QContactAnniversary Anniversary;
+ * QtMobility::QContactAvatar  Avatar;
+ * QtMobility::QContactBirthday Birthday;
+ * QtMobility::QContactEmailAddress EmailAddress;
+ * QtMobility::QContactGender Gender;
+ * QtMobility::QContactGeolocation Geolocation;
+ * QtMobility::QContactGuid Guid;
+ * QtMobility::QContactName Name;
+ * QtMobility::QContactNickname Nickname;
+ * QtMobility::QContactNote Note;
+ * QtMobility::QContactOnlineAccount OnlineAccount;
+ * QtMobility::QContactOrganization  Organization;
+ * QtMobility::QContactPhoneNumber PhoneNumber;
+ * QtMobility::QContactTimestamp Timestamp;
+ * QtMobility::QContactType Type;
+ * QtMobility::QContactUrl  Url;
+ */
+  virtual void value(const QString& subType,const QVariant& info); //for any contact
+  
+  /**
+   * Sets the value of the sub field for self contact
+   * @param  key sub field type 
+   * @param value value to be set for  sub field key
+   * @return success of the set
+   * @see subTypes()
+   */
+  virtual bool setValue( const QString & key, const QVariant & value );//for self contact only
+	 
+  
+signals:
+/**
+ * Emitted when value of self contact changes.
+ * @param key the key which is changed
+ */
+  void detailsUpdated(const QString& key); //for setvalue on self contact
+  
+private:
+  /**
+   * Conatact details
+   */
+  QVariantMap m_details;
+	QString m_caption;
+	 /**
+	 * Externalization
+	 */
+};
+	/**
+	 * Externalization
+	 */
+	QDataStream &operator<<(QDataStream &, const SmfContact&);
+	/**
+	 * Internalization
+	 */
+QDataStream &operator>>(QDataStream &, SmfContact&);
+SMF_GETSERVICES(SmfContact, "org.symbian.smf.client.contact")
+#endif // SMFPROFILE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfgroup.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,63 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+* Manasij Roy
+* Description:
+* Interface spefication for smf service provider
+*
+*/
+
+#ifndef SMFGROUP_H_
+#define SMFGROUP_H_
+
+#include "SmfClientGlobal.h"
+class SmfContact;
+//List of SmfContacts
+typedef QList<SmfContact> SmfContactList;
+/**
+ * class for a group in social network 
+ */
+class SMFCLIENT_EXPORT SmfGroup : public QObject
+	{
+	Q_OBJECT
+public:
+	
+	/**
+	 * Constructs a group with list of contacts
+	 */
+	SmfGroup(SmfContactList* list=0);
+	/**
+	 *Returns list of members in the group
+	 *@return list of members 
+	 */
+	SmfContactList* members()
+		{
+		return m_members;
+		}
+	
+	/**
+	 * Sets the group members
+	 * @param members list of members to be added to the group 
+	 */
+	void setMembers(SmfContactList& members);
+private:
+	SmfContactList* m_members;
+	};
+/**
+ * Externalization
+ */
+QDataStream &operator<<(QDataStream &, const SmfGroup &);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfGroup &);
+#endif /* SMFGROUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfcontacts/smfpost.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,75 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+* Manasij Roy
+* Description:
+* Interface spefication for sfm service provider
+*
+*/
+
+#ifndef SMFPOST_H_
+#define SMFPOST_H_
+#include "SmfClientGlobal.h"
+/**
+ * class for post, later may be we need to add media. 
+ * Post consists of a title and description
+ */
+
+class SMFCLIENT_EXPORT SmfPost : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructs a post 
+	 */
+	SmfPost(QObject* provider=0);
+	
+	/**
+	 * Constructs a post with text,image and url
+	 */
+	SmfPost(QString text,QPixmap image, QString url);
+	~SmfPost();
+	
+	/**
+	 * Gets post title
+	 */
+	QString* getTitle();
+	
+	/**
+	 * Gets post text
+	 */
+	QString* getDescription();
+	
+	/**
+	 * Sets post title
+	 */
+	void setTitle(QString* title);
+	
+	/**
+	 * Sets post text
+	 */
+	void setDescription(QString* desc);
+
+private:
+	QString m_text;
+	QPixmap m_image;
+	QString m_url;
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfPost&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfPost&);
+#endif /* SMFPOST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfevent.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,129 @@
+/**
+ * @file	smfevent.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The event class represents a music event
+ */
+
+#ifndef SMFEVENT_H_
+#define SMFEVENT_H_
+
+#include <smfvenue.h>
+#include <QStringList>
+#include <qdatastream.h>
+#include "SmfClientGlobal.h"
+/**
+ * The event class represents a music event
+ */
+class SMFCLIENT_EXPORT SmfEvent : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfEvent( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfEvent( );
+	
+	/**
+	 * Method to get the event name
+	 * @param aName The event name
+	 */
+	void getTitle( QString &aName );
+	
+	/**
+	 * Method to get the event date and time
+	 */
+	void getEventDateTime( QDateTime &aDateTime );
+	
+	/**
+	 * Method to get the artist names
+	 * @param aArtist The list of artists in the event
+	 */
+	void getArtists( QStringList &aArtist );
+	
+	/**
+	 * Method to get the venue of the event
+	 * @param aVenue The venue of the event
+	 */
+	void getVenue( SmfVenue &aVenue );
+	
+	/**
+	 * Method to get the URL for getting tickets for the event
+	 * @param aUrl The Url for getting ticket for the event
+	 */
+	void getTicketUrl( QUrl &aUrl );
+	
+	/**
+	 * Method to get the id of the event
+	 * @param aId The ID value 
+	 */
+	void getId( QString &aId );
+	
+	/**
+	 * Method to set the event name
+	 * @param aName The new event name
+	 */
+	void setTitle( const QString& aName );
+	
+	/**
+	 * Method to set the event date and time
+	 * @param aDateTime The new date and time of the event
+	 * 
+	 */
+	void setEventDateTime( const QDateTime& aDateTime );
+	
+	/**
+	 * Method to set the artist names
+	 * @param aArtist The new list of artists in the event
+	 */
+	void setArtists( const QStringList& aArtist );
+	
+	/**
+	 * Method to set the venue name
+	 * @param aVenue The new venue of the event
+	 */
+	void setVenue( const SmfVenue& aVenue );
+	
+	/**
+	 * Method to set the URL for getting tickets for the event
+	 * @param aUrl The new Url for getting ticket for the event
+	 */
+	void setTicketUrl( const QUrl &aUrl );
+
+private:
+	QStringList m_name;			// event name
+	QDateTime 	m_dateTime;		// event date and time
+	QStringList m_artistName;	// event artist names
+	SmfVenue 	m_venue;		// venue of the event
+	QUrl 		m_url;			// ticket url
+	QString 	m_eventId;
+	
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfEvent&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfEvent&);
+
+#endif /* SMFEVENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smflyrics.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,98 @@
+/**
+ * @file	smflyrics.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The lyrics class represents an instance of a music track's lyrics
+ */
+
+#ifndef SMFLYRICS_H_
+#define SMFLYRICS_H_
+
+#include <QObject>
+#include <qdatastream.h>
+#include <QDateTime>
+#include "SmfClientGlobal.h"
+/**
+ * The lyrics class represents an instance of a music track's lyrics
+ */
+class SMFCLIENT_EXPORT SmfLyrics : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfLyrics( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLyrics( );
+
+	/**
+	 * Method to get the lyrics
+	 * @param aLyrics The lyrics content
+	 */
+	void getLyrics( QByteArray &aLyrics );
+	
+	/**
+	 * Method to get the language
+	 * @param aLanguage The language
+	 */
+	void getLanguage( QString &aLanguage );
+	
+	/**
+	 * Method to get the frame rate
+	 * @return the frame rate
+	 */
+	double getFrameRate( );
+	
+	/**
+	 * Method to get the duration
+	 * @return the duration
+	 */
+	double getDuration( );
+	
+	/**
+	 * Method to get the release year
+	 * @param aRelYear The release year
+	 */
+	void getReleaseYear( QDateTime &aRelYear );
+	
+	/**
+	 * Method to get the id of the lyrics
+	 * @param aId The ID value 
+	 */
+	void getId( QString &aId );
+
+private:
+	QByteArray m_lyrics;	// lyrics data
+	QString m_language;		// language
+	double m_frameRate;		// frame rate
+	double m_duration;		// duration
+	QDateTime m_releaseYr;	// release year
+	QString m_lyricsId;		// lyrics id
+	
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfLyrics&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfLyrics&);
+#endif /* SMFLYRICS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicfingerprint.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,51 @@
+/**
+ * @file	smfmusicfingerprint.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The musicfingerprint class represents a music finger print used in searches
+ */
+
+#ifndef SMFMUSICFINGERPRINT_H_
+#define SMFMUSICFINGERPRINT_H_
+
+#include <QObject>
+
+/**
+ * The musicfingerprint class represents a music finger print used in searches
+ */
+class SmfMusicFingerPrint : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfMusicFingerPrint( QObject *aParent = 0 );
+	/**
+	 * Destructor
+	 */
+	~SmfMusicFingerPrint( );
+	
+	};
+/**
+* Externalization
+*/
+friend QDataStream &operator<<(QDataStream &, const SmfMusicFingerPrint&);
+/**
+ * Internalization
+ */
+friend QDataStream &operator>>(QDataStream &, SmfMusicFingerPrint&);
+#endif /* SMFMUSICFINGERPRINT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicprofile.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,86 @@
+/**
+ * @file	smfmusicprofile.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The music profile class represents a user's profile in music site
+ */
+
+#ifndef SMFMUSICPROFILE_H_
+#define SMFMUSICPROFILE_H_
+
+#include <qdatastream.h>
+#include "SmfClientGlobal.h"
+
+#include "smfcontact.h"
+class SmfTrackInfo;
+class SmfEventsList;
+typedef QList<SmfTrackInfo> SmfTrackInfoList; 
+/**
+ * User profile containing music usage and interest info, extends SmfContact.
+ * Consists of,-
+ * 1. Conatct info
+ * 2. Music usage info as SmfTrackInfoList
+ * 3. Interest info as SmfTrackInfoList
+ * 4. Events SmfEventsList
+ */
+class SMFCLIENT_EXPORT SmfMusicProfile : public SmfContact
+	{
+	  Q_OBJECT
+
+	public:
+	  // Seeing as this is a plug-in implementation, these will realistically
+	  // be generated by SMF factory of some kind
+	  SmfMusicProfile(QObject* parent = 0);
+	  ~SmfMusicProfile();
+	  
+	  /**
+	   * Gets the music usage info of the user as list of SmfTrackInfo
+	   */
+	  SmfTrackInfoList* getMusicUsageInfo();
+	  
+	  /**
+	   * Gets the music interest info of the user as list of SmfTrackInfo
+	   */
+	  SmfTrackInfoList* getInterestInfo();
+	  
+	  /**
+	   * Gets the user events as list of SmfEvents
+	   */
+	  SmfEventsList* getUserEvents();
+	  
+	  /**
+	   * Sets the music usage info of the user as list of SmfTrackInfo
+	   */
+	  void setMusicUsageInfo(SmfTrackInfoList* usage);
+	  
+	  /**
+	   * Gets the music interest info of the user as list of SmfTrackInfo
+	   */
+	  void setInterestInfo(SmfTrackInfoList* interest);
+
+	private:
+	  SmfTrackInfoList* usage;
+	  SmfTrackInfoList* interest;
+	  
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfMusicProfile&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfMusicProfile&);
+#endif /* SMFMUSICPROFILE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfmusicrating.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,82 @@
+/**
+ * @file	smfmusicrating.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The music rating class represents an instance of rating 
+ * about a music track 
+ */
+
+#ifndef SMFMUSICRATING_H_
+#define SMFMUSICRATING_H_
+
+#include <QObject>
+#include "SmfClientGlobal.h"
+class SmfTrackInfo;
+/**
+ * Rating value, services should define their own scale
+ */
+class SMFCLIENT_EXPORT SmfMusicRating : QObject
+	{
+	Q_OBJECT
+	
+public:
+	/**
+	 * Constructs the rating for the given track
+	 */
+	SmfMusicRating(SmfTrackInfo* track);
+	/**
+	 * Gets the rating
+	 */
+	int getRating();
+	
+	/**
+	 * Gets the max for the rating scale
+	 */
+	int getMax();
+	
+	/**
+	 * Gets the min for the rating scale
+	 */
+	int getMin();
+	
+	/**
+	 * Gets the rating
+	 */
+	void setRating(int rating);
+	
+	/**
+	 * Sets the max for the rating scale
+	 */
+	void setMax(int max);
+	
+	/**
+	 * Sets the min for the rating scale
+	 */
+	void setMin(int min);
+
+private:
+	int m_rating;
+	int m_max;
+	int m_min;
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfMusicRating&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfMusicRating&);
+#endif /* SMFMUSICRATING_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfplaylist.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,102 @@
+/**
+ * @file	smfplaylist.h
+ * @author  Nalina Hariharan,Manasij Roy Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The playlist class represents an instance of a playlist
+ */
+
+#ifndef SMFPLAYLIST_H_
+#define SMFPLAYLIST_H_
+
+#include <smftrackinfo.h>
+#include <qdatastream.h>
+
+/**
+ * The playlist class represents an instance of a playlist
+ */
+class SmfPlaylist : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPlaylist( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlaylist( );
+	
+	/**
+	 * Method to get the list of tracks in the playlist
+	 * @param aList The list of tracks in the playlist
+	 */
+	void getTrackList( QList<SmfTrackInfo>& aList );
+	
+	/**
+	 * Method to get the playlist title
+	 * @param aTitle The title of the playlist
+	 */
+	void getPlayListTitle( QString &aTitle );
+	
+	/**
+	 * Method to get the creation date of the playlist
+	 * @param aDate The date and time of creation of the playlist
+	 */
+	void getCreationDate( QDateTime &aDate );
+	
+	/**
+	 * Method to get the id of the playlist
+	 * @param aId The ID value 
+	 */
+	void getId( QString &aId );
+	
+	/**
+	 * Method to set the list of tracks in the playlist
+	 * @param aList The new list of tracks in the playlist
+	 */
+	void setTrackList( const QList<SmfTrackInfo> &aList );
+	
+	/**
+	 * Method to set the playlist title
+	 * @param aTitle The new title of the playlist
+	 */
+	void setPlayListTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set the creation date of the playlist
+	 * @param aDate The new date and time of creation of the playlist
+	 */
+	void setCreationDate( const QDateTime &aDate );
+	
+private:
+	QList<SmfTrackInfo> m_trackList;	// list of tracks
+	QString m_title;				// playlist name
+	QDateTime m_creationDate;		// creation date
+	QString m_playlistId;
+	
+	};
+ /**
+  * Externalization
+  */
+ QDataStream &operator<<(QDataStream &, const SmfPlaylist &);
+ /**
+  * Internalization
+  */
+ QDataStream &operator>>(QDataStream &, SmfPlaylist &);
+ 
+#endif /* SMFPLAYLIST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfsubtitle.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,98 @@
+/**
+ * @file	smfsubtitle.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The subtitle class represents information about a track's subtitle
+ */
+
+#ifndef SMFSUBTITLE_H_
+#define SMFSUBTITLE_H_
+
+#include <QObject>
+#include <qdatastream.h>
+#include <QDateTime>
+#include "SmfClientGlobal.h"
+/**
+ * The subtitle class represents information about a track's subtitle
+ */
+class SMFCLIENT_EXPORT SmfSubtitle : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfSubtitle( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfSubtitle( );
+	
+
+	/**
+	 * Method to get the subtitle as a bytearray
+	 * @param aSubTitle The subtitle content
+	 */
+	void getSubtitle( QByteArray &aSubTitle );
+	
+	/**
+	 * Method to get the language
+	 * @param aLanguage The language
+	 */
+	void getLanguage( QString &aLanguage );
+	
+	/**
+	 * Method to get the frame rate
+	 * @return the frame rate
+	 */
+	double getFrameRate( );
+	
+	/**
+	 * Method to get the duration
+	 * @return the duration
+	 */
+	double getDuration( );
+	
+	/**
+	 * Method to get the release year
+	 * @param aRelYear The release year
+	 */
+	void getReleaseYear( QDateTime &aRelYear );
+	
+	/**
+	 * Method to get the id of the subtitle
+	 * @param aId The ID value 
+	 */
+	void getId( QString &aId );
+	
+private:
+	QByteArray m_subtitle;	// subtitle data
+	QString m_language;		// language
+	double m_frameRate;		// frame rate
+	double m_duration;		// duration
+	QDateTime m_releaseYr;	// release year
+	QString m_subtitleId;	// subtitle id
+	};
+/**
+ * Externalization
+ */
+QDataStream &operator<<(QDataStream &, const SmfSubtitle&);
+	/**
+	 * Internalization
+	 */
+QDataStream &operator>>(QDataStream &, SmfSubtitle&);
+#endif /* SMFSUBTITLE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfsubtitlesearchfilter.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,100 @@
+/**
+ * @file	smfsubtitlesearchfilter.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The subtitle search filter class represents the filter options 
+ * for searching tracks
+ */
+
+#ifndef SMFSUBTITLESEARCHFILTER_H_
+#define SMFSUBTITLESEARCHFILTER_H_
+
+#include <QDateTime>
+#include "SmfClientGlobal.h"
+/**
+ * The subtitle search filter class represents the filter options 
+ * for searching tracks
+ */
+class SMFCLIENT_EXPORT SmfSubtitleSearchFilter : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfSubtitleSearchFilter( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfSubtitleSearchFilter( );
+	
+	/**
+	 * Method to get the language
+	 * @param aLang The language
+	 */
+	void getLanguage( QString &aLang );
+	
+	/**
+	 * Method to get the frame rate
+	 * @return The frame rate
+	 */
+	double getFrameRate( );
+	
+	/**
+	 * Method to get the duration
+	 * @param aTime The duration
+	 */
+	void getDuration( QTime &aTime );
+	
+	/**
+	 * Method to get the release year
+	 * @param aDateTime The release year
+	 */
+	void getReleaseYear( QDateTime &aDateTime );
+
+	/**
+	 * Method to set the language
+	 * @param aLang The new language
+	 */
+	void setLanguage( const QString& aLang );
+	
+	/**
+	 * Method to set the frame rate
+	 * @param aFr The new frame rate
+	 */
+	void setFrameRate( const double aFr );
+	
+	/**
+	 * Method to set the duration
+	 * @param aDuration The new duration
+	 */
+	void setDuration( const QTime& aDuration );
+	
+	/**
+	 * Method to set the release year
+	 * @param aDateTime The new release year
+	 */
+	void setReleaseYear( const QDateTime &aDateTime );
+	
+private:
+	QString m_language;		// language
+	double m_frameRate;		// frame rate
+	QTime m_duration;		// duration
+	QDateTime m_releaseYr;	// release year
+	};
+
+#endif /* SMFSUBTITLESEARCHFILTER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smftrackinfo.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,160 @@
+/**
+ * @file	smftrackinfo.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The track info class represents information about a music track
+ */
+
+#ifndef SMFTRACKINFO_H_
+#define SMFTRACKINFO_H_
+
+#include <QTime>
+#include <qdatastream.h>
+#include <smfmusicrating.h>
+#include "SmfClientGlobal.h"
+/**
+ * Music track info as track id,title, album, artist, genre,
+ * tag, director,release year, rating, comment info 
+ */
+class SMFCLIENT_EXPORT SmfTrackInfo : public QObject
+	{
+	Q_OBJECT
+public:
+	 /**
+	  * Constructs track info 
+	  */
+	SmfTrackInfo(QObject* parent=0);
+	/**
+	 * Gets track id
+	 */
+	void getId(QString& id);
+	
+	/**
+	 * Gets title of the track
+	 */
+	void getTitle(QString& title);
+	
+	/**
+	 * Gets album name
+	 */
+	void getAlbum(QString& album);
+	
+	/**
+	 * Gets track artist
+	 */
+	void getArtist(QString& artist);
+	
+	/**
+	 * Gets track genre
+	 */
+	void getGenre(QString& genre);
+	
+	/**
+	 * Gets track tag
+	 */
+	void getTag(QString& tag);
+	
+	/**
+	 * Gets director name
+	 */
+	void getDirector(QString& director);
+	
+	/**
+	 * Gets release year
+	 */
+	void getYear(QString& year);
+	
+	/**
+	 * Gets track rating 
+	 */
+	void getRating(SmfMusicRating& rating);
+	
+	/**
+	 * Gets comments
+	 */
+	void getComment(QStringList& comment);
+	
+	
+	/**
+	 * Sets id
+	 */
+	void setId(QString& id);
+	
+	/**
+	 * Sets title
+	 */
+	void setTitle(QString& title);
+	
+	/**
+	 * Sets album name
+	 */
+	void setAlbum(QString& album);
+	
+	/**
+	 * Sets artist name
+	 */
+	void setArtist(QString& artist);
+	
+	/**
+	 * Sets genre
+	 */
+	void setGenre(QString& genre);
+	
+	/**
+	 * Sets tag
+	 */
+	void setTag(QString& tag);
+	
+	/**
+	 * Sets director name
+	 */
+	void setDirector(QString& director);
+	
+	/**
+	 * Sets release year
+	 */
+	void setYear(QString& year);
+	
+	/**
+	 * Sets rating
+	 */
+	void setRating(SmfMusicRating& rating);
+	
+	/**
+	 * Sets comment
+	 */
+	void setComment(QStringList& comment);
+
+private:
+	QString m_id;
+	QString m_title;
+	QString m_albumTitle;
+	QString m_artistName;
+	QString m_genre;
+	QString m_tag;
+	QString m_director;
+	QString m_year;
+	SmfMusicRating m_rating;
+	QString m_comment;
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfTrackInfo&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfTrackInfo&);
+#endif /* SMFTRACKINFO_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfmusic/smfvenue.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,129 @@
+/**
+ * @file	smfvenue.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The venue class represents a venue and its related information
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+
+#ifndef SMFVENUE_H_
+#define SMFVENUE_H_
+
+#include <QUrl>
+#include <qgeopositioninfo.h> // Qt mobility class
+#include <qdatastream.h>
+#include "SmfClientGlobal.h"
+
+/**
+ * Popular venues.
+ * Consists of venue name, city, street, pin, country,url and geo info.
+ */
+class SMFCLIENT_EXPORT SmfVenue : QObject
+	{
+	Q_OBJECT
+	
+public:
+	
+	/**
+	 * Gets the venue name
+	 */
+	QString getName();
+	
+	/**
+	 * Sets the venue name
+	 */
+	void setName(QString& name);
+	
+	/**
+	 * Gets the city name
+	 */
+	QString getCity();
+	
+	/**
+	 * Sets the city name
+	 */
+	void setCity(QString& name);
+	
+	/**
+	 * Gets the Street name
+	 */
+	QString getStreet();
+	
+	/**
+	 * Sets the Street name
+	 */
+	void setStreet(QString& name);
+	
+	/**
+	 * Gets the Pin
+	 */
+	QString getPin();
+	
+	/**
+	 * Sets the Pin
+	 */
+	void setPin(QString& name);
+	
+	/**
+	 * Gets the Country name
+	 */
+	QString getCountry();
+	
+	/**
+	 * Sets the Country name
+	 */
+	void setCountry(QString& name);
+	
+	/**
+	 * Gets the geo info
+	 */
+	QtMobility::QGeoPositionInfo getGeo();
+	
+	/**
+	 * Sets the geo info
+	 */
+	void setGeo(QtMobility::QGeoPositionInfo& geo);
+	
+	/**
+	 * Gets the url
+	 */
+	QUrl getUrl();
+	
+	/**
+	 * Sets the url
+	 */
+	void setUrl(QUrl& url);
+
+	
+private:
+	QString m_name;
+	QString m_city;
+	QString m_street;
+	QString m_pin;
+	QString m_country;
+	QtMobility::QGeoPositionInfo m_geo;
+	QUrl m_url;
+	};
+
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfVenue&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfVenue&);
+#endif /* SMFVENUE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfpictures/smfcomment.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,88 @@
+/**
+ * @file	smfcomment.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The comment class represents a comment on a picture or a music track
+ */
+
+#ifndef SMFCOMMENT_H_
+#define SMFCOMMENT_H_
+
+#include <QDateTime>
+#include <qdatastream.h>
+#include "SmfClientGlobal.h"
+/**
+ * The comment class represents a comment on a picture or a music track
+ */
+class SMFCLIENT_EXPORT SmfComment : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object 
+	 */
+	SmfComment( QObject *aParent = 0 );
+	/**
+	 * Destructor
+	 */
+	~SmfComment( );
+	
+
+	/**
+	 * Method to get the comment text
+	 * @param aText The comment text
+	 */
+	void getText( QString &aText );
+	
+	/**
+	 * Method to get the comment time stamp
+	 * @param aTimeStamp The comment time stamp value
+	 */
+	void getTimeStamp( QDateTime &aTimeStamp );
+	
+	/**
+	 * Method to get the id of the comment
+	 * @param aId The ID value 
+	 */
+	void getId( QString &aId );
+	
+	/**
+	 * Method to set the comment text
+	 * @param aText The comment text to be set
+	 */
+	void setText( const QString &aText );
+	
+	/**
+	 * Method to set the comment time stamp
+	 * @param aTimeStamp The comment time stamp value to be set
+	 */
+	void setTimeStamp( const QDateTime &aTimeStamp );
+	
+private:
+	QString m_text;			// comment text
+	QDateTime m_timeStamp;	// comment time stamp
+	QString m_commetnId;
+	
+	};
+/**
+ * Externalization
+ */
+QDataStream &operator<<(QDataStream &, const SmfComment &);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfComment &);
+#endif /* SMFCOMMENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/common/smfpictures/smfpicture.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,192 @@
+/**
+ * @file	smfpicture.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The picture class represents an instance of a picture
+ */
+
+#ifndef SMFPICTURE_H_
+#define SMFPICTURE_H_
+
+#include <QDateTime>
+#include <QStringList>
+#include <QUrl>
+#include <qdatastream.h>
+#include "SmfClientGlobal.h"
+/**
+ * SmfPictureVisibility enumeration
+ */
+enum SmfPictureVisibility
+	{
+	SMFVisibilityFriend,
+	SMFVisibilityPersonal,
+	SMFVisibilityFamily,
+	SMFVisibilityGroup,
+	SMFVisibilityPublic
+	};
+/**
+ * The picture class represents an instance of a picture
+ */
+class SMFCLIENT_EXPORT SmfPicture : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPicture( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPicture( );
+	
+	
+	/**
+	 * Method to get the id of the picture
+	 * @param aId The ID value 
+	 */
+	void getId( QString &aId );
+	
+	/**
+	 * Method to get a picture owner
+	 * @param aOwner The owner of the picture
+	 */
+	void getOwner( QString &aOwner );
+	
+	/**
+	 * Method to get a picture title
+	 * @param aTitle The title of the picture
+	 */
+	void getTitle( QString &aTitle );
+	
+	/**
+	 * Method to get a picture description
+	 * @param aDescription The description of the picture
+	 */
+	void getDescription( QString &aDescription );
+	
+	/**
+	 * Method to get a visibility of a picture for public
+	 * @param aVisibility The visibility mode of 
+	 * this picture for others
+	 */
+	void getVisibility( SmfPictureVisibility &aVisibility );
+	
+	/**
+	 * Method to get the date of posting the picture
+	 * @param aPostedOn The posted date of the picture
+	 */
+	void getPostedDate( QDateTime &aPostedOn );
+	
+	/**
+	 * Method to get the comments for the picture
+	 * @param aComments The comments for the picture
+	 */
+	void getComments( QStringList &aComments );
+	
+	/**
+	 * Method to get the tags for the picture
+	 * @param aTags The tags for the picture
+	 */
+	void getTags( QStringList &aTags );
+	
+	/**
+	 * Method to get the url of the picture
+	 * @param aUrl The url of the picture
+	 */
+	void getUrl( QUrl &aUrl );
+	
+	/**
+	 * Method to get the picture data as a byte array
+	 * @param aData The picture as a byte array
+	 */
+	void getPicture( QByteArray &aData );
+		
+	/**
+	 * Method to set a picture owner
+	 * @param aOwner The owner of the picture
+	 */
+	void setOwner( const QString &aOwner );
+	
+	/**
+	 * Method to set a picture title
+	 * @param aTitle The title of the picture
+	 */
+	void setTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set a picture description
+	 * @param aDescription The description of the picture
+	 */
+	void setDescription( const QString &aDescription );
+	
+	/**
+	 * Method to set a visibility of a picture for public
+	 * @param aVisibility aVisibility The visibility mode of 
+	 * this picture for others
+	 */
+	void setVisibility( const SmfPictureVisibility &aVisibility );
+	
+	/**
+	 * Method to set the date of posting the picture
+	 * @param aPostedOn The posted date of the picture
+	 */
+	void setPostedDate( const QDateTime &aPostedOn );
+	
+	/**
+	 * Method to set the comments for the picture
+	 * @param aComment The comment for the picture
+	 */
+	void setComment( const QString &aComment );
+	
+	/**
+	 * Method to set the tags for the picture
+	 * @param aTag The tag for the picture
+	 */
+	void setTag( const QString &aTag );
+	
+	/**
+	 * Method to set the picture data as a byte array
+	 * @param aData The picture as a byte array
+	 */
+	void setPicture( const QByteArray &aData );
+	
+private:
+	QString m_photoid;		// unique ID of the picture, service provider specific
+	QString m_owner;	// owner of the picture
+	QString m_title;	// picture title
+	QString m_descrition;// description
+	bool m_ispublic;// visibility for public, Set to 0 for no, 1 for yes.
+	bool m_isfriend;// visilibility for friends Set to 0 for no, 1 for yes.
+	bool m_isfamily;// visilibility for family Set to 0 for no, 1 for yes.
+	QDateTime m_postedon;// date posted
+	QStringList m_comments;// comments
+	QStringList m_tags;	// tags
+	QUrl m_url;			// url
+	QByteArray* m_picture;	// picture data as bytearray
+	QString m_caption;	// caption
+	
+	};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfPicture&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfPicture&);
+#endif /* SMFPICTURE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfclient/smfcontactfetcher.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Interface spefication for list of contacts from a site
+*
+*/
+
+#ifndef SMFCONTACTHETCHER_H
+#define SMFCONTACTHETCHER_H
+
+#include <QObject>
+#include "smfprovider.h"
+#include "smfcontact.h"
+
+class SmfProvider; //base-class for service provider
+class SmfContact; //class for Contact in a social network
+class SmfGroup; //class for a group in social network
+class SmfContactList;
+
+//List of SmfGroup
+typedef QList<SmfGroup> SmfGroupList;
+/**
+ * Interface to search for contacts/connections from a service provider. This class
+ * provides basic functionality to allow applications to obtain list of
+ * contacts or friends in a social networking service.
+ * Note that to get the base provider info like service name, icon, description etc
+ * use getProvider().
+ * See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ * Interface name:- org.symbian.smf.client.contact.fetcher
+ */
+class SMFCLIENT_EXPORT SmfContactFetcher : public QObject
+{
+  Q_OBJECT
+
+public:
+
+  /**
+   * Constructs the SmfContactFetcher.
+   * @param parent base provider info
+   * @param contact Used for searching friends of the given contact
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind 
+   */
+  SmfContactFetcher(SmfProvider* baseProvider = 0, SmfContact* contact = 0);
+  ~SmfContactFetcher();
+
+public:
+  /**
+   * Get the friend listing asynchronously. The friendsListAvailable() signal
+   * is emitted with SmfContactList once data is arrived. 
+   */
+  virtual void friends() = 0; // list of contact objects
+  
+  /**
+   * Get the list of followers asynchronously. The followersListAvailable() signal
+   * is emitted with SmfContactList once data is arrived. 
+   */
+  virtual void followers() = 0; // list of contact objects
+  
+  /**
+   * Searches for a contact The searchContactFinished() signal
+   * is emitted with SmfContactList once data is arrived.
+   */
+  virtual void search(SmfContact* contact) = 0; // list of contact objects
+  
+  /**
+   * Get the list of groups. The groupListAvailable() signal
+   * is emitted with SmfGroupList once data is arrived. 
+   */
+  virtual void groups() = 0; // list of group objects
+  
+  /**
+   * Searches for Smf Contacts in an Smf group
+   * @param  group The group to be searcged in
+   * The nextDataPageAvailable() signal
+   * of SmfProvider is emitted with SmfContactList once data is arrived.
+   */
+  virtual void searchInGroup(SmfGroup group) = 0; // list of contact objects
+
+ 
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+
+public slots:
+
+Q_SIGNALS:
+
+	/**
+	 * This signal is emitted when a request to get friends is completed.
+	 * Note if number of friends is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 *  @param list list of friends
+	 *  @param error error string
+	 *  @param pageNumber Page number
+	 *  @see friends()
+	 */
+	void friendsListAvailable(SmfContactList* list, QString error, int pageNumber=0); 
+
+	/**
+	 * This signal is emitted when a request to get followers is completed
+	 *  Note if number of followers is large, then it can download the list page by page
+	 *  In that case this signal is emitted multiple times.
+	 *  @param list list of followers
+	 *  @param error error string
+	 *  @param pageNumber Page number
+	 *  @see followers()
+	 */
+	void followersListAvailable(SmfContactList* list, QString error, int pageNumber=0); 
+	
+	/**
+	 * This signal is emitted when a request to get groups is completed
+	 * Note if number of groups is large, then it can download the list page by page
+	 *  In that case this signal is emitted multiple times.
+	 *  @param list list of groups
+	 *  @param error error string
+	 *  @param pageNumber Page number
+	 *  @see groups()
+	 */
+	void groupListAvailable(SmfGroupList* list, QString error, int pageNumber=0);
+	
+	/**
+	 * Emitted when search for a contact is finished.
+	 * Note if number of contacts in the search is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list List of filtered contacts
+	 * @param pageNumber Page number
+	 * @see search()
+	 */
+	void searchContactFinished(SmfContactList* list,QString error, int pageNumber=0);
+	
+	/**
+	 * Emitted when search for a contact in a group is finished
+	 * Note if number of contacts in the search is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list list of filtered contacts
+	 * @param pageNumber Page number
+	 * @see searchInGroup()
+	 */
+	void searchInGroupFinished(SmfContactList* list,QString error, int pageNumber=0);
+
+private:
+  SmfProvider* m_baseProvider;
+};
+
+SMF_GETSERVICES(SmfContactFetcher, "org.symbian.smf.client.contact.fetcher\0.2")
+#endif // SMFCONTACTHETCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfclient/smfgallery.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Interface spefication for a remote picture gallery
+*
+*/
+
+#ifndef SMFGALLERY_H
+#define SMFGALLERY_H
+
+
+#include "smfprovider.h"
+#include "../common/SmfClientGlobal.h"
+class SmfProvider;
+class SmfPicture;
+class SmfGalleryModel;
+class SmfComment; //user id, string, and url
+
+
+#include <QObject>
+#include <QDateTime>
+#include <QStringList>
+//List of SmfPicture
+typedef QList<SmfPicture> SmfPictureList;
+/**
+ * Interface to a remote gallery service. This class
+ * provides some basic gallery functionality to allow applications
+ * to interact with a picture gallery in a social network.
+ *
+ * Note that branding information for the particular service implementation
+ * is available from getProvider() API. See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon()
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ * Interface name for SmfGallery org.symbian.smf.client.gallery
+ */
+class SMFCLIENT_EXPORT SmfGallery : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfGallery.
+   * @param baseProvider The base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   be generated by SMF factory of some kind
+   */
+
+  SmfGallery(SmfProvider* baseprovider = 0);
+  ~SmfGallery();
+
+public:
+  /**
+   * Get the picture listing asynchronously.
+   * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
+   */
+  virtual void pictures() = 0; 
+  
+  /**
+   * Returns model
+   */
+  virtual SmfGalleryModel model() = 0; // maybe we can make a QItemModel-derived model?
+  
+  /**
+   * Returns a user title/caption for the picture
+   */
+  virtual QString description() = 0; // A user title or caption, maybe?
+  
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+public slots:
+	/**
+	 * Upload an image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param image the image to be uploaded
+	 */
+  virtual void upload(SmfPicture* image) = 0;
+  
+	/**
+	 * Upload an list image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param images the list image to be uploaded
+	 */
+  virtual void upload(SmfPictureList* images) = 0;
+  
+  /**
+   * Posts a comment for an image. uploadFinished() signal is emitted
+   * with success of the post once comment is posted.
+   * @param image Image to comment on
+   * @param comment Comment to post
+   */
+  virtual void postComment(SmfPicture image, SmfComment comment) = 0;
+
+signals:
+	/*
+	 * Notification on arrival of list of SmfPicture as a result of request.
+	 * Note if number of friends is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 * through pictures().
+	 * @param pics Picture list
+	 * @param error Error string
+	 * @param pageNumber Page number
+	 */
+	void picturesAvailable(SmfPictureList* pics, QString error, int pageNumber=0);
+  
+  /**
+   * Notification of the success of the uploading of image/comment
+   * @param success The success of the post
+   */
+  void uploadFinished(bool success);
+private:
+  SmfProvider* m_baseProvider;
+};
+
+SMF_GETSERVICES(SmfGallery, "org.symbian.smf.client.gallery\0.2")
+
+#endif // SMFGALLERY_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfclient/smfmusic.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,504 @@
+/*
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+* 
+* Description:
+* Interface spefication for music related services
+*
+*/
+
+#ifndef SMFMUSIC_H
+#define SMMUSIC_H
+
+#include <QObject>
+
+#include <qmobilityglobal.h>
+#include <qgeopositioninfo.h>
+
+#include "smfprovider.h"
+#include "smfcontact.h"
+
+
+class SmfProvider; //basic Smf service Provider info
+class SmfContact; // Smf contact
+class SmfMusicRating;//rating value from 0..31 - services would map accordingly
+class SmfMusicProfile; //user profile containing music usage and interest info, extends SmfContact
+class SmfTrackInfo; //id, title, album, artist, genre, tag, director,release year, rating, comment info
+class SmfMusicFingerPrint; //generation is not in scope of smf
+class SmfVenue;
+class SmfMusicModel;
+class SmfEvents;
+class SmfPlaylist;
+class SmfLyricsService;
+class SmfLyrics;
+class SmfSubtitle;
+class SmfSubtitleSearchFilter;
+
+typedef QList<SmfMusicProfile> SmfMusicProfileList;
+typedef QList<SmfTrackInfo> SmfTrackInfoList;
+typedef QList<SmfEvents> SmfEventsList;
+typedef QList<SmfProvider> SmfProviderList;
+typedef QList<SmfPlaylist> SmfPlaylistList;
+typedef QList<SmfVenue> SmfVenueList;
+typedef QList<SmfLyrics> SmfLyricsList;
+typedef QList<SmfSubtitle> SmfSubtitleList;
+/**
+  * Basic music service ("org.symbian.smf.client.music.service")
+  */
+class SMFCLIENT_EXPORT SmfMusicService : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfMusicService.
+   * @param baseProvider The base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   *  be generated by SMF factory of some kind
+   */
+   SmfMusicService(SmfProvider* baseProvider = 0);
+  ~SmfMusicService();
+
+public:
+  
+  /**
+   * Gets self profile information asynchronously.
+   * userInfoAvailable() signal is emitted with SmfMusicProfile when the info is arrived
+   */
+  virtual void userinfo() = 0; 
+  
+  /**
+   * Asynchronously searches information about other service users for a particular venue
+   * serachInfoAvailable() signal is emitted with SmfMusicProfileList when the info is arrived
+   */
+  virtual void searchUser(SmfVenue venue) = 0; 
+  
+  /**
+   * Returns the model
+   */
+  virtual SmfMusicModel model() = 0; // maybe we can make a QItemModel-derived model?
+
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+signals:
+	/**
+	 * Notification on arrival of the self profile as result of userinfo().
+	 * @param profile The self profile
+	 */
+	void userInfoAvailable(SmfMusicProfile* profile, QString error);
+private:
+  SmfProvider* m_baseProvider;
+};
+SMF_GETSERVICES(SmfMusicService, "org.symbian.smf.client.music.service\0.2")
+
+
+/**
+* Provides service ("org.symbian.smf.client.music.search") for music search
+*/
+class SMFCLIENT_EXPORT SmfMusicSearch : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfMusicSearch with base provider as arguement.
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+
+  SmfMusicSearch(SmfProvider* baseProvider = 0);
+  ~SmfMusicSearch();
+
+public:
+  // Get the track listing - might be made asynchrnous later
+  
+  /**
+   * Searches for music recommendations similar to a particulartrack asynchronously.
+   * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
+   * once its arrived.
+   * @param track The track for which similar recommendations need to be fetched.
+   */
+  virtual void recommendations(SmfTrackInfo track) = 0; // basic list of track objects
+  
+  /**
+   * Searches for tracks similar to a given track asynchronously.
+   * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
+   * once its arrived.
+   * @param track The search criteria, similar tracks are searched
+   */
+  virtual void tracks(SmfTrackInfo track) = 0; // basic list of track objects
+  
+  /**
+   * Searches for a track having similar finger print asynchronously.
+   * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
+   * once its arrived.
+   * @param signature The search criteria,signature to be searched for
+   */
+  virtual void trackInfo(SmfMusicFingerPrint signature) = 0; // search by fingerprint object
+  
+  /**
+   * Search information about where to buy this song from asynchronously.
+   * The signal storeSearchAvailable() is emitted with SmfProviderList once its arrived.
+   * @param track The search criteria for stores
+   */
+  virtual void stores(SmfTrackInfo track) = 0; 
+  
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+public slots:
+
+	/**
+	 * Posts currently playing track.
+	 * Success can be checked by checking the signal postFinished()
+	 * @param track Track to post
+	 */
+  virtual void postCurrentPlaying(SmfTrackInfo track) = 0;
+  //virtual int postRating(SmfTrackInfo track, SmfMusicRating rate) = 0;
+  //virtual int postComments(SmfTrackInfo track, SmfComment comment) = 0;
+
+signals:
+	/**
+	 * Emitted when the search result for a track is available.
+	 * Note if number of tacks in the search is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 * @param result The search result
+	 */
+	void trackSearchAvailable(SmfTrackInfoList* result, QString error, int pageNumber=0);
+	
+	/**
+	 *  Emitted when the search result for a store is available.
+	 *  Note if number of tacks in the search is large, then it can download the list page by page.
+	 *  In that case this signal is emitted multiple times.
+	 *  @param result The search result
+	 */
+	void storeSearchAvailable(SmfProviderList* result, QString error, int pageNumber=0);
+private:
+  SmfProvider* m_baseProvider;
+};
+SMF_GETSERVICES(SmfMusicSearch, "org.symbian.smf.client.music.search\0.2")
+
+
+/**
+ * Remote playlist
+ */
+class SMFCLIENT_EXPORT SmfPlaylist : public QObject
+	{
+	Q_OBJECT
+	
+public:
+	SmfPlaylist();
+	~SmfPlaylist();
+	
+	/**
+	 * Gets tracks in the playlist
+	 */
+	SmfTrackInfoList* getTrackList();
+	
+	/**
+	 * Gets playlist title
+	 */
+	QString getPlayListTitle();
+	
+	/**
+	 * Gets the creation date
+	 */
+	QDateTime getCreationDate();
+	
+	/**
+	 * Sets tracks in the playlist
+	 */
+	void setTrackList(SmfTrackInfoList* trackList);
+	
+	/**
+	 * Sets playlist title
+	 */
+	void setPlayListTitle(QString title);
+	
+	/**
+	 * Sets creation date
+	 */
+	void setCreationDate(QDateTime time);
+	
+private:
+	SmfTrackInfoList* m_trackList;
+	QString m_title;
+	QDateTime m_creationDate;
+	};
+
+
+/**
+ * provides service ("org.symbian.smf.client.music.playlist")
+ *
+ * Interface to a remote playlist service. This class
+ * provides some basic functionality to allow applications
+ * to interact with playlists in some music related service provider (e.g. last.fm).
+ *
+ * Note that branding information for the particular service implementation
+ * is available from getProvider() API. See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon()
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ *
+ */
+class SMFCLIENT_EXPORT SmfPlaylistService : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfPlaylistService with base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+  SmfPlaylistService(SmfProvider* baseProvider = 0);
+  ~SmfPlaylistService();
+
+public:
+  
+  /**
+   * Gets the list playlists for the logged-in user asynchronously.
+   * The signal playlistsListAvailable() signal is emitted with 
+   * SmfPlaylistList once its arrived 
+   */
+  virtual void playlists() = 0; // basic list of playlist objects 
+  
+  /**
+   * Gets the list playlists for the given user asynchronously.
+   * The signal playlistsListAvailable() signal is emitted with 
+   * SmfPlaylistList once its arrived.
+   * @param user User for which to get the playlists
+   */
+  virtual void playlistsOf(SmfMusicProfile* user) = 0; 
+
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+public slots:
+
+	/**
+	 * Upload currently playing track to a playlist. Signal
+	 * playlistUpdated() can be checked for success value
+	 * @param plst The playlist to be added in
+	 * @param tracks The list of tracks to uploaded
+	 */
+  virtual int addToPlaylist(SmfPlaylist plst, SmfTrackInfoList* tracks) = 0;
+  
+	/**
+	 * Upload currently playing playlist . Signal
+	 * playlistUpdated() can be checked for success value
+	 * @param plst The playlist to be uploaded
+	 */
+  virtual int postCurrentPlayingPlaylist(SmfPlaylist plst) = 0;
+
+
+signals:
+	/**
+	 * Notification of availability of list of playlists requested.
+	 * Note if number of list is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 */
+	void playlistsListAvailable(SmfPlaylistList*, QString error, int pageNumber=0);
+	/**
+	 * Signals remote updation of playlist with success value
+	 */
+    int playlistUpdated(bool success) ;
+private:
+  SmfProvider* m_baseProvider;
+};
+SMF_GETSERVICES(SmfPlaylistService, "org.symbian.smf.client.music.playlist\0.2")
+
+
+/**
+* provides service ("org.symbian.smf.client.music.events")
+*/
+class SMFCLIENT_EXPORT SmfMusicEvents : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfMusicEvents with base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   *  be generated by SMF factory of some kind
+   */
+  SmfMusicEvents(SmfProvider* baseProvider = 0);
+  ~SmfMusicEvents();
+
+public:
+  
+  /**
+   * Gets list of events in a particular location asynchronously.
+   * eventsAvailable() signal is emitted with SmfEventsList once its arrived
+   */
+  virtual void events(QtMobility::QContactGeolocation location) = 0;
+  
+  /**
+   * Gets list of venues of a particular location asynchronously.
+   * venuesAvailable() signal is emitted with SmfVenueList once its arrived.
+   */
+  virtual void venues(QtMobility::QContactGeolocation location) = 0; // basic list of venue objects
+  
+  /**
+   * Gets list of events in a particular venue asynchronously.
+   * eventsAvailable() signal is emitted with SmfEventsList once its arrived
+   */
+  virtual void events(SmfVenue venue) = 0; // basic list of events objects
+  
+
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+public slots:
+
+	/**
+	 * Updates events. Might not be supported by all service provider.
+	 * eventsUpdated() signal can be checked for success value.
+	 * @param SmfEventsList List of events to be posted
+	 */
+	 virtual void postEvents(SmfEventsList events); 
+
+signals:
+	
+	/**
+	 * Notification of the success of request to post an event
+	 */
+	void eventsUpdated(bool success);
+	
+	/**
+	 * Notification on arrival of event lists
+	 * Note if number of list is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 */
+	void eventsAvailable(SmfEventsList* list, QString error, int pageNumber=0);
+	
+	/**
+	 *  Notification on arrival of venues lists
+	 * Note if number of list is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 */
+	void venuesAvailable(SmfVenueList* list, QString error, int pageNumber=0);
+private:
+  SmfProvider* m_baseProvider;
+};
+SMF_GETSERVICES(SmfMusicEvents, "org.symbian.smf.client.music.events\0.2")
+
+
+/**
+* provides service ("org.symbian.smf.client.music.lyrics")
+*/
+class SMFCLIENT_EXPORT SmfLyricsService : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfLyricsService with base provider info.
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+
+  SmfLyricsService(SmfProvider* baseProvider = 0);
+  ~SmfLyricsService();
+
+public:
+  
+  /**
+   * Get the lyrics lists asynchrnously, it fetches texts without time info.
+   * lyricsAvailable() notification comes SmfLyricsList with when the data is available
+   * @param track Track for which lyrics needs to be fetched.
+   */
+  virtual void lyrics(SmfTrackInfo track) = 0; 
+  
+  /**
+   * Get the lyrics lists asynchrnously, it fetches texts with time info.
+   * Subtitle search filter can be applied
+   * subtitleAvailable() notification comes SmfSubtitleList with when the data is available
+   * @param track Track for which subtitle needs to be fetched.
+   * @param filter Subtitle search filter
+   */
+  virtual void subtitles(SmfTrackInfo track, SmfSubtitleSearchFilter filter) = 0; // texts with time information
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+public slots:
+
+
+signals:
+	
+	/**
+	 * Notification on arrival of lyrics
+	 * Note if the list is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 */
+	void lyricsAvailable(SmfLyricsList* list, QString error, int pageNumber=0);
+
+	/**
+	 * Notification on arrival of subtitle based on filter.
+	 * Note if the list is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 */
+	void subtitleAvailable(SmfSubtitleList* list, QString error, int pageNumber=0);
+private:
+  SmfProvider* m_baseProvider;
+};
+SMF_GETSERVICES(SmfLyricsService, "org.symbian.smf.client.music.lyrics\0.2")
+
+#endif // SMFMUSIC_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfclient/smfpostprovider.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Interface spefication for posting updates to a social site
+*
+*/
+#ifndef SMFPOSTPROVIDER_H
+#define SMFPOSTPROVIDER_H
+
+#include <QObject>
+#include <qmobilityglobal.h>
+#include <qgeopositioninfo.h>
+
+#include "smfprovider.h"
+#include "smfcontact.h"
+
+class SmfProvider; //base-class for service provider
+class SmfContact; //class for Contact in a social network
+
+
+
+/**
+ * Location info
+ */
+typedef QtMobility::QGeoPositionInfo SmfLocationInfo ;
+class SmfPost; //class for information (text, image and url) contained in post in social network
+class SmfContactModel;
+class SmfStatusData;
+
+//Post lists
+typedef QList<SmfPost> SmfPostList;
+/**
+ * Interface to post scrap/tweet like info.
+ * Note that branding information for the particular service implementation
+ * is available from getProvider() API. See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ * Interface name for SmfPostProvider is org.symbian.smf.client.contact.posts
+ */
+class SMFCLIENT_EXPORT SmfPostProvider : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfPostProvider.
+   * @param baseProvider The base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+  SmfPostProvider(SmfProvider* baseProvider = 0);
+  ~SmfPostProvider();
+
+  /**
+   *  Presence info of the user
+   */
+enum SmfPresenceInfo
+	{
+	  ENotSupported,
+	  EOnline,
+	  EOffline,
+	  EBusy,
+	  EDoNotDisturb,
+	  EAppearOffline,
+	  EOther
+	};
+
+public:
+  /**
+   * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
+   * once the post lists are available
+   * @see postsAvailable()
+   */
+  virtual void getPosts(SmfStatusData statusData) = 0; 
+  
+  /**
+   * Gets the model
+   */
+  virtual SmfContactModel   model() = 0; 
+
+public slots:
+
+	/**
+	 * Updates a post, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData data to be posted
+	 * @param location location data
+	 */
+  virtual void updatePost(SmfPost& postData,SmfLocationInfo& location) = 0; // list of contact objects
+	/**
+	 * Updates a post, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData data to be posted
+	 * @param location location data
+	 */
+  virtual void updatePost(SmfPost& postData) = 0; // list of contact objects
+  
+  /**
+   * Updates a post to a particular Smf contact. the success of the post can be checked with signal
+   * updatePostFinished() signal.
+   * @param postData data to be posted
+   * @param contact contact to which the post is to be directed
+   * @param location location data
+   */
+  virtual void updatePostDirected(SmfPost& postData,SmfContact& contact,SmfLocationInfo location) = 0; // list of contact objects
+  
+  /**
+   * Posts appearance info of the user.
+   * @param appearence user appearance
+   * @see SmfPresenceInfo
+   */
+  virtual QList<SmfContact> postAppearence(SmfPresenceInfo appearence) = 0; // appear offline, busy, do-not-disturb
+  
+  //APIs to get/set base provider info (SmfProvider)
+  
+  /**
+   * Gets the base provider info
+   */
+  virtual SmfProvider* getProvider() = 0;
+  
+  /**
+   * Sets the base provider info
+   */
+  virtual void setProvider(SmfProvider* provider) = 0;
+
+  Q_SIGNALS:
+
+	/**
+	 * Emitted when a request to  getPosts() is finished
+	 * Note if number of posts is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list list of posts
+	 * @param error error string
+	 * @param pageNumber Page number
+	 */
+	void postsAvailable(SmfPostList* list, QString error, int pageNumber=0);
+	
+	/**
+	 * Emitted when update post is finished.
+	 * @param success the success of the update
+	 */
+	void updatePostFinished(bool success);
+
+private:
+  SmfProvider* m_baseProvider;
+};
+
+SMF_GETSERVICES(SmfPostProvider, "org.symbian.smf.client.contact.posts\0.2")
+#endif // SMFPOSTPROVIDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfclient/smfprovider.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,85 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Interface spefication for sfm service provider
+*
+*/
+
+#ifndef SMFPROVIDER_H
+#define SMFPROVIDER_H
+
+#include <QObject>
+#include <QImage>
+#include <QUrl>
+
+#include "../common/SmfClientGlobal.h"
+/**
+ * Interface for a base service provider. Other service provider classes contains 
+ * implementation of this base class so that each has access to service provider 
+ * information.
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ */
+class SMFCLIENT_EXPORT SmfProvider : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   *  Seeing as this is a plug-in implementation, these will realistically be generated by SMF factory of some kind
+   */
+   
+  SmfProvider(QObject* parent = 0);
+  ~SmfProvider();
+
+public:
+  /**
+   * Localizable name of the service 
+   * @return service name
+   */
+  virtual QString serviceName() = 0; 
+  
+  /**
+   * Logo of the service
+   * @return logo image of the service
+   */
+  virtual QImage serviceIcon() = 0; // 
+  
+  /**
+   * Readable service description
+   * @return service description
+   */
+  virtual QString description() = 0; // readable service description
+  
+  /*
+   * Website of the service
+   */
+  virtual QUrl serviceUrl() = 0; //
+  
+  /**
+   * URL of the application providing this service
+   */
+  virtual QUrl applicationUrl() = 0; //
+  
+};
+/**
+* Externalization
+*/
+QDataStream &operator<<(QDataStream &, const SmfProvider&);
+/**
+ * Internalization
+ */
+QDataStream &operator>>(QDataStream &, SmfProvider&);
+SMF_GETSERVICES(SmfProvider, "org.symbian.smf.client.provider\0.2")
+#endif // SMFPROVIDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,150 @@
+/**
+ * @file	smfcontactfetcherplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for fetching contacts
+ */
+
+#ifndef SMFCONTACTFETCHERPLUGIN_H_
+#define SMFCONTACTFETCHERPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <smfcontact.h>
+#include <smfgroup.h>
+
+/**
+ * Interface specification for fetching contacts. This class provides 
+ * basic functionality to allow applications to obtain list of
+ * friends, followers, groups of a user in a social networking service.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfContactFetcherPlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfContactFetcherPlugin( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfContactFetcherPlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+  
+	/**
+	 * Method to get the list of friends
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aContact to search for friend of a friend, 
+	 * for self friend this parameter need not be included
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError friends( SmfPluginRequestData *aRequest,
+			const SmfContact aContact = 0,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to get the list of followers
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aContact to search for follower of a friend, for self 
+	 * followers this parameter need not be included
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError followers( SmfPluginRequestData *aRequest,
+			const SmfContact aContact = 0, 
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to search for a contact
+	 * @param aContact contact to be searched
+	 * @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
+	 */
+	virtual SmfPluginError search( const SmfContact &aContact,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10) = 0;
+	
+	/**
+	 * Method to get the list of groups
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aContact to search for groups of a friend, for self 
+	 * group this parameter need not be included
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError groups( SmfPluginRequestData *aRequest,
+			const SmfContact aContact = 0, 
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to search for a contact in a group
+	 * @param aGroup the group in which to search
+	 * @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
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError searchInGroup( const SmfGroup &aGroup,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was friends() or followers() or search() or 
+	 * searchInGroup(), aResult will be of type QList<SmfContact>
+	 * If last operation was groups(), aResult will be of type QList<SmfGroup>
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfContactFetcherPlugin, "org.symbian.smf.plugin.contact.fetcher/v1.0" );
+
+#endif /* SMFCONTACTFETCHERPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,145 @@
+/**
+ * @file	smfpostproviderplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for getting/posting updates to a social site
+ */
+
+#ifndef SMFPOSTPROVIDERPLUGIN_H_
+#define SMFPOSTPROVIDERPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <smfcontact.h>
+#include <smfpost.h>
+#include <smfstatusdata.h>
+
+
+/**
+ * SmfPresenceInfo.
+ * Indicates the presence information of user like Online, Offline, Busy, 
+ * Do no disturb, Appear Offline etc.
+ */
+enum SmfPresenceInfo
+	{
+	  ENotSupported,
+	  EOnline,
+	  EOffline,
+	  EBusy,
+	  EDoNotDisturb,
+	  EAppearOffline,
+	  EOther
+	};
+
+/**
+ * Interface to get/update the posts to a service provider. This class
+ * provides basic functionality to allow applications to obtain list of
+ * posts, updates posts or change the presence information to a social 
+ * networking service.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfPostProviderPlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPostProviderPlugin( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPostProviderPlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get the latest posts
+	 * @param aStatusData
+	 * @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
+	 */
+	virtual SmfPluginError getPosts( const SmfStatusData aStatusData,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+
+	/**
+	 * Method to update a post
+	 * @param aPostData The post data to be posted
+	 * @param aLocation The location
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError updatePost( const SmfPost aPostData, 
+			const QtMobility::QContactGeolocation aLocation,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to update a post to a particular contact
+	 * @param aPostData The post data to be posted
+	 * @param aContact The contact where the data has to be posted
+	 * @param aLocation The location
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError updatePostDirected( const SmfPost aPostData, 
+			const SmfContact aContact, 
+			const QtMobility::QContactGeolocation aLocation,
+			SmfPluginRequestData *aRequest ) = 0;
+	/**
+	 * Method to update the presence information of the user
+	 * @param aAppearence The appearence information
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postAppearence( const SmfPresenceInfo aAppearence,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was getPosts(), aResult will be of type QList<SmfPost>
+	 * If last operation was updatePost() or updatePostDirected() or 
+	 * postAppearence, aResult will be of type bool
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfPostProviderPlugin, "org.symbian.smf.plugin.contact.posts/v1.0" );
+
+#endif /* SMFPOSTPROVIDERPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,101 @@
+/**
+ * @file	smflyricsserviceplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for music track lyrics
+ */
+
+#ifndef SMFLYRICSSERVICEPLUGIN_H_
+#define SMFLYRICSSERVICEPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <smftrackinfo.h>
+#include <QString>
+#include <smfsubtitle.h>
+#include <smflyrics.h>
+#include <smfsubtitlesearchfilter.h>
+
+/**
+ * Interface specification for music track lyrics
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfLyricsServicePlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfLyricsServicePlugin( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLyricsServicePlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get the lyrics
+	 * @param aTrack The track whose lyrics need to be fetched
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError lyrics( const SmfTrackInfo aTrack,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to get the subtitle
+	 * @param aTrack The track whose subtitle need to be fetched
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aFilter The subtitle search filter if any
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError subtitles( const SmfTrackInfo aTrack,
+			SmfPluginRequestData *aRequest,
+			const SmfSubtitleSearchFilter aFilter = 0 ) = 0;
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was lyrics(), aResult will be of type SmfLyrics
+	 * If last operation was subtitles(), aResult will be of type SmfSubtitle
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfLyricsServicePlugin, "org.symbian.smf.plugin.music.lyrics/v1.0" );
+
+#endif /* SMFLYRICSSERVICEPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,136 @@
+/**
+ * @file	smfmusiceventsplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for music events
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+
+#ifndef SMFMUSICEVENTSPLUGIN_H_
+#define SMFMUSICEVENTSPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <qtcontacts.h>
+#include <smfevent.h>
+#include <smfvenue.h>
+
+using namespace QtMobility;
+
+/**
+ * Interface specification for music events
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+class SmfMusicEventsPlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfMusicEventsPlugin( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicEventsPlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get the events based on location
+	 * @param aLocation Location of the event
+	 * @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
+	 */
+	virtual SmfPluginError events( const QtMobility::QContactGeolocation aLocation,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to get the venues based on location
+	 * @param aLocation Location of the venue
+	 * @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
+	 */
+	virtual SmfPluginError venues( const QtMobility::QContactGeolocation aLocation,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to get the events based on venues
+	 * @param aVenue Venue of the event
+	 * @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
+	 */
+	virtual SmfPluginError events( const SmfVenue aVenue,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to post events
+	 * of posting the events is available
+	 * @param aEventList The list of events to be posted
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postEvents( const QList<SmfEvent> aEventList,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was events(), aResult will be of type QList<SmfEvent>
+	 * If last operation was venues(), aResult will be of type QList<SmfVenue>
+	 * If last operation was postEvents(), aResult will be of type bool
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfMusicEventsPlugin, "org.symbian.smf.plugin.music.events/v1.0" );
+
+#endif /* SMFMUSICEVENTSPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,147 @@
+/**
+ * @file	smfmusicsearchplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for music search services
+ */
+
+#ifndef SMFMUSICSEARCHPLUGIN_H_
+#define SMFMUSICSEARCHPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <QList>
+#include <smfmusicfingerprint.h>
+#include <smftrackinfo.h>
+
+/**
+ * Interface specification for music search services. This class
+ * provides basic functionality to allow applications to search for 
+ * tracks, get recommented tracks etc
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfMusicSearchPlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfMusicSearchPlugin( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicSearchPlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get recommended tracks
+	 * @param aTrack The track for which similar recommendations 
+	 * need to be fetched.
+	 * @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
+	 */
+	virtual SmfPluginError recommendations( const SmfTrackInfo aTrack,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to get similar tracks
+	 * @param aTrack The track for which similar tracks 
+	 * need to be fetched.
+	 * @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
+	 */
+	virtual SmfPluginError tracks( const SmfTrackInfo aTrack, 
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10) = 0;
+	
+	/**
+	 * Method to get tracks having a similar finger print
+	 * @param aSignature The finger print to be searched for need to be 
+	 * fetched.
+	 * @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
+	 */
+	virtual SmfPluginError trackInfo( const SmfMusicFingerPrint aSignature, 
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to search information about where to buy this song from
+	 * @param aTrack The track for which stores need to be searched
+	 * @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
+	 */
+	virtual SmfPluginError stores( const SmfTrackInfo aTrack, 
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10 ) = 0;
+	
+	/**
+	 * Method to post the currently playing track
+	 * @param aTrack The current playing track, that should be posted
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postCurrentPlaying( const SmfTrackInfo aTrack,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was recommendations()or tracks() or trackInfo(), 
+	 * aResult will be of type QList<SmfTrackInfo>
+	 * If last operation was postCurrentPlaying(), aResult will be of type bool
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfMusicSearchPlugin, "org.symbian.smf.plugin.music.search/v1.0" );
+
+#endif /* SMFMUSICSEARCHPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,103 @@
+/**
+ * @file	smfmusicserviceplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for music services
+ */
+
+#ifndef SMFMUSICSERVICEPLUGIN_H_
+#define SMFMUSICSERVICEPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <smfmusicprofile.h>
+#include <smfvenue.h>
+
+/**
+ * Interface specification for music services. This class provides basic 
+ * functionality to allow application to search for a user or check for
+ * user information etc.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfMusicServicePlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfMusicServicePlugin( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicServicePlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get self profile information
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError userInfo( SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to search information about other service users for a 
+	 * particular venue
+	 * @param aVenue The venue which is the search criteria
+	 * @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
+	 */
+	virtual SmfPluginError searchUser( const SmfVenue aVenue, 
+			SmfPluginRequestData *aRequest, 
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10) = 0;
+	
+
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was userInfo(), aResult will be of type SmfMusicProfile
+	 * If last operation was searchUser(), aResult will be of type 
+	 * QList<SmfMusicProfile>
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfMusicServicePlugin, "org.symbian.smf.plugin.music.service/v1.0" );
+
+#endif /* SMFMUSICSERVICEPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,144 @@
+/**
+ * @file	smfplaylistserviceplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for playlists service
+ */
+
+#ifndef SMFPLAYLISTSERVICEPLUGIN_H_
+#define SMFPLAYLISTSERVICEPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <smfplaylist.h>
+#include <smfmusicprofile.h>
+#include <smftrackinfo.h>
+
+/**
+ * Interface specification for playlists service. This class provides 
+ * basic functionality to allow applications to get playlists of a user, 
+ * add some track to an existing playlist, post the current playing 
+ * playlists etc.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfPlaylistServicePlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPlaylistServicePlugin( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlaylistServicePlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get the playlist
+	 * @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
+	 */
+	virtual SmfPluginError playlists( 
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10) = 0;
+	
+	/**
+	 * Method to get the playlist of a particular user
+	 * @param aUser The user whose playlists need to be fetched
+	 * @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
+	 */
+	virtual SmfPluginError playlistsOf( const SmfMusicProfile aUser,
+			SmfPluginRequestData *aRequest,
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10) = 0;
+	
+	/**
+	 * Method to add tracks to a playlist
+	 * @param aPlaylist The playlist where tracks should be added
+	 * @param aTracks The tracks to be added to the playlist
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError* addToPlaylist( const SmfPlaylist aPlaylist, 
+			const QList<SmfTrackInfo> aTracks,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to post the current playing playlist
+	 * @param aPlaylist The current playing playlist which should be posted
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError* postCurrentPlayingPlaylist( 
+			const SmfPlaylist aPlaylist,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was playlists() or playlistsOf(), aResult will be of 
+	 * type QList<SmfPlaylist>
+	 * If last operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
+	 * aResult will be of type bool
+	 * @return SmfPluginRetType
+	 */
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * If last operation was playlists() or playlistsOf(), aResult will be of 
+	 * type QList<SmfPlaylist>
+	 * If last operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
+	 * aResult will be of type bool
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfPlaylistServicePlugin, "org.symbian.smf.plugin.music.playlist/v1.0" );
+
+#endif /* SMFPLAYLISTSERVICEPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfpictures/smfgalleryplugin.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,151 @@
+/**
+ * @file	smfgalleryplugin.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * Interface specification for plugins that implement gallery related services
+ */
+
+#ifndef SMFGALLERYPLUGIN_H_
+#define SMFGALLERYPLUGIN_H_
+
+#include <smfproviderbase.h>
+#include <smfpicture.h>
+#include <smfcomment.h>
+
+/**
+ * Interface specification for plugins that implement gallery related services
+ * like getting pictures, their description, uploading, posting comments 
+ * on pictures etc
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ *
+ * A sample call flow between SmfPluginMgr and  SmfGalleryPlugin is shown here
+ * 
+ * @msc
+   hscale = "2";  
+  SmfServer,SmfTransportMgr,SmfPluginMgr,SmfGalleryPlugin;
+  ...;
+  SmfPluginMgr=>SmfTransportMgr [ label = "connect(SIGNAL(finished()), SLOT(replyFinished()))" ] ;
+  ...;
+  SmfServer=> SmfPluginMgr[ label = "loadAndCheckPlugin()" ] ;
+  SmfPluginMgr=>SmfPluginMgr [ label = "SmfGalleryPlugin smfglpl= load()" ] ;
+  SmfPluginMgr=>SmfGalleryPlugin [ label = "QNetworkRequest  req = smfglpl.pictures()" ] ;
+  SmfPluginMgr=>SmfTransportMgr [ label = "nwmgr.get( req )" ] ;
+  ...;
+  SmfTransportMgr=>SmfPluginMgr [ label = "replyFinished( reply )" ] ;
+  SmfPluginMgr=>SmfGalleryPlugin [ label = "status = responseAvailable( reply, &data )" ] ;
+  SmfPluginMgr=>SmfServer [ label = "if(status ==complete) dataStream <<  data;" ] ;
+  @endmsc
+ * 
+ */
+class SmfGalleryPlugin : public QObject
+	{
+	Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfGalleryPlugin( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfGalleryPlugin( );
+	
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get a list of pictures
+	 * @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
+	 */
+	virtual SmfPluginError pictures( SmfPluginRequestData *aRequest, 
+			const int aPageNum = 0, 
+			const int aItemsPerPage = 10) = 0;
+	
+	/**
+	 * Method to get a description
+	 * @param aImage The image abot which the description is required
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError description( const SmfPicture &aImage,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to upload a picture
+	 * @param aImage The image to be uploaded
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError upload( const SmfPicture &aImage,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to upload a list of pictures
+	 * @param aImages The list of images to be uploaded
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError upload( const QList<SmfPicture> &aImages,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to post comment on a picture
+	 * is available
+	 * @param aImage The image on which comment is to be posted
+	 * @param aComment The comment to be posted
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postComment( const SmfPicture &aImage, 
+			const SmfComment &aComment,
+			SmfPluginRequestData *aRequest ) = 0;
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QNetworkReply instance for the request
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData. 
+	 * 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 aIsLastPage [out] true if this the last page, else false
+	 * @return SmfPluginError 
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult aTransportResult, 
+			QNetworkReply *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType aRetType,
+			bool aIsLastPage) = 0;
+		
+	};
+
+Q_DECLARE_INTERFACE( SmfGalleryPlugin, "org.symbian.smf.plugin.gallery/v1.0" );
+
+#endif /* SMFGALLERYPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/clientapi/smf/inc/smfplugins/smfprovider/smfproviderbase.h	Thu Mar 25 14:44:08 2010 +0530
@@ -0,0 +1,286 @@
+/**
+ * @file	smfproviderbase.h
+ * @author  Nalina Hariharan, Sasken Communication Technologies Ltd - Initial contribution
+ * @version 1.0
+ *
+ * @section LICENSE
+ *
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
+ * All rights reserved.
+ * This component and the accompanying materials are made available 
+ * under the terms of the "{License}" 
+ * which accompanies  this distribution, and is available 
+ * at the URL "{LicenseUrl}".
+ * 
+ * @section DESCRIPTION
+ *
+ * The Provider Base class is the class that has to be contained as a member 
+ * in all Plug-in Interfaces. 
+ */
+
+#ifndef SMFPROVIDERBASE_H_
+#define SMFPROVIDERBASE_H_
+
+#include <QImage>
+#include <QUrl>
+#include <QBuffer>
+#include <QNetworkAccessManager>
+
+
+/**
+ * The enumeration used to track the plugin methods return type
+ */
+enum SmfPluginRetType
+	{
+	SmfSendRequestAgain = 0,
+	SmfRequestComplete
+	};
+
+/**
+ * The enumeration used to indicate result of transport to the plugins
+ */
+enum SmfTransportResult
+	{
+	SmfNoError = 0,
+	SmfNetworkTimeOut,
+	SmfIAPChanged,
+	SmfUnknownError
+	};
+
+/**
+ * The enumeration used to denote errors reported by plugin
+ * Smf can't continue without handling these errors
+ */
+enum SmfPluginError
+	{
+	SmfPluginErrNone = 0, 
+	SmfPluginErrTooManyRequest,
+	SmfPluginErrRequestQuotaExceeded,
+	SmfPluginErrInvalidRequest,
+	SmfPluginErrUserNotLoggedIn,
+	SmfPluginErrAuthenticationExpired,
+	SmfPluginErrPermissionDenied,
+	SmfPluginErrInvalidApplication,
+	SmfPluginErrServiceUnavailable,
+	SmfPluginErrServiceTemporaryUnavailable,
+	SmfPluginErrFormatNotSupported, 
+	SmfPluginErrDataSizeExceeded  
+	};
+
+
+/**
+ * The enumeration used to indicate the type of network operation done
+ */
+enum SmfRequestOperation
+	{
+	SmfContactGetFriends = 0,
+	SmfContactGetFollowers,
+	SmfContactSearch,
+	SmfContactGerGroups,
+	SmfContactSearchInGroup,
+	SmfContactGetPosts,
+	SmfContactUpdatePost,
+	SmfContactUpdatePostDirected,
+	SmfContactPostAppearence,
+	SmfMusicGetLyrics,
+	SmfMusicGetSubtitle,
+	SmfMusicGetEventsOnLoc,
+	SmfMusicGetVenueOnLoc,
+	SmfMusicGetEventsOnVenue,
+	SmfMusicPostEvents,
+	SmfMusicGetRecommendations,
+	SmfMusicGetTracks,
+	SmfMusicGetTrackInfo,
+	SmfMusicGetStores,
+	SmfMusicPostCurrentPlaying,
+	SmfMusicGetUserInfo,
+	SmfMusicSearchUser,
+	SmfMusicGetPlaylists,
+	SmfMusicGetPlaylistsOfUser,
+	SmfMusicAddToPlaylist,
+	SmfMusicPostCurrentPlayingPlaylist,
+	SmfPictureGetPictures,
+	SmfPictureDescription,
+	SmfPictureUpload,
+	SmfPictureMultiUpload,
+	SmfPicturePostComment
+	
+	};
+
+
+/**
+ * The structure used to track the data usage of each plugins
+ */
+struct SmfPluginDataUsage
+	{
+	/**
+	 * Application that called the plugin
+	 */
+	QString iAppName;
+	
+	/**
+	 * Interface implemented by the plugin
+	 */
+	QString iInterfaceName;
+	
+	/**
+	 * The service provider
+	 */
+	QString iServiceProviderName;
+	
+	/**
+	 * number of bytes sent for this plugin
+	 */
+	uint iBytesSent;
+	
+	/**
+	 * number of bytes received for this plugin
+	 */
+	uint iBytesReceived;
+	
+	};
+
+
+/**
+ * The structure used to hold the request created by the plugins
+ */
+struct SmfPluginRequestData
+	{
+	/**
+	 * Indicates the type of operation performed, like getting Friends 
+	 * list, upload image etc
+	 */
+	SmfRequestOperation iRequestType;
+	
+	/**
+	 * The QNetworkRequest that has to be filled up by the plugins
+	 */
+	QNetworkRequest *iNetworkRequest;
+	
+	/**
+	 * The data to be posted in case of HTTP POST operation
+	 */
+	QBuffer *iPostData;
+	
+	/**
+	 * The type of HTTP transaction, like GET, POST etc
+	 */
+	QNetworkAccessManager::Operation iHttpOperationType;
+	
+	};
+
+/**
+ * The Provider Base class is the class that has to be contained as a member 
+ * in all Plug-in Interfaces.
+ * 
+ * All of plug-ins should contain this class as a member and should also 
+ * contain a public method to get instance of this class. 
+ */
+class SmfProviderBase : public QObject
+	{
+	Q_OBJECT
+
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfProviderBase( QObject* aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfProviderBase( );
+
+	/**
+	 * Method to get the Localisable name of the service.
+	 * @return The Localisable name of the service.
+	 */
+	QString serviceName( );
+	
+	/**
+	 * Method to get the Logo of the service
+	 * @return The Logo of the service
+	 */
+	QImage serviceIcon( );
+	
+	/**
+	 * Method to get the Readable service description
+	 * @return The Readable service description
+	 */
+	QString description( );
+	
+	/**
+	 * Method to get the Website of the service
+	 * @return The Website of the service
+	 */
+	QUrl serviceUrl( );
+	
+	/**
+	 * Method to get the URL of the Application providing this service
+	 * @return The URL of the Application providing this service
+	 */
+	QUrl applicationUrl( );
+	
+	/**
+	 * Method to get the Icon of the application
+	 * @return The Icon of the application
+	 */
+	QImage applicationIcon( );
+	
+	/**
+	 * Method to get the Plugin specific ID
+	 * @return The Plugin specific ID
+	 */
+	uint 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 
+	 */
+	uint authenticationApp( QString &aProgram, QStringList & aArguments, 
+			QIODevice::OpenModeFlag aMode = QIODevice::ReadWrite );	
+	
+	/**
+	 * 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 smfRegistrationId( );
+	
+	/**
+	 * Method to get the data usage of each plugin
+	 * @param aUsage The data usage structure
+	 */
+	void getDataUsage( SmfPluginDataUsage &aUsage );
+	
+	/**
+	 * Method to get the reference count for loading.
+	 * The reference count increased with each load request and decreased 
+	 * with each unload request
+	 * @return The reference count value for loading of the plugins
+	 */
+	uint getLoadRefCount( );
+	
+private:
+	QString m_serviceName;	// the Localisable name of the service
+	QImage m_serviceIcon;	// the Logo of the service
+	QString m_description;	// the Readable service description
+	QUrl m_serviceUrl;		// the Website of the service
+	QUrl m_applicationUrl; 	// URL of the Application providing this service
+	QImage m_applicationIcon;	//Icon of the application
+	uint m_pluginId;		// The Plugin specific ID
+	uint m_authenticationAppId; // ID of the authentication application for this service
+	QString m_registrationId; 	// unique registration ID provided by the 
+							// Smf for authorised plugins
+	SmfPluginDataUsage m_usage;	//data usage of each plugin
+	uint m_loadRefCount;	// reference count increased with each load request 
+							// and decreased with each unload request
+	};
+
+#endif /* SMFPROVIDERBASE_H_ */
--- a/example/clientapi/smf/smfcontact.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/**************************************************************************************************
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for profile of a contact in a social networking site
-*
-/*************************************************************************************************/
-
-#ifndef SMFPROFILE_H
-#define SMFPROFILE_H
-
-#include <QContactDetail>
-
-class SmfProvider;
-
-/**
- * Interface for a contact from a service provider. This class
- * provides basic functionality to allow applications to obtain details of a
- * contact (self or friends) in a social networking service.
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SmfContact : public QObject
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfContact(QObject* parent = 0);
-  ~SmfContact();
-
-
-private:
-  /*
-  QContactAddress                                   Address;
-  QContactAnniversary                              Anniversary;
-  QContactAvatar                                      Avatar;
-  QContactBirthday                                   Birthday;
-  QContactEmailAddress                           EmailAddress;
-  QContactGender                                     Gender;
-  QContactGeolocation                              Geolocation;
-  QContactGuid                                        Guid;
-  QContactName                                       Name;
-  QContactNickname                                 Nickname;
-  QContactNote                                        Note;
-  QContactOnlineAccount                          OnlineAccount;
-  QContactOrganization                             Organization;
-  QContactPhoneNumber                           PhoneNumber;
-  QContactTimestamp                               Timestamp;
-  QContactType                                        Type;
-  QContactUrl                                           Url;
-  */
-  QVariantMap                                           details;
-
-public:
-  virtual QStringList subTypes() const;
-
-slots:
-  virtual void value(const QString& subType,const QVariant& info); //for any contact
-  virtual bool setValue( const QString & key, const QVariant & value );//for self contact only
-
-signals:
-  virtual void detailsUpdated(const QString& key); //for setvalue on self contact
-};
-#endif // SMFPROFILE_H
--- a/example/clientapi/smf/smffcontactfetcher.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for list of contacts from a site
-*
-*/
-
-#ifndef SMFCONTACTHETCHER_H
-#define SMFCONTACTHETCHER_H
-
-class SmfProvider; //base-class for service provider
-class SmfContact; //class for Contact in a social network
-class SmfGroup; //class for a group in social network
-
-
-/**
- * Interface to search for contacts/connections from a service provider. This class
- * provides basic functionality to allow applications to obtain list of
- * contacts or friends in a social networking service.
- *
- * Note that branding information for the particular service implementation
- * is available from base-class functions. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SmfContactFetcher : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfContactFetcher(QObject* parent = 0);
-  ~SmfContactFetcher();
-
-public:
-  // Get the friend listing - might be made asynchrnous later
-  virtual QList<SmfContact> friends() = 0; // list of contact objects
-  virtual QList<SmfContact> followers() = 0; // list of contact objects
-  virtual QList<SmfContact> search(SmfContact) = 0; // list of contact objects
-  virtual QList<SmfGroup>   groups() = 0; // list of group objects
-  virtual QList<SmfContact> searchInGroup(SmfGroup) = 0; // list of contact objects
-
-  virtual SmfContactModel   model() = 0; // maybe we can make a QItemModel-derived model?
-
-
-slots:
-
-signals:
-  // Notification of remote changes to the contactlist,
-  // probably should be done through model
-  virtual void friendsChanged() = 0;
-  virtual void followersChanged() = 0;
-  virtual void groupChanged() = 0;
-};
-
-
-
-#endif // SMFCONTACTHETCHER_H
--- a/example/clientapi/smf/smfgallery.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for a remote picture gallery
-*
-*/
-
-#ifndef SMFGALLERY_H
-#define SMFGALLERY_H
-
-class SmfProvider;
-class SmfPicture;
-class SmfGalleryModel;
-class SmfComment; //user id, string, and url
-
-/**
- * Interface to a remote gallery service. This class
- * provides some basic gallery functionality to allow applications
- * to interact with a picture gallery in a social network.
- *
- * Note that branding information for the particular service implementation
- * is available from base-class functions. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SmfGallery : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfGallery(QObject* parent = 0);
-  ~SmfGallery();
-
-public:
-  // Get the picture listing
-  virtual QList<SmfPicture> pictures() = 0; // basic list of picture objects
-  virtual SmfGalleryModel model() = 0; // maybe we can make a QItemModel-derived model?
-  virtual QString description() = 0; // A user title or caption, maybe?
-
-slots:
-  // Upload an image, note these can be slots to connect to UI controls more easily
-  virtual int upload(SmfPicture image) = 0;
-  virtual int upload(QList<SmfPicture> images) = 0;
-  virtual int postComment(SmfPicture image, SmfComment comment) = 0;
-
-signals:
-  // Notification of remote changes to the gallery,
-  // probably should be done through model
-  virtual void galleryUpdated() = 0;
-};
-
-#endif // SMFGALLERY_H
-
--- a/example/clientapi/smf/smfmusic.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for music related services
-*
-*/
-
-#ifndef SMFMUSIC_H
-#define SMFMUSIC_H
-
-class SmfProvider; //basic Smf service Provider info
-class SmfMusicRating;//rating value from 0..31 - services would map accordingly
-class SmfMusicProfile; //user profile containing music usage and interest info, extends SmfContact
-class SmfTracknfo; //id, title, album, artist, genre, tag, director,release year, rating, comment info
-class SmfMusicFingerPrint; //generation is not in scope of smf
-
-class SmfMusicModel;
-
-/**
-  * basic music service ("org.symbian.smf.music.service")
-  */
-class SmfMusicService : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfMusicService(QObject* parent = 0);
-  ~SmfMusicService();
-
-public:
-  virtual SmfMusicProfile userinfo() = 0; // get self profile information
-  virtual QList<SmfMusicProfile> searchUser(SmfVenue venue) = 0; // search information about other service users
-  virtual SmfMusicModel model() = 0; // maybe we can make a QItemModel-derived model?
-
-slots:
-
-
-signals:
-
-};
-
-/**
-* provides service ("org.symbian.smf.music.search")
-*/
-class SmfMusicSearch : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfMusicSearch(QObject* parent = 0);
-  ~SmfMusicSearch();
-
-public:
-  // Get the track listing - might be made asynchrnous later
-  virtual QList<SmfTrackInfo> recommendations(SmfTrackInfo track) = 0; // basic list of track objects
-  virtual QList<SmfTrackInfo> tracks(SmfTrackInfo track) = 0; // basic list of track objects
-  virtual QList<SmfTrackInfo> trackInfo(SmfMusicFingerPrint signature) = 0; // search by fingerprint object
-  virtual QList<SmfProvider> stores(SmfTrackInfo track) = 0; // search information about where to buy this song from
-
-slots:
-  virtual int postCurrentPlaying(SmfTrackInfo track) = 0;
-  //virtual int postRating(SmfTrackInfo track, SmfMusicRating rate) = 0;
-  //virtual int postComments(SmfTrackInfo track, SmfComment comment) = 0;
-
-signal:
-
-}
-
-class SmfPlaylist;//remote playlist
-/**
- * provides service ("org.symbian.smf.music.playlist")
- *
- * Interface to a remote playlist service. This class
- * provides some basic functionality to allow applications
- * to interact with playlists in some music related service provider (e.g. last.fm).
- *
- * Note that branding information for the particular service implementation
- * is available from base-class functions. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- *
- */
-class SmfPlaylistService : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfPlaylistService(QObject* parent = 0);
-  ~SmfPlaylistService();
-
-public:
-  // Get the playist listing - might be made asynchrnous later
-  virtual QList<SmfPlaylist> playlists() = 0; // basic list of playlist objects for the logged-in user
-  virtual QList<SmfPlaylist> playlistsOf(SmfMusicProfile user) = 0; // basic list of playlist objects for other user
-
-
-slots:
-  // Upload currently playing song, etc - slots can connect to UI controls more easily
-  virtual int addToPlaylist(SmfPlaylist plst, QList<SmfTrackInfo> tracks) = 0;
-  virtual int postCurrentPlayingPlaylist(SmfPlaylist plst) = 0;
-
-
-signals:
- //signals remote updation of playlist
-  virtual int playlistUpdated(void) = 0;
-};
-
-
-
-class SmfEvent;//musical events
-class SmfVenue;//popular venues
-/**
-* provides service ("org.symbian.smf.music.events")
-*/
-class SmfMusicEvents : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfMusicEvents(QObject* parent = 0);
-  ~SmfMusicEvents();
-
-public:
-  virtual QList<SmfEvents> events(QContactGeolocation location) = 0; // basic list of events objects
-  virtual QList<SmfVenue> venues(QContactGeolocation location) = 0; // basic list of venue objects
-  virtual QList<SmfEvents> events(SmfVenue venue) = 0; // basic list of events objects
-
-slot:
- //update your event
- virtual void postEvents(QList<SmfEvents> events); //might not be supported by all service provider
-
-signal:
- virtual void eventsupdated(void);
-};
-
-
-
-
-class SmfSubtitleSearchFilter;//language, frame rate, duration, release year
-/**
-* provides service ("org.symbian.smf.music.lyrics")
-*/
-class SmfLyricsService : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfLyricsService(QObject* parent = 0);
-  ~SmfLyricsService();
-
-public:
-  // Get the lyrics listing - might be made asynchrnous later
-  virtual QList<SmfLyrics> lyrics(SmfTrackInfo track) = 0; //texts without time information
-  virtual QList<SmfSubtitle> subtitles(SmfTrackInfo track, SmfSubtitleSearchFilter filter) = 0; // texts with time information
-
-
-slots:
-
-
-signals:
-
-};
-
-
-#endif // SMFMUSIC_H
-
--- a/example/clientapi/smf/smfpostprovider.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for posting updates to a social site
-*
-*/
-#ifndef SMFPOSTPROVIDER_H
-#define SMFPOSTPROVIDER_H
-
-class SmfProvider; //base-class for service provider
-class SmfContact; //class for Contact in a social network
-class SmfLocationInfo; //class for geo location
-class SmfPost; //class for information (text, image and url) contained in post in social network
-
-/**
- * Interface to search for contacts/connections from a service provider. This class
- * provides basic functionality to allow applications to obtain list of
- * contacts or friends in a social networking service.
- *
- * Note that branding information for the particular service implementation
- * is available from base-class functions. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SmfPostProvider : public SmfProvider
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfPostProvider(QObject* parent = 0);
-  ~SmfPostProvider();
-
-public:
-  // Get the friend listing - might be made asynchrnous later
-  virtual QList<SmfPost> getPosts(SmfStatusData statusData) = 0; // list of contact objects
-  virtual SmfContactModel   model() = 0; // maybe we can make a QItemModel-derived model?
-
-
-slots:
-  virtual void updatePost(SmfPost postData,SmfLocationInfo location) = 0; // list of contact objects
-  virtual void updatePostDirected(SmfPost postData,SmfContact contact,SmfLocationInfo location) = 0; // list of contact objects
-  virtual QList<SmfContact> postAppearence(SmfPresenceInfo appearence) = 0; // appear offline, busy, do-not-disturb
-
-signals:
-  // Notification of remote changes to the contactlist,
-  // probably should be done through model
-  virtual void friendsChanged() = 0;
-  virtual void followersChanged() = 0;
-  virtual void groupChanged() = 0;
-};
-
-#endif // SMFPOSTPROVIDER_H
--- a/example/clientapi/smf/smfprovider.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/**
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for sfm service provider
-*
-*/
-
-#ifndef SMFPROVIDER_H
-#define SMFPROVIDER_H
-
-class SmfContact;
-
-/**
- * Interface for a base service provider. Other service provider classes o derive from
- * this base class so that each has access to service provider information
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SmfProvider : public QObject
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfProvider(QObject* parent = 0);
-  ~SmfProvider();
-
-public:
-  virtual QString serviceName() = 0; // licalizable name of the service
-  virtual QImage serviceIcon() = 0; // Logo of the service
-  virtual QString description() = 0; // readable service description
-  virtual QUrl serviceUrl() = 0; // website of the service
-  virtual QUrl applicationUrl() = 0; // application providing this service
-  virtual SmfContact selfContact()=0;//provides profile of the accound holder
-
-slots:
-  //None at the moment
-
-signals:
-  //None at the moment
-};
-
-#endif // SMFPROVIDER_H
--- a/example/clientapi/smf/smfrelationmgr.h	Tue Mar 02 16:24:32 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/**
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for managing associations between various social contacts
-*
-*/
-
-#ifndef SMFRELATIONMGR_H
-#define SMFRELATIONMGR_H
-
-class SmfProvider;
-class SmfContact;
-class SmfRelationId; //persistent Id of a relation
-
-class SmfRelationItem : public SmfContact
-{
-	private:
-	//SmfProvider* provider;
-
-	public:
-	virtual SmfProvider* provider getProvider()=0;
-	virtual SmfProvider* provider setProvider(SmfProvider* provider)=0;
-};
-
-/**
- * Interface for a base service provider. Other service provider classes o derive from
- * this base class so that each has access to service provider information
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SmfRelationMgr : public QObject
-{
-  Q_OBJECT;
-
-public:
-  // Seeing as this is a plug-in implementation, these will realistically
-  // be generated by SMF factory of some kind
-  SmfRelationMgr(QObject* parent = 0);
-  ~SmfRelationMgr();
-
-public:
-  //create a relation with first contact (id optional)
-  virtual SmfRelationId create(SmfProvider provider, SmfContact conact, uint id) = 0;
-  // assign contact to a relation
-  virtual bool associate(SmfRelationId relation, SmfProvider provider, SmfContact conact) = 0;
-  //returns first contact in the relation when exists
-  virtual SmfContact searchById(SmfRelationId relation)=0;
-  //number of contacts in a relation
-  virtual uint count(SmfRelationId relation) = 0;
-
-slots:
-  virtual QList<SmfRelationItem> get(SmfRelationId relation)=0;//list of contacts and their provider
-  virtual QList<SmfRelationId> getAll()=0;//list of all relations
-
-signals:
-  //None at the moment
-};
-
-#endif // SMFRELATIONMGR_H