internetradio2.0/songhistoryinc/irsonghistoryengine.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* 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>
* ============================================================================
*/


#ifndef CIRSONGHISTORYENGINE_H
#define CIRSONGHISTORYENGINE_H

#include "irsonghistoryengpubsubnotifyhandler.h"
#include "irsonghistorydb.h"


class CIRSongHistoryEngPubSub;
class MSongHistoryUINotifyHandler;
class CIRMetaData;
class CIRSongHistoryInfo;
class RSongHistoryDb;
class MIRSongHistoryEngPubSubNotifyHandler;


enum TSongHistoryItemChange
{
	ENOCHANGE = 0,
	ECHANNELCHANGED,
	EMETADATACHANGED,
	EBLANKENTRIES
};

/**
* Engine component for Internet Radio SongHistory.
* This class is responsible for listening to relevant P&S keys and notifying the UI code whenever the listened keys change.
*/
NONSHARABLE_CLASS(CIRSongHistoryEngine) : public CBase,public MIRSongHistoryEngPubSubNotifyHandler
    {
    public:

    /**
    * Static constructor.
    * @param    aUiObserver   The observer to be notified of the changes in the keys.
    * @return   The newly created CIRSongHistoryEngine object.
    */
    	IMPORT_C static CIRSongHistoryEngine* NewL( MSongHistoryUINotifyHandler& aUiObserver );

    /**
    * Static constructor.
    * @param    aUiObserver   The observer to be notified of the changes in the keys.
    * @return   The newly created CIRSongHistoryEngine object.
    */

    	IMPORT_C static CIRSongHistoryEngine* NewLC( MSongHistoryUINotifyHandler& aUiObserver );

    /**
    * Destructor.
    */
 	   IMPORT_C ~CIRSongHistoryEngine();

    /**
    * Construction finalizer.
    * Must be called after CIRSongHistoryEngine::NewL.
    */
	   void ConstructL();


	//APIs to serve UI request

    /**
    * Invoked when UI request.
    * @param    aArray<CIRSongHistoryInfo>
    */
    	IMPORT_C void GetAllHistoryL( RPointerArray<CIRSongHistoryInfo>& aSongHistoryInfo );

    /**
    * Invoked when UI request.
    */
    	IMPORT_C TInt ClearAllHistory( );

    /**
    * Invoked when UI request.
    */
    	IMPORT_C TInt GetHistoryCount( );
    	
    /**
    * Called by the UI when a particular channel has been removed from the ISDS.
    */
        IMPORT_C TInt SyncHistory(TInt aChannelId);
        
    /**
    * Called by the UI when a particular channel has been changed in the ISDS.
    */
        
        IMPORT_C void UpdateSongHistoryDb( TInt aChannelId,
    	                          const TDesC& aChannelName, 
						          const TDesC& aChannelUrl,
							      const TDesC& aMusicFlag);
        
        /* called by the UI when delete a particular channel
         * */
        IMPORT_C TInt DeleteOneHistory(TInt aIndex);


  public:
  //this function made public for our internal testing. Has to be private without IMPORT_C
		/**
		* Invoked when the listened key is changed.
		* @param    aCategory   The category of the key that changed.
		* @param    aKey        The key that changed.
		* @param    aText       The new value of the key.
		*/

			IMPORT_C void HandleMetaDataReceivedL( const CIRMetaData& aMetaData );

	private:

		/**
		* Invoked when the listened key is changed.
		* @param    aCategory   The category of the key that changed.
		* @param    aKey        The key that changed.
		* @param    aText       The new value of the key.
		* Single wrapper function to be implemented in the engine class instead of two.
		*/
			void HandlePropertyChangeL( const TUid& aCategory, TUint aKey,
											   const TDesC8& aText ) ;


		/**
		* Invoked when the listened key is changed.
		* @param    aCategory   The category of the key that changed.
		* @param    aKey        The key that changed.
		* @param    aError      The error value.
		*/
			void HandlePropertyChangeErrorL( const TUid& aCategory, TUint aKey,
										 TInt aError );

		/**
		 * Invoked when data needs to be added
		 * @param	aMetaData	MetaData that needs to be added
		 * @param	aChannelName Channel name that needs to be added
		 */
		TSongHistoryItemChange DetectSongHistoryItemChangesL(const CIRMetaData& aMetaData,
					 const RBuf& aChannelName, const RBuf& aChannelUrl);

	private:

		/**
		* Constructor.
		* @param    aObserver   The observer to be notified of the changes
		* in the keys.
		*/
			CIRSongHistoryEngine( MSongHistoryUINotifyHandler & aUiObserver );


    private:

		/** An instance of songhistory database. */
		CIRSongHistoryDb* iSongHistoryDb;


        /** The observer to be notified of the database changes to the UI */
		MSongHistoryUINotifyHandler & iUiObserver;

        /** CIRSongHistoryEngPubSub objects subscribing for propery change */
        CIRSongHistoryEngPubSub *iChannelNameSub;
        
        CIRSongHistoryEngPubSub *iMetaDataSub;

    };

#endif//CIRSONGHISTORYENGINE_H