upnpframework/upnpmusicadapter/inc/upnpmpxhelper.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 2006 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:  Helper class for some common MPX routines
*
*/


#ifndef C_UPNPMPXHELPER_H
#define C_UPNPMPXHELPER_H

// INCLUDES
#include <e32base.h>
#include "mpxmediatorobserver.h" // base class
#include "mpxcollectionobserver.h" // base class

// FORWARD DECLARATIONS
class CMPXMedia;
class MUPnPMpxHelperObserver;
class MMPXHarvesterUtility;
class MMPXCollectionUtility;
class CMPXCollectionMediator;


/**
 * A helper class for some common MPX routines
 *
 * @lib upnpmusicadapter.lib
 * @since S60 v3.1
 */
class CUPnPMpxHelper : public CBase
    , public MMPXMediatorObserver
    , public MMPXCollectionObserver
    {

public:

    /**
     * 1st phase constructor
     *
     * @param aModeId mode passed to MPX framework
     * @return a new CUPnPPlayListFiller instance
     * @since Series 60 3.1
     */
    static CUPnPMpxHelper* NewL( const TUid& aModeId );

    /**
     * Destructor
     *
     * @since Series 60 3.1
     */
    virtual ~CUPnPMpxHelper();

public: // the interface

    /**
     * Add a song or a playlist synchronously.
     * Note: does not take ownership of aMedia object. Caller must
     * delete aMedia after calling this method.
     * see mpxcollectionhelper in mpxmusicplayer
     * @param aMedia representation of the media to be added
     */
    void AddTrackL( CMPXMedia* aMedia );

    /**
     * add a song or a playlist asynchronously.
     * Note: does not take ownership of aMedia object. Caller must
     * delete aMedia after calling this method.
     * see mpxcollectionuihelper in mpxmusicplayer
     * @param aMedia representation of the media to be added
     * @param aObserver the observer interface
     */
    void AddPlaylistL( CMPXMedia* aMedia );

    /**
     * Open the collection in embedded mode with a Media Object.
     * see mpxcollectionuihelper in mpxmusicplayer
     * @param aHostId Host Process UID to identify this embedded instance
     * @param aMedia Media Object to open
     */
    void AddAndOpenL( const TUid& aHostId, CMPXMedia& aMedia );

protected:

    /**
     * Retrieve collection from URI
     */
    TInt FindCollectionIdL( const TDesC& aUri );

    /**
     * retrieve information for the required attributes
     */
    void FillInPlaylistDetailsL( CMPXMedia& aMedia );

    /**
     * see MMPXMediatorObserver
     */
    void HandleMediatorPathUpdatedL(
        CMPXMedia*& /*aMedia*/, TUid /*aOldPath*/ ) {}

    /**
     * see MMPXCollectionObserver
     */
    void HandleCollectionMediaL(
        const CMPXMedia& /*aMedia*/, TInt /*aError*/) {}

    /**
     * see MMPXCollectionObserver
     */
    void HandleCollectionMessageL(
        const TMPXCollectionMessage& /*aMessage*/ ) {}

    /**
     * see MMPXCollectionObserver
     */
    void HandleCollectionMessageL(
        const CMPXMessage& /*aMsg*/ ) {}

    /**
     * see MMPXCollectionObserver
     */
    void HandleOpenL(
        const CMPXMedia& /*aEntries*/,
        TInt /*aIndex*/, TBool /*aComplete*/, TInt /*aError*/ ) {}

    /**
     * see MMPXCollectionObserver
     */
    void HandleOpenL(
        const CMPXCollectionPlaylist& /*aPlaylist*/,
        TInt /*aError*/ ) {}

    /**
     * see MMPXCollectionObserver
     */
    void HandleCommandComplete(
        CMPXCommand* /*aCommandResult*/, TInt /*aError*/) {}

private: // private methods

    /**
     * constructor
     */
    CUPnPMpxHelper::CUPnPMpxHelper();

    /**
     * 2nd phase constructor
     */
    void CUPnPMpxHelper::ConstructL( const TUid& aModeId );

private: // members

    /**
     * MPX harvester utility
     */
    MMPXHarvesterUtility*       iHarvester;

    /**
     * MPX collection utility
     */
    MMPXCollectionUtility*      iCollectionUtil;

    /**
     * MPX collection mediator
     */
    CMPXCollectionMediator*     iMediator;

    /**
     * temporarily stored observer for async operations
     * NOT OWNED
     */
    MUPnPMpxHelperObserver*     iObserver;

    };

/**
 * Callback ingterface for async methods in CUPnPMpxHelper
 */
class MUPnPMpxHelperObserver
    {
public:

    /**
     * async response for AddL
     */
    void HandleAddComplete( TInt aError );

    /**
     * async response for OpenL
     */
    void HandleOpenComplete( TInt aError );

    };

#endif // C_UPNPMPXHELPER_H