diff -r edb9dc8273d9 -r c39a6cfd1fb9 example/example_usage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/example_usage.cpp Tue May 18 17:33:55 2010 +0530 @@ -0,0 +1,336 @@ +#include "smfglobal.h" +#include "smfclient.h" +#include "smfprovider.h" +#include "smfgallery.h" +#include "smfcontact.h" +#include "smfpostprovider.h" +#include "smfcontactfetcher.h" +#include "smfmusic.h" +#include "smfpicture.h" +#include "smftrackinfo.h" +#include "smfmusicprofile.h" +#include "smflyrics.h" +#include "smfactions.h" +#include "smfactivityfetcher.h" +#include +#include "qtcontacts.h" +#include +#include +#include + +using namespace QtMobility; + +class MyAppView //: public QAbstractItemView + { +public: + void add(QImage pic); + void add(SmfTrackInfo trackInfo); + void add(QContact qc); + void setPicture(QImage image); + void setTitle(QString cap); + void setIcon(QImage image); + void setDescription(QString desc); + void setProvider(SmfProvider p); + void setLyricsData(SmfLyrics l); + }; + + +class MyApplication :public QObject + { + Q_OBJECT + +public slots: + void displayGallery(); + void showPicsSlot(SmfPictureList* pics, QString err); + void uploadPicture(QImage* picture, QList galleries); + void uploaded(bool success); + + void displayFriends(); + void showlist(SmfContactList* friendsList); + void postUpdate(); + void showPosts(SmfPostList* posts, QString err); + + void getMusic(SmfTrackInfo currTrack); + void showTrackSearch(SmfTrackInfoList* songs); + void showStore(SmfProviderList* stores); + void updateCurrentPlaying(QList musicServices, SmfTrackInfo currTrack); + void displayLyrics(SmfTrackInfo currTrack); + void showLyrics(SmfLyricsList* list); + + void getActivities(); + void showActivities(SmfActivityEntryList* entries); +private: + MyAppView* m_view; + SmfClient client; + SmfGallery* m_smfgl; + SmfContactFetcher* m_smfcf; + SmfMusicService* m_smfms; + QList m_myfrndz; + }; +/** 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* galleries = client.GetServices("org.symbian.smf.client.gallery\0.2"); + + // We will use the first one now + SmfProvider smfp = galleries->value(0); + SmfGallery* myGallery = new SmfGallery(&smfp); + + // Adjust our view to show where these pictures came from + QImage imge = smfp.serviceIcon(); + QString desc = smfp.description(); + QString name = smfp.serviceName(); + m_view->setIcon(imge); + m_view->setProvider(smfp); + m_view->setDescription(desc); + + /** + * Asynchrnous request to fetch the pictures. + * The picturesAvailable() signal is emitted + * with SmfPictureList once the pictures have arrived. + */ + myGallery->pictures(); + connect(myGallery,SIGNAL(picturesAvailable(SmfPictureList*, QString, SmfResultPage )), + SLOT(showPicsSlot(SmfPictureList*, QString))); + + m_smfgl = myGallery; + } + +void MyApplication::showPicsSlot(SmfPictureList* pics, QString err) + { + //check err string if there is any error + if(err.compare("Err")) return; + //if no error + foreach(SmfPicture pic, *pics) { + m_view->add(pic.picture() ); // 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 galleries) + { + /** + * When uploading is finished we can check the success of the uploading + */ + QObject::connect(m_smfcf,SIGNAL(uploadFinished(bool)),SLOT(uploaded(bool))); + SmfPicture* smfPic = new SmfPicture(*picture); + // The list could be from a selection of galleries chosen by the user, + // think multiple TweetDeck accounts? + foreach(SmfGallery gallery, galleries) + { + gallery.upload(smfPic); + } + } + +/** + * Slot to catch the uploading finished event + */ +void MyApplication::uploaded(bool success) + { + if(!success) + { + //error occured while uploading + } + } + +/** + * 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* contactFetcherList = client.GetServices("org.symbian.smf.cleint.contact.fetcher\0.2"); + SmfProvider smfp = contactFetcherList->value(0); + SmfContactFetcher* smfcf = new SmfContactFetcher(&smfp); + + //Request friend list, the friendsListAvailable() signal + //is emitted with SmfContactList once data is arrived. + QObject::connect(smfcf,SIGNAL(friendsListAvailable(SmfContactList*, QString, SmfResultPage )), + SLOT(showlist(SmfContactList*))); + smfcf->friends(); + + m_smfcf = smfcf; + } + +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( (m_smfcf->getProvider())->serviceIcon() ); + m_view->setDescription( (m_smfcf->getProvider())->description() ); + + //now display the images + foreach(SmfContact contact, *friendsList) { + QVariant data = contact.value("Avatar"); + QImage pic = data.value(); + QContact qc; + contact.convert(qc); + m_view->add(qc); + m_myfrndz.append(contact); + } + } +/** + * 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* postServices = client.GetServices("org.symbian.smf.client.contact.posts\0.2"); + + //let us use the first one + QString servName = postServices->value(0).serviceName(); + if(!servName.compare("Facebook.com")) return; + SmfProvider smfp = postServices->value(0); + SmfPostProvider* myPostServer = new SmfPostProvider(&smfp); + + //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->getProvider())->serviceIcon() ); + m_view->setProvider(myPostServer->getProvider()); + m_view->setDescription((myPostServer->getProvider())->description() ); + + SmfPost reply("this is a text post", this); + //post my udpate to be visible to all, connect to updatePostFinished() + // signal of SmfPostProvider to track the success + SmfContact frnd(m_myfrndz.value(0)); + myPostServer->postDirected(reply,frnd); + + //Asynchronously get all posts to me in my profle (e.g. twits from all friends) + //connect to postsAvailable to show the post + myPostServer->posts(); + + QObject::connect(myPostServer, + SIGNAL(postsAvailable(SmfPostList*, QString, SmfResultPage )), + SLOT(showPosts(SmfPostList*, QString))); + } +void MyApplication::showPosts(SmfPostList* posts, QString /*err*/) + { + //Show the first post + SmfPost post = posts->at(0); + m_view->setDescription( post.toPlainText() ); + } +/** + * 5. This is an example of getting song recommendations from a social netowrking sites + */ +void MyApplication::getMusic(SmfTrackInfo currTrack) + { + // Some common interface for finding implementations. + QList* smfProList = client.GetServices("org.symbian.smf.client.music\0.2"); + SmfProvider smfp = smfProList->value(0); + SmfMusicSearch* mServer = new SmfMusicSearch(&smfp); + + QObject::connect(mServer,SIGNAL(trackSearchAvailable(SmfTrackInfoList*, QString,SmfResultPage )),this,SLOT(showTrackSearch(SmfTrackInfoList*))); + QObject::connect(mServer,SIGNAL(storeSearchAvailable(SmfProviderList*, QString,SmfResultPage )),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->getProvider()->serviceIcon() ); + m_view->setProvider( mServer->getProvider()); + m_view->setDescription( mServer->getProvider()->description() ); + + + + } +void MyApplication::showTrackSearch(SmfTrackInfoList* songs) + { + foreach(SmfTrackInfo track, *songs){ + m_view->add(track); + } + QList* smfProList = client.GetServices("org.symbian.smf.client.music.search\0.2"); + SmfProvider smfp = smfProList->value(0); + SmfMusicSearch* mServer = new SmfMusicSearch(&smfp); + //allow user to select a track and get purchase links + //connect to showStoreSearch signal to display the stores for that track + mServer->stores(songs->value(0)); + } +void MyApplication::showStore(SmfProviderList* /*stores*/) + { + //show stores + } +void MyApplication::updateCurrentPlaying(QList musicServices, SmfTrackInfo currTrack) + { + //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 + } + +void MyApplication::displayLyrics(SmfTrackInfo currTrack) + { + + // Some common interface for finding implementations. + QList* smfProList = client.GetServices("org.symbian.smf.client.music.lyrics\0.2","lyricsfly.com"); + SmfProvider smfp = smfProList->value(0); + SmfLyricsService* lyricsService = new SmfLyricsService(&smfp); + QObject::connect(lyricsService,SIGNAL(lyricsAvailable(SmfLyricsList*, QString, SmfResultPage )),this,SLOT(showLyrics(SmfLyricsList*))); + + //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(),caseInsensitiveLessThan); + m_view->setLyricsData(list->at(0)); + } + +void MyApplication::getActivities() + { + // Some common interface for finding implementations. + QList* activityServices = client.GetServices("org.symbian.smf.client.activity.fetcher\0.2"); + + //let us use the Facebook one + QString servName = activityServices->value(0).serviceName(); + if(!servName.compare("Facebook.com")) return; + SmfProvider smfp = activityServices->value(0); + SmfActivityFetcher* myActivityServer = new SmfActivityFetcher(&smfp); + + //Adjust our view to show where these posts came from (e.g. streams from Facebook) + //display service name description and the logo + m_view->setIcon((myActivityServer->getProvider())->serviceIcon() ); + m_view->setProvider(myActivityServer->getProvider()); + m_view->setDescription((myActivityServer->getProvider())->description() ); + + QObject::connect(myActivityServer, + SIGNAL(resultsAvailable(SmfActivityEntryList*,QString,SmfResultPage)), + this,SLOT(showActivities(SmfActivityEntryList*))); + + //get a list of updates to my wall + myActivityServer->selfActivities(); + } + +void MyApplication::showActivities(SmfActivityEntryList* entries) + { + foreach(SmfActivityEntry entry, *entries) { + SmfContact sc = entry.author(); + QString desc = (sc.value("Name")).toString(); + SmfPost details = entry.details(); + QList aol = entry.activities(); + SmfActivityObject sao = aol.value(0); + if(SmfActivityMarkAsFavorite == entry.actionName() ) + { + desc.append(" has marked "); + QVariant qv = sao.objData(); + SmfActivityObjectType otype = sao.type(); + if((SmfActivityObjTypePhoto == otype ) && (qv.canConvert())) + { + SmfPicture pic = qv.value(); + desc.append( pic.description() ); + } + desc.append(" as Favorite at"); + QDateTime qdt = sao.time(); + desc.append(qdt.toString("h:m:s ap")); + } + } + }