upnpavcontroller/upnpavcontrollerhelper/inc/upnpitemutility.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) 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:      Utility for parsing upnp items
*
*/






#ifndef UPNPITEMUTILITY_H
#define UPNPITEMUTILITY_H

//  INCLUDES
#include <e32base.h>
#include <upnpobject.h>
#include <f32file.h>

// FORWARD DECLARATIONS
class CUpnpItem;
class CUpnpObject;
class CUpnpElement;
class CUpnpAttribute;

// CLASS DECLARATION

/**
* Utility for working with classes CUpnpObject and CUpnpItem.
* The class provides helpers to locating elements and attributes
* within the class, locating the resource and the URI, decoding
* some special elements like dc:date, res@duration etc.
*
* @lib upnpavcontrollerhelper.lib
* @since S60 3.2
*/
class UPnPItemUtility
    {

public: // Business logic methods

    /**
     * Tests if given object is of given class type.
     * Note that in upnp the object classes are organised in open
     * hierarchies, and this method will return true even if the class
     * is unknown, if aObject's class is derived from aClass.
     * see upnpconstantdefs.h for defined class definitions.
     * example:
     * TBool isPlaylist = BelongsToClass( item, KClassPlaylist );
     *
     * @since S60 3.2
     * @param aObject the object whose class is to be tested
     * @param aClass the class (in string form) against which to test
     * @return reference to the res-element
     */
    IMPORT_C static TBool BelongsToClass(
        const CUpnpObject& aObject,
        const TDesC8& aClass );

    /**
     * Extracts all RES elements from an item.
     * An item can include multiple resources, for instance
     * an item may include the same image scaled to multiple
     * resolutions, or a music track may include the track and
     * its CR cover art as thumbnail.
     * example:
     * RUPnPElementsArray array;
     * GetResElements( array );
     *
     * @since S60 3.2
     * @param aItem UPnP item where to extract the res element.
     * @return reference to the res-element
     */
    IMPORT_C static void GetResElements(
        const CUpnpObject& aObject,
        RUPnPElementsArray& aResElementsArray );

    /**
     * Finds the original resource of given item.
     * Note that if item has multiple resource elements,
     * this API will select the original and recommended one to use.
     * Also note that if an item includes a thumbnail or another
     * supporting resource, this can not be used to retrieve it.
     * Example:
     * const TDesC& uri = ResourceFromItemL( item ).Value();
     *
     * @since S60 3.2
     * @param aItem UPnP item where to extract the res element.
     * @return reference to the res-element
     */
    IMPORT_C static const CUpnpElement& ResourceFromItemL(
        const CUpnpItem& aItem );

    /**
     * Finds an element within an object.
     * see upnpconstantdefs.h for element name definitions.
     * example:
     * CUpnpElement* date = FindElementByName( item, KElementDate );
     *
     * @since S60 3.2
     * @param aObject the object where to look for elements
     * @param aName element name
     * @return a pointer to the element, or NULL if not found
     */
    IMPORT_C static  const CUpnpElement* FindElementByName(
        const CUpnpObject& aObject, const TDesC8& aName );

    /**
     * Finds an element within an object.
     * Leaves if not found.
     * see upnpconstantdefs.h for element name definitions.
     * example:
     * TDesC& genre = FindElementByNameL( item, KElementDate ).Value();
     *
     * @since S60 3.2
     * @param aObject the object where to look for elements
     * @param aName element name
     * @return a reference to the element found.
     */
    IMPORT_C static  const CUpnpElement& FindElementByNameL(
        const CUpnpObject& aObject, const TDesC8& aName );

    /**
     * Finds an attribute within an upnp element
     * see upnpconstantdefs.h for element name definitions.
     * example:
     * CUpnpAttribute* s = FindAttributeByName( resElem, KAttributeSize );
     *
     * @since S60 3.2
     * @param aElement the element where to look for attributes
     * @param aName attribute name
     * @return a pointer to the attribute found
     */
    IMPORT_C static const CUpnpAttribute* FindAttributeByName(
        const CUpnpElement& aElement, const TDesC8& aName );

    /**
     * Finds an attribute within an upnp element.
     * Leaves if not found
     * see upnpconstantdefs.h for attribute name definitions.
     * example:
     * TDesC& s = FindAttributeByNameL( resElem, KAttributeSize ).Value();
     *
     * @since S60 3.2
     * @param aElement the element where to look for attributes
     * @param aName attribute name
     * @return a reference to the attribute found
     */
    IMPORT_C static const CUpnpAttribute& FindAttributeByNameL(
        const CUpnpElement& aElement, const TDesC8& aName );

    /**
     * Converts given upnp date string into TTime.
     * example:
     * TTime time = UpnpDateAsTTime( FindElementByNameL(
     *      item, KElementDate ).Value() );
     *
     * @since S60 3.2
     * @param aUpnpDate value from item's dc:date element
     * @param aTime out variable to receive corresponding TTime
     * @return KErrNone if conversion was succesful, otherwise < 0
     *         for error values see TTime::Parse()
     */
    IMPORT_C static TInt UPnPDateAsTTime(
        const TDesC8& aUpnpDate, TTime& aTime );

    /**
     * Converts given upnp duration or position string to a value in
     * milliseconds.
     * Duration was received in res element duration attribute, or
     * in PositionInfo result from renderer.
     * example:
     * TInt duration = UpnpDurationAsMilliseconds( FindAttributeByNameL(
     *      ResourceFromItemL( item ), KAttributeDuration ).Value() );
     *
     * @since S60 3.2
     * @param aDuration duration or position as string
     * @param aMilliseconds out variable to receive the result
     * @return KErrNone if conversion was succesful, otherwise < 0
     */
    IMPORT_C static TInt UPnPDurationAsMilliseconds(
        const TDesC8& aDuration, TInt& aMilliseconds );

private:

    static void UPnPDateAsTTimeL( const TDesC8& aUpnpDate,
        TTime& aTime );


    };



#endif  // UPNPITEMUTILITY_H

// End of File