--- a/internetradio2.0/songhistorysrc/irsonghistoryengine.cpp Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,491 +0,0 @@
-/*
-* 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: Engine class to notify channel name/metadata changes to SongHistoryDb and UI
-*
-*/
-
-
-/* ---------------------------------------------------------------------------
-* Version history:
-* Template version:
-* <ccm_history>
-*
-* Version: 3, Thu Apr 14 12:00:00 2008 by Rohit
-* Ref:
-* Pc lint fixes
-*
-* Version: 2, Thu Apr 10 20:00:00 2008 by Rohit
-* Ref:
-* Implemented SongHistory changes for channelwise songs
-*
-* </ccm_history>
-* ============================================================================
-*/
-
-#include "irpubsubkeys.h"
-#include "irsonghistoryengine.h"
-#include "uinotifyhandler.h"
-#include "irsonghistoryengpubsub.h"
-#include "irmetadata.h"
-#include "irdebug.h"
-
-class CIRSongHistoryDb;
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::CIRSongHistoryEngine
-// Default Constructor.
-// ---------------------------------------------------------------------------
-//
-CIRSongHistoryEngine::CIRSongHistoryEngine(MSongHistoryUINotifyHandler& aUiObserver )
- :iUiObserver( aUiObserver )
-{
-}
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::ConstructL
-// Second-phase constructor
-// ---------------------------------------------------------------------------
-//
-void CIRSongHistoryEngine::ConstructL()
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::ConstructL" );
-
- iSongHistoryDb = CIRSongHistoryDb::NewL();
-
-
-
- //Subsciber for the meta data
- iMetaDataSub = CIRSongHistoryEngPubSub::NewL( *this,
- KUidActiveInternetRadioApp,KIRPSMetaData, RProperty::ELargeText) ;
-
- IRLOG_DEBUG( "CIRSongHistoryEngine::ConstructL - Exiting." );
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::NewL()
-// Static constructor.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRSongHistoryEngine* CIRSongHistoryEngine::NewL(
- MSongHistoryUINotifyHandler & aUiObserver)
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::NewL - Entering" );
- CIRSongHistoryEngine* self = NewLC( aUiObserver);
- CleanupStack::Pop( self );
- IRLOG_DEBUG( "CIRSongHistoryEngine::NewL - Exiting." );
- return self;
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::NewLC()
-// Static constructor.
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C CIRSongHistoryEngine* CIRSongHistoryEngine::NewLC(
- MSongHistoryUINotifyHandler & aUiObserver)
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::NewLC - Entering" );
- CIRSongHistoryEngine* self = new ( ELeave ) CIRSongHistoryEngine( aUiObserver );
- CleanupStack::PushL( self );
- self->ConstructL();
- IRLOG_DEBUG( "CIRSongHistoryEngine::NewLC - Exiting." );
- return self;
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::~CIRSongHistoryEngine()
-// standard C++ destructor
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRSongHistoryEngine::~CIRSongHistoryEngine()
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::~CIRSongHistoryEngine - Entering" );
-
- delete iSongHistoryDb;
- delete iChannelNameSub;
- delete iMetaDataSub;
-
- IRLOG_DEBUG( "CIRSongHistoryEngine::~CIRSongHistoryEngine - Exiting." );
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::HandleMetaDataReceivedL()
-// Invoked when any listened P&S key is changed.
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C void CIRSongHistoryEngine::HandleMetaDataReceivedL( const CIRMetaData& aMetaData )
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::HandleMetaDataChangeL - Entering" );
-
- // Read Channel Name
- RBuf channelName;
-
- TBuf<KMAXLENGTH> channelNameBuffer;
- RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannel, channelNameBuffer);
- channelName.Create(channelNameBuffer.Length());
- channelName.CleanupClosePushL();
- channelName.Copy(channelNameBuffer);
-
- TInt channelType;
- RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelType, channelType);
-
- TInt channelId;
- RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelId, channelId);
-
- // Read Channel Url
- RBuf channelUrl;
-
- TBuf<KMAXLENGTH> channelUrlBuffer;
- RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelUrl, channelUrlBuffer);
- channelUrl.Create(channelUrlBuffer.Length());
- channelUrl.CleanupClosePushL();
- channelUrl.Copy(channelUrlBuffer);
-
-
-
- RBuf channelDesc;
-
- TBuf<KMAXLENGTH> channelDescBuffer;
-
- RProperty::Get ( KUidActiveInternetRadioApp, KIRPSDataChannelDesc, channelDescBuffer);
- channelDesc.Create(channelDescBuffer.Length());
- channelDesc.CleanupClosePushL();
- channelDesc.Copy(channelDescBuffer);
-
- RBuf imageUrl;
- imageUrl.Create(KNullDesC().Length());
- imageUrl.CleanupClosePushL();
- imageUrl.Copy(KNullDesC);
-
- RBuf musicFlag;
-
- TBuf<KMAXLENGTH> musicFlagBuffer;
-
- if(channelType==1)
- {
- RProperty::Get ( KUidActiveInternetRadioApp, KIRPSChannelMusicFlag, musicFlagBuffer);
- musicFlag.Create(musicFlagBuffer.Length());
- musicFlag.CleanupClosePushL();
- musicFlag.Copy(musicFlagBuffer);
- }
- else
- {
- musicFlag.Create(KNullDesC().Length());
- musicFlag.CleanupClosePushL();
- musicFlag.Copy(KNullDesC);
- }
-
- if(channelType==1)
- {
- TInt ret = iSongHistoryDb->GetIdPresentInDbL( channelId );
- if(ret)
- {
- TInt modified = iSongHistoryDb->UpdateSongHistoryDbL( channelId ,
- channelName ,channelUrl ,imageUrl ,musicFlag);
- if(modified)
- {
- iUiObserver.ChannelChangedL( aMetaData.Song(),aMetaData.Artist(),
- channelName, channelUrl );
- }
- }
-
- }
-
- TSongHistoryItemChange changeCode = DetectSongHistoryItemChangesL(aMetaData,
- channelName, channelUrl);
-
- if(changeCode==EBLANKENTRIES || changeCode == ENOCHANGE )
- {
-
- CleanupStack::PopAndDestroy(&musicFlag);
- CleanupStack::PopAndDestroy(&imageUrl);
- CleanupStack::PopAndDestroy(&channelDesc);
- CleanupStack::PopAndDestroy(&channelUrl);
- CleanupStack::PopAndDestroy(&channelName);
- return;
- }
-
- RBuf delSongName;
- delSongName.CleanupClosePushL();
- RBuf delArtistName;
- delArtistName.CleanupClosePushL();
- RBuf delChannelName;
- delChannelName.CleanupClosePushL();
- RBuf delChannelUrl;
- delChannelUrl.CleanupClosePushL();
- TBool bExceededMax = iSongHistoryDb->AddToSongHistoryDbL( aMetaData.Song(),
- aMetaData.Artist(),
- channelName,
- channelUrl,
- delSongName,
- delArtistName,
- delChannelName,
- delChannelUrl ,
- channelType,
- channelId,
- 64,
- channelDesc,
- imageUrl,
- musicFlag
- );
- if( bExceededMax )
- {
- if( 0 == iSongHistoryDb->GetChannelSongsCountL(delChannelName,delChannelUrl) )
- {
- iUiObserver.RemoveChannelEntry(delSongName, delArtistName, delChannelName, delChannelUrl);
- }
- else
- {
- iUiObserver.RemoveSongEntry(delSongName, delArtistName, delChannelName, delChannelUrl);
- }
- }
-
-
- if( changeCode == ECHANNELCHANGED ) // channel change detected
- {
- iUiObserver.ChannelChangedL( aMetaData.Song(),aMetaData.Artist(), channelName, channelUrl );
- }
- else // same channel playing next song
- {
- iUiObserver.NextSongReceivedL( aMetaData.Song(),aMetaData.Artist(), channelName, channelUrl );
- }
-
- CleanupStack::PopAndDestroy(&delChannelUrl);
- CleanupStack::PopAndDestroy(&delChannelName);
- CleanupStack::PopAndDestroy(&delArtistName);
- CleanupStack::PopAndDestroy(&delSongName);
-
- CleanupStack::PopAndDestroy(&musicFlag);
- CleanupStack::PopAndDestroy(&imageUrl);
- CleanupStack::PopAndDestroy(&channelDesc);
- CleanupStack::PopAndDestroy(&channelUrl);
- CleanupStack::PopAndDestroy(&channelName);
-
-
- IRLOG_DEBUG( "CIRSongHistoryEngine::HandleMetaDataChangeL - Exiting." );
-}
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::DetectSongHistoryItemChangesL()
-// To detect any change in the song history items.
-// ---------------------------------------------------------------------------
-//
-
-TSongHistoryItemChange CIRSongHistoryEngine::DetectSongHistoryItemChangesL(
- const CIRMetaData& aMetaData, const RBuf& aChannelName, const RBuf& aChannelUrl)
-{
- if(aChannelName.Length() == 0)
- {
- return EBLANKENTRIES;
- }
-
- //If the meta data is not available
- if(((aMetaData.Song()).Length() == 0) && ((aMetaData.Artist()).Length() == 0))
- {
- return EBLANKENTRIES;
- }
-
- RBuf song;
- song.CleanupClosePushL();
- RBuf artist;
- artist.CleanupClosePushL();
- RBuf channel;
- channel.CleanupClosePushL();
- RBuf url;
- url.CleanupClosePushL();
-
- TRAPD( error, iSongHistoryDb->GetLastHistoryItemL(song, artist, channel, url));
- if( error )
- {
- IRLOG_DEBUG( "CIRSongHistoryEngine::DetectSongHistoryItemChangesL() - Failed while GetLastHistoryItemL()" );
- }
-
- TSongHistoryItemChange retval = ENOCHANGE; // pc-lint # 644 fix
-
- if((song == aMetaData.Song() ) && (artist == aMetaData.Artist()) &&
- (channel == aChannelName) && (url == aChannelUrl))
- {
- retval = ENOCHANGE;
- }
- else if( channel != aChannelName || url != aChannelUrl )
- {
- retval = ECHANNELCHANGED;
- }
- else if( song != aMetaData.Song() || artist != aMetaData.Artist() )
- {
- retval = EMETADATACHANGED;
- }
- else
- {
- // pc-lint # 961 fix
- }
-
- CleanupStack::PopAndDestroy(&url);
- CleanupStack::PopAndDestroy(&channel);
- CleanupStack::PopAndDestroy(&artist);
- CleanupStack::PopAndDestroy(&song);
-
- return retval;
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::HandlePropertyChangeErrorL
-// Invoked when an error has occured while fetching the new value of any listened P&S key.
-// ---------------------------------------------------------------------------
-//
-void CIRSongHistoryEngine::HandlePropertyChangeErrorL( const TUid& /*aCategory*/,
- TUint /*aKey*/, TInt aError )
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeErrorL" );
- if (aError < 0)
- {
- //Some action has to be taken
- }
- IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeErrorL" );
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::HandlePropertyChangeL
-// Invoked when any listened P&S key is changed.
-// ---------------------------------------------------------------------------
-
-void CIRSongHistoryEngine::HandlePropertyChangeL( const TUid& aCategory,
- TUint aKey, const TDesC8& aText )
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeL" );
- if ( aCategory == KUidActiveInternetRadioApp )
- {
- if( aKey == KIRPSDataChannel )
- {
- }
- else if( aKey == KIRPSMetaData )
- {
- CIRMetaData* metaData = CIRMetaData::NewL( aText );
- CleanupStack::PushL( metaData );
- HandleMetaDataReceivedL( *metaData );
- CleanupStack::PopAndDestroy( metaData );
- }
- else
- {
- // To avoid PC lint error
- }
- }
- IRLOG_DEBUG( "CIRSongHistoryEngine::HandlePropertyChangeL - Exiting." );
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::GetAllHistoryL
-// Invoked when when UI request.
-// Getting the data from SongHistoryDb.
-// ---------------------------------------------------------------------------
-
-EXPORT_C void CIRSongHistoryEngine::GetAllHistoryL(
- RPointerArray<CIRSongHistoryInfo>& aSongHistoryInfo )
-{
- iSongHistoryDb->GetAllSongHistoryListL(aSongHistoryInfo);
-
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::ClearAllHistory
-// Invoked when when UI request.
-// Clears the SongHistoryDb.
-// ---------------------------------------------------------------------------
-
-EXPORT_C TInt CIRSongHistoryEngine::ClearAllHistory( )
-{
- TInt ret = 0;
- ret = iSongHistoryDb->ClearAllSongHistoryFromDb();
- return ret;
-}
-
-EXPORT_C TInt CIRSongHistoryEngine::DeleteOneHistory(TInt aIndex)
-{
- return iSongHistoryDb->DeleteOneHistory(aIndex);
-}
-
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::GetHistoryCount
-// Invoked when when UI request.
-// Gets the count of the SongHistoryDb.
-// ---------------------------------------------------------------------------
-
-EXPORT_C TInt CIRSongHistoryEngine::GetHistoryCount()
-{
- TInt HistoryCount = 0;
- HistoryCount = iSongHistoryDb->CountSongHistoryDb();
- return HistoryCount;
-}
-
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::SyncHistory
-// Invoked when when UI request.
-// Synchronises the Song history DB with the new data in the ISDS.
-// ---------------------------------------------------------------------------
-
-EXPORT_C TInt CIRSongHistoryEngine::SyncHistory(TInt aChannelId)
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::SyncHistory - Entering." );
- TRAPD(err,iSongHistoryDb->SyncSongHistoryDbL(aChannelId));
- if(err)
- {
-
- }
- IRLOG_DEBUG( "CIRSongHistoryEngine::SyncHistory - Exiting." );
- return KErrNone;
-}
-// ---------------------------------------------------------------------------
-// CIRSongHistoryEngine::UpdateSongHistoryDB
-// Invoked when when UI request.
-// Synchronises the Song history DB with the new data in the ISDS.
-// ---------------------------------------------------------------------------
-
-EXPORT_C void CIRSongHistoryEngine::UpdateSongHistoryDb(TInt aChannelId,
- const TDesC& aChannelName,
- const TDesC& aChannelUrl,
- const TDesC& aMusicFlag)
-{
- IRLOG_DEBUG( "CIRSongHistoryEngine::UpdateSongHistoryDb - Entering." );
- TInt ret = KErrNone ;
- TRAPD(err,ret = iSongHistoryDb->GetIdPresentInDbL( aChannelId ));
- if(err)
- {
- return;
- }
- if(ret)
- {
- TRAPD(err,iSongHistoryDb->UpdateSongHistoryDbL( aChannelId ,
- aChannelName ,
- aChannelUrl ,
- aChannelUrl,
- aMusicFlag));
- if(err)
- {
- return ;
- }
- }
-
- IRLOG_DEBUG( "CIRSongHistoryEngine::UpdateSongHistoryDb - Exiting." );
-}