profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:30:29 +0100
branchRCL_3
changeset 19 cd54903d48da
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002-2006 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:   A wrapper interface around MMF (Multimedia Framework) to get
*                information about MIME-types supported by MMF.
*
*/



// CLASS HEADER
#include    "ProfileMmfInfoUtility.h"

// INTERNAL INCLUDES

// EXTERNAL INCLUDES
#include <e32std.h>
#include <badesca.h>
#include <mmf/common/mmfcontrollerpluginresolver.h>
#include <caf/caf.h>
namespace
	{
	// CONSTANTS
	_LIT8( KProfileRngMimeType,    "application/vnd.nokia.ringing-tone" );
	//_LIT8( KProfilePlainTextType,  "text/plain" );
    }

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CProfileMmfInfoUtility::IsMimeTypeSupported
// -----------------------------------------------------------------------------
//
TBool ProfileMmfInfoUtility::IsMimeTypeSupportedL( const TDesC8& aMimeType )
    {

    //if( aMimeType.CompareF( KProfilePlainTextType ) == 0 )
    //    {
    //    return EFalse;
    //    }

    if( aMimeType.CompareF( KProfileRngMimeType ) == 0 )
        {
        return ETrue;
        }

    TBool result( EFalse );

	CMMFFormatSelectionParameters* formatPrms =
        CMMFFormatSelectionParameters::NewLC();
	CMMFControllerPluginSelectionParameters* controllerPrms =
        CMMFControllerPluginSelectionParameters::NewLC();

    // Empty format parameters means: "get all the supported formats"
    controllerPrms->SetRequiredPlayFormatSupportL( *formatPrms );
    RMMFControllerImplInfoArray cntrlArray;
    controllerPrms->ListImplementationsL( cntrlArray );

    for( TInt i( cntrlArray.Count() - 1 ); i >= 0 && !result; --i )
        {
        const RMMFFormatImplInfoArray&
            infoArray( cntrlArray[i]->PlayFormats() );

        for( TInt j( infoArray.Count() - 1 ); j >= 0; --j )
            {
            if( infoArray[j]->SupportsMimeType( aMimeType ) )
                {
                result = ETrue;
                break;
                }
            }
        }
	
	cntrlArray.ResetAndDestroy();
	cntrlArray.Close();
    CleanupStack::PopAndDestroy( 2, formatPrms );

    return result;
    }

// -----------------------------------------------------------------------------
// CProfileMmfInfoUtility::IsHeaderDataSupportedL
// -----------------------------------------------------------------------------
//
TBool ProfileMmfInfoUtility::IsHeaderDataSupportedL( const TDesC& aFileName )
	{
	TBool result( EFalse );
	//the max header length is 256 bytes
	const TInt KMaxHeaderLength( 256 );
	HBufC8* header = HBufC8::NewLC( KMaxHeaderLength );
	TPtr8 headerPtr = header->Des();
	GetFileHeaderDataL( aFileName, headerPtr, KMaxHeaderLength );
	CMMFFormatSelectionParameters* formatPrms =
			CMMFFormatSelectionParameters::NewLC();
	CMMFControllerPluginSelectionParameters* controllerPrms =
			CMMFControllerPluginSelectionParameters::NewLC();

	// Empty format parameters means: "get all the supported formats"
	controllerPrms->SetRequiredPlayFormatSupportL( *formatPrms );
	RMMFControllerImplInfoArray cntrlArray;
	controllerPrms->ListImplementationsL( cntrlArray );

	for ( TInt i( cntrlArray.Count() - 1 ); i >= 0 && !result; --i )
		{
		const RMMFFormatImplInfoArray& infoArray( cntrlArray[i]->PlayFormats() );

		for ( TInt j(infoArray.Count() - 1); j >= 0; --j )
			{
			if ( infoArray[j]->SupportsHeaderDataL( *header ) )
				{
				result = ETrue;
				break;
				}
			}
		}

	cntrlArray.ResetAndDestroy();
	cntrlArray.Close();
	CleanupStack::PopAndDestroy( 3, header );//controllerPrms, formatPrms and header

	return result;
	}

// -----------------------------------------------------------------------------
// CProfileMmfInfoUtility::GetFileHeaderDataL
// -----------------------------------------------------------------------------
//
void ProfileMmfInfoUtility::GetFileHeaderDataL( const TDesC& aFileName,
		TDes8& aHeaderData, TInt aMaxHeaderLength )
	{
	TInt error = KErrNone;
	using namespace ContentAccess;
	TVirtualPathPtr path( aFileName, ContentAccess::KDefaultContentObject );
	CData* data = CData::NewLC( path, EContentShareReadWrite );
	TInt size = 0;
	data->DataSizeL( size );
	if ( size > 0 )
		{
		if ( size > aMaxHeaderLength )
			size = aMaxHeaderLength;
		TInt pos = 0;
		error = data->Seek( ESeekStart, pos );
		error = data->Read( aHeaderData, size );
		}
	CleanupStack::PopAndDestroy(); // data
	}

//  End of File