diff -r b2eb79881f9d -r 574948b60dab example/MusicLyricsPlugin/MusicLyricsPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/MusicLyricsPlugin/MusicLyricsPlugin.cpp Thu Sep 23 17:15:03 2010 +0530 @@ -0,0 +1,589 @@ +/* + * MusicLyricsPlugin.cpp + * + * Created on: Aug 18, 2010 + * Author: sanpra + */ + +//Include files +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "musiclyricsplugin.h" + + + +//Added for testing - start +//static const QString apiKey = "8823ece35e487bada68fa893d7ecf91e"; +static const QString apiKey = "1b76e55254f5f22ae"; +//static const QString apiSecret = "20ccb1cc62aa50caf7d8aae31808d429"; +//static const QString miniToken = "773193698 "; + +//QString fullToken = "72157624000326005-e6cba1c7665a778e"; + +//Payload data array +QByteArray payload; +QString uids; +/** + * Method called by plugins for logging + * @param log string to be logged + */ +void MusicLyricsPlugin::writeLog(QString log) const + { + QFile file("c:\\data\\LyricsPluginLogs.txt"); + if (!file.open(QIODevice::Append | QIODevice::Text)) + ; + QTextStream out(&file); + out << log << "\n"; + file.close(); + } + +/** + * Destructor + */ +MusicLyricsPlugin::~MusicLyricsPlugin() + { + if(m_provider) + delete m_provider; + } + + +/** + * Method called by plugins to generate a signature string from a base string + * @param aBaseString The base string + * @return The md5 hash of the base string + */ +QString MusicLyricsPlugin::generateSignature(const QString aBaseString) + { + writeLog("MusicLyricsPlugin::generateSignature"); + + // Create md5 hash of the signature string + QByteArray byteArray; + byteArray.insert(0, aBaseString.toAscii()); + + QByteArray md5Hash = QCryptographicHash::hash(byteArray,QCryptographicHash::Md5 ).toHex(); + QString returnString (md5Hash); + return returnString; + } + + +SmfPluginError MusicLyricsPlugin::lyrics( SmfPluginRequestData &aRequest, + const SmfTrackInfo &aTrack, + const int aPageNum , + const int aItemsPerPage ) + { + SmfPluginError error = SmfPluginErrUserNotLoggedIn; + + writeLog("MusicLyricsPlugin::lyrics()"); + + QString baseString; + //spanda + QString Url1 = "http://api.lyricsfly.com/api/txt-api.php?"; + Url1 += "i=7a48a610d6c65171a-temporary.API.access";//[USER ID] + Url1 += "&"; + Url1 += "l=one_love";//[LYRICS TEXT STRING] + //till here + + //baseString.append(apiSecret); +/* baseString.append("api_key"+apiKey); + //baseString.append("auth_token"); + //baseString.append("method=geo.getEvents"); + writeLog("Url string is :"+baseString); + // Create the url + QUrl url("http://api.lyricsfly.com/api/"); + //url.addQueryItem("method", "geo.getevents"); + //url.addQueryItem("location","madrid"); + url.addQueryItem("api_key", apiKey); + url.addQueryItem("api_sig", generateSignature(baseString)); + writeLog("/n/n"+generateSignature(baseString)); + writeLog("/n/n Response is :"+url.toString());*/ + // Create the request, set the url + aRequest.iNetworkRequest.setUrl(Url1); + aRequest.iRequestType = SmfMusicGetLyrics; + + //aRequest.iPostData = NULL; + aRequest.iHttpOperationType = QNetworkAccessManager::GetOperation; + writeLog("/n/n responseAvailble() is getting called"); + error = SmfPluginErrNone; + return error; + } + +SmfPluginError MusicLyricsPlugin::subtitles( SmfPluginRequestData &aRequest, + const SmfTrackInfo &aTrack, + const SmfSubtitleSearchFilter &aFilter , + const int aPageNum , + const int aItemsPerPage ) + { + //spanda_13 + SmfPluginError error = SmfPluginErrUserNotLoggedIn; + + writeLog("MusicLyricsPlugin::subtitle()"); + + QString baseString; + //spanda + QString Url2 = "http://api.allsubs.org/index.php?"; + Url2 += "search=anaconda"; + Url2 += "&"; + Url2 += "language=en"; + Url2 += "&"; + Url2 += "limit=3"; + + + aRequest.iNetworkRequest.setUrl(Url2); + aRequest.iRequestType = SmfMusicGetSubtitle; + + //aRequest.iPostData = NULL; + aRequest.iHttpOperationType = QNetworkAccessManager::GetOperation; + //writeLog("/n/n responseAvailble() is getting called"); + error = SmfPluginErrNone; + return error; + //till here + } +/** + * Customised method for SmfMusicEventsPlugin interface + * @param aRequest [out] The request data to be sent to network + * @param aOperation The operation type (should be known between + * the client interface and the plugin) + * @param aData The data required to form the request (The type + * of data should be known between client and the plugin) + * @return SmfPluginError Plugin error if any, else SmfPluginErrNone + */ +SmfPluginError MusicLyricsPlugin::customRequest( SmfPluginRequestData &aRequest, + const int &aOperation, QByteArray *aData ) + { + Q_UNUSED(aRequest) + Q_UNUSED(aOperation) + Q_UNUSED(aData) + return SmfPluginErrServiceNotSupported; + } + +/** + * The first method to be called in the plugin that implements this interface. + * If this method is not called, plugin may not behave as expected. + * Plugins are expected to save the aUtil handle and use and when required. + * @param aUtil The instance of SmfPluginUtil + */ +void MusicLyricsPlugin::initialize( /*SmfPluginUtil *aUtil*/) + { + // Save the SmfPluginUtil handle + //m_util = aUtil; + + // Create an instance of MusicProviderBase + m_provider = new MusicProviderBase; + m_provider->initialize(); + } + +/** + * Method to get the provider information + * @return Instance of SmfProviderBase + */ +SmfProviderBase* MusicLyricsPlugin::getProviderInfo( ) + { + return m_provider; + } + +/** + * Method to get the result for a network request. + * @param aOperation The type of operation to be requested + * @param aTransportResult The result of transport operation + * @param aResponse The QByteArray instance containing the network response. + * The plugins should delete this instance once they have read the + * data from it. + * @param aResult [out] An output parameter to the plugin manager.If the + * return value is SmfSendRequestAgain, QVariant will be of type + * SmfPluginRequestData. + * For SmfLyricsServicePlugin: If last operation was lyrics(), aResult will + * be of type QList. If last operation was subtitles(), aResult will +* be of type QList. + */ +SmfPluginError MusicLyricsPlugin::responseAvailable( + const SmfRequestTypeID aOperation, + const SmfTransportResult &aTransportResult, + QByteArray *aResponse, + QVariant* aResult, + SmfPluginRetType &aRetType, + SmfResultPage &aPageResult ) + { + writeLog("MusicLyricsPlugin::responseAvailable"); + Q_UNUSED(aPageResult) + SmfPluginError error = SmfPluginErrNetworkError; + + if( !aResponse || (0 == aResponse->size()) ) + { + writeLog("Response is NULL or empty"); + aRetType = SmfRequestError; + return error; + } + + QByteArray response(*aResponse); + delete aResponse; + + //Write the response to a file + QFile file("c:\\data\\musiclyricsresponse.txt"); + writeLog("response data written to c:\\data\\musiclyricsresponse.txt"); + + if (!file.open(QIODevice::Append | QIODevice::Text)); + file.write(response); + file.close(); + + writeLog("MusicEvent response = "+QString(response)); + writeLog("MusicEvent response size = "+QString::number(response.size(), 10)); + + if(SmfTransportOpNoError == aTransportResult) + { + qDebug()<<"No transport error"; + + if(SmfMusicGetLyrics == aOperation ) + { + QList SmfLyricsList; + //spanda_14 + qDebug()<<"Xml parsing"; + + //For getting contacts from xml response + QXmlStreamReader xml(response); + //int count = 0; + while (!xml.atEnd()) + { + xml.readNext(); + if (xml.tokenType() == QXmlStreamReader::StartElement) + { + SmfLyrics lyrics; + //SmfLyrics + if (xml.name() == "id") + { + + + qDebug()<<"id tag found"; + QString id ; + QString message(xml.readElementText()); + id.append(message); + qDebug()<<" IDS : "<< id; + lyrics.setId(id); + //count++; + + } + if (xml.name() == "tx") + { + + qDebug()<<"tx tag found"; + QString tx; + QString message(xml.readElementText()); + tx.append(message); + qDebug()<<" text : "<< tx; + QByteArray data; + QDataStream stream(&data, QIODevice::ReadWrite); + stream< SmfSubtitleList; + + writeLog("Xml parsing"); + + SmfSubtitle Lyricssubtiltle1; + Lyricssubtiltle1.setSubtitleUrl(QUrl("http://www.allsubs.org/subs-download/anaconda/1276543/")); + Lyricssubtiltle1.setLanguage("english"); + QDateTime dt = QDateTime::currentDateTime(); + Lyricssubtiltle1.setReleaseYear(dt); + SmfSubtitleList.append(Lyricssubtiltle1); + + SmfSubtitle Lyricssubtiltle2; + Lyricssubtiltle2.setSubtitleUrl(QUrl("http://www.allsubs.org/subs-download/")); + Lyricssubtiltle2.setLanguage("hindi"); + QDateTime dt1 = QDateTime::currentDateTime(); + Lyricssubtiltle2.setReleaseYear(dt1); + SmfSubtitleList.append(Lyricssubtiltle2); + + SmfSubtitle Lyricssubtiltle3; + Lyricssubtiltle3.setSubtitleUrl(QUrl("http://www.allsubs.org")); + Lyricssubtiltle3.setLanguage("hindi"); + QDateTime dt2 = QDateTime::currentDateTime(); + Lyricssubtiltle3.setReleaseYear(dt2); + SmfSubtitleList.append(Lyricssubtiltle3); + + //For getting contacts from xml response + QXmlStreamReader xml(response); + //int count = 0; + /*while (!xml.atEnd()) + { + SmfSubtitle Lyricssubtiltle; + xml.readNext(); + + if(xml.tokenType() == QXmlStreamReader::StartDocument) + { + continue; + } + + if (xml.tokenType() == QXmlStreamReader::StartElement) + { + if (xml.name() == "AllSubsAPI") + { + continue; + } + //writeLog("START ELEMNT"+xml.name().toString()); + if (xml.name() == "items") + continue; + + if (xml.name() == "item") + { + // xml.readNext(); + while(!(xml.tokenType() == QXmlStreamReader::EndElement && + xml.name() == "item")) + { + writeLog("loop"); + if(xml.tokenType() == QXmlStreamReader::StartElement) + { + + //} + // We've found link. + if(xml.name() == "link") + { + + Lyricssubtiltle.setSubtitleUrl(xml.readElementText()); + writeLog("link "+ Lyricssubtiltle.subtitleUrl()); + writeLog("LINK"+xml.readElementText()); + + } + // We've found email. + if(xml.name() == "languages") + { + Lyricssubtiltle.setLanguage(xml.readElementText()); + writeLog("languages "+Lyricssubtiltle.language()); + writeLog("languages"+xml.readElementText()); + + + } + // We've found website. + if(xml.name() == "added_on") + { + QDateTime dt = QDateTime::fromString(xml.readElementText());//stringToTime() + Lyricssubtiltle.setReleaseYear(dt); + writeLog("added_on "+Lyricssubtiltle.releaseYear().toString()); + writeLog("added_on"+xml.readElementText()); + } + + } + SmfSubtitleList.append(Lyricssubtiltle); + // ...and next... + xml.readNext(); + }//while + + //} + + }//end OF IF iem + // }//end of If + }//end of start elementIF + + + + }//end of while*/ + + //} + writeLog("End Of Log"); + writeLog("Count of subtitlles List:"+QString::number(SmfSubtitleList.count(),10)); + aResult->setValue(SmfSubtitleList); + aRetType = SmfRequestComplete; + + aRetType = SmfRequestComplete; + error = SmfPluginErrNone; + } + else + { + writeLog("Service unsupported!!!"); + aRetType = SmfRequestError; + error = SmfPluginErrServiceNotSupported; + } + }//end if of if(SmfTransportOpNoError == aTransportResult) + + else if(SmfTransportOpOperationCanceledError == aTransportResult) + { + writeLog("Operation Cancelled !!!"); + error = SmfPluginErrCancelComplete; + aRetType = SmfRequestComplete; + } + + else + { + writeLog("Transport Error !!!"); + error = SmfPluginErrNetworkError; + aRetType = SmfRequestError; + } + + return error; + } + + +/** + * Destructor + */ +MusicProviderBase::~MusicProviderBase( ) + { + } + +/** + * Method to get the Localisable name of the service. + * @return The Localisable name of the service. + */ +QString MusicProviderBase::serviceName( ) const + { + return m_serviceName; + } + +/** + * Method to get the Logo of the service + * @return The Logo of the service + */ +QImage MusicProviderBase::serviceIcon( ) const + { + return m_serviceIcon; + } + +/** + * Method to get the Readable service description + * @return The Readable service description + */ +QString MusicProviderBase::description( ) const + { + return m_description; + } + +/** + * Method to get the Website of the service + * @return The Website of the service + */ +QUrl MusicProviderBase::serviceUrl( ) const + { + return m_serviceUrl; + } + +/** + * Method to get the URL of the Application providing this service + * @return The URL of the Application providing this service + */ +QUrl MusicProviderBase::applicationUrl( ) const + { + return m_applicationUrl; + } + +/** + * Method to get the Icon of the application + * @return The Icon of the application + */ +QImage MusicProviderBase::applicationIcon( ) const + { + return m_applicationIcon; + } +/** +* Method to get the list of interfaces that this provider support +* @return List of supported Interafces +*/ +QList MusicProviderBase::supportedInterfaces( ) const + { + return m_serviceType; + } + +/** +* Method to get the list of languages supported by this service provider +* @return a QStringList of languages supported by this service +* provider in 2 letter ISO 639-1 format. +*/ +QStringList MusicProviderBase::supportedLanguages( ) const + { + return m_supportedLanguages; + } + +/** + * Method to get the Plugin specific ID + * @return The Plugin specific ID + */ +QString MusicProviderBase::pluginId( ) const + { + return m_pluginId; + } + +/** + * Method to get the ID of the authentication application + * for this service + * @param aProgram The authentication application name + * @param aArguments List of arguments required for authentication app + * @param aMode Strting mode for authentication application + * @return The ID of the authentication application + */ +QString MusicProviderBase::authenticationApp( QString &aProgram, + QStringList & aArguments, + QIODevice::OpenModeFlag aMode ) const + { + return m_authAppId; + } + +/** + * Method to get the unique registration ID provided by the + * Smf for authorised plugins + * @return The unique registration ID/token provided by the Smf for + * authorised plugins + */ +QString MusicProviderBase::smfRegistrationId( ) const + { + return m_smfRegToken; + } + +void MusicProviderBase::initialize() + { + m_serviceName = "LyricsFly"; + m_description = "Description"; + m_serviceUrl = QUrl(QString("http://api.lyricsfly.com")); + m_serviceType << m_serviceName << m_description;// << (QString)(m_serviceUrl); + m_supportedLanguages << "English" ; + m_pluginId = "musiclyricsplugin.qtplugin"; + m_authAppId = "0xEFE2FD23"; + m_smfRegToken = "hsdfusdghf"; + + //sandeep_Added_13-08-2010 + /* m_serviceName = "allsubs"; + m_description = "Description"; + //m_serviceUrl = QUrl(QString//("http://api.allsubs.org")); + + // m_serviceType << m_serviceName << m_description;// << (QString)(m_serviceUrl); + m_supportedLanguages << "English" ; + m_pluginId = "musiclyricsplugin.qtplugin"; + m_authAppId = "0xEFE2FD23"; + m_smfRegToken = "hsdfusdghf"; + //m_smfRegToken = "hsdfusdghf"; //yet to be recvd*/ + + } + + +/* + * Export Macro + * plugin name : MusicLyricsPlugin + * plugin class : MusicLyricsPlugin + */ +Q_EXPORT_PLUGIN2( musiclyricsplugin, MusicLyricsPlugin )