upnpmediaserver/mediaserverengine/inc/upnpiconmanager.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

/** @file
* Copyright (c) 2008-2008 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:  Declares CUpnpIconManager class
*
*/



#ifndef C_CUPNPICONMANAGER_H
#define C_CUPNPICONMANAGER_H

// INCLUDES
#include <f32file.h>

// FORWARD DECLARATIONS
class CUpnpIcon;
class CUpnpDeviceImplementation;
class CUpnpDevice;
class CUpnpMediaServerDescriptionProvider;
class CUpnpDeviceDescriptionStore;

// CLASS DECLARATION

/**
 *  Class is responsible for MS icon managing
 *  Handles all request releated to icons
 *  Such as: Adding, Updating and Removing icons to/from MS description
 *  @since S60 v3.2
 */
class CUpnpIconManager: public CBase
    {
public:
    /**
     * Two-phased constructor.
     * @param aDescriptionFile file with device description xml
     * @param aDescriptionProvider description provider
     */
    static CUpnpIconManager* NewL( CUpnpDeviceDescriptionStore& iDescriptionStore,
                                   CUpnpMediaServerDescriptionProvider& aDescriptionProvider );

    /**
     * Two-phased constructor.
     * @param aDescriptionFile file with device description xml
     * @param aDescriptionProvider description provider
     */
    static CUpnpIconManager* NewLC( CUpnpDeviceDescriptionStore& iDescriptionStore,
                                    CUpnpMediaServerDescriptionProvider& aDescriptionProvider );

    /**
     * Destructor
     */
    ~CUpnpIconManager();
    
    /**
    * Adds icon
    * @param aIconDes icon description( serialized icon )
    */
    void AddIconL( const TDesC8& aIconDes );

    /**
    * Updates icon
    * @param aNewIconDes new icon description( serialized icon )
    * @param aUrl url of icon which will be updated
    */
    void UpdateIconL( const TDesC8& aNewIconDes, const TDesC8& aUrl );

    /**
    * Removes icon
    * @param url of icon which will be deleted
    */
    void RemoveIconL( const TDesC8& aUrl );

    /**
    * Removes all icons
    */
    void RemoveIconsL();

private:
    /**
    * Creates icon path
    * @return icon path
    */
    HBufC* GetIconPathLC();

    /**
    * Returns icon name
    * @param aPath
    * @return icon name
    */
    HBufC* GetIconNameLC( const TDesC8& aPath );

    /**
    * Copy icon to MS private directory
    * @param aIcon icon which will be copied
    * @param aDestinationPath icon's destination directory
    */
    void CopyIconToPrivateL( const CUpnpIcon* icon , const TDesC& destinationPath );

    /**
    * Prepare beckup copy of icon which is going to be updated
    * @param aPath path to icon which going to be beckuped
    * return pointer to beckup filename, used in rollback operation
    */
    HBufC* PrepareIconToRollbackLC( const TDesC& aPath );

    /**
    * Updates icon
    * @param aIcon new icon
    * @param aDestinationPath old icon path
    */
    void DoUpdateIconL( CUpnpIcon* aIcon, const TDesC& aDestinationPath );

    /**
    * Deletes icon from FS
    * @param aPath path to icon which is delete
    * @returns KErrNone if succesfull or other error code of failed
    */
    TInt DeleteIconFile( const TDesC& aPath );

    /**
    * Makes an attempt to restore icon from it's original path
    * @param aUrl icons URL
    */
    void RestoreFromOrginalPathL( const TDesC8& aUrl );

    /**
    * Checks if icon already exist in device iconList
    * Leaves with KErrNotFound if icon doesn't exist
    * @param aUrl an icon's URL to be checked
    */
    TInt FindIcon( const TDesC8& aUrl );

    /**
     * Adds all icons to the description property map.
     * 
     * @since S60 5.1
     */
    void AddIconsToDescriptionPropertyMapL();
    
private:

    /**
     * Two-phased constructor.
     * @param aDescriptionFile file with device description xml
     */
    void ConstructL();

    /**
     * Constructor.
     * @param aDescriptionProvider description provider
     */
    CUpnpIconManager( CUpnpDeviceDescriptionStore& iDescriptionStore,
                      CUpnpMediaServerDescriptionProvider& aDescriptionProvider );

private:
    
    /** File session handler - owned */
    RFs iFileSession;
    
    /** Icon list used for icon operation when device is not started */
    RPointerArray< CUpnpIcon > iIconList;
    
    /** Description provider - not owned */
    CUpnpMediaServerDescriptionProvider& iDescriptionProvider;
    
    /** Description store */
    CUpnpDeviceDescriptionStore& iDescriptionStore; 
    };


#endif//C_CUPNPICONMANAGER_H