harvester/harvesterplugins/AudioPlaylistPlugin/src/harvesteraudioplaylistparser.cpp
branchRCL_3
changeset 50 85f623e1ef41
parent 49 f23c07ec56e2
child 53 29d87345eaeb
equal deleted inserted replaced
49:f23c07ec56e2 50:85f623e1ef41
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <e32base.h>
       
    20 #include <bautils.h>
       
    21 #include <syslangutil.h>
       
    22 #include <PathInfo.h>
       
    23 #include <data_caging_path_literals.hrh>
       
    24 #include <mdsplaylisttopcharacterset.rsg>
       
    25 
       
    26 #include "harvesteraudioplaylistparser.h"
       
    27 
       
    28 #include "mdsutils.h"
       
    29 #include "harvesterlog.h"
       
    30 
       
    31 _LIT( KMimeTypeM3U,   "audio/x-mpegurl" );
       
    32 _LIT( KExtensionM3U,    "m3u" );
       
    33 
       
    34 _LIT( KMDSPlaylistCharacterSetRscFile, "mdsplaylisttopcharacterset.rsc" );
       
    35 
       
    36 const TInt KMDSArrayGranularity = 12;
       
    37 
       
    38 // -----------------------------------------------------------------------------
       
    39 // CHarvesterAudioPlaylistParser::NewL
       
    40 // -----------------------------------------------------------------------------
       
    41 //
       
    42 CHarvesterAudioPlaylistParser* CHarvesterAudioPlaylistParser::NewL()
       
    43     {
       
    44     CHarvesterAudioPlaylistParser* self = new ( ELeave ) CHarvesterAudioPlaylistParser();
       
    45 	CleanupStack::PushL( self );
       
    46 	self->ConstructL();
       
    47 	CleanupStack::Pop( self );
       
    48 
       
    49 	return self;
       
    50     }
       
    51 
       
    52 
       
    53 // -----------------------------------------------------------------------------
       
    54 // Destructor
       
    55 // -----------------------------------------------------------------------------
       
    56 //
       
    57 CHarvesterAudioPlaylistParser::~CHarvesterAudioPlaylistParser()
       
    58     {
       
    59     delete iTopCharacterSet;
       
    60     
       
    61     delete iAvailableCharacterSet;
       
    62     
       
    63     iFs.Close();
       
    64     }
       
    65 
       
    66 
       
    67 // -----------------------------------------------------------------------------
       
    68 // CHarvesterAudioPlaylistParser::CHarvesterAudioPlaylistParser
       
    69 // -----------------------------------------------------------------------------
       
    70 //
       
    71 CHarvesterAudioPlaylistParser::CHarvesterAudioPlaylistParser() 
       
    72     {
       
    73     }
       
    74 
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // CHarvesterAudioPlaylistParser::ConstructL
       
    78 // -----------------------------------------------------------------------------
       
    79 //
       
    80 void CHarvesterAudioPlaylistParser::ConstructL()
       
    81     {
       
    82     User::LeaveIfError( iFs.Connect() );
       
    83     iAvailableCharacterSet = CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( iFs );
       
    84     iTopCharacterSet =
       
    85         new (ELeave) CArrayFixFlat<CCnvCharacterSetConverter::SCharacterSet>( KMDSArrayGranularity );
       
    86     GenerateTopCharacterSetsL();
       
    87     iM3UParser = CHarvesterM3UPlaylistParser::NewL( iFs, iAvailableCharacterSet, iTopCharacterSet );
       
    88     }
       
    89 
       
    90 
       
    91 // -----------------------------------------------------------------------------
       
    92 // CHarvesterAudioPlaylistParser::ParseMimeType
       
    93 // -----------------------------------------------------------------------------
       
    94 //
       
    95 TBool CHarvesterAudioPlaylistParser::ParseMimeType( 
       
    96 		const TDesC& aFileName, TDes& aMimeType )
       
    97     {
       
    98     TPtrC ext;
       
    99     if( MdsUtils::GetExt( aFileName, ext ) )
       
   100     	{
       
   101     	if( ext == KExtensionM3U )
       
   102     	    {
       
   103     	    aMimeType = KMimeTypeM3U;
       
   104     	    return ETrue;
       
   105     	    }
       
   106     	}
       
   107 
       
   108     aMimeType = KNullDesC;
       
   109     return EFalse;
       
   110     }
       
   111 
       
   112 
       
   113 // -----------------------------------------------------------------------------
       
   114 // CHarvesterAudioPlaylistParser::ParseL
       
   115 // -----------------------------------------------------------------------------
       
   116 //
       
   117 TBool CHarvesterAudioPlaylistParser::ParseL( const TDesC& aFileName,
       
   118 		RPointerArray<HBufC>& aUriArray, TPtrC aMimeType )
       
   119     {
       
   120     if( aMimeType == KMimeTypeM3U )
       
   121         {
       
   122         return iM3UParser->ParseL( aFileName, aUriArray );
       
   123         }
       
   124     return EFalse;
       
   125     }
       
   126 
       
   127 // -----------------------------------------------------------------------------
       
   128 // CHarvesterAudioPlaylistParser::ResetL
       
   129 // -----------------------------------------------------------------------------
       
   130 //
       
   131 void CHarvesterAudioPlaylistParser::Reset()
       
   132     {
       
   133     iM3UParser->Reset();
       
   134     }
       
   135 
       
   136 // -----------------------------------------------------------------------------
       
   137 // CHarvesterAudioPlaylistParser::GenerateTopCharacterSetsL
       
   138 // -----------------------------------------------------------------------------
       
   139 //
       
   140 void CHarvesterAudioPlaylistParser::GenerateTopCharacterSetsL()
       
   141      {
       
   142      CArrayFixFlat<TInt>* installedLanguages = NULL;
       
   143      SysLangUtil::GetInstalledLanguages( installedLanguages );
       
   144      CleanupStack::PushL( installedLanguages );
       
   145      
       
   146      TFileName fileName;
       
   147      
       
   148      TParsePtrC memory( PathInfo::RomRootPath() );
       
   149      fileName.Copy( memory.Drive() );
       
   150      fileName.Append( KDC_RESOURCE_FILES_DIR );
       
   151      fileName.Append( KMDSPlaylistCharacterSetRscFile );
       
   152 
       
   153      TRAPD( err, iRscFile.OpenL( iFs, fileName ) );
       
   154      
       
   155      // if there is no resource file, then there is no top character set list
       
   156      if( err )
       
   157          {
       
   158          CleanupStack::PopAndDestroy( installedLanguages );
       
   159          return;
       
   160          }
       
   161 
       
   162      const TInt count( installedLanguages->Count() );
       
   163      for( TInt i=0; i < count; i++ )
       
   164           {
       
   165           SelectCharacterSetsForLanguageL( (*installedLanguages)[i] );
       
   166           }
       
   167      iTopCharacterSet->Compress();
       
   168      installedLanguages->Reset();
       
   169      CleanupStack::PopAndDestroy( installedLanguages );
       
   170      iRscFile.Close();
       
   171      }
       
   172 
       
   173 // -----------------------------------------------------------------------------
       
   174 // CHarvesterAudioPlaylistParser::SelectCharacterSetsForLanguageL
       
   175 // -----------------------------------------------------------------------------
       
   176 //
       
   177 void CHarvesterAudioPlaylistParser::SelectCharacterSetsForLanguageL( TInt aLanguage )
       
   178      {
       
   179      switch( aLanguage )
       
   180           {
       
   181           case ELangEnglish:
       
   182                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ENGLISH_CHAR_SET );
       
   183                break;
       
   184           case ELangFrench:
       
   185                ReadCharacterSetResourceL( R_MDS_PLAYLIST_FRENCH_CHAR_SET );
       
   186                break;
       
   187           case ELangGerman:
       
   188                ReadCharacterSetResourceL( R_MDS_PLAYLIST_GERMAN_CHAR_SET );
       
   189                break;
       
   190           case ELangTurkish:
       
   191                ReadCharacterSetResourceL( R_MDS_PLAYLIST_TURKISH_CHAR_SET );
       
   192                break;
       
   193           case ELangFinnish:
       
   194                ReadCharacterSetResourceL( R_MDS_PLAYLIST_FINNISH_CHAR_SET );
       
   195                break;
       
   196           case ELangSwedish:
       
   197                ReadCharacterSetResourceL( R_MDS_PLAYLIST_SWEDISH_CHAR_SET );
       
   198                break;
       
   199           case ELangRussian:
       
   200                ReadCharacterSetResourceL( R_MDS_PLAYLIST_RUSSIAN_CHAR_SET );
       
   201                break;
       
   202           case ELangArabic:
       
   203                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ARABIC_CHAR_SET );
       
   204                break;
       
   205           case ELangHebrew:
       
   206                ReadCharacterSetResourceL( R_MDS_PLAYLIST_HEBREW_CHAR_SET );
       
   207                break;
       
   208           case ELangFarsi:
       
   209                ReadCharacterSetResourceL( R_MDS_PLAYLIST_FARSI_CHAR_SET );
       
   210                break;
       
   211           case ELangItalian:
       
   212                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ITALIAN_CHAR_SET );
       
   213                break;
       
   214           case ELangPolish:
       
   215                ReadCharacterSetResourceL( R_MDS_PLAYLIST_POLISH_CHAR_SET );
       
   216                break;
       
   217           case ELangHungarian:
       
   218                ReadCharacterSetResourceL( R_MDS_PLAYLIST_HUNGARIAN_CHAR_SET );
       
   219                break;
       
   220           case ELangSpanish:
       
   221                ReadCharacterSetResourceL( R_MDS_PLAYLIST_SPANISH_CHAR_SET );
       
   222                break;
       
   223           case ELangDutch:
       
   224                ReadCharacterSetResourceL( R_MDS_PLAYLIST_DUTCH_CHAR_SET );
       
   225                break;
       
   226           case ELangPortuguese:
       
   227                ReadCharacterSetResourceL( R_MDS_PLAYLIST_PORTUGUESE_CHAR_SET );
       
   228                break;
       
   229           case ELangAmerican:
       
   230                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ENGLISH_CHAR_SET );
       
   231                break;
       
   232           case ELangCanadianFrench:
       
   233                ReadCharacterSetResourceL( R_MDS_PLAYLIST_FRENCH_CHAR_SET );
       
   234                break;
       
   235           case ELangBrazilianPortuguese:
       
   236                ReadCharacterSetResourceL( R_MDS_PLAYLIST_PORTUGUESE_CHAR_SET );
       
   237                break;
       
   238           case ELangLatinAmericanSpanish:
       
   239                ReadCharacterSetResourceL( R_MDS_PLAYLIST_SPANISH_CHAR_SET );
       
   240                break;
       
   241           case ELangLatvian:
       
   242                ReadCharacterSetResourceL( R_MDS_PLAYLIST_LATVIAN_CHAR_SET );
       
   243                break;
       
   244           case ELangGreek:
       
   245                ReadCharacterSetResourceL( R_MDS_PLAYLIST_GREEK_CHAR_SET );
       
   246                break;
       
   247           case ELangEstonian:
       
   248                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ESTONIAN_CHAR_SET );
       
   249                break;
       
   250           case ELangLithuanian:
       
   251                ReadCharacterSetResourceL( R_MDS_PLAYLIST_LITHUANIAN_CHAR_SET );
       
   252                break;
       
   253           case ELangRomanian:
       
   254                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ROMANIAN_CHAR_SET );
       
   255                break;
       
   256           case ELangUkrainian:
       
   257                ReadCharacterSetResourceL( R_MDS_PLAYLIST_UKRAINIAN_CHAR_SET );
       
   258                break;
       
   259           case ELangBulgarian:
       
   260                ReadCharacterSetResourceL( R_MDS_PLAYLIST_BULGARIAN_CHAR_SET );
       
   261                break;
       
   262           case ELangCroatian:
       
   263                ReadCharacterSetResourceL( R_MDS_PLAYLIST_CROATIAN_CHAR_SET );
       
   264                break;
       
   265           case ELangSerbian:
       
   266                ReadCharacterSetResourceL( R_MDS_PLAYLIST_SERBIAN_CHAR_SET );
       
   267                break;
       
   268           case ELangIndonesian:
       
   269                ReadCharacterSetResourceL( R_MDS_PLAYLIST_INDONESIAN_CHAR_SET );
       
   270                break;
       
   271           case ELangMalay:
       
   272           case ELangTagalog:
       
   273                ReadCharacterSetResourceL( R_MDS_PLAYLIST_MALAY_CHAR_SET );
       
   274                break;
       
   275           case ELangIcelandic:
       
   276                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ICELANDIC_CHAR_SET );
       
   277                break;
       
   278           case ELangDanish:
       
   279                ReadCharacterSetResourceL( R_MDS_PLAYLIST_DANISH_CHAR_SET );
       
   280                break;
       
   281           case ELangNorwegian:
       
   282                ReadCharacterSetResourceL( R_MDS_PLAYLIST_NORWEGIAN_CHAR_SET );
       
   283                break;
       
   284           case ELangHindi:
       
   285                ReadCharacterSetResourceL( R_MDS_PLAYLIST_INDIAN_CHAR_SET );
       
   286                break;
       
   287           case ELangUrdu:
       
   288                ReadCharacterSetResourceL( R_MDS_PLAYLIST_URDU_CHAR_SET );
       
   289                break;
       
   290           case ELangCzech:
       
   291                ReadCharacterSetResourceL( R_MDS_PLAYLIST_CZECH_CHAR_SET );
       
   292                break;
       
   293           case ELangSlovak:
       
   294                ReadCharacterSetResourceL( R_MDS_PLAYLIST_SLOVAK_CHAR_SET );
       
   295                break;
       
   296           case ELangSlovenian:
       
   297                ReadCharacterSetResourceL( R_MDS_PLAYLIST_SLOVENIAN_CHAR_SET );
       
   298                break;
       
   299           case ELangTaiwanChinese:
       
   300           case ELangHongKongChinese:
       
   301                ReadCharacterSetResourceL( R_MDS_PLAYLIST_TAIWAN_HK_CHINESE_CHAR_SET );
       
   302                break;
       
   303           case ELangPrcChinese:
       
   304                ReadCharacterSetResourceL( R_MDS_PLAYLIST_CHINESE_CHAR_SET );
       
   305                break;
       
   306           case ELangEnglish_Taiwan:
       
   307           case ELangEnglish_Prc:
       
   308           case ELangEnglish_Japan:
       
   309           case ELangEnglish_Thailand:
       
   310                ReadCharacterSetResourceL( R_MDS_PLAYLIST_ENGLISH_CHAR_SET );
       
   311                break;
       
   312           case ELangJapanese:
       
   313                ReadCharacterSetResourceL( R_MDS_PLAYLIST_JAPANESE_CHAR_SET );
       
   314                break;
       
   315           case ELangThai:
       
   316                ReadCharacterSetResourceL( R_MDS_PLAYLIST_THAI_CHAR_SET );
       
   317                break;
       
   318           case ELangVietnamese:
       
   319                ReadCharacterSetResourceL( R_MDS_PLAYLIST_VIETNAMESE_CHAR_SET );
       
   320                break;
       
   321           case ELangMalay_Apac:
       
   322                ReadCharacterSetResourceL( R_MDS_PLAYLIST_MALAY_CHAR_SET );
       
   323                break;
       
   324           default:
       
   325                break;
       
   326           }
       
   327      }
       
   328 
       
   329 // -----------------------------------------------------------------------------
       
   330 // CHarvesterAudioPlaylistParser::ReadCharacterSetResourceL
       
   331 // -----------------------------------------------------------------------------
       
   332 //
       
   333 void CHarvesterAudioPlaylistParser::ReadCharacterSetResourceL( TInt aResourceId )
       
   334      {
       
   335      TResourceReader rscReader;                       // Resource reader
       
   336      HBufC8* rscBuf;                                      // Buffer where resource is read
       
   337 
       
   338      rscBuf = iRscFile.AllocReadL( aResourceId );
       
   339      rscReader.SetBuffer( rscBuf );
       
   340      CleanupStack::PushL( rscBuf );
       
   341 
       
   342      TUint characterSetElementId;
       
   343      TInt numCharacterSetElements = rscReader.ReadInt16();
       
   344      TUint elemId;
       
   345      CCnvCharacterSetConverter::SCharacterSet elem;
       
   346 
       
   347      for( TInt i = 0; i < numCharacterSetElements; i++ )
       
   348           {
       
   349           characterSetElementId = rscReader.ReadInt32();
       
   350           const TInt count( iAvailableCharacterSet->Count() );
       
   351           for( TInt j = 0; j < count; j++ )
       
   352                {
       
   353                elem = (*iAvailableCharacterSet)[j];
       
   354                elemId = elem.Identifier();
       
   355                if ( elemId == characterSetElementId && !IsInTopCharacterSet(characterSetElementId) )
       
   356                     {
       
   357                     iTopCharacterSet->AppendL( elem );
       
   358                     }
       
   359                }
       
   360           }
       
   361 
       
   362      CleanupStack::PopAndDestroy( rscBuf );
       
   363      }     
       
   364      
       
   365 // -----------------------------------------------------------------------------
       
   366 // CHarvesterAudioPlaylistParser::IsInTopCharacterSet
       
   367 // -----------------------------------------------------------------------------
       
   368 //
       
   369 TBool CHarvesterAudioPlaylistParser::IsInTopCharacterSet( TUint aCharacterSetId )
       
   370      {
       
   371      const TInt count( iTopCharacterSet->Count() ); 
       
   372      for( TInt i = 0; i < count; i++ )
       
   373           {
       
   374           if( (*iTopCharacterSet)[i].Identifier() == aCharacterSetId )
       
   375                {
       
   376                return ETrue;
       
   377                }
       
   378           }
       
   379      return EFalse;
       
   380      }
       
   381 
       
   382 // End of file