You Are Here:

Community: Wiki

This page was last modified on 9 December 2007, at 09:15.

Implementing recognisers

From Forum Nokia Wiki

Contents

Mime Recogniser DLL (.MDL)

In S60, we often need to open a viewer application for files. To help Symbian OS to find the proper viewer for a file, application developers need to implement MIME-type recognisers, which map file extension or file content to a handler application. The resulting DLL has .MDL extension and it is installed in c:\system\recogs directory.

Implementing MDL

New MIME recognizers can be implemented by tuning existing ones. Here is a source code example for an imaginary mime type.

MyRecognizer.h

// includes
#include <apmrec.h> // For CApaDataRecognizerType
// Mime type string and the extension
_LIT8( KMyMimeType, "application/vnd.mymime" );
_LIT( KDotMymime,".mym" );
// File header to look for from the data
_LIT8( KMyMimeHeader, "#!MY" );
// TUid of the recognizer
const TUid KUidMyMimeRecognizer( { 0x100530 } );
class CMyRecognizer : public CApaDataRecognizerType
{
public: // from CApaDataRecognizerType
CMyRecognizer();
virtual TUint PreferredBufSize();
virtual TDataType SupportedDataTypeL( TInt aIndex ) const;
private: // from CApaDataRecognizerType
virtual void DoRecognizeL(const TDesC& aName,
const TDesC8& aBuffer );
// New funtions
private:
// Check the file name extension
TBool NameRecognized( const TDesC& aName );
// Look into the data
TBool HeaderRecognized( const TDesC8& aName );
};
// End of file

MyRecognizer.cpp

// Includes
#include "MyRecognizer.h"
//
// Constructor
//
MyRecognizer::MyRecognizer()
:CApaDataRecognizerType(
KUidMyMimeRecognizer,
CApaDataRecognizerType::EHigh )
{
iCountDataTypes = 1;
}
//
// Preferred buffer size.
//
TUint MyRecognizer::PreferredBufSize()
{
return 128;
}
//
// For the framework for collecting the supported mime types list.
//
TDataType MyRecognizer::SupportedDataTypeL( TInt aIndex ) const
{
switch( aIndex )
{
case 0:
default:
return TDataType( KMyMimeType );
break;
}
}
//
// The framework calls this function for recognition
//
void MyRecognizer::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 = NameRecognized( 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( KMyMimeType );
};
//
// Check if the file header can be recognized
//
TBool MyRecognizer::HeaderRecognized( const TDesC8& aBuffer )
{
if ( aBuffer.Find( KMyMimeHeader ) )
return ETrue;
else
return EFalse;
}
//
// Check if the file name has ".mym" extension
//
TBool MyRecognizer::NameRecognized( const TDesC& aName )
{
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( KMyMimeHeader ) == 0 )
{
ret = ETrue;
}
CleanupStack::PopAndDestroy(); // ext
}
}
return ret;
}
//
// The gate function - ordinal 1
//
EXPORT_C CApaDataRecognizerType* CreateRecognizer()
{
CApaDataRecognizerType* thing = new MyRecognizer();
return thing; // NULL if new failed
}
//
// DLL entry point
//
GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
{
return KErrNone;
}
// End of file

MyRecognizer.mmp

TARGET MyRecognizer.MDL
TARGETTYPE MDL
UID 0x10003A19 0x100530
TARGETPATH \system\recogs\
SOURCEPATH ..\src
SOURCE MyRecocnizer.cpp
USERINCLUDE ..\inc
SYSTEMINCLUDE \epoc32\include
LIBRARY EUSER.LIB
LIBRARY APMIME.LIB

Related Wiki Articles

No related wiki articles found

Rate This

 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditDiigoTechnocratiTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
京ICP备05048969号    Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
RDF Facets: qdcZdescriptionQSxEa0E20WikiE20javaE20symbianE5fosE20s60E20maemoE20cE2bE2bE20WikiE20HomeE20WikiE20HelpE20OverviewE20GlossaryE20CreateE20PageE20ProposeE20anE20ArticleE20SpotlightE20TopicE20E2dE20WE52TE20WidgetsE20ProgrammingE20E4canguageE20E2dE20SymbianE20CE2bE2bE20E2dE20OpenE20CE2fCE2bE2bE20E2dE20JavaE20E2dE20FlashE20E4citeE20E2dE20PythonE20WebE20TechnologiesE20E2dE20WE52TE20WidgetsE20E2dE20WidSetsE20ToolsE20andE20SE44KE20CodeE20E45E78amplesE20KnowledgeE20BaseE20TechnologyE20AreasE20SoftwareE20PlatformsE20E44evelopmentE20ProcessE20E3fE3fWikiE20ChineseE20E3fE3fE3fWikiE20JapaneseE20PortugueseE2fBrazilianE20E52ussianE20WhatE20linksE20hereE20UploadE20fileE20SpecialE20pagesE20PrintableE20versionE44ownloadE20asE20PE44FE20GoE20ToE20E2eE2eE2eX qdcZidentifierQSxhttpE3aE2fE2fwikiE2eforumE2enokiaE2ecomE2findeE78E2ephpE2fJ2ME45E5fE52SSE5fParserE5fwithE5fKE58mlX qdcZpublisherQUxhttpE3aE2fE2fswE2enokiaE2ecomE2fidE2fc764fd1cE2d8b06E2d499aE2d9a6aE2d17c3903d5a65E2fforumE5fnokiaE5fcrawlerE5fagentX qdcZtitleQSxJ2ME45E20E52SSE20ParserE20withE20KE58mlE20E2dE20ForumE20NokiaE20WikiX qdcZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qdcZtypeQUqfntypeZE52esourceQ qdcZtypeQUqfntypeZWebpageQ qdcZtypeQUqmarsZManagedE52esourceQ qdcZtypeQUqwebZInformationE52esourceQ qdcZtypeQUqwebZPageQ qdcZtypeQUqwebZE52esourceQ qdcZtypeQUqrdfsZE52esourceQ qrssZdescriptionQSxEa0E20WikiE20javaE20symbianE5fosE20s60E20maemoE20cE2bE2bE20WikiE20HomeE20WikiE20HelpE20OverviewE20GlossaryE20CreateE20PageE20ProposeE20anE20ArticleE20SpotlightE20TopicE20E2dE20WE52TE20WidgetsE20ProgrammingE20E4canguageE20E2dE20SymbianE20CE2bE2bE20E2dE20OpenE20CE2fCE2bE2bE20E2dE20JavaE20E2dE20FlashE20E4citeE20E2dE20PythonE20WebE20TechnologiesE20E2dE20WE52TE20WidgetsE20E2dE20WidSetsE20ToolsE20andE20SE44KE20CodeE20E45E78amplesE20KnowledgeE20BaseE20TechnologyE20AreasE20SoftwareE20PlatformsE20E44evelopmentE20ProcessE20E3fE3fWikiE20ChineseE20E3fE3fE3fWikiE20JapaneseE20PortugueseE2fBrazilianE20E52ussianE20WhatE20linksE20hereE20UploadE20fileE20SpecialE20pagesE20PrintableE20versionE44ownloadE20asE20PE44FE20GoE20ToE20E2eE2eE2eX qfnZdistributionQUxhttpE3aE2fE2fwikiE2eforumE2enokiaE2ecomE2fX qfnZtypeQUqfntypeZE52esourceQ qfnZtypeQUqfntypeZWebpageQ qfnZupdatedQDx2008E2d10E2d02X qmarsZdescriptionQSxEa0E20WikiE20javaE20symbianE5fosE20s60E20maemoE20cE2bE2bE20WikiE20HomeE20WikiE20HelpE20OverviewE20GlossaryE20CreateE20PageE20ProposeE20anE20ArticleE20SpotlightE20TopicE20E2dE20WE52TE20WidgetsE20ProgrammingE20E4canguageE20E2dE20SymbianE20CE2bE2bE20E2dE20OpenE20CE2fCE2bE2bE20E2dE20JavaE20E2dE20FlashE20E4citeE20E2dE20PythonE20WebE20TechnologiesE20E2dE20WE52TE20WidgetsE20E2dE20WidSetsE20ToolsE20andE20SE44KE20CodeE20E45E78amplesE20KnowledgeE20BaseE20TechnologyE20AreasE20SoftwareE20PlatformsE20E44evelopmentE20ProcessE20E3fE3fWikiE20ChineseE20E3fE3fE3fWikiE20JapaneseE20PortugueseE2fBrazilianE20E52ussianE20WhatE20linksE20hereE20UploadE20fileE20SpecialE20pagesE20PrintableE20versionE44ownloadE20asE20PE44FE20GoE20ToE20E2eE2eE2eX qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX qrdfZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qrdfZtypeQUqfntypeZE52esourceQ qrdfZtypeQUqfntypeZWebpageQ qrdfZtypeQUqmarsZManagedE52esourceQ qrdfZtypeQUqwebZInformationE52esourceQ qrdfZtypeQUqwebZPageQ qrdfZtypeQUqwebZE52esourceQ qrdfZtypeQUqrdfsZE52esourceQ
User Rating: qfnZuserE5FratingQNx2E2E0000X