diff -r 6369bfd1b60d -r 08b5eae9f9ff upnpavcontroller/upnpavcontrollerserver/inc/upnpdeviceicondownloader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpavcontroller/upnpavcontrollerserver/inc/upnpdeviceicondownloader.h Wed Nov 03 11:45:09 2010 +0200 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2009 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: +* +*/ + +#ifndef C_UPNPDEVICEICONDOWNLOADER_H +#define C_UPNPDEVICEICONDOWNLOADER_H + +// Include files +#include +#include +#include + +// FORWARD DECLARATIONS +class CHttpDownloader; + +/** + * Class for observing device icon download + */ +class MUpnpDeviceIconDownloadObserver + { +public: + /** + * Notifies device icon download completed + * + * @param aDeviceUuid the device uuid indicates the device the icon belongs + * @param aError system wide error code indicates the download status + */ + virtual void DeviceIconDownloadedL( const TDesC8& aDeviceUuid, TInt aError ) = 0; + }; + +/** + * Class for device icon downloading + */ +class CUpnpDeviceIconDownloader: public CBase, + public MHttpTransferObserver + { + +public: + + /** + * Static 1st phase constructor + * + * @param aObserver download observer + * @param aIap used access point + * @return new instance + */ + static CUpnpDeviceIconDownloader* NewL( + MUpnpDeviceIconDownloadObserver& aObserver, + TUint aIap ); + + /** + * Destructor + */ + virtual ~CUpnpDeviceIconDownloader(); + +private: // From MHttpTransferObserver + void TransferProgress( TAny* aKey, TInt aBytes, TInt aTotalBytes ); + void ReadyForTransferL( TAny* aKey ); + void TransferCompleted( TAny* aKey, TInt aStatus ); + +public: // New functions + /** + * Starts download + * + * @param aDeviceUuid uuid of device + * @param aDeviceIconUrl url of device icon + */ + void StartDownloadL( const TDesC8& aDeviceUuid, const TDesC8& aDeviceIconUrl ); + + /** + * Cancels download + * + * @param aDeviceUuid uuid of device + */ + void CancelDownload( const TDesC8& aDeviceUuid ); + + /** + * Transfers icon file to the client + * + * @param aMessage message from client + * @param aSlot message slot to be used + * @param aDeviceUuid the device that's icon is transferred + */ + void TransferFileToClientL( const RMessage2& aMessage, TInt aSlot, + const TDesC8& aDeviceUuid ); + +private: + /** + * Private class for download queue handling + */ + class CEntry : public CBase + { + public: + static CEntry* NewLC( const TDesC8& aDeviceUuid, const TDesC8& aDeviceIconUrl ); + virtual ~CEntry(); + inline TPtrC8 DeviceUuid() const { return iDeviceUuid->Des(); } + inline TPtrC8 DeviceIconUrl() const { return iDeviceIconUrl->Des(); } + static TInt Compare( const TDesC8* aDeviceUuid, const CEntry& aEntry ); + private: + inline CEntry() {} + void ConstructL( const TDesC8& aDeviceUuid, const TDesC8& aDeviceIconUrl ); + + private: + HBufC8* iDeviceUuid; + HBufC8* iDeviceIconUrl; + }; + +private: + CUpnpDeviceIconDownloader( MUpnpDeviceIconDownloadObserver& aObserver, + TUint aIap ); + void ConstructL(); + void DownloadNext(); + void DownloadNextL( CEntry& aNext ); + void CleanupFilesL(); + TBool FileExistsL( const TDesC8& aDeviceUuid ); + void CleanupFilesIfNeededL(); + void CheckDiskSpaceL(); + TBool InProgress( const TDesC8& aDeviceUuid ); + +private: + MUpnpDeviceIconDownloadObserver& iObserver; + TInt iIap; + RFs iFs; + RPointerArray< CEntry > iQueue; + CEntry* iCurrent; // Own, can be NULL + CHttpDownloader* iDownloader; // Own + TBool iCleanupOnShutdown; + }; + + +#endif // C_UPNPDEVICEICONDOWNLOADER_H