diff -r 8116cc943311 -r 5c72fd91570d services/terminalmodeservice/src/upnptmiconmapping.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/services/terminalmodeservice/src/upnptmiconmapping.cpp Tue Aug 31 16:06:48 2010 +0300 @@ -0,0 +1,197 @@ +/** +* Copyright (c) 2010 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: CUpnpTmIconMapping class implementation. +* +*/ + +//Include Files + +#include "upnptmiconmapping.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "upnptmiconmappingTraces.h" +#endif + + +_LIT8(KSvgMimeType, "image/svg+xml"); + +// ================= MEMBER FUNCTIONS ============================================== + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::NewL +// Two-phased constructor. +// --------------------------------------------------------------------------------- +// +CUpnpTmIconMapping* CUpnpTmIconMapping::NewL( ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_NEWL_ENTRY ); + CUpnpTmIconMapping* self = new (ELeave) CUpnpTmIconMapping(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_NEWL_EXIT ); + return self; + } + + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::CUpnpTmIconMapping +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------------- +// +CUpnpTmIconMapping::CUpnpTmIconMapping( ) + { + + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::ConstructL +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------------- +// +void CUpnpTmIconMapping::ConstructL() + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_CONSTRUCTL_ENTRY ); + iFileUrlArray = new ( ELeave ) CDesC8ArrayFlat( KExpectedMaxIconParms ); + iFilePathArray = new ( ELeave ) CDesCArrayFlat( KExpectedMaxIconParms ); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_CONSTRUCTL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::~CUpnpTmIconMapping +// Destructor +// --------------------------------------------------------------------------------- +// +CUpnpTmIconMapping::~CUpnpTmIconMapping() + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_CUPNPTMICONMAPPING_ENTRY ); + if ( iFileUrlArray ) + { + iFileUrlArray->Reset(); + delete iFileUrlArray; + } + if ( iFilePathArray ) + { + iFilePathArray->Reset(); + delete iFilePathArray; + } + iWidthArray.Close(); + iHeightArray.Close(); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_CUPNPTMICONMAPPING_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::AddIconFileInfoL +// Method is used to store information about each application icon which can be +// used to fetch iconPath for the corresponding iconUrl and to determine whether +// conversion is needed or not. +// @param aUrl Iccon URL. +// @param aPath Icon Path. +// @param aWidth Width of the icon. +// @param aHeight Height of the icon. +// ------------------------------------------------------------------------------------- +// +void CUpnpTmIconMapping::AddIconFileInfoL( const TDesC8& aUrl, const TDesC& aPath, + TInt aWidth, TInt aHeight ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_ADDICONFILEINFOL_ENTRY ); + iFileUrlArray->AppendL( aUrl ); + iFilePathArray->AppendL( aPath ); + iWidthArray.AppendL( aWidth ); + iHeightArray.AppendL( aHeight ); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_ADDICONFILEINFOL_EXIT ); + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::GetSvgIconPath +// Method is used to fetch the equivalent icon path for the requested icon url +// @param aUrl iconUrl +// @param aSvgFilePath[out] iconPath +// @return Returns the position of the filepath in the array if found else +// returns KErrNotFound. +// --------------------------------------------------------------------------------- +// +TInt CUpnpTmIconMapping::GetSvgIconPath( const TDesC8& aUrl,RBuf& aSvgFilePath ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_GETSVGICONPATH_ENTRY ); + TInt pos; + if ( iFileUrlArray->Find(aUrl,pos) == KErrNone ) + { + aSvgFilePath.Close(); + aSvgFilePath.Create((*iFilePathArray)[pos]); + } + else + { + // The requested file is not available + pos = KErrNotFound; + } + OstTraceFunctionExit0( CUPNPTMICONMAPPING_GETSVGICONPATH_EXIT ); + return pos; + } + +// --------------------------------------------------------------------------------- +// CUpnpTmIconMapping::IsConversionNeeded +// Method is used to fetch the dimensions of the icon which needs to be served and +// also return the information whether conversion is needed for a particular icon. +// @param aIndex Index of the icon filepath +// @param aClientIconPref Reference to Client Icon Preference object. +// @param[out] aIconWidth Width of the icon which needs to be sent. +// @param[out] aIconHeight Height of the icon which needs to be sent. +// @return Returns the boolean value for conversion is needed(true) or not(false). +// --------------------------------------------------------------------------------- +// +TBool CUpnpTmIconMapping::IsConversionNeeded( TInt aIndex, const CUpnpTmClientIconPref& aClientIconPref, + TInt& aIconWidth, TInt& aIconHeight ) + { + OstTraceFunctionEntry0( CUPNPTMICONMAPPING_ISCONVERSIONNEEDED_ENTRY ); + ASSERT( ( aIndex >= 0 ) && ( aIndex < iWidthArray.Count()) ); + TBool isConversionNeeded(ETrue); + // Fetch the client's icon preferences + const TDesC8& mimeType = aClientIconPref.MimeType(); + TInt iconWidth = aClientIconPref.Width(); + TInt iconHeight = aClientIconPref.Height(); + OstTraceExt2( TRACE_NORMAL, DUP1_CUPNPTMICONMAPPING_ISCONVERSIONNEEDED, "CUpnpTmIconMapping::IsConversionNeeded;iconWidth=%d;iconHeight=%d", iconWidth, iconHeight ); + + if ( mimeType.Compare(KSvgMimeType) == KErrNone ) + { + // Client supports "image/svg+xml" mime type icons + if ((( iconWidth == KErrNone ) || ( iconWidth == iWidthArray[aIndex] )) && + (( iconHeight == KErrNone ) || ( iconHeight == iHeightArray[aIndex] ))) + { + /* Either the client has not provided its dimension preferences or + preferred width and height also matches. So no conversion needed */ + isConversionNeeded = EFalse; + } + } + /* + * If the width and height fields are set properly then only use the client's + * specified icon dimensions else use the icon's original dimensions. + */ + if ( isConversionNeeded && iconWidth && iconHeight ) + { + // Use the dimensions specified by the client + aIconWidth = iconWidth; + aIconHeight = iconHeight; + } + else + { + // Use original dimensions + aIconWidth = iWidthArray[aIndex]; + aIconHeight = iHeightArray[aIndex]; + } + OstTraceExt2( TRACE_NORMAL, CUPNPTMICONMAPPING_ISCONVERSIONNEEDED, "CUpnpTmIconMapping::IsConversionNeeded;aIconWidth=%d;aIconHeight=%d", aIconWidth, aIconHeight ); + OstTraceFunctionExit0( CUPNPTMICONMAPPING_ISCONVERSIONNEEDED_EXIT ); + return isConversionNeeded; + }