symbianrecognizer.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:2k
源码类别:

Symbian

开发平台:

C/C++

  1. #include <apgcli.h> // RApaLsSession
  2. #include <apmrec.h> // CApaDataRecognizerType
  3. #include <apmstd.h>
  4. #include <utf.h>
  5. #include "hxresult.h"
  6. #include "hxbuffer.h"
  7. #include "recognizer.h"
  8. static TDataType GetMimeTypeL(const TDesC& fileName, const TDesC8& fileBuf)
  9. {
  10.     TDataType type;
  11.     RApaLsSession ls;
  12.     if (ls.Connect() == KErrNone)
  13.     {
  14. TDataRecognitionResult rr;
  15. ls.RecognizeData(fileName, fileBuf, rr);
  16.     
  17. if (rr.iConfidence != CApaDataRecognizerType::ENotRecognized)
  18. {
  19.     type = rr.iDataType;
  20. }
  21. ls.Close();
  22.     }
  23.     return type;
  24. }
  25. STDMETHODIMP CHXFileRecognizer::GetMimeType(const char* pFileName,
  26.     IHXBuffer* pBuffer,
  27.     REF(IHXBuffer*) pMimeType)
  28. {
  29.     HX_RESULT ret = HXR_FAILED;
  30.     if (pBuffer && pBuffer->GetSize() > 0)
  31.     {
  32. TInt err = KErrNoMemory;
  33.         if (IsSDPFile(pBuffer))
  34.         {
  35.             // convert descriptor MIME type to IHXBuffer
  36.             pMimeType = new CHXBuffer;
  37.             if (pMimeType)
  38.             {
  39.                 pMimeType->AddRef();
  40.                 int len = strlen("application/sdp");
  41.         pMimeType->Set((const UCHAR*)"application/sdp", len + 1);
  42.         ((char*)pMimeType->GetBuffer())[len] = '';
  43.         return HXR_OK;
  44.             }
  45.         }
  46. // convert file name to descriptor
  47. TPtrC8 from((TUint8*)pFileName);
  48. HBufC* pUCFileName = HBufC::New(from.Length());
  49. if (pUCFileName)
  50. {
  51.     TPtr to = pUCFileName->Des();
  52.     err = CnvUtfConverter::ConvertToUnicodeFromUtf8(to, from);
  53. }
  54. if (KErrNone == err)
  55. {
  56.     // convert the file buffer to a descriptor
  57.     TPtrC8 fileBuf((TUint8*)pBuffer->GetBuffer(), 
  58.    pBuffer->GetSize());
  59.     TDataType dataType;
  60.     TRAP(err, dataType = GetMimeTypeL(*pUCFileName, fileBuf));
  61.     if (KErrNone == err)
  62.     {
  63. // convert descriptor MIME type to IHXBuffer
  64. pMimeType = new CHXBuffer;
  65. pMimeType->AddRef();
  66. if (pMimeType)
  67. {
  68.     TPtrC8 p = dataType.Des8();
  69.     int len = p.Length();
  70.     pMimeType->Set((const UCHAR*)p.Ptr(), len + 1);
  71.     ((char*)pMimeType->GetBuffer())[len] = '';
  72.     ret = HXR_OK;
  73. }
  74.     }
  75. }
  76. delete pUCFileName;
  77.     }
  78.     return ret;
  79. }