upnpframework/upnpmusicadapter/inc/upnplitefiller.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) 2005-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:  Provides services for filling MPX playlist
*
*/


#ifndef UPNPLITEFILLER_H
#define UPNPLITEFILLER_H

//  INCLUDES
#include <e32base.h>
#include "upnpplaylistfiller.h"

// FORWARD DECLARATIONS
class CUpnpAVDevice;
class CUPnPMusicAdapter;
class CMPXMediaArray;
class CUpnpObjectLite;

// CLASS DECLARATION

/**
 * A base class providing services for filling MPX playlist
 *
 * @lib upnpmusicadapter.lib
 * @since S60 3.2
 */
class CUPnPLiteFiller : public CBase,
                        public MUPnPPlaylistFiller
    {

public: // static factory construction

    /**
     * 1st phase constructor
     *
     * @since Series 60 3.2
     * @return a new CUPnPLiteFiller instance
     */
     static CUPnPLiteFiller* NewL();
        
    /**
     * Sets the index (starting from zero = the first inserted item)
     * of selected item. Playback will begin from the selected item.
     * If no item is selected, the first item is selected by default.
     * Note that this method must be called AFTER inserting the objects.
     *
     * @param aSelectedIndex index of the item selected
     * @since Series 60 3.2
     */
    IMPORT_C void SetSelectedIndex( TInt aSelectedIndex );
    
    /**
     * Set Source media server. Device id is needed for creating uri
     * @param aDevice source media server
     * @since Series 60 3.2
     */
    void SetSourceDeviceL( const CUpnpAVDevice& aDevice );
    
    /**
     * Sets the host for this filler
     *
     * @param aHost pointer to the music adapter in which context the
     * filler is running
     */
    void SetHost( CUPnPMusicAdapter& aHost );

    /**
     * The music adapter that hosts this filler
     *
     * @return the host music adapter
     */
    CUPnPMusicAdapter& Host() const;

    /**
     * Completes the filler, resulting it to be deleted
     */    
    void DoComplete();

    /**
     * See MUPnPPlaylistFiller
     */
    void FillL( CUPnPMusicAdapter& aHost, CMPXMediaArray& aPlaylist );

    /**
     * See MUPnPPlaylistFiller
     */
    void CancelFill();

    /**
     * See MUPnPPlaylistFiller
     */
    TInt PlaylistSize();
    
    /**
     * Index of selected item (where playback should start)
     *
     * @return the selected index
     */
    TInt SelectedIndex() const;

public: // construction/destruction

    /**
     * Destructor
     * @since Series 60 3.2
     */
    IMPORT_C virtual ~CUPnPLiteFiller();

public:
    /**
     * Fills a single item with given index into a mpx playlist.
     * if item is not an audio item, does not fill. Checks current
     * selected index and adjusts it if necessary.
     *
     * @param aPlaylist the MPX playlist
     * @param aItem the object to fill
     * @param aIndex playlist index of the item being added
     * @return void
     */
    void FillItemMpxPlaylistL( CMPXMediaArray& aPlaylist,
        const CUpnpObjectLite& aItem, TInt aIndex );

protected:

    /**
     * Default constructor
     *
     * @since Series 60 3.2
     */
    CUPnPLiteFiller();

private:
    /**
     * 2nd phase constructor
     *
     * @param aMediaServer External Media Server device
     * @param aObjectList Object to be filled
     * @since Series 60 3.2
     */
    void ConstructL();
    
    /**
     * Convert UPnP item to playlist item URI string
     * URI string format is upnp:<device_id>*<object_id>
     * 
     * @param aDeviceUid the UID of the device, in string form
     * @param aItem browsed UPnP item to be converted
     * @param aBuffer the buffer for result URI
     * @return playlist item descriptor
     */
    void ConvertToURI( const TDesC& aDeviceUid,
        const CUpnpObjectLite& aItem, TDes& aBuffer );

private: // data

    /**
     * The host music adapter in which context the
     * filler is running (not owned)
     */
    CUPnPMusicAdapter*                    iHost;

    /**
     * The media server we are playing on (not owned)
     */
    const CUpnpAVDevice*                  iSourceDevice;

    /**
     * Media server device id
     * (Owned)
     */
    HBufC*                                iDeviceUid;

    /**
     * index of selected item
     */
    TInt                                  iSelectedIndex;

    /**
     * Temporary buffer for 8->16-bit conversion
     */
    TBuf<KMaxUriSize>                     iTempBuf;

    };

#endif  // UPNPLITEFILLER_H

// End of File