diff -r b13cd05eeb2f -r 57b735022c18 srsf/ttscontrollerplugin/src/ttsplugindataloader.cpp --- a/srsf/ttscontrollerplugin/src/ttsplugindataloader.cpp Mon Jan 18 20:20:30 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,483 +0,0 @@ -/* -* Copyright (c) 2004-2006 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: Data buffer loader for TTPHwDevice test executable -* -*/ - - -// INCLUDE FILES -#include "ttsplugindataloader.h" - - - - -// CONSTANTS - -_LIT( KDriveZ, "z:" ); - -// Assuming language data file name is something like SRSF_2_x[y|yz].bin -const TInt KBeginningOfLanguageId = 7; -#ifdef __SIND_AUTOCONF_LID -const TUint32 KTtpAutoConfLidPackageType = 1; -const TUint32 KTtpAutoConfLidPackageID = 1; -const TInt KLidBufGranularity = 1000; -#endif // __SIND_AUTOCONF_LID - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTTSDataLoaderLoader::CTTSDataLoader -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CTTSDataLoader::CTTSDataLoader( RFs& aFs, - TFileName& aGeneralFileName, - TFileName& aPrefixOfTTPFileName, - TFileName& aPostfixOfTTPFileName, - TFileName& aTTSFilename, - TFileName& aPostfixOfTTSFilename ) : - iGeneralFileName( aGeneralFileName ), - iPrefixOfTTPFileName( aPrefixOfTTPFileName ), - iPostfixOfTTPFileName( aPostfixOfTTPFileName ), - iTTSFileName( aTTSFilename ), - iPostfixOfTTSFileName( aPostfixOfTTSFilename ), - iFs( aFs ) - { - // Nothing - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CTTSDataLoader::ConstructL() - { - // Nothing - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CTTSDataLoader* CTTSDataLoader::NewL( RFs& aFs, - TFileName& aGeneralFileName, - TFileName& aPrefixOfTTPFileName, - TFileName& aPostfixOfTTPFileName, - TFileName& aTTSFilename, - TFileName& aPostfixOfTTSFilename ) - { - CTTSDataLoader* self = new ( ELeave ) CTTSDataLoader( aFs, - aGeneralFileName, - aPrefixOfTTPFileName, - aPostfixOfTTPFileName, - aTTSFilename, - aPostfixOfTTSFilename ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::~CTTSDataLoader -// Destructor. -// ----------------------------------------------------------------------------- -// -CTTSDataLoader::~CTTSDataLoader() - { - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::LoadGeneralData -// Load general TTP data -// ----------------------------------------------------------------------------- -// -HBufC8* CTTSDataLoader::LoadGeneralData( const TInt aPackageType, - const TInt aDataID, - TUint32 aStartPosition, - TUint32 aEndPosition ) - { - TFileName fileName( iGeneralFileName ); - fileName.AppendNum( aPackageType ); - fileName.Append( _L( "_" ) ); - fileName.AppendNum( aDataID ); - fileName.Append( iPostfixOfTTPFileName ); - - HBufC8* buffer( NULL ); -#ifdef __SIND_AUTOCONF_LID - - // If LID data is requested, construct it from installed LID binary files - // Otherwise run normal data loading - - if( aPackageType == KTtpAutoConfLidPackageType && - aDataID == KTtpAutoConfLidPackageID ) - { - TRAPD( err, buffer = ConstructLidDataL() ); - if ( !err ) - { - return buffer; - } - } - -#endif // __SIND_AUTOCONF_LID - TRAPD( error, buffer = DoLoadL( fileName, aStartPosition, aEndPosition ) ); - if ( error == KErrNone ) - { - return buffer; - } - else - { - return NULL; - } - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::LoadLanguageData -// Load TTP language data -// ----------------------------------------------------------------------------- -// -HBufC8* CTTSDataLoader::LoadLanguageData( const TInt aPackageType, - TLanguage aLanguage, - TUint32 aStartPosition, - TUint32 aEndPosition ) - { - TFileName fileName( iPrefixOfTTPFileName ); - fileName.AppendNum( aPackageType ); - fileName.Append( _L( "_" ) ); - fileName.AppendNum( ( TInt ) aLanguage ); - fileName.Append( iPostfixOfTTPFileName ); - - HBufC8* buffer( NULL ); - TRAPD( error, buffer = DoLoadL( fileName, aStartPosition, aEndPosition ) ); - if ( error == KErrNone ) - { - return buffer; - } - else - { - return NULL; - } - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::LoadTtsData -// Load TTS general/language data -// ----------------------------------------------------------------------------- -// -HBufC8* CTTSDataLoader::LoadTtsData( const TInt aPackageType, - const TInt aDataID, - TUint32 aStartPosition, - TUint32 aEndPosition ) - { - TFileName fileName( iTTSFileName ); - fileName.AppendNum( aPackageType ); - fileName.Append( _L( "_" ) ); - fileName.AppendNum( aDataID ); - fileName.Append( iPostfixOfTTSFileName ); - - HBufC8* buffer( NULL ); - -#ifdef __SIND_AUTOCONF_LID - - // If LID data is requested, construct it from installed LID binary files - // Otherwise run normal data loading - if( aPackageType == KTtpAutoConfLidPackageType && - aDataID == KTtpAutoConfLidPackageID ) - { - TRAPD( err, buffer = ConstructLidDataL() ); - if ( !err ) - { - return buffer; - } - } -#endif // __SIND_AUTOCONF_LID - - - TRAPD( error, buffer = DoLoadL( fileName, aStartPosition, aEndPosition ) ); - if ( error == KErrNone ) - { - return buffer; - } - else - { - return NULL; - } - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::GetSupportedLanguagesL -// Fill aLanguages with supported language ids -// ----------------------------------------------------------------------------- -// -void CTTSDataLoader::GetSupportedLanguagesL( RArray& aLanguages ) - { - // Get pts languages - TFileName mask; - mask.Append( KDriveZ ); - mask.Append( iTTSFileName ); - mask.Append( _L( "2_*" ) ); - - DoGetSupportedLanguagesL( aLanguages, mask); - - // Get ttp languages - RArray ttpLanguages; - CleanupClosePushL( ttpLanguages ); - - mask.Zero(); - mask.Append( KDriveZ ); - mask.Append( iTTSFileName ); - mask.Append( _L( "0_*" ) ); - - DoGetSupportedLanguagesL( ttpLanguages, mask); - - // remove languages which are not supported in ttp - for ( TInt i(0); i < aLanguages.Count(); i++ ) - { - if ( ttpLanguages.Find( aLanguages[i] ) == KErrNotFound ) - { - aLanguages.Remove( i ); - } - } - CleanupStack::PopAndDestroy( &ttpLanguages ); - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::DoLoadL -// Loads the given file. -// ----------------------------------------------------------------------------- -// -HBufC8* CTTSDataLoader::DoLoadL( TFileName& iFile, - TUint32 aStartPosition, - TUint32 aEndPosition ) - { - TInt fileSize( 0 ); - RFile dataFile; - TInt readLength; - - TFileName completeFile; - completeFile.Append( KDriveZ ); - completeFile.Append( iFile ); - - - // Try to open file from Z drive - TInt err = dataFile.Open( iFs, completeFile, EFileRead ); - - if ( err != KErrNone ) - { - return NULL; - } - - - // Try to resolve how much should be read - readLength = aEndPosition - aStartPosition; - if ( dataFile.Size( fileSize ) != KErrNone ) - { - dataFile.Close(); - return NULL; - } - if ( fileSize == 0 ) - { - dataFile.Close(); - return NULL; - } - - if ( aEndPosition != KMaxTUint32 ) - { - // Cannot read more than filesize - if ( ( readLength > fileSize ) || ( readLength < 0 ) ) - { - readLength = fileSize; - } - } - else - { - readLength = fileSize; - } - - // Seek the starting point - // Casting needed to convert from uint to int which is needed by Seek() - TInt startPosition = (TInt)aStartPosition; - dataFile.Seek( ESeekStart, startPosition ); - - // Reserve enough memory for the data - HBufC8* fileBuffer = HBufC8::NewL( readLength ); - - TPtr8 bufferPtr( fileBuffer->Des() ); - - err = dataFile.Read( bufferPtr ); - - dataFile.Close(); - - if ( err != KErrNone ) - { - delete fileBuffer; - return NULL; - } - - return fileBuffer; - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::DoGetSupportedLanguagesL -// Fill aLanguages with supported language ids -// ----------------------------------------------------------------------------- -// -void CTTSDataLoader::DoGetSupportedLanguagesL( RArray& aLanguages, - TFileName& aMask ) - { - CDir *directoryList( NULL ); - TInt error = iFs.GetDir( aMask, KEntryAttDir, ESortByName, directoryList ); - CleanupStack::PushL( directoryList ); - - if ( !error ) - { - TInt count = directoryList->Count(); - - for ( TInt i( 0 ); i < count; i++ ) - { - TPtrC tmp = (*directoryList)[i].iName; - - TInt64 id; - TLex parser( tmp.Mid( KBeginningOfLanguageId , - tmp.Find( _L(".") ) - KBeginningOfLanguageId ) ); - - User::LeaveIfError( parser.Val( id) ); - - TLanguage lang( (TLanguage)id ); - - if ( aLanguages.Find( lang ) == KErrNotFound ) - { - aLanguages.AppendL( lang ); - } - } - } - - CleanupStack::PopAndDestroy( directoryList ); - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::PackageName -// Construct filename for requested package -// ----------------------------------------------------------------------------- -// -void CTTSDataLoader::PackageName (TFileName &aFileName, TUint32 aPackageType, TUint32 aPackageID) -{ - // Resolve the name of the file - // filename is __ - - aFileName.Copy( iPrefixOfTTPFileName ); // path/SRSF_ - aFileName.AppendNumUC( aPackageType ); // path/SRSF_1 - aFileName.Append( _L( "_" ) ); // path/SRSF_1_ - aFileName.AppendNumUC( aPackageID ); // path/SRSF_1_326 - aFileName.Append( iPostfixOfTTPFileName ); // path/SRSF_1_326.bin -} - -#ifdef __SIND_AUTOCONF_LID -// ----------------------------------------------------------------------------- -// CTTSDataLoader::AppendLoadL -// Load language package file to the end of buffer -// ----------------------------------------------------------------------------- -// -void CTTSDataLoader::AppendLoadL( CBufBase *aBuffer, - TUint32 aPackageType, - TUint32 aPackageID ) -{ - // Resolve filename - TFileName fileName; - PackageName (fileName, aPackageType, aPackageID); - - // Load data - HBufC8* buffer = NULL; - - TRAPD( err, buffer = DoLoadL( fileName, 0, KMaxTUint32 )); // IMPLICIT: LID packages are loaded completely - - if( err == KErrNone && buffer ) - { - CleanupStack::PushL( buffer ); // ResizeL may leave below - - TInt prevSize = aBuffer->Size(); // size before resize - TInt newSize = aBuffer->Size() + buffer->Size(); // new size for lid data buffer - - aBuffer->ResizeL( newSize ); // resize lid data buffer - aBuffer->Write( prevSize, *buffer ); // append data from read buffer - - CleanupStack::PopAndDestroy(buffer); // buffer copied -> free - } -} - - - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::LoadSysLangPackagesL -// Load LID language data to a buffer according to installed system languages -// ----------------------------------------------------------------------------- -// -void CTTSDataLoader::SysLangPackagesToBufferL( CBufBase *aBuffer ) - { - - // Get installed languages - RArray languages; - CleanupClosePushL( languages ); - - TFileName mask; - mask.Append( KDriveZ ); - mask.Append( iTTSFileName ); - mask.Append( _L( "1_*" ) ); - DoGetSupportedLanguagesL( languages, mask); - - // Loop over installed languages - for ( TInt i = 0 ; i < languages.Count(); i++ ) - { - AppendLoadL(aBuffer, KTtpAutoConfLidPackageType, languages[i] ); - }// next language - - CleanupStack::PopAndDestroy( &languages ); - } - -// ----------------------------------------------------------------------------- -// CTTSDataLoader::ConstructLidDataL -// Load LID language data to a buffer according to installed system languages -// ----------------------------------------------------------------------------- -// -HBufC8* CTTSDataLoader::ConstructLidDataL() - { - CBufBase* lidDataBuffer = CBufSeg::NewL( KLidBufGranularity ) ; // accumulates the binary data from lid model files - CleanupStack::PushL( lidDataBuffer ) ; - - SysLangPackagesToBufferL (lidDataBuffer); - - // Prepare returnable data - HBufC8* dataBuffer = NULL; - - if( lidDataBuffer->Size() > 0 ) - { - // If any data was loaded, create a buffer for it - dataBuffer = HBufC8::NewL( lidDataBuffer->Size() ); // create a returnable buffer - - TPtr8 dataBufferPtr = dataBuffer->Des(); // get a modifiable pointer to it - lidDataBuffer->Read( 0, dataBufferPtr, lidDataBuffer->Size() ); // put the lid data into it - } - - CleanupStack::PopAndDestroy( lidDataBuffer ) ; - - return dataBuffer; - } -#endif // __SIND_AUTOCONF_LID - -// End of File