--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qtinternetradio/irqmusicshop/src/irqmusicshop.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2009-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: class implementation for visiting nokia music shop
+*
+*/
+
+
+#include <apgtask.h> // TApaTask, TApaTaskList
+#include <apgcli.h> // RApaLsSession
+#include <e32std.h> // TThreadId
+
+#include <w32std.h> // RWsSession
+#include <e32cmn.h>
+#include <e32def.h>
+#ifdef USER_DEFINED_MUSICSHOP
+#include <QFile>
+#include <QTextStream>
+#include <QStringList>
+#endif
+
+#ifdef MUSICSHOP_AVAILABLE
+#include <e32property.h>
+#include <centralrepository.h>
+#include <mpxfindinmusicshopcommon.h> // P/S Keys, KSearchUrlMaxSize, KCategoryValueMaxSize
+#include <musicstoreuidconstants.h> // KUidMusicStore
+#include <mpxfindinmusicshop.h> // CMPXFindInMShop
+#include <musicwapcenrepkeys.h> // Central Repository : KCRUidMusicShopSettings,KMusicShopURI
+#ifdef USER_DEFINED_MUSICSHOP
+const TInt KMaxUrlLenth = 512;
+const char* const KNewMusicShopUrl = "http://music.nokia.co.uk";
+void getUrlFromConfiguration(QString & aUrl);
+#endif //for USER_DEFINED_MUSICSHOP
+#endif //for MUSICSHOP_AVAILABLE
+
+#include "irqmusicshop.h"
+
+
+const TUid KUidShazam = { 0x200265B3 };
+bool launchAppByUid(const TUid aUid);
+
+#ifdef MUSICSHOP_AVAILABLE
+// ---------------------------------------------------------------------------
+// IRQMusicShop::openInstance()
+// Static function to get a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQMusicShop* IRQMusicShop::openInstance()
+{
+ // Get singleton instance
+ IRQMusicShop* musicShop =
+ reinterpret_cast<IRQMusicShop*>(Dll::Tls());
+
+ if(NULL == musicShop)
+ {
+ TRAPD(error, musicShop = createInstanceL());
+ if (KErrNone != error)
+ {
+ delete musicShop;
+ musicShop = NULL;
+ Dll::SetTls(NULL);
+ }
+ }
+ else
+ {
+ musicShop->iSingletonInstances++;
+ }
+
+ return musicShop;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::closeInstance()
+// Close a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMusicShop::closeInstance()
+{
+ iSingletonInstances--;
+
+ if (0 == iSingletonInstances)
+ {
+ Dll::SetTls(NULL);
+ delete this;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::createInstanceL()
+// Creates IRQMusicShop instance
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop* IRQMusicShop::createInstanceL()
+{
+ IRQMusicShop* musicShop = new (ELeave) IRQMusicShop();
+ musicShop->constructL();
+ User::LeaveIfError(Dll::SetTls(musicShop));
+ musicShop->iSingletonInstances = 1;
+ return musicShop;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::IRQMusicShop()
+// Default Constructor.
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::IRQMusicShop():iMPXFindInShop(NULL),
+ iSingletonInstances(0)
+ #ifdef USER_DEFINED_MUSICSHOP
+ ,iResetAlready(false)
+ #endif
+{
+ _LIT_SECURITY_POLICY_C1(KReadPolicy, ECapabilityReadUserData);
+ _LIT_SECURITY_POLICY_C1(KWritePolicy, ECapabilityWriteUserData);
+
+ RProperty::Define(KUidMusicStore, KMShopCategoryId, RProperty::EInt, KReadPolicy, KWritePolicy);
+ RProperty::Define(KUidMusicStore, KMShopCategoryName, RProperty::ELargeText, KReadPolicy, KWritePolicy);
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::constructL()
+// Two-Phase Constructor.
+// ---------------------------------------------------------------------------
+//
+void IRQMusicShop::constructL()
+{
+ iMPXFindInShop = CMPXFindInMShop::NewL();
+#ifdef USER_DEFINED_MUSICSHOP
+ resetMusicShopUrlL();
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::~IRQMusicShop()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::~IRQMusicShop()
+{
+ delete iMPXFindInShop;
+ iMPXFindInShop = NULL;
+#ifdef USER_DEFINED_MUSICSHOP
+ TRAP_IGNORE(restoreMusicShopUrlL());
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::findInMusicShop()
+// Find song in music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::findInMusicShop(const QString& aSongName,
+ const QString& aArtistName,
+ const QString& aAlbumName)
+{
+ if(NULL == iMPXFindInShop)
+ {
+ return false;
+ }
+
+ TPtrC songName(reinterpret_cast<const TUint16*>(aSongName.utf16()));
+ TPtrC artistName(reinterpret_cast<const TUint16*>(aArtistName.utf16()));
+ TPtrC albumName(reinterpret_cast<const TUint16*>(aAlbumName.utf16()));
+
+ HBufC* url = NULL;
+ TRAPD(error, url = iMPXFindInShop->CreateSearchURLL(songName,
+ artistName,
+ albumName,
+ KNullDesC, // Composer - Not used
+ KNullDesC)); // Genre - Not used
+
+ bool retVal = false;
+ if( (KErrNone == error) &&
+ (KErrNone == RProperty::Set(KUidMusicStore,
+ KMShopCategoryId,
+ KFindInMShopKeyValid)) &&
+ (KErrNone == RProperty::Set(KUidMusicStore,
+ KMShopCategoryName,
+ *url))
+ )
+ {
+ retVal = launchMusicShop();
+ }
+
+ delete url;
+ REComSession::FinalClose();
+ return retVal;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchMusicShop()
+// Launch music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchMusicShop()
+{
+ return launchAppByUid(KUidMusicStore);
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchShazam()
+// Launch shazam app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchShazam()
+{
+ return launchAppByUid(KUidShazam);
+}
+
+
+#ifdef USER_DEFINED_MUSICSHOP
+// ---------------------------------------------------------------------------
+// resetMusicShopUrlL
+// Reset Music Shop Url in the Central Repository
+// ---------------------------------------------------------------------------
+//
+void IRQMusicShop::resetMusicShopUrlL()
+{
+ CRepository* pRepository = CRepository::NewL(KCRUidMusicShopSettings);
+ CleanupStack::PushL(pRepository);
+
+ TInt urlLenth = KMaxUrlLenth;
+ HBufC* valueString = HBufC::NewLC(urlLenth);
+
+ TInt error = KErrNone;
+ do
+ {
+ TPtr ptr = valueString->Des();
+ error = pRepository->Get(KMusicShopURI,ptr);
+ if(error == KErrTooBig)
+ {
+ CleanupStack::PopAndDestroy(valueString);
+ urlLenth = 2 * urlLenth;
+ valueString = HBufC::NewLC(urlLenth);
+ }
+ } while(error == KErrTooBig);
+
+ User::LeaveIfError(error);
+
+ iMusicShopUrl = QString::fromUtf16(valueString->Ptr(),valueString->Length());
+
+ QString newMusicShopUrl(KNewMusicShopUrl);
+ getUrlFromConfiguration(newMusicShopUrl);
+
+
+ if(0 != iMusicShopUrl.compare(newMusicShopUrl,Qt::CaseInsensitive))
+ {
+ TPtrC urlDesc(reinterpret_cast<const TUint16*>(newMusicShopUrl.utf16()));
+ User::LeaveIfError(pRepository->Set(KMusicShopURI,urlDesc));
+ iResetAlready = true;
+ }
+
+ CleanupStack::PopAndDestroy(valueString);
+ CleanupStack::PopAndDestroy(pRepository);
+}
+
+void IRQMusicShop::restoreMusicShopUrlL()
+{
+ if(iResetAlready)
+ {
+ CRepository* pRepository = CRepository::NewL(KCRUidMusicShopSettings);
+ TPtrC16 oldMusicShopUrl(reinterpret_cast<const TUint16*>(iMusicShopUrl.utf16()));
+ pRepository->Set(KMusicShopURI,oldMusicShopUrl);
+ delete pRepository;
+ }
+}
+
+
+void getUrlFromConfiguration(QString & aUrl)
+{
+ QFile file("C:\\data\\QTIRConfigure.txt");
+ if (file.open(QIODevice::ReadOnly))
+ {
+ QTextStream stream( &file );
+ QString line;
+ QStringList parameter;
+ while (!stream.atEnd())
+ {
+ line = stream.readLine();
+ parameter = line.split("=");
+ if (parameter.count() == 2)
+ {
+ if (parameter.first() == "userDefinedMusicStoreUrl")
+ {
+ aUrl = parameter.last();
+ break;
+ }
+ }
+ }
+ file.close();
+ }
+}
+#endif
+
+#else //for MUSICSHOP_AVAILABLE
+// ---------------------------------------------------------------------------
+// IRQMusicShop::openInstance()
+// Static function to get a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C IRQMusicShop* IRQMusicShop::openInstance()
+{
+ // Get singleton instance
+ IRQMusicShop* musicShop =
+ reinterpret_cast<IRQMusicShop*>(Dll::Tls());
+
+ if(NULL == musicShop)
+ {
+ musicShop = new IRQMusicShop();
+ musicShop->iSingletonInstances = 1;
+ }
+ else
+ {
+ musicShop->iSingletonInstances++;
+ }
+
+ return musicShop;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::closeInstance()
+// Close a singleton instance of IRQMusicShop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void IRQMusicShop::closeInstance()
+{
+ iSingletonInstances--;
+
+ if (0 == iSingletonInstances)
+ {
+ Dll::SetTls(NULL);
+ delete this;
+ }
+}
+
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::IRQMusicShop()
+// Default Constructor.
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::IRQMusicShop():iMPXFindInShop(NULL),
+ iSingletonInstances(0)
+ #ifdef USER_DEFINED_MUSICSHOP
+ ,iResetAlready(false)
+ #endif
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::~IRQMusicShop()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+IRQMusicShop::~IRQMusicShop()
+{
+
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::findInMusicShop()
+// Find song in music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::findInMusicShop(const QString& aSongName,
+ const QString& aArtistName,
+ const QString& aAlbumName)
+{
+ Q_UNUSED(aSongName)
+ Q_UNUSED(aArtistName)
+ Q_UNUSED(aAlbumName)
+ return false;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchMusicShop()
+// Launch music shop app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchMusicShop()
+{
+ return false;
+}
+
+// ---------------------------------------------------------------------------
+// IRQMusicShop::launchShazam()
+// Launch shazam app.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C bool IRQMusicShop::launchShazam()
+{
+ return launchAppByUid(KUidShazam);
+}
+
+#endif //for MUSICSHOP_AVAILABLE
+
+bool launchAppByUid(const TUid aUid)
+{
+ RWsSession wsSession;
+ if(KErrNone != wsSession.Connect())
+ {
+ return false;
+ }
+
+ bool retVal = false;
+ TApaTaskList tasList(wsSession);
+ TApaTask task = tasList.FindApp(aUid);
+
+ if(task.Exists())
+ {
+ task.BringToForeground();
+ retVal = true;
+ }
+ else
+ {
+ RApaLsSession session;
+ if(KErrNone == session.Connect())
+ {
+ TThreadId threadId;
+ TInt err = session.CreateDocument(KNullDesC, aUid, threadId);
+ if(KErrNone == err)
+ {
+ retVal = true;
+ }
+ session.Close();
+ }
+ }
+
+ wsSession.Flush();
+ wsSession.Close();
+ return retVal;
+}