diff -r 30342f40acbf -r e1bea15f9a39 browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpStorage.cpp --- a/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpStorage.cpp Thu Jul 15 19:53:20 2010 +0300 +++ b/browserutilities/downloadmgr/DownloadMgrServEng/Src/HttpStorage.cpp Thu Aug 19 10:58:56 2010 +0300 @@ -70,6 +70,58 @@ // FORWARD DECLARATIONS //class ?FORWARD_CLASSNAME; +//Music Store Warning Level Feature Flag +#ifdef DOWNLOADMGR_WARNINGLEVEL_ENABLED_FF + +#include +#include + +//Beside the OOD threshold value, we need to reserve extra disk space +//for harvest server do the harvest, set this as 1M +const TInt KFreeSpaceExtraReserved(1024*1024); + +static TBool CheckFreeSpaceWarningThreshold( RFs& aFs, TInt aBytesToWrite, TInt aDrive ) + { + TBool isSpace = EFalse; + CRepository* repository = NULL; + TInt64 thresholdValue( 0 ); + TVolumeInfo volumeInfo; + TInt err = aFs.Volume( volumeInfo, aDrive ); + if ( err == KErrNone ) // get warning threshold + { + TRAP( err, repository = CRepository::NewL( KCRUidUiklaf ) ); + } + if ( err == KErrNone ) + { + if ( volumeInfo.iDrive.iDriveAtt & KDriveAttRemovable ) // for E and F + { + TInt warningValue( 0 ); + err = repository->Get( KUikOODDiskFreeSpaceWarningNoteLevelMassMemory, warningValue ); + if ( err == KErrNone ) + { + thresholdValue = warningValue + KFreeSpaceExtraReserved; + } + } + else + { + TInt warningUsagePercent( 0 ); + err = repository->Get( KUikOODDiskFreeSpaceWarningNoteLevel, warningUsagePercent ); + if ( err == KErrNone ) + { + thresholdValue = ( ( volumeInfo.iSize * ( 100 - warningUsagePercent ) ) / 100 ) + + KFreeSpaceExtraReserved; + } + } + delete repository; + } + if ( err == KErrNone ) // Check warning threshold + { + isSpace = volumeInfo.iFree > thresholdValue + aBytesToWrite; + } + return isSpace; + } +#endif + // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- @@ -792,6 +844,7 @@ if (bytesToWrite < 0) bytesToWrite = 0; + // Let client handle warning level check, client may want to write until critical level TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL( &iDownload->ClientApp()->Engine()->Fs(), bytesToWrite, @@ -805,29 +858,54 @@ #else TPtrC drives( iDownload->ClientApp()->Engine()->iDriveLettersCenRep ); #endif - - // drive letters are separated by semicolons - for( TInt i = 0; i < drives.Length() && (err || !isSpace); i = i + 2 ) +//Music Store Warning Level Feature Flag +#ifdef DOWNLOADMGR_WARNINGLEVEL_ENABLED_FF + // Check warning or critical level and change drive if warning or critical level would get crossed + // On first round, check warning level only + // On second round (all drives are about to cross warning level), check critical level + // When crossing warning level, user will see warning note regarding low disk space + for( TInt j = 0; j < 2 && (err || !isSpace); ++j ) { - if( (err = fs.CharToDrive( drives[i], drive )) == KErrNone ) +#endif + // drive letters are separated by semicolons + for( TInt i = 0; i < drives.Length() && (err || !isSpace); i = i + 2 ) { - currentDownloadsLen = DMSrvEngine->AllDownloadsSizeInDriveL(iDownload, drive); + if( (err = fs.CharToDrive( drives[i], drive )) == KErrNone ) + { + currentDownloadsLen = DMSrvEngine->AllDownloadsSizeInDriveL(iDownload, drive); + // Check if there's enough memory in the phone + bytesToWrite = iLength + currentDownloadsLen; + if (bytesToWrite < 0) + bytesToWrite = 0; +//Music Store Warning Level Feature Flag +#ifdef DOWNLOADMGR_WARNINGLEVEL_ENABLED_FF - // Check if there's enough memory in the phone - bytesToWrite = iLength + currentDownloadsLen; - if (bytesToWrite < 0) - bytesToWrite = 0; - - TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL( - &fs, - bytesToWrite, - drive )); + if ( !j ) // check warning level on first round + { + isSpace = CheckFreeSpaceWarningThreshold( fs, bytesToWrite, drive ); + } + else // check critical level when all drives are about to cross warning level + { + TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL( + &fs, bytesToWrite, drive )); + } + CLOG_WRITE8_4( "Free space check type %d drive %d isSpace %d, bytesToWrite %d", + j,drive,isSpace,bytesToWrite); +#else if + TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL( + &fs, bytesToWrite, drive )); + +#endif + } + else + { + CLOG_WRITE8_1( "Bad drive letter [%c]", drives[i] ); + } } - else - { - CLOG_WRITE8_1( "Bad drive letter [%c]", drives[i] ); - } +//Music Store Warning Level Feature Flag +#ifdef DOWNLOADMGR_WARNINGLEVEL_ENABLED_FF } +#endif #ifdef RD_MULTIPLE_DRIVE CleanupStack::PopAndDestroy( drivesDynList ); #endif