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

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * hxsym_filetype.cpp
  3.  * --------------
  4.  *
  5.  * Synopsis:
  6.  *   mime and file type utilities
  7.  *
  8.  *
  9.  * Target:
  10.  * Symbian OS
  11.  *
  12.  *
  13.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  14.  *
  15.  *****************************************************************************/
  16.  
  17. #include <apgcli.h> // RApaLsSession
  18. #include <apmrec.h> // CApaDataRecognizerType
  19. #include <f32file.h> // RFs
  20. #include "hxsym_debug.h"
  21. #include "chxavfileutil.h"
  22. #include "chxavcleanupstack.h"
  23. #include "chxavmisc.h"
  24. #include "hxsym_mimetypes.h"
  25. #include "hxsym_filetype.h"
  26. namespace CHXAvFile
  27. {
  28. //////////////////////////////////
  29. // look up the mimetype for the given file via
  30. // system recognizer API
  31. //
  32. TDataType GetFileMimeTypeL(const TDesC& path)
  33. {
  34.     // length of buffer read from file and passed to recognizer
  35.     const TInt KRecogLength=512;
  36.     TDataType type;
  37.     RApaLsSession ls;
  38.     if (ls.Connect() == KErrNone)
  39.     {
  40.         AUTO_PUSH_POP_CLOSE(ls);
  41.         RFs fs;
  42.         if( fs.Connect() == KErrNone )
  43.         {
  44.             AUTO_PUSH_POP_CLOSE(fs);
  45.     HBufC8* pBuf = HBufC8::NewL(KRecogLength);
  46.             AUTO_PUSH_POP_DEL(pBuf);
  47.     TPtr8 ptr = pBuf->Des();
  48.             TInt err = fs.ReadFileSection(path, 0, ptr, KRecogLength);
  49.     if (KErrNone == err)
  50.     {
  51.         TDataRecognitionResult rr;
  52.         ls.RecognizeData(path, *pBuf, rr);
  53.         if (rr.iConfidence != CApaDataRecognizerType::ENotRecognized)
  54.                 {
  55.     type = rr.iDataType;
  56.                 }
  57.     }
  58.             else
  59.             {
  60.                 DPRINTF(SYMP_INFO, ("GetFileMimeTypeL(): failed to read file for recognition(%d)n", err));
  61.             }
  62.         }
  63.     }
  64.     return type;
  65. }
  66. ////////////////////////////////////////
  67. // lookup filetype enum for given file
  68. //
  69. FileType GetFileType(const TDesC& path)
  70. {
  71.     FileType type = ftUnknown;
  72.     if( HasFolderSuffix(path) )
  73.     {
  74. // folder
  75. type = ftFolder;
  76.     }
  77.     else
  78.     {
  79.         TDataType dataType = GetFileMimeTypeL(path);
  80.         type = MimeToFileType(dataType.Des8());
  81.     }
  82.     return type;
  83. }
  84. /////////////////////////////////////////////////////
  85. // these should match mimetype associations in application aif
  86. // 
  87. // if we return ftUnknown the UI will not display the file
  88. //
  89. FileType MimeToFileType(const TDesC8& dataType)
  90. {
  91.     struct 
  92.     {
  93.        const TText8*  pszMimeType;
  94.        FileType fileType;
  95.     }
  96.     const mimeTypeTable[] =
  97.     {
  98.         {HXSYM_MIMETYPE_RM,               ftRm  },
  99.         {HXSYM_MIMETYPE_RM_ALT1,          ftRm  },
  100.         {HXSYM_MIMETYPE_RM_ALT2,          ftRm  },
  101.         {HXSYM_MIMETYPE_RM_ALT3,          ftRm  },
  102.         {HXSYM_MIMETYPE_RM_ALT4,          ftRm  },
  103.         {HXSYM_MIMETYPE_AMR,              ftAmr },
  104.         {HXSYM_MIMETYPE_RAM,              ftRam },
  105.         {HXSYM_MIMETYPE_SDP,              ftSdp },
  106. #if defined(HELIX_FEATURE_AUDIO_MPA_LAYER3)
  107.         //HELIX_FEATURE_AUDIO_MPA_LAYER3
  108.         {HXSYM_MIMETYPE_MP3,              ftMp3 },
  109.         //HELIX_FEATURE_AUDIO_MPA_LAYER3
  110. #endif
  111. #if defined(HELIX_FEATURE_SMIL2)
  112.         //HELIX_FEATURE_SMIL2
  113.         {HXSYM_MIMETYPE_SMIL,             ftSmil},
  114.         {HXSYM_MIMETYPE_SMIL1,            ftSmil},
  115.         {HXSYM_MIMETYPE_SMIL1_ALT1,       ftSmil},
  116.         //HELIX_FEATURE_SMIL2
  117. #endif
  118. #if defined(HELIX_FEATURE_3GPP)
  119.         // HELIX_FEATURE_3GPP
  120.         {HXSYM_MIMETYPE_3GPAUDIO,         ftMp4 },
  121.         {HXSYM_MIMETYPE_3GPVIDEO,         ftMp4 },
  122.         {HXSYM_MIMETYPE_MP4AUDIO,         ftMp4 },
  123.         {HXSYM_MIMETYPE_MP4VIDEO,         ftMp4 },
  124.         {HXSYM_MIMETYPE_MP4AUDIO_ALT1,    ftMp4 },
  125.         {HXSYM_MIMETYPE_3GPPVIDEO_ALT1,   ftMp4 },
  126.         {HXSYM_MIMETYPE_3GPPAUDIO_ALT1,   ftMp4 }
  127.         //HELIX_FEATURE_3GPP
  128. #endif
  129.     };
  130.     const TUint TABLE_COUNT = ARRAY_COUNT(mimeTypeTable);
  131.     for(TInt idx = 0; idx < TABLE_COUNT; ++idx)
  132.     {
  133.         if(0 == dataType.CompareF(TPtrC8(mimeTypeTable[idx].pszMimeType)))
  134.         {
  135.             return mimeTypeTable[idx].fileType;
  136.         }
  137.     }
  138.     return ftUnknown;
  139. }
  140. } // CHXAvFile