diff -r 000000000000 -r 094583676ce7 wvuing/wvvariant/AlternatorSrc/CCABrandInstallerImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvvariant/AlternatorSrc/CCABrandInstallerImp.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,362 @@ +/* +* Copyright (c) 2002-2004 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: Concrete implementation for installing branding data +* +*/ + + + +// INCLUDE FILES +#include "CCABrandInstallerImp.h" +#include "ChatDebugPrint.h" +#include +#include +#include + +// CONSTANTS +namespace + { + _LIT( KBrandingFolder, "Branding\\IMApp" ); + _LIT( KImportFolder, "import" ); + _LIT( KDirSeparator, "\\" ); + _LIT( KBranding, "Branding" ); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCABrandInstallerImp::CCABrandInstallerImp() + { + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CCABrandInstallerImp::ConstructL() + { + iEikEnv = CEikonEnv::Static(); + iFileMan = CFileMan::NewL( iEikEnv->FsSession() ); + iPrivatePath = HBufC::NewL( KMaxPath ); + TPtr privatePath( iPrivatePath->Des() ); + iEikEnv->FsSession().PrivatePath( privatePath ); + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CCABrandInstallerImp* CCABrandInstallerImp::NewL() + { + CCABrandInstallerImp* self = CCABrandInstallerImp::NewLC(); + CleanupStack::Pop(); + return self; + } + +CCABrandInstallerImp* CCABrandInstallerImp::NewLC() + { + CCABrandInstallerImp* self = new( ELeave ) CCABrandInstallerImp; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// Destructor +CCABrandInstallerImp::~CCABrandInstallerImp() + { + delete iFileMan; + delete iPrivatePath; + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::BrandAlreadyExistsL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCABrandInstallerImp::BrandAlreadyExistsL( const TDesC& aBrandName ) + { + HBufC* folderPath = HBufC::NewLC( KMaxPath ); + TPtr folderPathPtr( folderPath->Des() ); + + //Append private folder to folder path + folderPathPtr.Append( *iPrivatePath ); + //Append branding path to private path + folderPathPtr.Append( KBrandingFolder ); + + folderPathPtr.Append( KDirSeparator ); + //Append server name to path + folderPathPtr.Append( aBrandName ); + //Check if folder exists, if exists brand is once installed + TBool returnValue = FolderExists( *folderPath ); + CleanupStack::PopAndDestroy( folderPath ); + return returnValue; + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::CreateImportFolderL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCABrandInstallerImp::CreateImportFolderL() + { + HBufC* folderPath = HBufC::NewLC( KMaxPath ); + TPtr folderPathPtr( folderPath->Des() ); + folderPathPtr.Append( *iPrivatePath ); + //Append import folder to private path + folderPathPtr.Append( KImportFolder ); + + folderPathPtr.Append( KDirSeparator ); + + //create import folder + User::LeaveIfError( CreateFolder( *folderPath ) ); + CleanupStack::PopAndDestroy( folderPath ); + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::ImportFolderExistsL +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCABrandInstallerImp::ImportFolderExistsL() + { + HBufC* privatePath = HBufC::NewLC( KMaxPath ); + TPtr privatePathPtr( privatePath->Des() ); + + privatePathPtr.Append( *iPrivatePath ); + //Append import folder to private path + privatePathPtr.Append( KImportFolder ); + + privatePathPtr.Append( KDirSeparator ); + //Check if import folder exists + TBool returnValue = FolderExists( *privatePath ); + CleanupStack::PopAndDestroy( privatePath ); + return returnValue; + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::ListOfInstalledBrandsL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCABrandInstallerImp::ListOfInstalledBrandsL( CDesCArray& aListOfBrands ) + { + RFs& fileSys = iEikEnv->FsSession(); + HBufC* privatePath = HBufC::NewLC( KMaxPath ); + TPtr privatePathPtr( privatePath->Des() ); + + privatePathPtr.Append( *iPrivatePath ); + //Append branding folder to path + privatePathPtr.Append( KBrandingFolder ); + + privatePathPtr.Append( KDirSeparator ); + + CDir* dirList; + //Get directories + User::LeaveIfError( fileSys.GetDir( *privatePath, KEntryAttMaskSupported, ESortByName, dirList ) ); + for ( TInt i = 0; i < dirList->Count(); i++ ) + { + aListOfBrands.AppendL( ( *dirList )[ i ].iName ); + } + delete dirList; + CleanupStack::PopAndDestroy( privatePath ); + } +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::ListOfUninstalledBrandsL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCABrandInstallerImp::ListOfUninstalledBrandsL( CDesCArray& aListOfBrands ) + { + RFs& fileSys = iEikEnv->FsSession(); + HBufC* privatePath = HBufC::NewLC( KMaxPath ); + TPtr privatePathPtr( privatePath->Des() ); + + privatePathPtr.Append( *iPrivatePath ); + //Append import folder to path + privatePathPtr.Append( KImportFolder ); + + privatePathPtr.Append( KDirSeparator ); + //Append branding folder to path + privatePathPtr.Append( KBrandingFolder ); + privatePathPtr.Append( KDirSeparator ); + + CDir* dirList; + //Get directories + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::ListOfUninstalledBrandsL: Get dirs from folder:%S" ), &privatePathPtr ); + + User::LeaveIfError( fileSys.GetDir( *privatePath, KEntryAttMaskSupported, ESortByName, dirList ) ); + HBufC* path = HBufC::NewLC( KMaxPath ); + TPtr pathPtr( path->Des() ); + for ( TInt i = 0; i < dirList->Count(); i++ ) + { + pathPtr.Append( ( *dirList )[ i ].iName ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::ListOfUninstalledBrandsL: Brand folder:%S" ), &pathPtr ); + + aListOfBrands.AppendL( *path ); + pathPtr.Zero(); + } + delete dirList; + CleanupStack::PopAndDestroy( 2 ); + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::IsNewBrandAvailableL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCABrandInstallerImp::IsNewBrandAvailableL() + { + HBufC* privatePath = HBufC::NewLC( KMaxPath ); + TPtr privatePathPtr( privatePath->Des() ); + + privatePathPtr.Append( *iPrivatePath ); + //Append import folder to path + privatePathPtr.Append( KImportFolder ); + + privatePathPtr.Append( KDirSeparator ); + //Append branding folder to path + privatePathPtr.Append( KBrandingFolder ); + + privatePathPtr.Append( KDirSeparator ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::IsNewBrandAvailableL(): Searching from...%S" ), &privatePathPtr ); + TBool returnValue = FolderExists( *privatePath ); + CleanupStack::PopAndDestroy( privatePath ); + return returnValue; + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::InstallNewBrandL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCABrandInstallerImp::InstallNewBrandL() + { + + CDesCArray* brands = new ( ELeave ) CDesCArrayFlat( 10 ); + CleanupStack::PushL( brands ); + + ListOfUninstalledBrandsL( *brands ); + + HBufC* installPath = HBufC::NewLC( KMaxPath ); + TPtr installPathPtr( installPath->Des() ); + + HBufC* sourcePath = HBufC::NewLC( KMaxPath ); + TPtr sourcePathPtr( sourcePath->Des() ); + + for ( TInt i = 0; i < brands->MdcaCount(); i++ ) + { + installPathPtr.Append( *iPrivatePath ); + installPathPtr.Append( KBrandingFolder ); + installPathPtr.Append( KDirSeparator ); + installPathPtr.Append( brands->MdcaPoint( i ) ); + + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): Install path: %S" ), &installPathPtr ); + + if ( !( FolderExists( *installPath ) ) ) + { + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): Create unexisting folder: %S" ), &installPathPtr ); + TInt createErr = CreateFolder( *installPath ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): CreateErr: %d" ), createErr ); + } + else + { + //If install folder exists, then there is coming update to brand. + //Old files must be removed before install. + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): Remove existin folder: %S" ), &installPathPtr ); + TInt remErr = RemoveFolder( *installPath ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): RemoveErr: %d" ), remErr ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): Create Removed existin folder: %S" ), &installPathPtr ); + TInt createErr2 = CreateFolder( *installPath ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): CreateErr2: %d" ), createErr2 ); + } + + sourcePathPtr.Append( *iPrivatePath ); + sourcePathPtr.Append( KImportFolder ); + sourcePathPtr.Append( KDirSeparator ); + sourcePathPtr.Append( KBrandingFolder ); + sourcePathPtr.Append( KDirSeparator ); + sourcePathPtr.Append( brands->MdcaPoint( i ) ); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): Source path: %S" ), &sourcePathPtr ); + + + TInt err = MoveFolder( *sourcePath, *installPath ); + sourcePathPtr.Zero(); + installPathPtr.Zero(); + CHAT_DP( D_CHAT_LIT( "CCABrandInstallerImp::InstallNewBrandL(): MoveFolder err: %d" ), err ); + User::LeaveIfError( err ); + } + + //Clean import folder + HBufC* removedPath = HBufC::NewLC( KMaxPath ); + TPtr removedPathPtr( removedPath->Des() ); + removedPathPtr.Append( *iPrivatePath ); + removedPathPtr.Append( KImportFolder ); + removedPathPtr.Append( KDirSeparator ); + removedPathPtr.Append( KBranding ); + removedPathPtr.Append( KDirSeparator ); + + RemoveFolder( *removedPath ); + CleanupStack::PopAndDestroy( 4 ); + } +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::FolderExists +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CCABrandInstallerImp::FolderExists( const TDesC& aFolderPath ) + { + return BaflUtils::FolderExists( iEikEnv->FsSession(), aFolderPath ); + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::CreateFolder +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCABrandInstallerImp::CreateFolder( const TDesC& aFolderPath ) + { + RFs& fileSys = iEikEnv->FsSession(); + return fileSys.MkDirAll( aFolderPath ); + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::MoveFolder +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCABrandInstallerImp::MoveFolder( const TDesC& aSourcePath, const TDesC& aDestFolder ) + { + RFs& fileSys = iEikEnv->FsSession(); + return fileSys.Rename( aSourcePath, aDestFolder ); + } + +// ----------------------------------------------------------------------------- +// CCABrandInstallerImp::RemoveFolder +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCABrandInstallerImp::RemoveFolder( const TDesC& aFolderPath ) + { + return iFileMan->RmDir( aFolderPath ); + } + +// End of File