--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/uisrc/irpubsub.cpp Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2006-2007 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: ?Description
+*
+*/
+
+
+#include <s32strm.h>
+
+#include "ircommon.h"
+#include "irdebug.h"
+#include "irmetadata.h"
+#include "irpropertyobserver.h"
+#include "irpubsub.h"
+
+/**
+*C++ default constructor can NOT contain any code, that
+* might leave.
+*/
+CIRPubSub::CIRPubSub()
+ {
+ IRLOG_DEBUG( "CIRPubSub::CIRPubSub" );
+ }
+
+/**
+* Function: ConstructL
+* Symbian 2nd phase constructor can leave.
+*/
+
+void CIRPubSub::ConstructL()
+ {
+ IRLOG_DEBUG( "CIRPubSub::ConstructL - Entering" );
+ // Define data properties.
+ DefinePropertyL( KIRPSDataApplicationRunning, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSPresetIndex, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSDataChannel, RProperty::ELargeText, ETrue );
+ DefinePropertyL( KIRPSMetaData, RProperty::ELargeText, ETrue );
+ DefinePropertyL( KIRPSVolume, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSPlayStop, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSChannelUrl, RProperty::ELargeText, ETrue );
+ DefinePropertyL( KIRPSBitrate, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSMultiplePlay, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSStationName, RProperty::ELargeText, ETrue );
+ DefinePropertyL( KIRPSAppInstanceRunning, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSChannelType, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSChannelId, RProperty::EInt, ETrue );
+ DefinePropertyL( KIRPSDataChannelDesc, RProperty::ELargeText, ETrue );
+ DefinePropertyL( KIRPSChannelMusicFlag, RProperty::ELargeText, ETrue );
+ DefinePropertyL( KIRPSBufferingState, RProperty::EInt, ETrue );
+ //Gets the integer value for the property KIRPSAppInstanceRunning
+ //which gives the number of instances of iRapp running
+ RProperty::Get( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+ //Increment the count and set the integer value for the property
+ //KIRPSAppInstanceRunning to track the number of instances of iRapp
+ //running
+ iApplicationInstanceCount++;
+ RProperty::Set( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+ DefinePropertyL( KIRPSControlSetPlayState, RProperty::EInt, EFalse );
+
+ IRLOG_DEBUG( "CIRPubSub::ConstructL - Exiting." );
+ }
+
+/**
+* Function: NewL
+* Two-phased constructor.
+* @return An Instance of CIRBufferingControl
+*/
+CIRPubSub* CIRPubSub::NewL()
+ {
+ IRLOG_DEBUG( "CIRPubSub::NewL - Entering" );
+ CIRPubSub* self = new (ELeave) CIRPubSub();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ IRLOG_DEBUG( "CIRPubSub::NewL - Exiting." );
+ return self;
+ }
+
+
+/**
+* Function: ~CIRPubSub
+* Destructs all the Property Instances
+*/
+CIRPubSub::~CIRPubSub()
+ {
+ IRLOG_DEBUG( "CIRPubSub::~CIRPubSub - Entering" );
+ iPropertyArray.ResetAndDestroy();
+ iPropertyArray.Close();
+ RProperty::Get( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+ iApplicationInstanceCount--;
+
+ //Delete the property only when one instance of iRapp is running
+ if(!iApplicationInstanceCount )
+ {
+ DeleteProperty( KIRPSDataApplicationRunning );
+ DeleteProperty( KIRPSDataChannel );
+ DeleteProperty( KIRPSMetaData );
+ DeleteProperty( KIRPSPresetIndex );
+ DeleteProperty( KIRPSVolume );
+ DeleteProperty( KIRPSPlayStop );
+ DeleteProperty( KIRPSChannelUrl );
+ DeleteProperty( KIRPSBitrate );
+ DeleteProperty( KIRPSMultiplePlay );
+ DeleteProperty( KIRPSStationName );
+ DeleteProperty( KIRPSAppInstanceRunning );
+ DeleteProperty( KIRPSChannelType );
+ DeleteProperty( KIRPSChannelId );
+ DeleteProperty( KIRPSDataChannelDesc );
+ DeleteProperty( KIRPSChannelMusicFlag );
+ DeleteProperty( KIRPSControlSetPlayState );
+ DeleteProperty( KIRPSBufferingState );
+ }
+ RProperty::Set( KUidActiveInternetRadioApp,KIRPSAppInstanceRunning,iApplicationInstanceCount);
+
+ IRLOG_DEBUG( "CIRPubSub::~CIRPubSub - Exiting." );
+ }
+
+/*
+* CIRPubSub::DefinePropertyL
+* Defines a property.
+*/
+void CIRPubSub::DefinePropertyL( TUint aKey, TInt aAttr, TBool aDataProperty )
+ const
+ {
+ IRLOG_DEBUG( "CIRPubSub::DefinePropertyL - Entering" );
+ _LIT_SECURITY_POLICY_PASS(KIRExternalAccessPolicy);
+ _LIT_SECURITY_POLICY_S0(KIRInternalAccessPolicy, KUIDIRAPP);
+
+ TInt err = KErrNone;
+ if(aDataProperty)
+ {
+ // For data properties, grant read access for all, but write access only for iRAPP
+ err = RProperty::Define( KUidActiveInternetRadioApp, aKey, aAttr,
+ KIRExternalAccessPolicy, KIRInternalAccessPolicy );
+ }
+ else
+ {
+ // For control properties, grant read access only for IRA, but write access for all
+ err = RProperty::Define( KUidActiveInternetRadioApp, aKey, aAttr,
+ KIRInternalAccessPolicy, KIRExternalAccessPolicy );
+ }
+ if ( err && err != KErrAlreadyExists )
+ {
+ User::Leave( err );
+ }
+ IRLOG_DEBUG( "CIRPubSub::DefinePropertyL - Exiting." );
+ }
+
+/*
+* CIRPubSub::DeleteProperty
+* Deletes a property
+*/
+
+void CIRPubSub::DeleteProperty( TUint aKey ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::DeleteProperty Entering" );
+ RProperty::Delete( KUidActiveInternetRadioApp, aKey );
+ IRLOG_DEBUG( "CIRPubSub::DeleteProperty - Exiting." );
+ }
+
+
+/*
+* CIRPubSub::PublishChannel
+* Publishes the property value for key KIRPSDataChannel
+*/
+
+void CIRPubSub::PublishChannel(const TDesC16& aChannelName ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishChannel - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSDataChannel,
+ aChannelName );
+ IRLOG_DEBUG( "CIRPubSub::PublishChannel - Exiting." );
+ }
+
+/*
+* CIRPubSub::PublishVolumeL
+* Publishes the property value for key KIRPSVolume
+*/
+
+void CIRPubSub::PublishVolume( TInt aVol ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishVolumeL - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSVolume , aVol );
+ IRLOG_DEBUG( "CIRPubSub::PublishVolumeL - Exiting." );
+ }
+
+/*
+* CIRPubSub::PublishPlayStop
+* Publishes the property value for playing status
+*/
+void CIRPubSub::PublishPlayStop ( TIRStopPlayState aPlayingState ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSPlayStop, aPlayingState );
+ IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Exiting." );
+ }
+
+/*
+* CIRPubSub::PublishApplicationRunningStateL
+* Publishes the property value for key KIRPSVolume
+*/
+
+void CIRPubSub::PublishApplicationRunningStateL( TIRPSApplicationRunningState
+ aRunningState ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::ConstructL - Entering" );
+ User::LeaveIfError( RProperty::Set( KUidActiveInternetRadioApp,
+ KIRPSDataApplicationRunning, aRunningState ) );
+ IRLOG_DEBUG( "CIRPubSub::ConstructL - Exiting." );
+ }
+
+// ---------------------------------------------------------------------------
+// Publishes meta data information.
+// ---------------------------------------------------------------------------
+//
+void CIRPubSub::PublishMetaDataL( const CIRMetaData& aMetaData ) const
+ {
+ IRLOG_INFO4( "CIRPubSub::PublishMetaDataL( aMetaData.Artist()=%S, aMetaData.Song()=%S, aMetaData.StreamUrl()=%S )",
+ &aMetaData.Artist(), &aMetaData.Song(), &aMetaData.StreamUrl() );
+
+ HBufC8* buffer = HBufC8::NewLC( aMetaData.Artist().Size() + aMetaData.Song().Size() +
+ aMetaData.StreamUrl().Size() );
+
+ TPtr8 bufferPtr( buffer->Des() );
+
+ RDesWriteStream stream( bufferPtr );
+ CleanupClosePushL( stream );
+
+ aMetaData.ExternalizeL( stream );
+ User::LeaveIfError( RProperty::Set( KUidActiveInternetRadioApp, KIRPSMetaData, bufferPtr ) );
+
+ CleanupStack::PopAndDestroy(&stream);
+ CleanupStack::PopAndDestroy( buffer );
+
+ IRLOG_DEBUG( "CIRPubSub::PublishMetaDataL - Exit" );
+ }
+
+/*
+* CIRPubSub::PublishChannelType
+* Publishes the property value for KIRPSChannelType
+*/
+void CIRPubSub::PublishChannelType ( TInt aChannelType ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelType, aChannelType );
+ IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Exiting." );
+ }
+
+/*
+* CIRPubSub::PublishChannelId
+* Publishes the property value for KIRPSChannelId
+*/
+void CIRPubSub::PublishChannelId ( TInt aChannelId ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelId, aChannelId );
+ IRLOG_DEBUG( "CIRPubSub::PublishPlayStop - Exiting." );
+ }
+
+/*
+* CIRPubSub::PublishChannelDesc
+* Publishes the property value for key KIRPSDataChannel
+*/
+
+void CIRPubSub::PublishChannelDesc(const TDesC16& aChannelDesc ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishChannel - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSDataChannelDesc,
+ aChannelDesc );
+ IRLOG_DEBUG( "CIRPubSub::PublishChannel - Exiting." );
+ }
+/*
+* CIRPubSub::PublishChannelMusicFlag
+* Publishes the property value for key KIRPSChannelMusicFlag
+*/
+
+void CIRPubSub::PublishChannelMusicFlag(const TDesC16& aChannelMusicFlag ) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishChannelMusicFlag - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSChannelMusicFlag,
+ aChannelMusicFlag );
+ IRLOG_DEBUG( "CIRPubSub::PublishChannelMusicFlag - Exiting." );
+ }
+ /*
+* CIRPubSub::PublishBufferingState
+* Publishes the property value for key KIRPSBufferingState
+*/
+
+void CIRPubSub::PublishBufferingState(TIRBufferingState aState) const
+ {
+ IRLOG_DEBUG( "CIRPubSub::PublishBufferingState - Entering" );
+ RProperty::Set( KUidActiveInternetRadioApp, KIRPSBufferingState,
+ aState );
+ IRLOG_DEBUG( "CIRPubSub::PublishBufferingState - Exiting." );
+ }
+// End of File