diff -r 000000000000 -r 2f259fa3e83a uiutils/gamerecognizer/src/GameRecognizer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiutils/gamerecognizer/src/GameRecognizer.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,135 @@ +/* +* 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: +* +*/ + + +#include +#include +#include +#include "GameRecognizer.h" + +// +// CGameRecognizer +// +CGameRecognizer::CGameRecognizer () +:CApaDataRecognizerType(KUidMimeGameDataRecognizerValue, CApaDataRecognizerType::EHigh) + { + iCountDataTypes= KSupportedGameDataMimetypes; + } + +TUint CGameRecognizer::PreferredBufSize() + { + // no buffer recognition yet + return 128; + } + +TDataType CGameRecognizer::SupportedDataTypeL(TInt aIndex) const + { + __ASSERT_DEBUG(aIndex>=0 && aIndex < KSupportedGameDataMimetypes, User::Invariant()); + switch (aIndex) + { + case 0: + default: + return TDataType( KGameDataMimeType ); + } + } + +void CGameRecognizer::DoRecognizeL( const TDesC& aName, const TDesC8& aBuffer) + { + TBool nameOk( EFalse ); + TBool headerOk( EFalse ); + + iConfidence = ENotRecognized; + if ( aBuffer.Length() < 10 ) + { + return; + } + + // First try the name. Then the data. + nameOk = NameRecognizedL( aName ); + headerOk = HeaderRecognized( aBuffer ); + + if ( nameOk && headerOk ) + { + iConfidence = ECertain; + } + else if ( !nameOk && headerOk) + { + iConfidence = EProbable; + } + else if ( nameOk && !headerOk ) + { + iConfidence = EPossible; + } + else + { + return; + } + + iDataType = TDataType( KGameDataMimeType ); + } + +TBool CGameRecognizer::HeaderRecognized( const TDesC8& aBuffer ) const + { + if ( aBuffer.Find( KGndHeader ) > 10 ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +TBool CGameRecognizer::NameRecognizedL( const TDesC& aName) const + { + TBool ret = EFalse; + if ( aName.Length() > 5 ) + { + TInt dotPos = aName.LocateReverse( '.' ); + if (dotPos != KErrNotFound) + { + TInt extLength = aName.Length() - dotPos; + HBufC* ext = aName.Right( extLength ).AllocL(); + CleanupStack::PushL( ext ); + if ( ext->CompareF( KDotNGD )==0 ) + { + ret = ETrue; + } + CleanupStack::PopAndDestroy( ext ); + } + } + return ret; + } + +CApaDataRecognizerType* CGameRecognizer::CreateRecognizerL() + { + return new (ELeave) CGameRecognizer(); + } + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KMimeGameDataRecognizerImplementationUid, + CGameRecognizer::CreateRecognizerL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + +// End of File