--- 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 <s32file.h>
-#include <s32mem.h>
-#include <sysutil.h>
-
-#include "hsps_builds_cfg.hrh"
-
-#include "hspsthememanagement.h"
-#include "hspsdefinitionrepository.h"
-#include "hspsodt.h"
-
-#ifdef HSPS_LOG_ACTIVE
-#include <hspslogbus.h>
-#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<HBufC8>& 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<ChspsResource>& 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; i<aResourceList.Count(); i++ )
- {
- ChspsResource* res = aResourceList.At(i);
-
- aODT.SetOdtLanguage( res->Language() );
-
- 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<ChspsResource>& 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 )
- {
- // <ver> locales <language>
- AppendDesCIntoPathL( pathPtr, KLocaleFolder );
- AppendDesCIntoPathL( pathPtr, KDoubleBackSlash );
- AddLocalePathL( pathPtr, aODT.OdtLanguage() );
- }
- else
- {
- // <ver> 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