Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

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

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 Discussions
Thread Thread Starter Forum Replies Last Post
How to rotate an image? ash_bhatia General Symbian C++ 8 2008-09-26 05:38
Comparing Contacts sahdev_nitin General Symbian C++ 5 2007-07-19 06:19
Implementing fixed framerate di01dkg Mobile Java General 3 2006-03-03 09:59
MMS Submission Via GSM Modem Application srikanth06 General Messaging 3 2004-06-02 10:26
Access point question msulaiman General Symbian C++ 2 2007-09-12 11:23
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX
     
    
            
            RDF Facets:
            
            
                        qfnZuserE5ftagQSxfrX