diff -r 1a2a00e78665 -r 7feec50967db homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp --- a/homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp Tue Feb 02 00:23:10 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1536 +0,0 @@ -/* -* Copyright (c) 2008 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: Service for maintaining contents of the "themes" folder -* -*/ - - -// INCLUDE FILES -#include -#include -#include - -#include "hsps_builds_cfg.hrh" - -#include "hspsthememanagement.h" -#include "hspsdefinitionrepository.h" -#include "hspsodt.h" - -#ifdef HSPS_LOG_ACTIVE -#include -#endif - -// CONSTANTS -const TInt KDefRepArrayGranularity = 5; - -_LIT(KImportFolder, "import"); -_LIT(KThemesFolder, "themes"); -_LIT(KSourceFolder, "sources"); -_LIT(KSourceFolderWithSeperators, "\\sources\\"); -_LIT(KLocaleFolder, "locales"); -_LIT(KBackupFolder, "backup"); - - -_LIT(KDoubleBackSlash,"\\"); - -_LIT(KFolderFormat,"%d"); // folder format for localized resources - -_LIT(KMatchAll, "*"); - - -_LIT(KMatchSkeleton, ".o0000"); - -const TInt KTIntMahspsumbers( 11 ); - -// ============================= LOCAL FUNCTIONS =============================== - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::ChspsDefinitionRepository -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -ChspsDefinitionRepository::ChspsDefinitionRepository() - { - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void ChspsDefinitionRepository::ConstructL() - { - User::LeaveIfError( iFs.Connect() ); - //Create private path if it doesn't exist already - TInt err=iFs.CreatePrivatePath(EDriveC); - if (err!=KErrNone && err!=KErrAlreadyExists) - { - User::Leave(err); - } - HBufC* path = HBufC::NewLC( KMaxFileName ); - TPtr pathPtr = path->Des(); - User::LeaveIfError( iFs.PrivatePath( pathPtr )); - AppendDesCIntoPathL( pathPtr, KImportFolder ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - iFs.MkDir( pathPtr ); - CleanupStack::PopAndDestroy( path ); - User::LeaveIfError(iFs.SetSessionToPrivate(EDriveC)); - iLicenseDefault = EFalse; - iLockSemaphore = 0; - - iTempFileName1 = KNullDesC; - iTempFileName2 = KNullDesC; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C ChspsDefinitionRepository* ChspsDefinitionRepository::NewL() - { - ChspsDefinitionRepository* self = new( ELeave ) ChspsDefinitionRepository; - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// Destructor -ChspsDefinitionRepository::~ChspsDefinitionRepository() - { - iFs.Close(); - iRepositoryInfoQueue.Reset(); - iRepositoryInfoQueue.Close(); - iObservers.Reset(); - iObservers.Close(); - delete iPath; - - iTempFileName1 = KNullDesC; - iTempFileName2 = KNullDesC; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::SetLocaleL -// Saves the dtd-file into the repository. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C TInt ChspsDefinitionRepository::SetLocaleL( ChspsODT& aODT, ChspsResource& aResource ) - { - // Populate a path based on ODT attributes and file extension of the resource file - GetPathL( aODT, EResourceDTD ); - - // Results are in iPath, copy resouce file from temp path to a new path in the repository - TInt errorCode = CopyFileL( aResource.FileName() ); - if ( !errorCode ) - { - // Store the new path - aResource.SetFileNameL( iPath->Des() ); - } - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::MakeODTPathL -// Creates a path for given ODT. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::MakeODTPathL( ChspsODT& aODT, ChspsResource& aResource ) - { - // make sure the temporary buffer is empty - iTempFileName1.Zero(); - - // get the path for ODT-resource to store - GetPathL( aODT, EResourceODT ); - - TPtr ptrPath = iPath->Des(); - TParsePtr p( ptrPath ); - aODT.SetThemeShortNameL(p.Name()); - - // iPath is modified - TPtrC pathPtr = iPath->Des(); - iTempFileName1.Format( _L("%S%S"), &KCDrive, &pathPtr ); - aResource.SetFileNameL( iTempFileName1 ); - - iTempFileName1.Zero(); - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::SetOdtL -// Saves the odt-structure into the repository. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt ChspsDefinitionRepository::SetOdtL( const ChspsODT &aODT ) - { - TInt ret = KErrGeneral; - -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::SetOdtL(): - rewriting the binary file." ) ); - } -#endif - - GetPathL( aODT, EResourceODT ); - ret = WriteToFileL( aODT); - - -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::SetOdtL(): - rewriting done. return code: %d." ), ret ); - } -#endif - - return ret; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetOdtL -// Retrieves the odt-structure from the repository as a reference. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt ChspsDefinitionRepository::GetOdtL( ChspsODT& aODT ) - { - TInt errorCode = KErrNone; - if ( aODT.Flags() & EhspsThemeStatusLicenceeDefault ) - { - iLicenseDefault = ETrue; - } - else - { - iLicenseDefault = EFalse; - } - - TRAP( errorCode, GetPathL( aODT, EResourceODT )); - if ( !errorCode ) - { - errorCode = ReadFromFileL( *iPath, aODT ); - } - iLicenseDefault = EFalse; - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetOdtHeaderL -// Retrieves the odt-structure from the repository as a reference. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt ChspsDefinitionRepository::GetOdtHeaderL( TDes& aPath, TLanguage /*aLang*/, ChspsODT& aODT ) - { - TInt err( KErrNotFound ); - - CDesCArraySeg* themeList = new ( ELeave ) CDesCArraySeg( KDefRepArrayGranularity ); - CleanupStack::PushL( themeList ); - - SelectFilesFromPathL( *themeList, aPath, ESortByDate, KMatchSkeleton ); - - if( themeList->MdcaCount() > 0 ) - { - - TPtrC name = themeList->MdcaPoint( 0 ); - if ( name.FindF( KSourceFolderWithSeperators ) == KErrNotFound ) - { - HBufC8* header( StreamHeaderFromFileL( name ) ); - CleanupStack::PushL( header ); - - if( header ) - { - aODT.UnMarshalHeaderL( *header ); - err = KErrNone; - } - - CleanupStack::PopAndDestroy( header ); - } - } - - CleanupStack::PopAndDestroy( themeList ); - - User::LeaveIfError( err ); - - return err; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetODTPathL -// Retrieves the path of given ODT. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C void ChspsDefinitionRepository::GetResourcePathL( const ChspsODT& aODT, ThspsResourceType aResourceType, TDes& aFilePath ) - { - // get the path for source resources to store - GetPathL( aODT, aResourceType ); - TPtrC ptr = iPath->Des(); - // modifying the resource file path on the resource - aFilePath.Format( _L("%S%S"), &KCDrive, &ptr ); - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetThemePathListL -// Retrieves the list of installed themes. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::GetThemePathListL( CDesCArraySeg& aThemeList, const ChspsODT& aODT ) - { - CDesCArraySeg* pathList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity); - CleanupStack::PushL( pathList ); - - CDesCArraySeg* tempPathList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity); - CleanupStack::PushL( tempPathList ); - - // The "themes" folder must exist at this point (C drive) - _LIT( KDriveC, "C:" ); - TFileName themesPath; - User::LeaveIfError( iFs.PrivatePath( themesPath )); - HBufC* path = HBufC::NewLC( KMaxFileName ); - TPtr pathPtr = path->Des(); - AppendDesCIntoPathL( pathPtr, KDriveC ); - AppendDesCIntoPathL( pathPtr, themesPath ); - AppendDesCIntoPathL( pathPtr, KThemesFolder ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - - // Allocate memory for the folder name to be found (uid folder) - HBufC* match = HBufC::NewLC( KTIntMahspsumbers ); - TPtr matchPtr = match->Des(); - - // Setup a mask from the search criterias - TInt8 rootUid = aODT.RootUid() ? 1 : 0; - TInt8 provUid = aODT.ProviderUid() ? 2 : 0; - TInt8 themeUid = aODT.ThemeUid() ? 4 : 0; - TInt8 mask = rootUid | provUid | themeUid; - - TInt index( 0 ); - - switch ( mask ) - { - case 0://No data in ODT. - { - MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList ); - } - break; - case 1://AppUid given. - case 3://AppUid and ProviderUid given. - case 7://AppUid, ProviderUid and ThemeUid given. - { - if ( aODT.RootUid() ) - { - AppendNumIntoPathL( pathPtr, aODT.RootUid() ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - if ( aODT.ProviderUid() ) - { - AppendNumIntoPathL( pathPtr, aODT.ProviderUid() ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - if ( aODT.ThemeUid() ) - { - AppendNumIntoPathL( pathPtr, aODT.ThemeUid() ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList ); - } - break; - case 2://ProviderUid given. - { - MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *tempPathList ); - matchPtr.Zero(); - matchPtr.AppendNum( aODT.ProviderUid() ); - for ( index = 0; index < tempPathList->Count(); index++ ) - { - MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList ); - } - } - break; - case 4://ThemeUid given. - { - MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList ); - for ( index = 0; index < pathList->Count(); index++ ) - { - MatchingFoldersL( *match, pathList->MdcaPoint( index ), *tempPathList ); - } - matchPtr.Zero(); - matchPtr.AppendNum( aODT.ThemeUid() ); - pathList->Reset(); - for ( index = 0; index < tempPathList->Count(); index++ ) - { - MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList ); - } - } - break; - case 6://ProviderUid and ThemeUid given. - { - MatchingFoldersFromAllDrivesL( KMatchAll, pathPtr, *pathList ); - matchPtr.Zero(); - matchPtr.AppendNum( aODT.ProviderUid() ); - for ( index = 0; index < pathList->Count(); index++ ) - { - MatchingFoldersL( *match, pathList->MdcaPoint( index ), *tempPathList ); - } - matchPtr.Zero(); - matchPtr.AppendNum( aODT.ThemeUid() ); - pathList->Reset(); - for ( index = 0; index < tempPathList->Count(); index++ ) - { - MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList ); - } - } - break; - case 5://AppUid and ThemeUid given. - { - // Get paths matching the 1st argument into pathList array - matchPtr.Zero(); - matchPtr.AppendNum( aODT.RootUid() ); - MatchingFoldersFromAllDrivesL( *match, pathPtr, *pathList ); - // From previous results, match and store results into tempPathList array - matchPtr.Zero(); - matchPtr = KMatchAll; - for ( index = 0; index < pathList->Count(); index++ ) - { - MatchingFoldersL( *match, pathList->MdcaPoint( index ), *tempPathList ); - } - // From previous results, find mathing plugins and store them back to the pathList - matchPtr.Zero(); - matchPtr.AppendNum( aODT.ThemeUid() ); - pathList->Reset(); - for ( index = 0; index < tempPathList->Count(); index++ ) - { - MatchingFoldersL( *match, tempPathList->MdcaPoint( index ), *pathList ); - } - } - break; - default: - { - pathList->AppendL( pathPtr ); - } - break; - } - - TInt err( KErrNotFound ); - for ( TInt i = 0; i < pathList->MdcaCount(); i++ ) - { - err = MatchingFoldersL( KMatchAll, pathList->MdcaPoint(i), *pathList ); - if ( err == KErrNotFound ) - { - TPtrC pathPtr = pathList->MdcaPoint(i); - aThemeList.AppendL( pathPtr ); - } - } - CleanupStack::PopAndDestroy( 4, pathList );//path, match, pathList, tempPathList - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetThemeListAsStreamL -// Retrieves the headers of installed themes as an array of streams. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C void ChspsDefinitionRepository::GetThemeListAsStreamL( CArrayPtrSeg& aHeaderList, const ChspsODT& aODT ) - { - CDesCArraySeg* pathList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity); - CleanupStack::PushL( pathList ); - GetThemePathListL( *pathList, aODT ); - CDesCArraySeg* themeList = new( ELeave ) CDesCArraySeg(KDefRepArrayGranularity); - CleanupStack::PushL( themeList ); - - for ( TInt i = 0; i < pathList->MdcaCount(); i++ ) - { - SelectFilesFromPathL( *themeList, pathList->MdcaPoint( i ), ESortByDate, KMatchSkeleton ); - } - - for ( TInt j = 0; j < themeList->MdcaCount(); j++ ) - { - TPtrC ptr( themeList->MdcaPoint( j ) ); - if ( ptr.FindF( KSourceFolderWithSeperators ) == KErrNotFound ) - { - HBufC8* temp = StreamHeaderFromFileL( themeList->MdcaPoint( j ) ); - if ( temp ) - { - aHeaderList.AppendL( temp ); - } - } - } - CleanupStack::PopAndDestroy( 2, pathList );//themeList, pathList - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::RemoveThemeL -// Removes the specified theme. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::RemoveThemeL( const ChspsODT& aODT ) - { - GetPathL( aODT, EResourceNone ); - RemoveDirectoryL(); - // theme removal is not informed to the clients through RepositoryInfoArray - // because this function is used also by the theme server's clean up functions - - // and it not necessary inform about them. - // insteads, maintenance handler does inform the removal. - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::MakeResourcePathL -// Makes a path in the repository that can be used to store the resource file. -// The path is written back into aResource -// The path depends on the locale under which the resource belongs. -// The path information will be used to retrieve the source later. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::MakeResourcePathL( const ChspsODT& aODT, ChspsResource& aResource ) - { - // get the path for source resources to store (results are stored into the iPath instance) - GetPathL( aODT, aResource.ResourceType() ); - TPtr pathPtr = iPath->Des(); - - // If the resource is of type "Other" then skip renaming of the file extension - if ( aResource.ResourceType() == EResourceOther ) - { - if ( aResource.Language() != ELangNone ) - { - AddLocalePathL( pathPtr, aODT.OdtLanguage() ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - - // Append the iPath with the resource name - AppendDesCIntoPathL( pathPtr, aResource.ResourceId() ); - - // Append with original file extension or fix it - const TDesC& name = aResource.FileName(); - TParsePtr parsePtr( (TDes&)name ); - TPtrC fileExtension = parsePtr.Ext(); - if ( fileExtension.Length() > 2 && fileExtension.Left(2).CompareF( _L(".o") ) == 0 ) - { - // Strip the first letter - TInt odtIndex(0); - TLex lex( fileExtension.Mid(3) ); - if ( lex.Val( odtIndex ) == KErrNone && odtIndex >= 0 ) - { - fileExtension.Set( KMatchSkeleton ); - } - } - AppendDesCIntoPathL( pathPtr, fileExtension ); - } - else - { - // If replaceable resource - if ( aResource.LockingPolicy() == EhspsUnlocked ) - { - AppendDesCIntoPathL( pathPtr, aResource.ResourceId() ); - FileExtensionL( aResource.ResourceType(), aODT.OdtLanguage() ); - } - else - { - // make phycical path - User::LeaveIfError(iFs.SetSessionToPrivate(EDriveC)); - // create the directory structure on the path - TInt err = iFs.MkDirAll( *iPath ); - if ( err != KErrNone && err != KErrAlreadyExists ) - { - User::Leave( err ); - } - AppendDesCIntoPathL( pathPtr, aResource.ResourceId() ); - FileExtensionL( aResource.ResourceType(), aODT.OdtLanguage() ); - } - } - aResource.SetFileNameL( iPath->Des() ); - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::SetResourceListL -// Stores the resource list to the repository. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C TInt ChspsDefinitionRepository::SetResourceListL( ChspsODT& aODT, const CArrayPtrSeg& aResourceList ) - { - // make sure the temporary buffers are empty. - iTempFileName1.Zero(); - iTempFileName2.Zero(); - - TInt errorCode = KErrNone; - - TInt tempLanguage = aODT.OdtLanguage(); - - // Loop provided resources and copy them to correct places in the repository - for ( TInt i=0; iLanguage() ); - - if ( res->ResourceType() == EResourceDTD ) - { - SetLocaleL( aODT, *res ); - } - else - { - // save source path because res->FileName() will be modified by MakeResourcePath but - // the original path is still needed - HBufC* fileName = HBufC::NewLC( KMaxFileName ); - TPtr fileNamePtr = fileName->Des(); - fileNamePtr.Append( res->FileName() ); - - // strip the extension temporarily - TParsePtr k( fileNamePtr ); - TPtrC name = k.Name(); - res->SetResourceIdL(name); - - // copy a non-cacheable resource from its location into the repository - MakeResourcePathL( aODT, *res ); - - // restore the file extension - TPtrC nameAndExt = k.NameAndExt(); - res->SetResourceIdL(nameAndExt); - - // copy the resource file to the repository - errorCode = CopyFileL( *fileName, iPath->Des() ); - if ( errorCode ) - { -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::SetResourceListL() - resource copying failed" ) ); - } -#endif - } - - CleanupStack::PopAndDestroy( fileName ); - - - // Set drive information - iTempFileName1.Format( _L("%S"), &res->FileName() ); - TParsePtr f( iTempFileName1 ); - TPtrC path = f.Path(); - TPtrC file = f.NameAndExt(); - iTempFileName2.Format(_L("%S%S%S"), &KCDrive, &path, &file ); - res->SetFileNameL( iTempFileName2 ); - } - aODT.AddResourceL( res ); - } - - aODT.SetOdtLanguage( tempLanguage ); - iTempFileName1.Zero(); - iTempFileName2.Zero(); - - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetResourceListL -// Retrieves the resource list from the repository. ODT-header given is a search mask. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C TInt ChspsDefinitionRepository::GetResourceListL( const ChspsODT& aODT, CArrayPtrSeg& aResourceList ) - { - TInt errorCode = KErrNone; - GetPathL( aODT, EResourceODT ); - CFileStore* store = OpenFileStoreLC( *iPath ); - - if( !store ) - { - errorCode = KErrNotFound; - } - // Construct and open the root stream which contains the representation of our objects. - if( !errorCode ) - { - RStoreReadStream instream; - CleanupClosePushL( instream ); - - instream.OpenLC( *store, store->Root() ); - - ChspsODT* odt = ChspsODT::NewL(); - CleanupStack::PushL( odt ); - - odt->InternalizeHeaderL( instream ); - // consumes header delimiter - instream.ReadInt16L(); - odt->InternalizeResourceListL( instream ); - // destroy the direct file store object (closes the file) - for ( TInt i = 0; i < odt->ResourceCount(); i++ ) - { - aResourceList.AppendL( odt->ResourceL( i ).CloneL()); - } - - CleanupStack::PopAndDestroy( odt ); - - // Destroy the stream object and close the intstream - CleanupStack::PopAndDestroy( 2, &instream ); - - // Destroy the direct file store object (closes the file) - CleanupStack::PopAndDestroy( store ); - } - - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetRepositoryInfo -// Returns a refrence to a RArray-object containing changes in the repository system. -// It is a responsibilty of the caller to lock the repository for modifications. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::RegisterNotification( ThspsRepositoryInfo aRepositoryInfo ) - { - iRepositoryInfoQueue.Append( aRepositoryInfo ); - - for ( TInt i=0; i < iRepositoryInfoQueue.Count(); i++ ) - { - // take an info from the queue - ThspsRepositoryInfo info = iRepositoryInfoQueue[i]; - TBool consumed = EFalse; - // notify the observers until someone consumes the info - for ( TInt j=0; !consumed && j < iObservers.Count(); j++ ) - { - if ( iObservers[j]->HandleDefinitionRespositoryEvent( info ) ) - { - // observer has handled the event, stop this loop - consumed = ETrue; - } - } - // delete info from the queue - iRepositoryInfoQueue.Remove( i ); - } - iRepositoryInfoQueue.Compress(); - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::RegisterObserverL -// Registers an observer. Observers will be notified when there are definition repository -// events available. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::RegisterObserverL - ( const MhspsDefinitionRepositoryObserver& aObserver ) - { - iObservers.Append( &aObserver ); - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::UnregisterObserver -// When an observer stops observation of definition repository events, it must -// unregister itself. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::UnregisterObserver - ( const MhspsDefinitionRepositoryObserver& aObserver ) - { - TInt found = iObservers.Find( &aObserver ); - if ( !( found == KErrNotFound )) - { - iObservers.Remove( found ); - } - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::Lock -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::Lock() - { - iLockSemaphore++; - -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::Lock() - semaphore increased to %d" ), - iLockSemaphore ); - } -#endif - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::Unlock -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::Unlock() - { - if (iLockSemaphore ) - { - iLockSemaphore--; - -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::Unlock() - semaphore decreased to %d" ), - iLockSemaphore ); - } -#endif - } - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::Locked -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C TBool ChspsDefinitionRepository::Locked() const - { - return iLockSemaphore; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetODTPathLC -// Creates a path from the theme header information. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::GetODTPathL( const ChspsODT& aODT, TDes& aPath ) - { - GetPathL( aODT, EResourceODT ); - if ( iPath ) - { - aPath.Copy( iPath->Des() ); - } - else - User::Leave( KErrNotFound ); - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::SetLogBus -// Set log bus. -// ----------------------------------------------------------------------------- -#ifdef HSPS_LOG_ACTIVE -EXPORT_C void ChspsDefinitionRepository::SetLogBus( void* aLogBus ) - { - iLogBus = (ChspsLogBus*)aLogBus; - } -#else -EXPORT_C void ChspsDefinitionRepository::SetLogBus( void* /*aLogBus*/ ) - { - } -#endif - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetPathL -// Creates a path from the theme header information. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::GetPathL( const ChspsODT& aODT, ThspsResourceType aResourceType ) - { - delete iPath; - iPath = NULL; - iPath = HBufC::NewL( KMaxFileName ); - TPtr pathPtr = iPath->Des(); - - TInt rootUid( aODT.RootUid() ); - TInt providerUid( aODT.ProviderUid() ); - TInt themeUid( aODT.ThemeUid() ); - - const TDesC& providerName = aODT.ProviderName(); - const TDesC& themeShortName = aODT.ThemeShortName(); - const TDesC& fileVersion = aODT.ThemeVersion(); - - User::LeaveIfError( iFs.PrivatePath( pathPtr )); - - AppendDesCIntoPathL( pathPtr, KThemesFolder ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - - if ( rootUid ) - { - // Append root uid - AppendNumIntoPathL( pathPtr, rootUid ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - if ( providerUid ) - { - // Append provider uid - AppendNumIntoPathL( pathPtr, providerUid ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - if ( themeUid ) - { - // Append configuration uid - AppendNumIntoPathL( pathPtr, themeUid ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - if ( fileVersion.Length() ) - { - // Append version - AppendDesCIntoPathL( pathPtr, fileVersion ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - - // path for source files - if ( aResourceType > EResourceODT ) - { - if ( aResourceType != EResourceXML ) - { - if ( aResourceType == EResourceDTD ) - { - // locales - AppendDesCIntoPathL( pathPtr, KLocaleFolder ); - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - AddLocalePathL( pathPtr, aODT.OdtLanguage() ); - } - else - { - // sources - AppendDesCIntoPathL( pathPtr, KSourceFolder ); - } - AppendDesCIntoPathL( pathPtr, KDoubleBackSlash ); - } - - } - - // resource source files do not need full path and filename - // because they must be stored as is - if ( aResourceType > EResourceNone && aResourceType < EResourceRES ) - { - if ( themeShortName.Length() ) - { - // Append configuration name - AppendDesCIntoPathL( pathPtr, themeShortName ); - } - else if ( themeUid ) - { - AppendNumIntoPathL( pathPtr, themeUid ); - } - - FileExtensionL( aResourceType, aODT.OdtLanguage() ); - } - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::AppendDesCIntoPathL -// Appends a descriptor into path. Leaves if fails. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::AppendDesCIntoPathL( TDes& aPath, const TDesC& aText ) - { - if ( ( KMaxFileName - aPath.Length() ) >= aText.Length() ) - { - aPath.Append( aText ); - } - else - { - User::Leave( KErrOverflow ); - } - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::AppendNumIntoPathL -// Appends a number into path. Leaves if fails. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::AppendNumIntoPathL( TDes& aPath, const TUint aNum ) - { - TInt len = 8; - if ( ( KMaxFileName - aPath.Length() ) >= len ) - { - aPath.AppendNum( aNum ); - } - else - { - User::Leave( KErrOverflow ); - } - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::FileExtensionL -// Returns a file extension for the given TDefRepFileExtension. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::FileExtensionL( ThspsResourceType aResourceType, - TInt /*aLanguage*/ ) - { - TPtr pathPtr = iPath->Des(); - switch ( aResourceType ) - { - case EResourceNone: - { - } - break; - case EResourceODT: - { - TBuf<6> extension( KODTFileExtension ); - AppendDesCIntoPathL( pathPtr, extension ); - } - break; - case EResourceDTD: - { - AppendDesCIntoPathL( pathPtr, KDTDFileExtension ); - } - break; - case EResourceXML: - { - AppendDesCIntoPathL( pathPtr, KXMLFileExtension ); - } - break; - case EResourceDAT: - { - AppendDesCIntoPathL( pathPtr, KDATFileExtension ); - } - break; - default: - { - User::Leave( KErrArgument ); - } - break; - }; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::PathExtensionL -// Returns a file extension for the given TDefRepFileExtension. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::AddLocalePathL( TDes& aPath, TInt aLanguage ) - { - TBuf<6> extension; - extension.AppendFormat( KFolderFormat, aLanguage ); - AppendDesCIntoPathL( aPath, extension ); - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::WriteToFileL -// Writes the ODT structure into file. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -TInt ChspsDefinitionRepository::WriteToFileL( const ChspsODT& aODT ) - { - TInt errorCode = KErrNone; - errorCode = iFs.SetSessionToPrivate( EDriveC ); - if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, 0, EDriveC ) ) - { - errorCode = KErrDiskFull; - -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::WriteToFileL(): - disk full." ) ); - } -#endif - } - - if ( !errorCode ) - { - // Create the directory structure - TInt err = iFs.MkDirAll( *iPath ); - if ( err != KErrNone && err != KErrAlreadyExists ) - { - errorCode = err; - -#ifdef HSPS_LOG_ACTIVE - if( iLogBus ) - { - iLogBus->LogText( _L( "ChspsDefinitionRepository::WriteToFileL(): - error %d." ), - err ); - } -#endif - } - - if ( !errorCode ) - { - // Create (replace) the direct file store - CFileStore* store = CDirectFileStore::ReplaceLC( iFs, *iPath, EFileWrite); - - // Must say what kind of file store. - store->SetTypeL( KDirectFileStoreLayoutUid ); - - // Construct the output stream. - RStoreWriteStream outstream; - CleanupClosePushL( outstream ); - - TStreamId id = outstream.CreateLC(*store); - - // Stream out the ChspsODT - outstream << aODT; - outstream.CommitL(); - - // Destroy the stream object and close the outstream - CleanupStack::PopAndDestroy( 2, &outstream ); - - // Set this stream id as the root - store->SetRootL(id); - store->CommitL(); - - // Destroy the direct file store object (closes the file), - CleanupStack::PopAndDestroy( store ); - } - } - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::ReadFromFileL -// Reads the ODT structure from the file. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -TInt ChspsDefinitionRepository::ReadFromFileL( const TDesC& aPath, ChspsODT& aODT ) - { - TInt errorCode = KErrNone; - CFileStore* store = OpenFileStoreLC( aPath ); - if ( !store ) - { - errorCode = KErrNotFound; - } - // Construct and open the root stream which - // contains the representation of our objects. - if ( !errorCode ) - { - RStoreReadStream instream; - CleanupClosePushL( instream ); - - instream.OpenLC(*store,store->Root()); - - // Stream in the ODT - instream >> aODT; - - // Destroy the stream object and close the instream - CleanupStack::PopAndDestroy( 2, &instream ); - - // Destroy the direct file store object (closes the file), - CleanupStack::PopAndDestroy( store ); - } - - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::StreamHeaderFromFileL -// Streams the ODT header from the file into descriptor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -HBufC8* ChspsDefinitionRepository::StreamHeaderFromFileL( const TDesC& aPath ) - { - HBufC8* dataStream( NULL ); - CFileStore* store( NULL ); - - store = OpenFileStoreLC( aPath ); - - if( store ) - { - // Construct and open the root stream, which - // contains the representation of our objects. - RStoreReadStream instream; - CleanupClosePushL( instream ); - - instream.OpenLC( *store, store->Root() ); - - ChspsODT* odt = ChspsODT::NewL(); - CleanupStack::PushL( odt ); - - odt->InternalizeHeaderL( instream ); - - - dataStream = odt->MarshalHeaderL(); - - CleanupStack::PopAndDestroy( odt ); - - // Destroy the stream object and close the instream - CleanupStack::PopAndDestroy( 2, &instream ); - - // Destroy the direct file store object (closes the file) - CleanupStack::PopAndDestroy( store ); - } - - return dataStream; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::OpenFileStoreLC -// Searches and opens the CFileStore from the any drive. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -CFileStore* ChspsDefinitionRepository::OpenFileStoreLC( const TDesC& aPath ) - { - RFile file; - TDriveList drivelist; - CFileStore* store = NULL; - - TInt err( KErrNotFound ); - iFs.SetSessionToPrivate( EDriveC ); - err = file.Open(iFs, aPath, EFileShareReadersOnly ); - if ( !err ) - { - // if the file is empty CDirectFileStore::FromLC leaves. - TInt size(0); - file.Size(size); - if(size) - { - // Oownership of the file passes to the store - store = CDirectFileStore::FromLC( file ); - } - } - - if( err || !store ) - { - // Just for sanity - file.Close(); - } - - iLicenseDefault = EFalse; - - return store; - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::SelectFilesFromPathL -// Retrieves all the files from the given path. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::SelectFilesFromPathL( CDesCArraySeg& aFileList, const TDesC& aPath, - TEntryKey aSortFlag, const TDesC& aFileExtension ) - { - CDir* dirList; - User::LeaveIfError( iFs.GetDir( aPath, KEntryAttMaskSupported, aSortFlag, dirList )); - for ( TInt i = 0; i < dirList->Count(); i++) - { - if ( !(*dirList)[i].IsDir() ) - { - HBufC* path = HBufC::NewLC( aPath.Length() + (*dirList)[i].iName.Length() ); - TPtr pathPtr = path->Des(); - AppendDesCIntoPathL( pathPtr, aPath ); - AppendDesCIntoPathL( pathPtr, (*dirList)[i].iName ); - TParse p; - p.Set(pathPtr,NULL,NULL); - - // If the path is not pointing to the sources folder (e.g. is not a resource file) - if ( pathPtr.FindF( KSourceFolderWithSeperators ) == KErrNotFound ) - { - // If requested and parsed file extensions match - if ( !p.Ext().CompareF( aFileExtension ) ) - { - aFileList.AppendL( pathPtr ); - } - } - CleanupStack::PopAndDestroy( path ); - } - } - delete dirList; - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::CopyFileL -// Copies a file from the given location into path, -// which is stored in the iPath member variable. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -TInt ChspsDefinitionRepository::CopyFileL( const TDesC& aSourceFile, const TDesC& aDestinationFile ) - { - TInt errorCode = KErrNone; - iFs.SetSessionToPrivate( EDriveC ); - // create the directory structure if one does not exist - TInt err = iFs.MkDirAll( aDestinationFile ); - if ( err != KErrNone && err != KErrAlreadyExists ) - { - errorCode = err; - } - if ( !errorCode ) - { - - TEntry entry; - errorCode = iFs.Entry( aSourceFile, entry ); - if ( !errorCode && SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, entry.iSize, EDriveC ) ) - { - errorCode = KErrDiskFull; - } - - if ( !errorCode ) - { - CFileMan* fileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( fileMan ); - errorCode = fileMan->Copy( aSourceFile, aDestinationFile, ( CFileMan::ERecurse | CFileMan::EOverWrite ) ); - errorCode = fileMan->Attribs( *iPath, KEntryAttNormal, - KEntryAttReadOnly | KEntryAttHidden, TTime(0) ); - CleanupStack::PopAndDestroy( fileMan ); - } - } - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::MatchingFoldersFromAllDrivesL -// Retrieves all the matching folders from the given path from every drive. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::MatchingFoldersFromAllDrivesL( const TDesC& aWildName, - const TDesC& aScanDir, CDesCArraySeg& aPathList ) - { - TFindFile fileFinder( iFs ); - CDir* fileList; - - // Exclude external and ROM drives from the following search - fileFinder.SetFindMask( KDriveAttExclude | KDriveAttRemovable |KDriveAttRemote |KDriveAttRom ); - - // Searches, using wildcards, for one or more files/directories in a specified directory. - // If no matching file is found in that directory, all available drives are searched in - // descending alphabetical order, from Y: to A:, and ending with the Z: drive. - // The search ends when one or more matching filenames are found, or when every available - // drive has been unsuccessfully searched. - // To begin searching again after a successful match has been made, use FindWild(). - TInt err = fileFinder.FindWildByDir( aWildName, aScanDir, fileList ); - while ( err == KErrNone ) - { - TInt i; - for ( i = 0; i < fileList->Count(); i++ ) - { - TPtrC name( (*fileList)[i].iName ); - if( (*fileList)[i].IsDir() - && KSourceFolder().CompareF( name ) != 0 - && KLocaleFolder().CompareF( name ) != 0 ) - { - TParse fullentry; - fullentry.Set( name, &fileFinder.File(), NULL); - - HBufC* path = HBufC::NewLC( fullentry.FullName().Length() + KDoubleBackSlash().Length() ); - TPtr pathPtr = path->Des(); - pathPtr.Append( fullentry.FullName() ); - pathPtr.Append( KDoubleBackSlash ); - aPathList.AppendL( pathPtr ); - CleanupStack::PopAndDestroy( path ); - } - }//for - delete fileList; - //Go trough all the drives a->z - err = fileFinder.FindWild( fileList ); - }//while - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::MatchingFoldersL -// Retrieves all the matching folders from the given path and drive. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -TInt ChspsDefinitionRepository::MatchingFoldersL( const TDesC& aWildName, - const TDesC& aScanDir, CDesCArraySeg& aPathList ) - { - TInt foldersExists( KErrCancel ); - TFindFile fileFinder( iFs ); - CDir* fileList; - - TInt err = fileFinder.FindWildByDir( aWildName, aScanDir, fileList ); - if ( err == KErrNone ) - { - TInt i; - for ( i = 0; i < fileList->Count(); i++ ) - { - TPtrC name( (*fileList)[i].iName ); - if( (*fileList)[i].IsDir() - && KSourceFolder().CompareF( name ) != 0 - && KLocaleFolder().CompareF( name ) != 0 ) - { - foldersExists = KErrNone; - TParse fullentry; - fullentry.Set( name, &fileFinder.File(), NULL); - - HBufC* path = HBufC::NewLC( fullentry.FullName().Length() + KDoubleBackSlash().Length() ); - TPtr pathPtr = path->Des(); - pathPtr.Append( fullentry.FullName() ); - pathPtr.Append( KDoubleBackSlash ); - aPathList.AppendL( pathPtr ); - CleanupStack::PopAndDestroy( path ); - } - else - { - foldersExists = KErrNotFound; - } - }//for - delete fileList; - }//if - - return foldersExists; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::CopyFileL -// Copies a file from the given location into path, -// which is stored in the iPath member variable. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -TInt ChspsDefinitionRepository::CopyFileL( const TDesC& aSourceFile ) - { - TInt errorCode = KErrNone; - iFs.SetSessionToPrivate( EDriveC ); - // create the directory structure if one does not exist - TInt err = iFs.MkDirAll( *iPath ); - if ( err != KErrNone && err != KErrAlreadyExists ) - { - errorCode = err; - } - if ( !errorCode ) - { - TEntry entry; - errorCode = iFs.Entry( aSourceFile, entry ); - if ( !errorCode && SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, entry.iSize, EDriveC ) ) - { - errorCode = KErrDiskFull; - } - if ( !errorCode ) - { - CFileMan* fileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( fileMan ); - errorCode = fileMan->Copy( aSourceFile, *iPath, CFileMan::EOverWrite ); - errorCode = fileMan->Attribs( *iPath, KEntryAttNormal, - KEntryAttReadOnly | KEntryAttHidden, TTime(0) ); - CleanupStack::PopAndDestroy( fileMan ); - } - } - return errorCode; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::RemoveDirectoryL -// Deletes the files and folders beneath the path, -// which is stored in the iPath member variable. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::RemoveDirectoryL() - { - TInt errorCode = KErrNone; - iFs.SetSessionToPrivate( EDriveC ); - CFileMan* fileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( fileMan ); - TPtr pathPtr = iPath->Des(); - TInt err = fileMan->RmDir( pathPtr ); - if ( err != KErrNone && err != KErrPathNotFound ) - { - errorCode = err; // probably KErrInUse - } - else - { - //If the folder is empty -> remove it - TParsePtr path( pathPtr ); - TInt flag( ETrue ); - do - { - TInt err = path.PopDir(); - if ( !err ) - { - CDir* dirList; - err = iFs.GetDir( path.Path(), KEntryAttMaskSupported,ESortByName, dirList ); - if ( !err && dirList->Count() == 0 ) - { - err = fileMan->RmDir( path.Path() ); - } - else - { - flag = EFalse; - } - delete dirList; - } - } - while ( flag ); - } - CleanupStack::PopAndDestroy( fileMan ); - User::LeaveIfError( errorCode ); - } - - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::RestoreBackupConfiguration -// Restores defined configuration from backup folder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C TInt ChspsDefinitionRepository::RestoreBackupConfiguration( - const ChspsODT& /*aODT*/ ) - { - TInt err( KErrNotFound ); - - return err; - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::BackupConfigurationL -// Copies defined configuration to theme backup folder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::BackupConfigurationL( - const ChspsODT& aODT ) - { - HBufC* backupPath = HBufC::NewL( KMaxFileName ); - CleanupStack::PushL( backupPath ); - TPtr backupPathPtr = backupPath->Des(); - - User::LeaveIfError( iFs.PrivatePath( backupPathPtr )); - - AppendDesCIntoPathL( backupPathPtr, KBackupFolder ); - AppendDesCIntoPathL( backupPathPtr, KDoubleBackSlash ); - AppendDesCIntoPathL( backupPathPtr, KThemesFolder ); - AppendDesCIntoPathL( backupPathPtr, KDoubleBackSlash ); - - // Backup configuration file - GetPathL( aODT, EResourceODT ); - CopyFileL( iPath->Des(), backupPathPtr ); - - CleanupStack::PopAndDestroy( backupPath ); - - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::ClearBackupsL -// Clears previous backup data -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -EXPORT_C void ChspsDefinitionRepository::ClearBackupsL() - { - - HBufC* backupPath = HBufC::NewL( KMaxFileName ); - CleanupStack::PushL( backupPath ); - TPtr backupPathPtr = backupPath->Des(); - - User::LeaveIfError( iFs.PrivatePath( backupPathPtr )); - - AppendDesCIntoPathL( backupPathPtr, KBackupFolder ); - AppendDesCIntoPathL( backupPathPtr, KDoubleBackSlash ); - - RemoveDirectoryL( backupPathPtr ); - - CleanupStack::PopAndDestroy( backupPath ); - - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::GetOdtL -// Retrieves the odt-structure from the repository as a reference. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C void ChspsDefinitionRepository::GetOdtL( - const TDes& aPath, - ChspsODT& aODT ) - { - User::LeaveIfError( ReadFromFileL( aPath, aODT ) ); - } - -// ----------------------------------------------------------------------------- -// ChspsDefinitionRepository::RemoveDirectoryL -// Deletes the defined directory ( files and folders recursively ) -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -void ChspsDefinitionRepository::RemoveDirectoryL( - TDesC& aDirPath ) - { - - iFs.SetSessionToPrivate( EDriveC ); - CFileMan* fileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( fileMan ); - TInt err = fileMan->RmDir( aDirPath ); - CleanupStack::PopAndDestroy( fileMan ); - - } - -// End of File