diff -r 95243422089a -r 491b3ed49290 filemanager/Engine/src/TFileManagerDriveInfo.cpp --- a/filemanager/Engine/src/TFileManagerDriveInfo.cpp Thu Aug 19 09:42:45 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +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: Drive info storage -* -*/ - - -// INCLUDE FILES -#include -#include "TFileManagerDriveInfo.h" -#include "CFileManagerEngine.h" -#include "FileManagerDebug.h" -#include "CFileManagerCommonDefinitions.h" -#include "CFileManagerFeatureManager.h" -#ifdef RD_MULTIPLE_DRIVE -#include -#endif // RD_MULTIPLE_DRIVE - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// TFileManagerDriveInfo::TFileManagerDriveInfo -// ----------------------------------------------------------------------------- -// -EXPORT_C TFileManagerDriveInfo::TFileManagerDriveInfo() - { - Reset(); - } - -// ----------------------------------------------------------------------------- -// TFileManagerDriveInfo::TFileManagerDriveInfo -// ----------------------------------------------------------------------------- -// -EXPORT_C void TFileManagerDriveInfo::Reset() - { - iName.Zero(); - iCapacity = 0; - iSpaceFree = 0; - iUid = 0; - iDrive = 0; - iState = 0; - } - -// ----------------------------------------------------------------------------- -// TFileManagerDriveInfo::GetInfoL -// ----------------------------------------------------------------------------- -// -void TFileManagerDriveInfo::GetInfoL( - const CFileManagerEngine& aEngine, const TInt aDrive ) - { - FUNC_LOG - - INFO_LOG1( "TFileManagerDriveInfo::GetInfoL - aDrive %d", aDrive ) - - Reset(); - iDrive = aDrive; - - RFs& fs( aEngine.Fs() ); - CheckMountL( fs, aDrive ); - TInt err( FillStateFromVolumeInfo( fs, aDrive ) ); - if ( err == KErrInUse ) - { - iState |= EDriveInUse; - } - else if ( err == KErrCorrupt ) - { - iState |= EDrivePresent | EDriveCorrupted; - } - else if ( err == KErrLocked ) - { - iState |= EDrivePresent | EDriveLocked | EDriveFormatted | - EDrivePasswordProtected | EDriveLockable; - } - else if ( err == KErrNone ) - { - if ( iState & EDriveRemote ) - { - if ( aEngine.IsRemoteDriveConnected( aDrive ) ) - { - iState |= EDriveConnected; - } - } - -#ifndef RD_FILE_MANAGER_BACKUP - if ( iState & EDriveRemovable ) - { - if ( aEngine.BackupFileExistsL( aDrive ) ) - { - iState |= EDriveBackupped; - } - } -#endif // RD_FILE_MANAGER_BACKUP - - } - - INFO_LOG3( "TFileManagerDriveInfo::GetInfoL - aDrive %d, err %d, iState 0x%x", - aDrive, err, iState ) - - if ( aEngine.FeatureManager().IsEmbedded() ) - { - // Disable format in embedded mode, because it messes up - // operations since embedded apps are closed. - iState &= ~EDriveFormattable; - } - } - -// ----------------------------------------------------------------------------- -// TFileManagerDriveInfo::CheckMountL() -// ----------------------------------------------------------------------------- -// -void TFileManagerDriveInfo::CheckMountL( - RFs& aFs, const TInt aDrive ) const - { - FUNC_LOG - - HBufC* fullname = HBufC::NewLC( KMaxFullName ); - TPtr name( fullname->Des() ); - TInt err( aFs.FileSystemName( name, aDrive ) ); - if ( err == KErrNone && !name.Length() ) - { - // Drive isn't mounted at present, so try it now.... - // Returns KErrLocked, if locked and the password - // is not in store - err = aFs.MountFileSystem( KFmgrFatFSName, aDrive ); - } - CleanupStack::PopAndDestroy( fullname ); - - LOG_IF_ERROR1( err, "TFileManagerDriveInfo::CheckMountL-err=%d", err ) - } - -// ----------------------------------------------------------------------------- -// TFileManagerDriveInfo::FillStateFromDriveInfo() -// ----------------------------------------------------------------------------- -// -TInt TFileManagerDriveInfo::FillStateFromDriveInfo( -#ifdef RD_MULTIPLE_DRIVE - RFs& aFs, -#else // RD_MULTIPLE_DRIVE - RFs& /*aFs*/, -#endif // RD_MULTIPLE_DRIVE - const TInt aDrive, - const TDriveInfo& aDrvInfo ) - { - FUNC_LOG - - TInt ret( KErrNone ); - -#ifdef RD_MULTIPLE_DRIVE - TUint drvStatus( 0 ); - TInt err( DriveInfo::GetDriveStatus( aFs, aDrive, drvStatus ) ); - if ( err != KErrNone ) - { - ERROR_LOG2( "TFileManagerDriveInfo::FillStateFromDriveInfo - aDrive %d, Status err %d", - aDrive, err ) - } - INFO_LOG2( "TFileManagerDriveInfo::FillStateFromDriveInfo - Media type %d, drvStatus 0x%x", - aDrvInfo.iType, drvStatus ) - if ( aDrvInfo.iType != EMediaNotPresent && ( drvStatus & DriveInfo::EDriveInUse ) ) - { - ret = KErrInUse; // Drive is reserved for exclusive usage like file transfer - } - if ( ( drvStatus & DriveInfo::EDriveInternal ) && - ( drvStatus & DriveInfo::EDriveExternallyMountable ) ) - { - // Handle mass storage bits here - iState |= EDriveMassStorage | EDriveRemovable; - if ( aDrvInfo.iMediaAtt & KMediaAttFormattable ) - { - iState |= EDriveFormattable; - } - if ( aDrvInfo.iMediaAtt & KMediaAttLocked ) - { - // Locking internal drives is not supported - iState |= EDriveCorrupted; - ret = KErrCorrupt; - } - return ret; - } - if ( drvStatus & DriveInfo::EDriveUsbMemory ) - { - iState |= EDriveUsbMemory; - } -#endif // RD_MULTIPLE_DRIVE - - // Setup flags from drive info - if ( aDrvInfo.iMediaAtt & KMediaAttWriteProtected ) - { - iState |= EDriveWriteProtected; - } - if ( aDrvInfo.iMediaAtt & KMediaAttLocked ) - { - iState |= EDriveLocked; - ret = KErrLocked; - } - if ( aDrvInfo.iMediaAtt & KMediaAttFormattable ) - { - iState |= EDriveFormattable; - } - if ( aDrvInfo.iMediaAtt & KMediaAttLockable ) - { - iState |= EDriveLockable; - } - if ( aDrvInfo.iMediaAtt & KMediaAttHasPassword ) - { - iState |= EDrivePasswordProtected; - } - if ( ( aDrvInfo.iDriveAtt & KDriveAttRemovable ) || - aDrive == KFmgrMemoryCardDrive ) - { - iState |= EDriveRemovable; -#ifdef RD_MULTIPLE_DRIVE - if ( drvStatus & DriveInfo::EDriveSwEjectable ) - { - iState |= EDriveEjectable; - } -#else // RD_MULTIPLE_DRIVE - // Eject is possible for external memory cards - if ( !( aDrvInfo.iDriveAtt & KDriveAttInternal ) || - aDrive == KFmgrMemoryCardDrive ) - { - iState |= EDriveEjectable; - } -#endif // RD_MULTIPLE_DRIVE - } - if ( aDrvInfo.iDriveAtt & KDriveAttRemote ) - { - iState |= EDriveRemote; - } - - return ret; - } - -// ----------------------------------------------------------------------------- -// TFileManagerDriveInfo::FillStateFromVolumeInfo() -// ----------------------------------------------------------------------------- -// -TInt TFileManagerDriveInfo::FillStateFromVolumeInfo( - RFs& aFs, const TInt aDrive ) - { - FUNC_LOG - - TVolumeInfo volInfo; - TInt ret( aFs.Volume( volInfo, aDrive ) ); - LOG_IF_ERROR1( ret, - "TFileManagerDriveInfo::FillStateFromVolumeInfo - Volume err %d", ret ); - if ( ret == KErrNone ) - { - // Get all information from volume info - TInt maxLen( Min( volInfo.iName.Length(), KMaxVolumeName ) ); - - iName = volInfo.iName.Left( maxLen ); - iUid = volInfo.iUniqueID; - iCapacity = volInfo.iSize; - iSpaceFree = volInfo.iFree; - - iState |= EDrivePresent; - - if ( volInfo.iSize ) - { - iState |= EDriveFormatted; - } - - ret = FillStateFromDriveInfo( aFs, aDrive, volInfo.iDrive ); - } - else - { - // Get all information from drive info - TDriveInfo& drvInfo( volInfo.iDrive ); - TInt err( aFs.Drive( drvInfo, aDrive ) ); - LOG_IF_ERROR1( err, - "TFileManagerDriveInfo::FillStateFromVolumeInfo - Drive err %d", err ); - if ( err == KErrNone ) - { - err = FillStateFromDriveInfo( aFs, aDrive, drvInfo ); - - // If memory card is not ready but type is present, - // then check if it is reserved. - if( err == KErrNone && - ret == KErrNotReady && - drvInfo.iType != EMediaNotPresent ) - { - // Check USB file transfer state - TInt prop( ECoreAppUIsUSBFileTransferUninitialized ); - RProperty::Get( - KPSUidCoreApplicationUIs, - KCoreAppUIsUSBFileTransfer, prop ); - if ( prop == ECoreAppUIsUSBFileTransferActive ) - { - ret = KErrInUse; // Reserved for file transfer - } - INFO_LOG2( "TFileManagerDriveInfo::FillStateFromVolumeInfo-prop=%d,ret=%d", - prop, ret ) - } - } - if ( err != KErrNone ) - { - ret = err; - } - } - - LOG_IF_ERROR2( ret, - "TFileManagerDriveInfo::FillStateFromVolumeInfo - aDrive %d, Ret %d", - aDrive, ret ) - - return ret; - } - -// End of File