/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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: Recognizer for the widget supported MIME types.
*
*/
#include "WidgetRecognizer.h"
#include "ImplementationProxy.h"
// CONSTANTS
_LIT(KWidgetExtension, ".wgz");
_LIT8(KWidgetMimeType,"application/x-nokia-widget");
//
// CWidgetsRecognizer
//
// ====================== MEMBER FUNCTIONS =============================
// ============================================================================
// CWidgetRecognizer::CWidgetRecognizer()
// Default constructor
//
// @since 3.1
// ============================================================================
CWidgetRecognizer::CWidgetRecognizer()
:CApaDataRecognizerType( KUidMimeWidgetRecognizer, CApaDataRecognizerType::EHigh )
{
iCountDataTypes = 1;
}
// ============================================================================
// From CApaDataRecognizerType
// Gets the size of buffer preferred for the purpose of recognizing the data type.
// @return The preferred data size.
// @since 3.1
// ============================================================================
TUint CWidgetRecognizer::PreferredBufSize()
{
return 0x80;
}
// ============================================================================
// From CApaDataRecognizerType
// Gets one of the data (MIME) types that the recognizer can recognize.
// @param aIndex - An index that identifies the data type. Typically,
// the minimum value is zero and the maximum value is the value of MimeTypesCount() - 1.
//
// @return The data (MIME) type.
// @since 3.1
// ============================================================================
TDataType CWidgetRecognizer::SupportedDataTypeL( TInt /*aIndex*/ ) const
{
// only support one widget mime type
return TDataType( KWidgetMimeType() );
}
// ============================================================================
// From CApaDataRecognizerType
// This implements recognition behaviour -- called by RecognizeL()
// @param aName - The name of the data; typically this is a file name
// containing the data to be recognized.
// @param aBuffer - A buffer containing data to be recognized; typically,
// this is read from the start of the file containing the data.
//
// @return void.
// @since 3.1
// ============================================================================
void CWidgetRecognizer::DoRecognizeL( const TDesC& aName, const TDesC8& /*aBuffer*/ )
{
iConfidence = ENotRecognized;
if ( aName.Length() >= 4 )
{
TInt dotPos = aName.LocateReverse( '.' );
if ( dotPos != KErrNotFound )
{
TInt extLength = aName.Length() - dotPos;
HBufC* ext = aName.Right( extLength ).AllocL();
CleanupStack::PushL( ext );
// recognize .wgz extensions.
if (ext->CompareF( KWidgetExtension ) == 0)
{
iDataType = TDataType( KWidgetMimeType );
iConfidence = ECertain;
}
CleanupStack::PopAndDestroy(); // ext
}
}
}
// ============================================================================
// CWidgetRecognizer::CreateRecognizerL
// Create CWidgetRecognizer instance
// ============================================================================
//
CApaDataRecognizerType* CWidgetRecognizer::CreateRecognizerL()
{
return new (ELeave) CWidgetRecognizer();
}
// Implementation table contains only one entry for widget recognizer
const TImplementationProxy ImplementationTable[] =
{
IMPLEMENTATION_PROXY_ENTRY(KWidgetRecognizerImplUIDValue, CWidgetRecognizer::CreateRecognizerL)
};
// ========================== OTHER EXPORTED FUNCTIONS =========================
// ============================================================================
// ImplementationGroupProxy
// Returns the filters implemented in this DLL
// Returns: The filters implemented in this DLL
// ============================================================================
//
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
{
aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
return ImplementationTable;
}