diff -r d9aefe59d544 -r fa6d9f75d6a6 camerauis/cameraxui/cxengine/src/cxediskmonitorprivate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/src/cxediskmonitorprivate.cpp Mon May 03 12:22:55 2010 +0300 @@ -0,0 +1,155 @@ +/* +* Copyright (c) 2009 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 // Compiler flags, keep first +#ifdef Q_OS_SYMBIAN +#include +#endif // Q_OS_SYMBIAN +#include "cxutils.h" +#include "cxesysutil.h" +#include "cxesettings.h" +#include "cxediskmonitor.h" +#include "cxediskmonitorprivate.h" + + +namespace +{ + const int MONITORING_INTERVAL = 2*1000; // in milliseconds + const int UNKNOWN = -1; +} + + +/*! +* Constructor. +*/ +CxeDiskMonitorPrivate::CxeDiskMonitorPrivate(CxeSettings &settings) + : mSettings(settings), + mTimer(), +#ifdef Q_OS_SYMBIAN + mFs(CCoeEnv::Static()->FsSession()), + mCameraDrive(CxeSysUtil::getCameraDrive(mFs)), +#endif // Q_OS_SYMBIAN + mTriggerLevelBytes(UNKNOWN), + mLatestFreeBytes(UNKNOWN) +{ + CX_DEBUG_ENTER_FUNCTION(); + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Destructor. +*/ +CxeDiskMonitorPrivate::~CxeDiskMonitorPrivate() +{ + CX_DEBUG_ENTER_FUNCTION(); + stop(); + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Slot for checking if the available disk space is below warning trigger level. +*/ +void CxeDiskMonitorPrivate::checkSpace() +{ + CX_DEBUG_ENTER_FUNCTION(); + + qint64 previousFree(mLatestFreeBytes); + + // Get the current free space. + mLatestFreeBytes = free(false); + + // TESTING >>> + /* + static qint64 TEST = 20*1000*1000; + TEST /= 2; + mLatestFreeBytes = TEST; + */ + // <<< TESTING + + // If space has changed during monitoring, signal it now. + if (previousFree != mLatestFreeBytes && isMonitoring()) { + CX_DEBUG(("CxeDiskMonitorPrivate - Disk space changed %d -> %d bytes", previousFree, mLatestFreeBytes)); + emit diskSpaceChanged(); + } + + // Only emit warning if trigger level is set to some positive value. + // Otherwise updating cached free space value is enough. + if (mTriggerLevelBytes != UNKNOWN && mLatestFreeBytes < mTriggerLevelBytes) { + CX_DEBUG(("[WARNING] CxeDiskMonitorPrivate - Disk space low!")); + emit diskSpaceLow(); + } + + CX_DEBUG_EXIT_FUNCTION(); +} + +/*! +* Set the warning level of free disk space. +* When free disk space falls below this limit, diskSpaceLow() signal is emitted. +* @param bytes Limit in bytes. +*/ +void CxeDiskMonitorPrivate::setLowWarningLevel(qint64 bytes) +{ + mTriggerLevelBytes = bytes; +} + +/*! +* Start monitoring disk space. +*/ +void CxeDiskMonitorPrivate::start() +{ + if (!mTimer.isActive()) { + connect(&mTimer, SIGNAL(timeout()), this, SLOT(checkSpace()), Qt::UniqueConnection); + mTimer.start(MONITORING_INTERVAL); + } +} + +/*! +* Stop monitoring disk space. +*/ +void CxeDiskMonitorPrivate::stop() +{ + mTimer.stop(); + mLatestFreeBytes = UNKNOWN; +} + +/*! +* Is monitoring ongoing at the moment. +*/ +bool CxeDiskMonitorPrivate::isMonitoring() const +{ + return mTimer.isActive(); +} + +/*! +* Get free disk space for Camera use in bytes. +* @param cached Can cached value be used. +* If true (default value), value of last constant-interval-check is used (if it exists). +* If false (or there's no cached value), forced reading of free space is done now. +* This may cause significant delay compared to returning cached value. +*/ +qint64 CxeDiskMonitorPrivate::free(bool cached) const +{ + qint64 value(0); + if (cached && mLatestFreeBytes != UNKNOWN) { + value = mLatestFreeBytes; + } else { + value = CxeSysUtil::spaceAvailable(mFs, mCameraDrive, mSettings); + } + return value; +} + +// end of file