--- /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 <bautils.h>
+#include <eikenv.h>
+#include <f32file.h>
+
+// 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