diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraxui/cxengine/src/cxesysutil.cpp --- a/camerauis/cameraxui/cxengine/src/cxesysutil.cpp Tue Aug 31 15:03:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* -* Copyright (c) 2009-2010 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: -* -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include "cxesettings.h" -#include "cxutils.h" -#include "cxesysutil.h" - - -namespace -{ - const uint KDiskSafetyLimit = 400000; // Amount of free disk space to leave unused -} - -/*! -* Checks if free disk drive storage space is or will fall below critical -* level. Static configuration values stored in Central Repository are -* used to determine a critical level for each drive. -* -* Usage example: -* @code -* TInt dataSize = 500; -* if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iFsSession, dataSize, EDriveC ) ) -* { -* // Can not write the data, there's not enough free space on disk. -* ... -* } -* else -* { -* // It's ok to actually write the data. -* ... -* } -* @endcode -* -* @since S60 v2.0 -* -* @param aFs File server session. Must be given if available, e.g. from -* EIKON environment. If NULL, this method will create a -* temporary session, which causes the method to consume more -* time and system resources. -* @param aBytesToWrite Number of bytes the caller is about to write to -* disk. If value 0 is given, this method checks -* if the current disk space is already below critical -* level. -* @param aDrive Identifies the disk drive to be checked. Numeric values -* for identifying disk drives are defined in TDriveNumber -* enumeration. -* -* @see TDriveNumber in f32file.h. -* -* @return ETrue if disk space would go below critical level after writing -* aBytesToWrite more data, EFalse otherwise. -* -* @leave Leaves with one of the Symbian error codes if checking the disk -* space fails, for instance if the drive contains no media or there -* is not enough free memory to create a temporary connection to -* file server. -*/ -bool CxeSysUtil::DiskSpaceBelowCriticalLevel( - RFs* aFs, - TInt aBytesToWrite, - TInt aDrive ) -{ - bool fullDisk = false; - TRAPD( utilErr, - fullDisk = SysUtil::DiskSpaceBelowCriticalLevelL( - aFs, aBytesToWrite, aDrive ) ); - if(utilErr) { - fullDisk = false; - } - return fullDisk; -} - -/*! -* Get the drive index to use for camera. -* Normally it is mass memory, but if that is not available in the device at all, -* using phone memory. It should be noted, that if mass memory is temporarily -* unavailable, storage will not be changed to phone memory, but space available -* will report zero. -*/ -int CxeSysUtil::getCameraDrive(RFs &fs) -{ - CX_DEBUG_ENTER_FUNCTION(); - int index(-1); - try { - // Get drive index for mass storage - int status(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, index)); - CX_DEBUG(("status getting mass memory drive index: %d", status)); - qt_symbian_throwIfError(status); - - // Get the drive info - TDriveInfo driveInfo; - status = fs.Drive(driveInfo, index); - CX_DEBUG(("status getting mass memory drive info: %d", status)); - qt_symbian_throwIfError(status); - - // If and only if mass memory drive does not exist at all, - // we resort to phone internal memory (c-drive). - // E.g. dismounted mass memory because of USB connection is intentionally - // *not* causing us to switch to phone memory. - if (driveInfo.iDriveAtt == KDriveAbsent) { - CX_DEBUG(("[WARNING]: Mass memory not found at all, resorting to phone memory!")); - status = DriveInfo::GetDefaultDrive(DriveInfo::EDefaultPhoneMemory, index); - CX_DEBUG(("status getting phone memory drive index: %d", status)); - } - qt_symbian_throwIfError(status); - } catch(const std::exception& e) { - Q_UNUSED(e); // avoid warning if trace is not used. - CX_DEBUG(("[WARNING]: exception [%s]", e.what())); - } - - CX_DEBUG_EXIT_FUNCTION(); - return index; -} - -/*! -* Return space available for Camera to use. -* @param fs File Server session -* @param index Index for the drive to be checked. -* @param settings Camera settings instance -* @return Amount of bytes free for Camera usage. -*/ -qint64 CxeSysUtil::spaceAvailable(RFs &fs, int index, CxeSettings &settings) -{ - CX_DEBUG_ENTER_FUNCTION(); - - qint64 freeSpace(0); - - try { - // Get volume info - TVolumeInfo volumeInfo; - int status(fs.Volume(volumeInfo, index)); - CX_DEBUG(("status getting volume info: %d", status)); - qt_symbian_throwIfError(status); - - // Get critical treshold for free space on the drive. - // We must leave the free space above this. - QVariant criticalThreshold; - settings.get(KCRUidDiskLevel.iUid, KDiskCriticalThreshold, Cxe::Repository, criticalThreshold); - - // Calculate space that we can still use. A small safety buffer is used above critical value. - freeSpace = std::max(qint64(0), volumeInfo.iFree - criticalThreshold.toInt() - KDiskSafetyLimit); - - } catch(const std::exception& e) { - Q_UNUSED(e); - CX_DEBUG(("[WARNING]: exception [%s]", e.what())); - freeSpace = 0; - } - - CX_DEBUG(("CxeSysUtil - free space: %d", freeSpace)); - CX_DEBUG_EXIT_FUNCTION(); - return freeSpace; -} - -// end of file