--- a/filemanager/Engine/src/CFileManagerEngine.cpp Tue Feb 02 00:03:31 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2221 +0,0 @@
-/*
-* Copyright (c) 2002-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: Main class of the filemanagerengine
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <StringLoader.h>
-#include <barsread.h>
-#include <sysutil.h>
-#include <bautils.h>
-//#include <cmgxfilemanager.h>
-//#include <mgxfilemanagerfactory.h>
-//#include <cmgalbummanager.h>
-#include <pathinfo.h>
-#include <AknServerApp.h>
-#include <FileManagerEngine.rsg>
-#ifdef RD_MULTIPLE_DRIVE
-#include <driveinfo.h>
-#endif // RD_MULTIPLE_DRIVE
-#include "CFileManagerEngine.h"
-#include "CGflmNavigatorModel.h"
-#include "CGflmGroupItem.h"
-#include "CGflmFileSystemItem.h"
-#include "CGflmDriveItem.h"
-#include "CGflmGlobalActionItem.h"
-#include "MGflmItemGroup.h"
-#include "Cfilemanagerfolderarray.h"
-#include "CFilemanagerMimeIconArray.h"
-#include "CFileManagerActiveExecute.h"
-#include "CFileManagerRefresher.h"
-#include "Cfilemanagerfilesystemevent.h"
-#include "Cfilemanageractivesize.h"
-#include "Cfilemanageractivedelete.h"
-#include "FileManagerEngine.hrh"
-#include "CFileManagerCommonDefinitions.h"
-#include "CFileManagerUtils.h"
-#include "CFileManagerItemFilter.h"
-#include "CFileManagerDocHandler.h"
-#include "FileManagerDebug.h"
-#include "CFileManagerItemProperties.h"
-#include "CFileManagerRemovableDriveHandler.h"
-#include "CFileManagerRemoteDriveHandler.h"
-#include "CFileManagerBackupSettings.h"
-#include "CFileManagerRestoreSettings.h"
-#include "CFileManagerActiveRename.h"
-#include "CFileManagerFeatureManager.h"
-
-// CONSTANTS
-const TUint16 KIllegalChars[] = {
- '<', '>', '"', '/', '\\', '|', ':', '*', '?',
- 0xFF02, // Full width quote
- 0xFF0A, // Full width asterisk
- 0xFF0F, // Full width slash
- 0xFF1A, // Full width colon
- 0xFF1C, // Full width left arrow
- 0xFF1E, // Full width right arrow
- 0xFF1F, // Full width question mark
- 0xFF3C, // Full width back slash
- 0xFF5C, // Full width pipe
- 0x201C, // Left quote
- 0x201D, // Right quote
- 0x201F, // Reversed quote
- 0x21B2, // Downwards arrow with tip leftwards
- 0, // Array terminator
-};
-
-//const TInt KMGFileArrayGranularity = 32;
-
-
-// ============================ LOCAL FUNCTIONS ================================
-// -----------------------------------------------------------------------------
-// SearchMGAlbumIdL
-// -----------------------------------------------------------------------------
-//
-/*static TInt SearchMGAlbumIdL(
- CMGAlbumManager& aAlbumManager, const TDesC& aFilename )
- {
- CDesCArray* fileArray =
- new ( ELeave ) CDesCArraySeg( KMGFileArrayGranularity );
- CleanupStack::PushL( fileArray );
- TInt albumCount( aAlbumManager.AlbumCount() );
- TInt ret( KErrNotFound );
- for( TInt i( 0 ); i < albumCount; ++i )
- {
- CMGAlbumInfo* albumInfo = aAlbumManager.AlbumInfoLC( i );
- TInt albumId( albumInfo->Id() );
- CleanupStack::PopAndDestroy( albumInfo );
- fileArray->Reset();
- aAlbumManager.GetAlbumFileArrayL( albumId, *fileArray );
- TInt pos( 0 );
- if( !fileArray->Find( aFilename, pos ) )
- {
- ret = albumId;
- break;
- }
- }
- CleanupStack::PopAndDestroy( fileArray );
- return ret;
- }
-*/
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CFileManagerEngine
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CFileManagerEngine::CFileManagerEngine( RFs& aFs ) :
- iFs( aFs ), iObserver( NULL ), iSisFile( EFalse )
- {
- FUNC_LOG
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerEngine* CFileManagerEngine::NewL( RFs& aFs )
- {
- CFileManagerEngine* self = new ( ELeave ) CFileManagerEngine( aFs );
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::ConstructL
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::ConstructL()
- {
- FUNC_LOG
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create Feature Manager" )
- iFeatureManager = CFileManagerFeatureManager::NewL();
-
- iState = ENavigation;
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create navigator" )
- iNavigator = CGflmNavigatorModel::NewL( iFs );
-
- // Create drives group
- MGflmItemGroup* newGroup = iNavigator->CreateGroupL(
- EFileManagerDrivesGroup, EDrives );
-#ifdef RD_FILE_MANAGER_BACKUP
- // Set backup action
- HBufC* actionCaption = StringLoader::LoadLC( R_QTN_FMGR_MAIN_BACKUP );
- newGroup->AddActionItemL( EFileManagerBackupAction, *actionCaption );
- CleanupStack::PopAndDestroy( actionCaption );
-#endif // RD_FILE_MANAGER_BACKUP
-
- // Create files and folders groups
- iNavigator->CreateGroupL( EFileManagerFilesGroup, EDirectories | EFiles );
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create refresher" )
- iRefresher = CFileManagerRefresher::NewL( *iNavigator );
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create utils" )
- iUtils = CFileManagerUtils::NewL( iFs, *iNavigator, *iFeatureManager );
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create disk event" )
- iDiskEvent = CFileManagerFileSystemEvent::NewL( iFs, *this, ENotifyDisk );
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create removable drive handler" )
- iRemovableDrvHandler = CFileManagerRemovableDriveHandler::NewL(
- iFs, *iUtils, *this );
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create remote drive handler" )
- iRemoteDrvHandler = CFileManagerRemoteDriveHandler::NewL(
- *this, *iUtils );
-
- INFO_LOG( "CFileManagerEngine::ConstructL()-Create item filter" )
- iItemFilter = CFileManagerItemFilter::NewL( *this );
- iNavigator->SetCustomFilter( iItemFilter );
-
- // Store new starting index
- iNavigationIndices.AppendL( KErrNotFound );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::~CFileManagerEngine
-// Destructor
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerEngine::~CFileManagerEngine()
- {
- delete iActiveRename;
- iNavigationIndices.Reset();
- delete iRemoteDrvHandler;
- delete iBackupSettings;
- delete iRestoreSettings;
- delete iRemovableDrvHandler;
- delete iDocHandler;
- //delete iMgxFileManager;
- delete iFileSystemEvent;
- delete iRefresher;
- delete iNavigator;
- delete iItemFilter;
- delete iSearchString;
- delete iSearchFolder;
- delete iActiveSize;
- delete iDiskEvent;
- delete iUtils;
- delete iDriveName;
- delete iFeatureManager;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetFileSystemEventL
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::SetFileSystemEventL( const TDesC& aFullPath )
- {
- delete iFileSystemEvent;
- iFileSystemEvent = NULL;
- if ( aFullPath != KNullDesC )
- {
- iFileSystemEvent = CFileManagerFileSystemEvent::NewL(
- iFs, *this, ENotifyEntry, aFullPath );
- }
- else
- {
- iFileSystemEvent = CFileManagerFileSystemEvent::NewL(
- iFs, *this, ENotifyEntry );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IndexToFullPathL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CFileManagerEngine::IndexToFullPathL(
- const TInt aIndex ) const
- {
- if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
- {
- User::Leave( KErrNotFound );
- }
- CGflmGroupItem* item = iNavigator->Item( aIndex );
- HBufC* fullPath = NULL;
- switch ( item->Type() )
- {
- case CGflmGroupItem::EFile: // Fall through
- case CGflmGroupItem::EDirectory:
- {
- CGflmFileSystemItem* fsItem =
- static_cast< CGflmFileSystemItem* >( item );
- fullPath = fsItem->FullPathL();
- break;
- }
- case CGflmGroupItem::EDrive:
- {
- CGflmDriveItem* drvItem =
- static_cast< CGflmDriveItem* >( item );
- fullPath = drvItem->RootDirectory().AllocL();
- break;
- }
- default:
- {
- User::Leave( KErrNotFound );
- break;
- }
- }
- return fullPath;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IndexToFullPathLC
-// -----------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CFileManagerEngine::IndexToFullPathLC(
- const TInt aIndex ) const
- {
- HBufC* fullPath = IndexToFullPathL( aIndex );
- CleanupStack::PushL( fullPath );
- return fullPath;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::AddFullPathLC
-// -----------------------------------------------------------------------------
-//
-HBufC* CFileManagerEngine::AddFullPathLC(
- const TDesC& aName, const TBool aIsFolder )
- {
- TPtrC dir( iNavigator->CurrentDirectory() );
- TInt len( dir.Length() + aName.Length() );
- if ( aIsFolder )
- {
- ++len; // Ensure space for backslash
- }
- HBufC* fullPath = HBufC::NewLC( len );
- TPtr ptr( fullPath->Des() );
- ptr.Append( dir );
- ptr.Append( aName );
- if ( aIsFolder )
- {
- CFileManagerUtils::EnsureFinalBackslash( ptr );
- }
- return fullPath;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetMemoryL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::SetMemoryL( TFileManagerMemory /*aMemory*/ )
- {
- // Just check current drive avaibility, no matter what memory is set
- iLastDriveAvailable = CurrentDriveAvailable();
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::Memory
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TFileManagerMemory CFileManagerEngine::Memory() const
- {
-#ifdef RD_MULTIPLE_DRIVE
- CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
- if ( drvItem )
- {
- TUint driveStatus( drvItem->DriveStatus() );
- if ( driveStatus & DriveInfo::EDriveInternal )
- {
- if ( driveStatus & DriveInfo::EDriveExternallyMountable )
- {
- return EFmMassStorage;
- }
- return EFmPhoneMemory;
- }
- else if ( driveStatus & DriveInfo::EDriveUsbMemory )
- {
- return EFmUsbMemory;
- }
- else if ( driveStatus & DriveInfo::EDriveRemovable )
- {
- return EFmMemoryCard;
- }
- else if ( driveStatus & DriveInfo::EDriveRemote )
- {
- return EFmRemoteDrive;
- }
- }
- return EFmPhoneMemory;
-#else // RD_MULTIPLE_DRIVE
- CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
- if ( drvItem )
- {
- const TVolumeInfo vol( drvItem->VolumeInfo() );
- if ( vol.iDrive.iDriveAtt & KDriveAttInternal )
- {
- return EFmPhoneMemory;
- }
- else if ( vol.iDrive.iDriveAtt & KDriveAttRemovable )
- {
- return EFmMemoryCard;
- }
- else if ( vol.iDrive.iDriveAtt & KDriveAttRemote )
- {
- return EFmRemoteDrive;
- }
- }
- return EFmPhoneMemory;
-#endif // RD_MULTIPLE_DRIVE
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::FileList
-// -----------------------------------------------------------------------------
-//
-EXPORT_C MDesCArray* CFileManagerEngine::FileList() const
- {
- return iNavigator;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::OpenL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::OpenL( const TInt aIndex )
- {
- // Store drive letter for current drive changed checking
- TChar prevDrive( 0 );
- TPtrC prevDir( iNavigator->CurrentDirectory() );
- if ( prevDir.Length() )
- {
- prevDrive = prevDir[ 0 ];
- }
-
- if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
- {
- User::Leave( KErrNotFound );
- }
- CGflmGroupItem* item = iNavigator->Item( aIndex );
- switch ( item->Type() )
- {
- case CGflmGroupItem::EFile: // Fall through
- case CGflmGroupItem::EDirectory: // Fall through
- case CGflmGroupItem::EDrive:
- {
-
-#ifdef RD_MULTIPLE_DRIVE
- // Ensure that default folders exist
- if ( item->Type() == CGflmGroupItem::EDrive )
- {
- CGflmDriveItem* drvItem =
- static_cast< CGflmDriveItem* >( item );
- iUtils->CreateDefaultFolders(
- drvItem->Drive(), EFalse );
- }
-#endif // RD_MULTIPLE_DRIVE
-
- // Store navigation position
- SetCurrentIndex( aIndex );
-
- HBufC* fullPath = IndexToFullPathLC( aIndex );
- if ( item->Type() == CGflmGroupItem::EFile )
- {
- OpenFileL( *fullPath );
- }
- else
- {
- OpenDirectoryL( *fullPath );
-
- // Setup new navigation position
- iNavigationIndices.AppendL( 0 );
- }
- CleanupStack::PopAndDestroy( fullPath );
- break;
- }
- case CGflmGroupItem::EGlobalActionItem:
- {
- CGflmGlobalActionItem* actItem =
- static_cast< CGflmGlobalActionItem* >( item );
- if ( iProcessObserver )
- {
- iProcessObserver->NotifyL(
- MFileManagerProcessObserver::ENotifyActionSelected,
- actItem->Id() );
- }
- break;
- }
- default:
- {
- break;
- }
- }
-
- // Ensure that cached current drive info gets updated if drive was changed
- TPtrC dir( iNavigator->CurrentDirectory() );
- if ( dir.Length() )
- {
- if ( dir[ 0 ] != prevDrive )
- {
- iCurrentDriveInfoRefreshed = EFalse;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetObserver
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetObserver(
- MFileManagerProcessObserver* aObserver )
- {
- iProcessObserver = aObserver;
- iRefresher->SetObserver( aObserver );
- iRemovableDrvHandler->SetObserver( aObserver );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CurrentDirectory
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::CurrentDirectory() const
- {
- return iNavigator->CurrentDirectory();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CurrentDirectory
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::LocalizedNameOfCurrentDirectory() const
- {
- return iNavigator->LocalizedNameOfCurrentDirectory();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::BackstepL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::BackstepL()
- {
- // Store drive letter for current drive changed checking
- TChar prevDrive( 0 );
- // Note that prevDir gets invalid after BackstepL
- TPtrC prevDir( iNavigator->CurrentDirectory() );
- if ( prevDir.Length() )
- {
- prevDrive = prevDir[ 0 ];
- }
-
- // Setup backstep navigation index
- if ( !iNavigator->NavigationLevel() )
- {
- // Always first for initial root level
- iCurrentItemName.Zero();
- }
- else if( !iCurrentItemName.Length() )
- {
- // Otherwise previously opened folder
- iCurrentItemName.Copy(
- iNavigator->LocalizedNameOfCurrentDirectory() );
- }
- TInt pos( iNavigationIndices.Count() - 1 );
- if ( pos >= 0 )
- {
- iNavigationIndices.Remove( pos );
- }
-
- iNavigator->BackstepL();
-
- // Ensure that cached current drive info gets updated if drive was changed
- TPtrC dir( iNavigator->CurrentDirectory() );
- if ( dir.Length() )
- {
- if ( dir[ 0 ] != prevDrive )
- {
- iCurrentDriveInfoRefreshed = EFalse;
- }
- }
- else
- {
- // Make sure that drive info is refreshed
- ClearDriveInfo();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::FileTypeL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TUint32 CFileManagerEngine::FileTypeL( const TInt aIndex ) const
- {
- TUint32 fileType( CFileManagerItemProperties::ENotDefined );
- if ( aIndex >= 0 )
- {
- HBufC* fullPath = IndexToFullPathLC( aIndex );
- fileType = FileTypeL( *fullPath );
- CleanupStack::PopAndDestroy( fullPath );
- }
- return fileType;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::FileTypeL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TUint32 CFileManagerEngine::FileTypeL( const TDesC& aFullPath ) const
- {
- return iUtils->FileTypeL( aFullPath );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::DeleteL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerActiveDelete* CFileManagerEngine::CreateActiveDeleteL(
- CArrayFixFlat< TInt >& aIndexList )
- {
-
- CFileManagerActiveDelete* activeDelete =
- CFileManagerActiveDelete::NewL( aIndexList, *this, *iUtils );
- return activeDelete;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::NewFolder
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::NewFolderL( const TDesC& aFolderName )
- {
- // Add backslash to end so that MkDir realizes that it is directory
- HBufC* fullPath = AddFullPathLC( aFolderName, ETrue );
- TPtr ptr( fullPath->Des() );
-
- if ( ptr.Length() <= KMaxFileName )
- {
- iCurrentItemName.Copy( aFolderName );
-
- // Remove white spaces from end, file server also ignores those
- iCurrentItemName.TrimRight();
-
- User::LeaveIfError( iFs.MkDir( ptr ) );
- }
- else
- {
- User::Leave( KErrBadName );
- }
-
- CleanupStack::PopAndDestroy( fullPath );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetCurrentItemName
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetCurrentItemName( const TDesC& aFileName )
- {
-
- iCurrentItemName.Copy( aFileName );
-
- // Remove white spaces from end, file server also ignores those
- iCurrentItemName.TrimRight();
-
- }
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::RenameL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::RenameL(
- const TInt aIndex,
- const TDesC& aNewFileName )
- {
- FUNC_LOG
-
- // Make those given names as full paths
- TBool isFolder( IsFolder( aIndex ) );
- HBufC* fullPathOld = IndexToFullPathLC( aIndex );
- HBufC* fullPathNew = AddFullPathLC( aNewFileName, isFolder );
-
- if ( !fullPathOld->Compare( *fullPathNew ) )
- {
- // The name has not changed, rename is not required
- CleanupStack::PopAndDestroy( fullPathNew );
- CleanupStack::PopAndDestroy( fullPathOld );
- return;
- }
-
- // Gallery notification is relevant only for local drives
- TBool isRemoteDrive( iUtils->IsRemoteDrive( *fullPathOld ) );
-
- // Media Gallery albums get easily messed up when files are renamed.
- // Direct album editing seems a trick but it is seems to only way
- // to update Gallery properly.
- /*CMGAlbumManager* albumManager = MGAlbumManagerFactory::NewAlbumManagerL();
- CleanupStack:: PushL( albumManager );
- TInt albumId( KErrNotFound );
- if ( !isFolder && !isRemoteDrive )
- {
- // Do album search for files only
- TRAPD( err, albumId = SearchMGAlbumIdL( *albumManager, *fullPathOld ) );
- if( err != KErrNone )
- {
- albumId = KErrNotFound;
- }
- }
-*/
- // Handle rename
- delete iActiveRename;
- iActiveRename = NULL;
- iActiveRename = CFileManagerActiveRename::NewL(
- *this, *iUtils, *fullPathOld, *fullPathNew );
- ShowWaitDialogL( *iActiveRename );
- User::LeaveIfError( iActiveRename->Result() );
-
- // Update Media Gallery album if file exist in album
- /*if( albumId != KErrNotFound )
- {
- TRAP_IGNORE( { albumManager->RemoveFromAlbumL( *fullPathOld, albumId );
- albumManager->AddToAlbumL( *fullPathNew, albumId ); } );
- }
- CleanupStack::PopAndDestroy( albumManager );*/
-
- iCurrentItemName.Copy( aNewFileName );
-
- /*if ( !isRemoteDrive )
- {
- // Notify Media Gallery again
- TRAP_IGNORE( MGXFileManagerL().UpdateL( *fullPathOld, *fullPathNew ) );
- }*/
-
- CleanupStack::PopAndDestroy( fullPathNew );
- CleanupStack::PopAndDestroy( fullPathOld );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::FolderLevel
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::FolderLevel()
- {
- CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
- if ( !drvItem )
- {
- return KErrNotFound; // Main level
- }
- TPtrC dir( iNavigator->CurrentDirectory() );
- TInt count( dir.Length() );
- if ( !count )
- {
- return KErrNotFound; // Main level
- }
- // Count how many backslashes is in string to figure out the deepness
- TInt min( drvItem->RootDirectory().Length() );
- TInt bsCount( 0 );
- while( count > min )
- {
- --count;
- if ( dir[ count ] == KFmgrBackslash()[ 0 ] )
- {
- ++bsCount;
- }
- }
- return bsCount;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IsNameFoundL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::IsNameFoundL( const TDesC& aName )
- {
- return iUtils->IsNameFoundL( aName );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CurrentDrive
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::CurrentDrive()
- {
- TInt ret( KErrNotFound );
- TPtrC ptr( iNavigator->CurrentDirectory() );
- if ( ptr.Length() )
- {
- if( RFs::CharToDrive( ptr[ 0 ], ret ) != KErrNone )
- {
- ret = KErrNotFound;
- }
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetItemInfoL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerItemProperties* CFileManagerEngine::GetItemInfoL(
- const TInt aIndex )
- {
- if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
- {
- User::Leave( KErrNotFound );
- }
- CGflmGroupItem* item = iNavigator->Item( aIndex );
- return CFileManagerItemProperties::NewL( *item, *iUtils, *this );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetState
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetState( TState aState )
- {
- iState = aState;
- iNavigator->EnableSearchMode( iState == ESearch );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetState
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerEngine::TState CFileManagerEngine::State() const
- {
- return iState;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::RefreshDirectory
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::RefreshDirectory()
- {
- FUNC_LOG
-
-#ifdef FILE_MANAGER_INFO_LOG_ENABLED
- if ( iState == ENavigation )
- {
- TPtrC dir( iNavigator->CurrentDirectory() );
- INFO_LOG1( "CFileManagerEngine::RefreshDirectory-dir=%S", &dir );
- }
-#endif // FILE_MANAGER_INFO_LOG_ENABLED
-
- iRefresher->Refresh();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetMMCInfoL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TFileManagerDriveInfo CFileManagerEngine::GetMMCInfoL() const
- {
- TFileManagerDriveInfo drvInfo;
- GetDriveInfoL(
- PathInfo::MemoryCardRootPath(), drvInfo );
- return drvInfo;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SearchString
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::SearchString() const
- {
- if ( iSearchString )
- {
- return iSearchString->Des();
- }
- return TPtrC( KNullDesC );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IsValidName
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::IsValidName(
- const TDesC& aDriveAndPath, const TDesC& aName, TBool aIsFolder ) const
- {
- // Check name for bad chars
- const TUint16 KMinAllowedChar = 0x0020;
- const TUint16 KParagraphSeparator = 0x2029;
- const TUint16 KDot = '.';
- TInt nameLen( aName.Length() );
- if ( !nameLen )
- {
- return EFalse;
- }
- for ( TInt i( 0 ); i < nameLen; i++ )
- {
- TUint16 ch( aName[ i ] );
- if ( ch < KMinAllowedChar || ch == KParagraphSeparator )
- {
- return EFalse;
- }
- }
- // File system ignores totally dot in the end of name, so
- // we set here as not valid name, so that user gets correctly informed
- if ( aName[ nameLen - 1 ] == KDot || IllegalChars( aName ) )
- {
- return EFalse;
- }
- // Get full path length
- TPtrC pathPtr( aDriveAndPath.Length() ?
- TPtrC( aDriveAndPath ) : TPtrC( iNavigator->CurrentDirectory() ) );
- TInt pathLen( pathPtr.Length() );
- if ( !pathLen )
- {
- return EFalse;
- }
- TInt fullPathLen( pathLen );
- if ( !CFileManagerUtils::HasFinalBackslash( pathPtr ) )
- {
- ++fullPathLen; // Add backslash before name
- }
- fullPathLen += nameLen;
- if ( aIsFolder )
- {
- ++fullPathLen; // Add folder final backslash
- }
-
- TBool ret( EFalse );
- if ( fullPathLen <= KMaxFileName )
- {
- // Check full path
- HBufC* fullPath = HBufC::New( KMaxFileName );
- if ( fullPath )
- {
- TPtr ptr( fullPath->Des() );
- ptr.Copy( pathPtr );
- CFileManagerUtils::EnsureFinalBackslash( ptr ); // Add backslash before name
- ptr.Append( aName );
- ret = iFs.IsValidName( ptr );
- delete fullPath;
- }
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IllegalChars
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::IllegalChars( const TDesC& aName ) const
- {
- for ( TInt i( 0 ); KIllegalChars[ i ]; i++ )
- {
- if ( aName.Locate( KIllegalChars[ i ] ) != KErrNotFound )
- {
- return ETrue;
- }
- }
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::EnoughSpaceL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::EnoughSpaceL(
- const TDesC& aToFolder,
- TInt64 aSize,
- MFileManagerProcessObserver::TFileManagerProcess aOperation ) const
- {
- TPtrC src( iNavigator->CurrentDirectory() );
- TInt srcDrv( KErrNotFound );
- if ( src.Length() )
- {
- User::LeaveIfError( RFs::CharToDrive( src[ 0 ], srcDrv ) );
- }
- TInt dstDrv( KErrNotFound );
- if ( aToFolder.Length() )
- {
- User::LeaveIfError( RFs::CharToDrive( aToFolder[ 0 ], dstDrv ) );
- }
- else
- {
- return ETrue; // Invalid destination
- }
-
- TBool ret( EFalse );
-
- // if operation is move and drive is same so there is always enough memory
- if ( srcDrv == dstDrv &&
- aOperation == MFileManagerProcessObserver::EMoveProcess )
- {
- ret = ETrue;
- }
- else
- {
- ret = !SysUtil::DiskSpaceBelowCriticalLevelL(
- &iFs, aSize , dstDrv );
- }
-
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::FileSystemEvent
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::FileSystemEvent( TBool aEventOn )
- {
- INFO_LOG2(
- "CFileManagerEngine::FileSystemEvent-aEventOn=%d,iFileSystemEventEnabled=%d",
- aEventOn, iFileSystemEventEnabled )
-
- INFO_LOG2(
- "CFileManagerEngine::FileSystemEvent-iDriveAddedOrChangedPostponed=%d,iEmbeddedApplicationOn=%d ",
- iDriveAddedOrChangedPostponed, iEmbeddedApplicationOn )
-
- if ( !iFileSystemEventEnabled && aEventOn )
- {
- iDriveAddedOrChangedPostponed = EFalse;
- iFileSystemEventEnabled = ETrue;
- }
- else if ( iFileSystemEventEnabled && !aEventOn )
- {
- iFileSystemEventEnabled = EFalse;
- if ( iDriveAddedOrChangedPostponed )
- {
- iDriveAddedOrChangedPostponed = EFalse;
- TRAP_IGNORE( DriveAddedOrChangedL() );
- }
- }
-
- if ( iUtils->IsRemoteDrive( iNavigator->CurrentDirectory() ) )
- {
- // At the moment no use to have event for remote drives
- delete iFileSystemEvent;
- iFileSystemEvent = NULL;
- return;
- }
-
- // Set event on when there is no embedded app with event
- if ( aEventOn &&
- !( iEmbeddedApplicationOn && iFileSystemEvent ) )
- {
- TInt err( KErrNone );
- switch ( iState )
- {
- case ENavigation:
- {
- TRAP( err, SetFileSystemEventL( iNavigator->CurrentDirectory() ) );
- break;
- }
- case ESearch:
- {
- TRAP( err, SetFileSystemEventL() );
- break;
- }
- default:
- {
- break;
- }
- }
- if ( err != KErrNone && iProcessObserver )
- {
- iProcessObserver->Error( err );
- }
- }
- // Check event and set it off when there is no embedded app
- else if( !iEmbeddedApplicationOn && iFileSystemEvent )
- {
- iFileSystemEvent->CheckFileSystemEvent();
- delete iFileSystemEvent;
- iFileSystemEvent = NULL;
- }
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::CurrentIndex
-//
-// ------------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::CurrentIndex()
- {
- if ( iCurrentItemName.Length() )
- {
- TInt count( iNavigator->MdcaCount() );
- for( TInt i( 0 ); i < count; ++i )
- {
- CGflmGroupItem* item = iNavigator->Item( i );
- if ( !item->Name().CompareF( iCurrentItemName ) )
- {
- iCurrentItemName.Zero();
- return i;
- }
- }
- iCurrentItemName.Zero();
- }
-
- // Top navigation index
- TInt pos( iNavigationIndices.Count() - 1 );
- if ( pos >= 0 )
- {
- return iNavigationIndices[ pos ];
- }
- return KErrNotFound;
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::CanDelete
-//
-// ------------------------------------------------------------------------------
-//
-TBool CFileManagerEngine::CanDelete( const TDesC& aFileName ) const
- {
- return iUtils->CanDelete( aFileName );
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::LocalizedName
-//
-// ------------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::LocalizedName(
- const TDesC& aFullPath ) const
- {
- return iUtils->LocalizedName( aFullPath );
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::FilesInFolderL
-//
-// ------------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::FilesInFolderL()
- {
- TInt ret( 0 );
- switch ( iState )
- {
- case ENavigation: // Fall through
- case ESearch:
- {
- TInt count( iNavigator->MdcaCount() );
- for( TInt i( 0 ); i < count; ++i )
- {
- CGflmGroupItem* item = iNavigator->Item( i );
- if ( item->Type() == CGflmGroupItem::EFile )
- {
- ++ret;
- }
- }
- break;
- }
- default:
- {
- break;
- }
- }
- return ret;
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::CancelRefresh
-//
-// ------------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::CancelRefresh()
- {
- switch ( iState )
- {
- case ENavigation:
- {
- CancelTransfer( iNavigator->CurrentDirectory() );
- break;
- }
- case ESearch:
- {
- if ( iSearchFolder )
- {
- CancelTransfer( *iSearchFolder );
- }
- break;
- }
- default:
- {
- break;
- }
- }
- return iRefresher->CancelRefresh();
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::DriveAddedOrChangedL
-//
-// ------------------------------------------------------------------------------
-//
-void CFileManagerEngine::DriveAddedOrChangedL()
- {
- FUNC_LOG
-
- if( iDiskEvent )
- {
- iDiskEvent->Setup();
- }
-
- TBool processOngoing( iRemovableDrvHandler->IsProcessOngoing() );
-
- INFO_LOG3( "CFileManagerEngine::DriveAddedOrChangedL-event=%d,process=%d,postponed=%d ",
- iFileSystemEventEnabled, processOngoing, iDriveAddedOrChangedPostponed )
-
- if ( iFileSystemEventEnabled || processOngoing )
- {
- iDriveAddedOrChangedPostponed = ETrue;
- }
- else
- {
- iDriveAddedOrChangedPostponed = EFalse;
- ClearDriveInfo();
- if ( iProcessObserver &&
- !iEmbeddedApplicationOn &&
- !iWaitDialogOn &&
- !iRefresher->IsActive() )
- {
- TPtrC dir( iNavigator->CurrentDirectory() );
- if ( dir.Length() )
- {
- TBool isAvailable( CurrentDriveAvailable() );
-
- if ( iUtils->IsRemoteDrive( dir ) )
- {
- // Notify whether remote drive has become available
- // So when receiving remote drive connection event,
- // View will be refreshed
- //if ( !iLastDriveAvailable && isAvailable )
- // {
- iProcessObserver->NotifyL(
- MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
- // }
- }
- else
- {
- // Notify if drive has become unavailable or
- // avaibility has changed
- if ( !isAvailable ||
- isAvailable != iLastDriveAvailable )
- {
- iProcessObserver->NotifyL(
- MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
- }
- }
- }
- else
- {
- // Notify always when no folder is opened
- iProcessObserver->NotifyL(
- MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
- }
- }
- }
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::FolderContentChangedL
-//
-// ------------------------------------------------------------------------------
-//
-void CFileManagerEngine::FolderContentChangedL()
- {
- if( iProcessObserver )
- {
- iProcessObserver->NotifyL(
- MFileManagerProcessObserver::ENotifyDisksChanged, 0 );
- }
- else
- {
- RefreshDirectory();
- }
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::IsFolder
-//
-// ------------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::IsFolder( const TInt aIndex ) const
- {
- if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
- {
- return EFalse;
- }
- CGflmGroupItem* item = iNavigator->Item( aIndex );
- TBool ret( EFalse );
- switch ( item->Type() )
- {
- case CGflmGroupItem::EDirectory: // Fallthrough
- case CGflmGroupItem::EDrive: // Fallthrough
- case CGflmGroupItem::EGlobalActionItem:
- {
- ret = ETrue;
- break;
- }
- default:
- {
- break;
- }
- }
- return ret;
- }
-
-// ------------------------------------------------------------------------------
-// CFileManagerEngine::IconIdL
-//
-// ------------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::IconIdL( const TInt aIndex ) const
- {
- if ( aIndex < 0 || aIndex >= iNavigator->MdcaCount() )
- {
- User::Leave( KErrNotFound );
- }
- CGflmGroupItem* item = iNavigator->Item( aIndex );
- return iUtils->ResolveIconL( *item );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::ShowWaitDialogL( MAknBackgroundProcess& aProcess )
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::ShowWaitDialogL( MAknBackgroundProcess& aProcess )
- {
- iWaitDialogOn = ETrue;
- TRAPD( err, iProcessObserver->ShowWaitDialogL( aProcess ) );
- iWaitDialogOn = EFalse;
- User::LeaveIfError( err );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::EmbeddedAppStatus( TBool aStatus )
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::EmbeddedAppStatus( TBool aStatus )
- {
- iEmbeddedApplicationOn = aStatus;
- FileSystemEvent( aStatus );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IsSystemFolder
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::IsSystemFolder( const TDesC& aFullPath ) const
- {
- _LIT( KSystemFolder, "?:\\system\\*" );
- _LIT( KSysFolder, "?:\\sys\\*" );
- _LIT( KPrivateFolder, "?:\\private\\*" );
- _LIT( KResourceFolder, "?:\\resource\\*" );
-
- if ( aFullPath.MatchF( KSystemFolder ) != KErrNotFound ||
- aFullPath.MatchF( KSysFolder ) != KErrNotFound ||
- aFullPath.MatchF( KResourceFolder ) != KErrNotFound ||
- aFullPath.MatchF( KPrivateFolder ) != KErrNotFound )
- {
- return ETrue;
- }
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CurrentDriveName()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::CurrentDriveName()
- {
-#ifdef RD_MULTIPLE_DRIVE
- TPtrC dir( iNavigator->CurrentDirectory() );
- if ( dir.Length() )
- {
- TInt drive = TDriveUnit( dir );
- return DriveName( drive );
- }
-#else // RD_MULTIPLE_DRIVE
- CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
- if ( drvItem )
- {
- return drvItem->Name();
- }
-#endif // RD_MULTIPLE_DRIVE
- return TPtrC( KNullDesC );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetDriveInfoL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::GetDriveInfoL(
- TFileManagerDriveInfo& aInfo )
- {
- if ( iCurrentDriveInfoRefreshed )
- {
- // Use cached info
- aInfo = iCurrentDriveInfo;
- return;
- }
-
- CGflmDriveItem* drvItem = iNavigator->CurrentDrive();
- if ( drvItem )
- {
- GetDriveInfoL( drvItem->Drive(), aInfo );
-
- // Store info for later use
- iCurrentDriveInfo = aInfo;
- iCurrentDriveInfoRefreshed = ETrue;
- }
- else
- {
- User::Leave( KErrNotFound );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IsDistributableFile()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::IsDistributableFile(
- const TDesC& aFullPath, TBool& aIsProtected ) const
- {
- return iUtils->IsDistributableFile( aFullPath, aIsProtected );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::RenameDrive()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::RenameDrive(
- const TInt aDrive,
- const TDesC& aName )
- {
- TInt len( aName.Length( ) );
- for( TInt i( 0 ); i < len; i++ )
- {
- TChar ch( aName[ i ] );
- // If not alphadigit or space, return error
- if( !ch.IsAlphaDigit() && !ch.IsSpace() )
- {
- return KErrBadName;
- }
- }
- TInt err( iFs.SetVolumeLabel( aName, aDrive ) );
- if ( err == KErrNone )
- {
- // Refresh drive info after rename
- ClearDriveInfo();
- }
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetDrivePassword()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::SetDrivePassword(
- const TInt aDrive,
- const TMediaPassword& aOld,
- const TMediaPassword& aNew )
- {
- ClearDriveInfo();
- TInt err( iFs.LockDrive( aDrive, aOld, aNew, ETrue ) );
- INFO_LOG1( "CFileManagerEngine::SetDrivePassword err %d", err );
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::RemoveDrivePassword()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::RemoveDrivePassword(
- const TInt aDrive,
- const TMediaPassword& aPwd )
- {
- ClearDriveInfo();
- TInt err( iFs.ClearPassword( aDrive, aPwd ) );
- INFO_LOG1( "CFileManagerEngine::RemoveDrivePassword err %d", err );
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::UnlockDrive()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::UnlockDrive(
- const TInt aDrive,
- const TMediaPassword& aPwd )
- {
- ClearDriveInfo();
- TInt err( iFs.UnlockDrive( aDrive, aPwd, ETrue ) );
- INFO_LOG1( "CFileManagerEngine::UnlockDrive err %d", err );
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::StartFormatProcessL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::StartFormatProcessL(
- const TInt aDrive )
- {
- ClearDriveInfo();
- iRemovableDrvHandler->StartFormatL( aDrive );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::StartEjectProcessL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::StartEjectProcessL( const TInt /*aDrive*/ )
- {
- ClearDriveInfo();
- iRemovableDrvHandler->StartEjectL();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::StartBackupProcessL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::StartBackupProcessL(
- MFileManagerProcessObserver::TFileManagerProcess aProcess )
- {
- switch( aProcess )
- {
- case MFileManagerProcessObserver::EBackupProcess: // FALLTHROUGH
- case MFileManagerProcessObserver::ESchBackupProcess:
- {
- // Make sure that there is no embedded apps open
- delete iDocHandler;
- iDocHandler = NULL;
-
- ClearDriveInfo();
- iRemovableDrvHandler->StartBackupL( aProcess );
- break;
- }
- case MFileManagerProcessObserver::ERestoreProcess:
- {
- ClearDriveInfo();
- iRemovableDrvHandler->StartRestoreL();
- break;
- }
- default:
- {
- User::Leave( KErrNotSupported );
- break;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CancelProcess()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::CancelProcess(
- MFileManagerProcessObserver::TFileManagerProcess aProcess )
- {
- switch( aProcess )
- {
- case MFileManagerProcessObserver::EFormatProcess:
- case MFileManagerProcessObserver::EBackupProcess: // FALLTHROUGH
- case MFileManagerProcessObserver::ERestoreProcess: // FALLTHROUGH
- case MFileManagerProcessObserver::ESchBackupProcess: // FALLTHROUGH
- {
- iRemovableDrvHandler->CancelProcess();
- break;
- }
- case MFileManagerProcessObserver::EFileOpenProcess:
- {
- if ( iDocHandler )
- {
- iDocHandler->CancelFileOpen();
- }
- break;
- }
- default:
- {
- break;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetDriveInfoL()
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::GetDriveInfoL(
- const TDesC& aPath,
- TFileManagerDriveInfo& aInfo ) const
- {
- if ( !aPath.Length() )
- {
- User::Leave( KErrNotFound );
- }
- TInt drv( 0 );
- User::LeaveIfError( RFs::CharToDrive( aPath[ 0 ], drv ) );
- GetDriveInfoL( drv, aInfo );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::DriveState()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::DriveState(
- TUint32& aState, const TDesC& aPath ) const
- {
- TFileManagerDriveInfo info;
- TRAPD( err, GetDriveInfoL( aPath, info ) );
- if ( err == KErrNone )
- {
- aState = info.iState;
- }
- else
- {
- aState = 0;
- }
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::DriveState()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::DriveState(
- TUint32& aState, const TInt aDrive ) const
- {
- TFileManagerDriveInfo info;
- TRAPD( err, GetDriveInfoL( aDrive, info ) );
- if ( err == KErrNone )
- {
- aState = info.iState;
- }
- else
- {
- aState = 0;
- }
- return err;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::MGXFileManagerL()
-//
-// -----------------------------------------------------------------------------
-//
-/*CMGXFileManager& CFileManagerEngine::MGXFileManagerL()
- {
- // MG2 notification object
- if ( !iMgxFileManager )
- {
- INFO_LOG( "CFileManagerEngine::MGXFileManagerL()-Create" )
- iMgxFileManager = MGXFileManagerFactory::NewFileManagerL( iFs );
- }
- return *iMgxFileManager;
- }*/
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::Fs()
-//
-// -----------------------------------------------------------------------------
-//
-RFs& CFileManagerEngine::Fs() const
- {
- return iFs;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::IsRemoteDriveConnected()
-//
-// -----------------------------------------------------------------------------
-//
-TBool CFileManagerEngine::IsRemoteDriveConnected( const TInt aDrive ) const
- {
- return iRemoteDrvHandler->IsConnected( aDrive );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetRemoteDriveConnection()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::SetRemoteDriveConnection(
- const TInt aDrive, TBool aConnect )
- {
- return iRemoteDrvHandler->SetConnection( aDrive, aConnect );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::DeleteRemoteDrive()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::DeleteRemoteDrive( const TInt aDrive )
- {
- return iRemoteDrvHandler->DeleteSettings( aDrive );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::BackupFileExistsL()
-//
-// -----------------------------------------------------------------------------
-//
-#ifndef RD_FILE_MANAGER_BACKUP
-
-TBool CFileManagerEngine::BackupFileExistsL( const TInt aDrive ) const
- {
- return iRemovableDrvHandler->BackupFileExistsL( aDrive );
- }
-
-#endif // RD_FILE_MANAGER_BACKUP
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::OpenFileL()
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::OpenFileL( const TDesC& aFullPath )
- {
- if ( !iDocHandler )
- {
- iDocHandler = CFileManagerDocHandler::NewL( *this, *iUtils );
- }
- iDocHandler->OpenFileL( aFullPath, iProcessObserver );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::OpenDirectoryL()
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::OpenDirectoryL( const TDesC& aFullPath )
- {
- iNavigator->GoToDirectoryL( aFullPath, ETrue );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::DriveRootDirectory()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::DriveRootDirectory( TInt aDrive ) const
- {
- CGflmDriveItem* drvItem = iNavigator->DriveFromId( aDrive );
- if ( drvItem )
- {
- return drvItem->RootDirectory();
- }
- return TPtrC( KNullDesC );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::BackupSettingsL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerBackupSettings& CFileManagerEngine::BackupSettingsL()
- {
- if ( !iBackupSettings )
- {
- INFO_LOG( "CFileManagerEngine::BackupSettingsL()-Create" )
- iBackupSettings = CFileManagerBackupSettings::NewL( *this );
- }
- return *iBackupSettings;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::RestoreSettingsL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerRestoreSettings& CFileManagerEngine::RestoreSettingsL()
- {
- if ( !iRestoreSettings )
- {
- INFO_LOG( "CFileManagerEngine::RestoreSettingsL()-Create" )
- iRestoreSettings = CFileManagerRestoreSettings::NewL( *this );
- }
- return *iRestoreSettings;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetRestoreInfoArrayL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::GetRestoreInfoArrayL(
- RArray< CFileManagerRestoreSettings::TInfo >& aArray,
- const TInt aDrive ) const
- {
- return iRemovableDrvHandler->GetRestoreInfoArrayL( aArray, aDrive );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::DriveName()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TPtrC CFileManagerEngine::DriveName( const TInt aDrive )
- {
- CGflmDriveItem* drvItem = iNavigator->DriveFromId( aDrive );
- if ( drvItem )
- {
-#ifdef RD_MULTIPLE_DRIVE
- delete iDriveName;
- iDriveName = NULL;
-
- TRAPD( err, iDriveName = iUtils->GetDriveNameL(
- drvItem->Drive(), CFileManagerUtils::ETitleLayout ) );
- if ( err == KErrNone )
- {
- return iDriveName->Des();
- }
-#else // RD_MULTIPLE_DRIVE
- return drvItem->Name();
-#endif // RD_MULTIPLE_DRIVE
- }
- return TPtrC( KNullDesC );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetDriveInfoL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::GetDriveInfoL(
- const TInt aDrive, TFileManagerDriveInfo& aInfo ) const
- {
- aInfo.GetInfoL( *this, aDrive );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CurrentDriveAvailable()
-//
-// -----------------------------------------------------------------------------
-//
-TBool CFileManagerEngine::CurrentDriveAvailable()
- {
- TFileManagerDriveInfo info;
- TRAPD( err, GetDriveInfoL( info ) );
- if ( err != KErrNone )
- {
- return EFalse;
- }
-
- TInt ret( ETrue );
- if ( info.iState & (
- TFileManagerDriveInfo::EDriveCorrupted |
- TFileManagerDriveInfo::EDriveLocked ) )
- {
- ret = EFalse;
- }
- else if ( !( info.iState & TFileManagerDriveInfo::EDrivePresent ) )
- {
- ret = EFalse;
- }
-
- if ( ( info.iState & TFileManagerDriveInfo::EDriveRemote ) &&
- !( info.iState & TFileManagerDriveInfo::EDriveConnected ) )
- {
- ret = EFalse;
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::ClearDriveInfo()
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::ClearDriveInfo()
- {
- iCurrentDriveInfoRefreshed = EFalse;
- iNavigator->ClearDriveInfo();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::AnyEjectableDrivePresent()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CFileManagerEngine::AnyEjectableDrivePresent() const
- {
- RArray< TInt > drives;
- iUtils->DriveList( drives, KDriveAttRemovable );
- TInt ret( EFalse );
- TInt count( drives.Count() );
- const TInt KPresentBits(
- TFileManagerDriveInfo::EDriveEjectable |
- TFileManagerDriveInfo::EDrivePresent );
- for( TInt i( 0 ); i < count; ++i )
- {
- TUint32 state( 0 );
- if ( DriveState( state, drives[ i ] ) == KErrNone )
- {
- if ( ( state & KPresentBits ) == KPresentBits )
- {
- ret = ETrue;
- break;
- }
- }
- }
- drives.Close();
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::ForcedRefreshDirectory()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::ForcedRefreshDirectory()
- {
- TPtrC ptr( iNavigator->CurrentDirectory() );
- if ( ptr.Length() && iUtils->IsRemoteDrive( ptr ) )
- {
- // Ensure that remote directory is reloaded
- iRemoteDrvHandler->RefreshDirectory( ptr );
- }
- RefreshDirectory();
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::HasAppRemoteDriveSupport()
-//
-// -----------------------------------------------------------------------------
-//
-TBool CFileManagerEngine::HasAppRemoteDriveSupport( TUid aUid )
- {
- return iRemoteDrvHandler->HasAppRemoteDriveSupport( aUid );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetFileSizesL()
-//
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt64 CFileManagerEngine::GetFileSizesL(
- const CArrayFixFlat<TInt>& aIndexList )
- {
- FUNC_LOG
-
- TBool isCanceled( EFalse );
- TInt64 size( 0 );
- TInt count( aIndexList.Count() );
-
- for( TInt i( 0 ); i < count; ++i )
- {
- CGflmGroupItem* item = iNavigator->Item( aIndexList.At( i ) );
- switch ( item->Type() )
- {
- case CGflmGroupItem::EFile:
- {
- CGflmFileSystemItem* fsItem =
- static_cast< CGflmFileSystemItem* >( item );
- size += static_cast<TUint>(fsItem->Entry().iSize);
- break;
- }
- case CGflmGroupItem::EDirectory:
- {
- CGflmFileSystemItem* fsItem =
- static_cast< CGflmFileSystemItem* >( item );
- HBufC* fullPath = fsItem->FullPathLC();
-
- delete iActiveSize;
- iActiveSize = NULL;
-
- iActiveSize = CFileManagerActiveSize::NewL(
- iFs, *fullPath );
-
- ShowWaitDialogL( *iActiveSize );
-
- TInt64 folderSize( iActiveSize->GetFolderSize() );
- if ( folderSize == KErrNotFound )
- {
- // Calculation was canceled by the user
- isCanceled = ETrue;
- }
- else
- {
- size += folderSize;
- }
-
- CleanupStack::PopAndDestroy( fullPath );
- break;
- }
- default:
- {
- break;
- }
- }
-
- if ( isCanceled )
- {
- break;
- }
- }
-
- if ( isCanceled )
- {
- return KErrNotFound;
- }
- return size;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::CancelTransfer()
-//
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::CancelTransfer( const TDesC& aFullPath )
- {
- if ( iUtils->IsRemoteDrive( aFullPath ) )
- {
- iRemoteDrvHandler->CancelTransfer( aFullPath );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::NavigationLevel
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CFileManagerEngine::NavigationLevel() const
- {
- return iNavigator->NavigationLevel();
- }
-
-#ifdef RD_MULTIPLE_DRIVE
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetFormattedDriveNameLC
-// -----------------------------------------------------------------------------
-//
-EXPORT_C HBufC* CFileManagerEngine::GetFormattedDriveNameLC(
- const TInt aDrive,
- const TInt aTextIdForDefaultName,
- const TInt aTextIdForName ) const
- {
- return iUtils->GetFormattedDriveNameLC(
- aDrive, aTextIdForDefaultName, aTextIdForName );
- }
-#else // RD_MULTIPLE_DRIVE
-EXPORT_C HBufC* CFileManagerEngine::GetFormattedDriveNameLC(
- const TInt /*aDrive*/,
- const TInt /*aTextIdForDefaultName*/,
- const TInt /*aTextIdForName*/ ) const
- {
- User::Leave( KErrNotSupported );
- return NULL;
- }
-#endif // RD_MULTIPLE_DRIVE
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::GetItemInfoLC
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerItemProperties* CFileManagerEngine::GetItemInfoLC(
- const TInt aIndex )
- {
- CFileManagerItemProperties* ret = GetItemInfoL( aIndex );
- CleanupStack::PushL( ret );
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetSearchStringL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetSearchStringL( const TDesC& aSearchString )
- {
- delete iSearchString;
- iSearchString = NULL;
- iSearchString = aSearchString.AllocL();
- iNavigator->SetSearchStringL( aSearchString );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetSearchFolderL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetSearchFolderL( const TDesC& aSearchFolder )
- {
- delete iSearchFolder;
- iSearchFolder = NULL;
- iSearchFolder = aSearchFolder.AllocL();
- iNavigator->SetSearchFolderL( aSearchFolder );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetDirectoryWithBackstepsL
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetDirectoryWithBackstepsL(
- const TDesC& aDirectory )
- {
- CGflmDriveItem* drvItem = iNavigator->DriveFromPath( aDirectory );
- if ( !drvItem )
- {
- return;
- }
- // Build backsteps
- iNavigator->GoToDirectoryL( drvItem->RootDirectory(), aDirectory );
-
- // Build navigation indices
- iNavigationIndices.Reset();
- iNavigationIndices.AppendL( KErrNotFound ); // Set initial
- TInt count( iNavigator->NavigationLevel() ); // Set backsteps
- for( TInt i( 0 ); i < count; ++i )
- {
- iNavigationIndices.AppendL( KErrNotFound );
- }
- iNavigationIndices.AppendL( KErrNotFound ); // Set current
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetCurrentIndex
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetCurrentIndex( const TInt aIndex )
- {
- TInt pos( iNavigationIndices.Count() - 1 );
- if ( pos >= 0 )
- {
- iNavigationIndices[ pos ] = aIndex;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetSortMethod
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetSortMethod( TSortMethod aSortMethod )
- {
- switch ( aSortMethod )
- {
- case EByName: // Fallthrough
- case EByType: // Fallthrough
- case EMostRecentFirst: // Fallthrough
- case ELargestFirst: // Fallthrough
- case EByMatch:
- {
- // Make sure that the enums do match
- iNavigator->SetSortMethod(
- static_cast< TGflmSortMethod >( aSortMethod ) );
- break;
- }
- default:
- {
- ERROR_LOG1(
- "CFileManagerEngine::SetSortMethod-InvalidMethod=%d",
- aSortMethod )
- break;
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SortMethod
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerEngine::TSortMethod CFileManagerEngine::SortMethod() const
- {
- // Make sure that the enums do match
- return static_cast< TSortMethod >( iNavigator->SortMethod() );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::RefreshSort
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::RefreshSort()
- {
- iRefresher->Refresh( ERefreshSort );
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::FeatureManager
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CFileManagerFeatureManager& CFileManagerEngine::FeatureManager() const
- {
- return *iFeatureManager;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetAppExitOb
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::SetAppExitOb( MAknServerAppExitObserver* aObserver )
- {
- iObserver = aObserver;
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::NoticeServerAppExit
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::NoticeServerAppExit( TInt aReason )
- {
- if ( iObserver && iSisFile )
- {
- iUtils->FlushCache();
- iObserver->HandleServerAppExit( aReason );
- iSisFile = EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CFileManagerEngine::SetSisFile
-// -----------------------------------------------------------------------------
-//
-void CFileManagerEngine::SetSisFile( TBool aSisFile )
- {
- iSisFile = aSisFile;
- }
-
-// ---------------------------------------------------------------------------
-// CFileManagerEngine::LatestBackupTimeL()
-// ---------------------------------------------------------------------------
-//
-TInt CFileManagerEngine::LatestBackupTime( TTime& aBackupTime )
- {
- TRAPD( err, iRemovableDrvHandler->LatestBackupTimeL( aBackupTime ) );
- return err;
- }
-
-// ---------------------------------------------------------------------------
-// CFileManagerEngine::DeleteBackupsL()
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CFileManagerEngine::DeleteBackupsL()
- {
- iRemovableDrvHandler->DeleteBackupsL();
- }
-
-
-// End of File