--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/actionhandlersrc/iractionhandler.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2008-2008 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:
+*
+*/
+
+
+#include <e32cmn.h>
+#include <e32property.h>
+#include <e32std.h>
+#include <w32std.h>
+#include <implementationproxy.h>
+#include <liwvariant.h>
+#include "irdebug.h"
+#include <apgtask.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+
+
+#include "iractionhandler.h"
+#include "iractionhandler.hrh"
+#include "iractionhandlerdefs.h"
+#include "irpubsubkeys.h"
+
+_LIT8( KIRSpace, " " );
+_LIT8( KIRCommandLineActionHandler, "-a" );
+_LIT8( KIRCommandLineActionHandlerCommandStartNowPlayingView, "startnowplaying" );
+
+// ---------------------------------------------------------
+// CIRActionHandler::NewL
+// ---------------------------------------------------------
+//
+CIRActionHandler* CIRActionHandler::NewL()
+ {
+ CIRActionHandler* self = new ( ELeave ) CIRActionHandler();
+ CleanupStack::PushL( self );
+
+ self->ConstructL();
+
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CIRActionHandler::~CIRActionHandler
+// ---------------------------------------------------------
+//
+CIRActionHandler::~CIRActionHandler()
+ {
+ }
+
+// ---------------------------------------------------------
+// CIRActionHandler::CIRActionHandler
+// ---------------------------------------------------------
+//
+CIRActionHandler:: CIRActionHandler()
+ {
+
+ }
+
+// ---------------------------------------------------------
+// CIRActionHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CIRActionHandler::ConstructL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CIRActionHandler::ExecuteActionL
+// ---------------------------------------------------------
+//
+TInt CIRActionHandler::ExecuteActionL( const CLiwMap* aMap )
+ {
+ IRRDEBUG2("InternetRadio -- CIRActionHandler::ExecuteActionL Entering", KNullDesC);
+
+ TInt retValue( KErrNone );
+ RBuf command;
+ CleanupClosePushL( command );
+
+ retValue = ExtractStringL( aMap, command, KIRCommand);
+
+ if (retValue== KErrNone )
+ {
+ if ( !command.CompareF( KIRCommandValueStop) )
+ {
+ Stop();
+ }
+ else if ( !command.CompareF( KIRCommandValuePlay ) )
+ {
+ Play();
+ }
+
+ else if ( !command.CompareF( KIRCommandValueStartNowPlaying ) )
+ {
+ StartToNowPlayingL();
+ }
+ else
+ {
+ retValue = KErrNotSupported;
+ }
+ }
+ CleanupStack::PopAndDestroy( &command );
+ IRRDEBUG2("InternetRadio -- CIRActionHandler::ExecuteActionL exiting", KNullDesC);
+ return retValue;
+ }
+
+
+
+// ---------------------------------------------------------
+// CIRActionHandler::Mute
+// ---------------------------------------------------------
+//
+void CIRActionHandler::Stop()
+ {
+ IRRDEBUG2("CIRActionHandler::Stop entering", KNullDesC);
+
+ TInt err = RProperty::Set(KUidActiveInternetRadioApp, KIRPSControlSetPlayState, EIRStateStop );
+
+ IRRDEBUG2("CIRActionHandler::Stop exiting err =%d", err);
+
+ }
+
+// ---------------------------------------------------------
+// CIRActionHandler::Unmute
+// ---------------------------------------------------------
+//
+void CIRActionHandler::Play()
+ {
+ IRRDEBUG2("CIRActionHandler::Play entering", KNullDesC);
+
+ TInt err = RProperty::Set(KUidActiveInternetRadioApp, KIRPSControlSetPlayState, EIRStatePlay);
+
+ IRRDEBUG2("CIRActionHandler::Play exiting err=%d", err);
+
+ }
+
+
+
+// ---------------------------------------------------------
+// CIRActionHandler::StartToNowPlayingL
+// ---------------------------------------------------------
+//
+void CIRActionHandler::StartToNowPlayingL()
+ {
+
+ IRRDEBUG2("CIRActionHandler::StartToNowPlayingL entering", KNullDesC);
+
+ RWsSession wsSession;
+
+ User::LeaveIfError(wsSession.Connect() );
+ TApaTaskList taskList( wsSession );
+
+ TApaTask irTask = taskList.FindApp(KUidActiveInternetRadioApp);
+
+
+ IRRDEBUG2("CIRActionHandler::StartToNowPlayingL irTask.Exists()=%d", irTask.Exists());
+
+ TPtrC8 actionHandlerCmdId( KIRCommandLineActionHandler );
+ TPtrC8 spacePtr( KIRSpace );
+
+ TPtrC8 startNowPlayingCmdvalue(
+ KIRCommandLineActionHandlerCommandStartNowPlayingView );
+
+ HBufC8* buf = HBufC8::NewLC(actionHandlerCmdId.Length()
+ + spacePtr.Length() + startNowPlayingCmdvalue.Length());
+ TPtr8 tail( buf->Des() );
+
+ tail.Append( actionHandlerCmdId );
+ tail.Append( spacePtr );
+ tail.Append( startNowPlayingCmdvalue );
+
+ if ( !irTask.Exists() )
+ {
+ IRRDEBUG2("CIRActionHandler::StartToNowPlayingL !irTask.Exists", KNullDesC);
+
+ RApaLsSession apaSession;
+ CleanupClosePushL( apaSession );
+
+ User::LeaveIfError( apaSession.Connect() );
+ User::LeaveIfError( apaSession.GetAllApps() );
+
+ TApaAppInfo appInfo;
+ User::LeaveIfError( apaSession.GetAppInfo( appInfo, KUidActiveInternetRadioApp ) );
+
+
+
+ CApaCommandLine* internetRadioApplicationStartParams = CApaCommandLine::NewLC();
+ internetRadioApplicationStartParams->SetExecutableNameL( appInfo.iFullName );
+ // Start the application to the foreground
+ internetRadioApplicationStartParams->SetCommandL( EApaCommandRun );
+ internetRadioApplicationStartParams->SetTailEndL( tail );
+
+ User::LeaveIfError( apaSession.StartApp( *internetRadioApplicationStartParams ) );
+
+ IRRDEBUG2("CIRActionHandler::StartToNowPlayingL StartApp", KNullDesC);
+
+ CleanupStack::PopAndDestroy( internetRadioApplicationStartParams );
+ CleanupStack::PopAndDestroy( &apaSession );
+ }
+ else
+ {
+ IRRDEBUG2("CIRActionHandler::StartToNowPlayingL SendMessage", KNullDesC);
+
+ User::LeaveIfError( irTask.SendMessage( KUidActiveInternetRadioApp , tail ) );
+
+ }
+ CleanupStack::PopAndDestroy( buf );
+ wsSession.Close();
+
+ IRRDEBUG2("InternetRadio -- CIRActionHandler::StartToNowPlayingL exiting", KNullDesC);
+
+ }
+
+// ---------------------------------------------------------
+// CIRActionHandler::ExtractStringLC
+// ---------------------------------------------------------
+//
+TInt CIRActionHandler::ExtractStringL( const CLiwMap* aMap, RBuf& aString,
+ const TDesC8& aMapName)
+ {
+ IRRDEBUG2("InternetRadio -- CIRActionHandler::ExtractStringL entering", KNullDesC);
+
+ TInt err( KErrNotFound );
+ TLiwVariant variant;
+ variant.PushL();
+ TPtrC tempString( KNullDesC );
+ if ( aMap->FindL( aMapName, variant ) )
+ {
+ variant.Get( tempString );
+ aString.Close();
+ aString.CreateL( tempString );
+ err = KErrNone;
+ }
+ CleanupStack::PopAndDestroy( &variant );
+ IRRDEBUG2("InternetRadio -- CIRActionHandler::ExtractStringL exiting", KNullDesC);
+
+ return err;
+
+ }
+
+/** Provides a key-value pair table, that is used to identify the correct construction function for the requested interface. */
+const TImplementationProxy KIRActionHandlerImplementationTable[] =
+ {
+ /*lint -save -e611 (Warning -- Suspicious cast)*/
+ IMPLEMENTATION_PROXY_ENTRY( KIRActionHandlerImplementationUid, CIRActionHandler::NewL )
+ /*lint -restore*/
+ };
+
+const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount );
+
+// ---------------------------------------------------------------------------
+// Returns the implementations provided by this ECOM plugin DLL.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ IRRDEBUG2("InternetRadio -- CIRActionHandler::ImplementationGroupProxy", KNullDesC);
+
+ aTableCount = sizeof( KIRActionHandlerImplementationTable ) / sizeof( TImplementationProxy );
+ return KIRActionHandlerImplementationTable;
+ }