diff -r b73a2e62868f -r 6dfc5f825351 harvester/harvesterplugins/AudioPlaylistPlugin/src/harvesteraudioplaylistparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/harvester/harvesterplugins/AudioPlaylistPlugin/src/harvesteraudioplaylistparser.cpp Fri Mar 19 09:38:01 2010 +0200 @@ -0,0 +1,382 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include +#include +#include +#include +#include +#include + +#include "harvesteraudioplaylistparser.h" + +#include "mdsutils.h" +#include "harvesterlog.h" + +_LIT( KMimeTypeM3U, "audio/x-mpegurl" ); +_LIT( KExtensionM3U, "m3u" ); + +_LIT( KMDSPlaylistCharacterSetRscFile, "mdsplaylisttopcharacterset.rsc" ); + +const TInt KMDSArrayGranularity = 12; + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::NewL +// ----------------------------------------------------------------------------- +// +CHarvesterAudioPlaylistParser* CHarvesterAudioPlaylistParser::NewL() + { + CHarvesterAudioPlaylistParser* self = new ( ELeave ) CHarvesterAudioPlaylistParser(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CHarvesterAudioPlaylistParser::~CHarvesterAudioPlaylistParser() + { + delete iTopCharacterSet; + + delete iAvailableCharacterSet; + + iFs.Close(); + } + + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::CHarvesterAudioPlaylistParser +// ----------------------------------------------------------------------------- +// +CHarvesterAudioPlaylistParser::CHarvesterAudioPlaylistParser() + { + } + + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::ConstructL +// ----------------------------------------------------------------------------- +// +void CHarvesterAudioPlaylistParser::ConstructL() + { + User::LeaveIfError( iFs.Connect() ); + iAvailableCharacterSet = CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( iFs ); + iTopCharacterSet = + new (ELeave) CArrayFixFlat( KMDSArrayGranularity ); + GenerateTopCharacterSetsL(); + iM3UParser = CHarvesterM3UPlaylistParser::NewL( iFs, iAvailableCharacterSet, iTopCharacterSet ); + } + + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::ParseMimeType +// ----------------------------------------------------------------------------- +// +TBool CHarvesterAudioPlaylistParser::ParseMimeType( + const TDesC& aFileName, TDes& aMimeType ) + { + TPtrC ext; + if( MdsUtils::GetExt( aFileName, ext ) ) + { + if( ext == KExtensionM3U ) + { + aMimeType = KMimeTypeM3U; + return ETrue; + } + } + + aMimeType = KNullDesC; + return EFalse; + } + + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::ParseL +// ----------------------------------------------------------------------------- +// +TBool CHarvesterAudioPlaylistParser::ParseL( const TDesC& aFileName, + RPointerArray& aUriArray, TPtrC aMimeType ) + { + if( aMimeType == KMimeTypeM3U ) + { + return iM3UParser->ParseL( aFileName, aUriArray ); + } + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::ResetL +// ----------------------------------------------------------------------------- +// +void CHarvesterAudioPlaylistParser::Reset() + { + iM3UParser->Reset(); + } + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::GenerateTopCharacterSetsL +// ----------------------------------------------------------------------------- +// +void CHarvesterAudioPlaylistParser::GenerateTopCharacterSetsL() + { + CArrayFixFlat* installedLanguages = NULL; + SysLangUtil::GetInstalledLanguages( installedLanguages ); + CleanupStack::PushL( installedLanguages ); + + TFileName fileName; + + TParsePtrC memory( PathInfo::RomRootPath() ); + fileName.Copy( memory.Drive() ); + fileName.Append( KDC_RESOURCE_FILES_DIR ); + fileName.Append( KMDSPlaylistCharacterSetRscFile ); + + TRAPD( err, iRscFile.OpenL( iFs, fileName ) ); + + // if there is no resource file, then there is no top character set list + if( err ) + { + CleanupStack::PopAndDestroy( installedLanguages ); + return; + } + + const TInt count( installedLanguages->Count() ); + for( TInt i=0; i < count; i++ ) + { + SelectCharacterSetsForLanguageL( (*installedLanguages)[i] ); + } + iTopCharacterSet->Compress(); + installedLanguages->Reset(); + CleanupStack::PopAndDestroy( installedLanguages ); + iRscFile.Close(); + } + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::SelectCharacterSetsForLanguageL +// ----------------------------------------------------------------------------- +// +void CHarvesterAudioPlaylistParser::SelectCharacterSetsForLanguageL( TInt aLanguage ) + { + switch( aLanguage ) + { + case ELangEnglish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ENGLISH_CHAR_SET ); + break; + case ELangFrench: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_FRENCH_CHAR_SET ); + break; + case ELangGerman: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_GERMAN_CHAR_SET ); + break; + case ELangTurkish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_TURKISH_CHAR_SET ); + break; + case ELangFinnish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_FINNISH_CHAR_SET ); + break; + case ELangSwedish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_SWEDISH_CHAR_SET ); + break; + case ELangRussian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_RUSSIAN_CHAR_SET ); + break; + case ELangArabic: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ARABIC_CHAR_SET ); + break; + case ELangHebrew: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_HEBREW_CHAR_SET ); + break; + case ELangFarsi: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_FARSI_CHAR_SET ); + break; + case ELangItalian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ITALIAN_CHAR_SET ); + break; + case ELangPolish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_POLISH_CHAR_SET ); + break; + case ELangHungarian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_HUNGARIAN_CHAR_SET ); + break; + case ELangSpanish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_SPANISH_CHAR_SET ); + break; + case ELangDutch: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_DUTCH_CHAR_SET ); + break; + case ELangPortuguese: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_PORTUGUESE_CHAR_SET ); + break; + case ELangAmerican: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ENGLISH_CHAR_SET ); + break; + case ELangCanadianFrench: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_FRENCH_CHAR_SET ); + break; + case ELangBrazilianPortuguese: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_PORTUGUESE_CHAR_SET ); + break; + case ELangLatinAmericanSpanish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_SPANISH_CHAR_SET ); + break; + case ELangLatvian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_LATVIAN_CHAR_SET ); + break; + case ELangGreek: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_GREEK_CHAR_SET ); + break; + case ELangEstonian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ESTONIAN_CHAR_SET ); + break; + case ELangLithuanian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_LITHUANIAN_CHAR_SET ); + break; + case ELangRomanian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ROMANIAN_CHAR_SET ); + break; + case ELangUkrainian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_UKRAINIAN_CHAR_SET ); + break; + case ELangBulgarian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_BULGARIAN_CHAR_SET ); + break; + case ELangCroatian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_CROATIAN_CHAR_SET ); + break; + case ELangSerbian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_SERBIAN_CHAR_SET ); + break; + case ELangIndonesian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_INDONESIAN_CHAR_SET ); + break; + case ELangMalay: + case ELangTagalog: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_MALAY_CHAR_SET ); + break; + case ELangIcelandic: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ICELANDIC_CHAR_SET ); + break; + case ELangDanish: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_DANISH_CHAR_SET ); + break; + case ELangNorwegian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_NORWEGIAN_CHAR_SET ); + break; + case ELangHindi: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_INDIAN_CHAR_SET ); + break; + case ELangUrdu: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_URDU_CHAR_SET ); + break; + case ELangCzech: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_CZECH_CHAR_SET ); + break; + case ELangSlovak: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_SLOVAK_CHAR_SET ); + break; + case ELangSlovenian: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_SLOVENIAN_CHAR_SET ); + break; + case ELangTaiwanChinese: + case ELangHongKongChinese: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_TAIWAN_HK_CHINESE_CHAR_SET ); + break; + case ELangPrcChinese: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_CHINESE_CHAR_SET ); + break; + case ELangEnglish_Taiwan: + case ELangEnglish_Prc: + case ELangEnglish_Japan: + case ELangEnglish_Thailand: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_ENGLISH_CHAR_SET ); + break; + case ELangJapanese: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_JAPANESE_CHAR_SET ); + break; + case ELangThai: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_THAI_CHAR_SET ); + break; + case ELangVietnamese: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_VIETNAMESE_CHAR_SET ); + break; + case ELangMalay_Apac: + ReadCharacterSetResourceL( R_MDS_PLAYLIST_MALAY_CHAR_SET ); + break; + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::ReadCharacterSetResourceL +// ----------------------------------------------------------------------------- +// +void CHarvesterAudioPlaylistParser::ReadCharacterSetResourceL( TInt aResourceId ) + { + TResourceReader rscReader; // Resource reader + HBufC8* rscBuf; // Buffer where resource is read + + rscBuf = iRscFile.AllocReadL( aResourceId ); + rscReader.SetBuffer( rscBuf ); + CleanupStack::PushL( rscBuf ); + + TUint characterSetElementId; + TInt numCharacterSetElements = rscReader.ReadInt16(); + TUint elemId; + CCnvCharacterSetConverter::SCharacterSet elem; + + for( TInt i = 0; i < numCharacterSetElements; i++ ) + { + characterSetElementId = rscReader.ReadInt32(); + const TInt count( iAvailableCharacterSet->Count() ); + for( TInt j = 0; j < count; j++ ) + { + elem = (*iAvailableCharacterSet)[j]; + elemId = elem.Identifier(); + if ( elemId == characterSetElementId && !IsInTopCharacterSet(characterSetElementId) ) + { + iTopCharacterSet->AppendL( elem ); + } + } + } + + CleanupStack::PopAndDestroy( rscBuf ); + } + +// ----------------------------------------------------------------------------- +// CHarvesterAudioPlaylistParser::IsInTopCharacterSet +// ----------------------------------------------------------------------------- +// +TBool CHarvesterAudioPlaylistParser::IsInTopCharacterSet( TUint aCharacterSetId ) + { + const TInt count( iTopCharacterSet->Count() ); + for( TInt i = 0; i < count; i++ ) + { + if( (*iTopCharacterSet)[i].Identifier() == aCharacterSetId ) + { + return ETrue; + } + } + return EFalse; + } + +// End of file