diff -r 000000000000 -r 72b543305e3a email/imum/Mtms/Src/ImumDiskSpaceObserverOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Mtms/Src/ImumDiskSpaceObserverOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2006 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: +* Class for observing free disk space and if disk space goes under critical +* level this cancels itself. + +* +*/ + + +// INCLUDE FILES +#include // Basic Symbian Includes +#include // Muiu Utilities +#include // CImumInternalApi + +#include "ImumDiskSpaceObserverOperation.h" +#include "ImumDiskSpaceObserver.h" // CImumDiskSpaceObserver +#include "ImumMtmLogging.h" + +// CONSTANTS +const TUint KImumCriticalThreshold = 131072; +const TUint KImumSafetyMargin = 204800; + +// ---------------------------------------------------------------------------- +// CImumDiskSpaceObserverOperation +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +CImumDiskSpaceObserverOperation::CImumDiskSpaceObserverOperation( + CImumInternalApi& aMailboxApi, + TInt aPriority, + TRequestStatus& aObserverRequestStatus, + MMsvProgressReporter& aReporter) + : + CImumOnlineOperation( + aMailboxApi, + aPriority, + aObserverRequestStatus, + aReporter) + { + IMUM_CONTEXT( CImumDiskSpaceObserverOperation::CImumDiskSpaceObserverOperation, 0, KImumMtmLog ); + IMUM_IN(); + IMUM_OUT(); + + } + +// ---------------------------------------------------------------------------- +// CImumDiskSpaceObserverOperation::BaseConstructL() +// ---------------------------------------------------------------------------- +void CImumDiskSpaceObserverOperation::BaseConstructL(TUid aMtmType) + { + IMUM_CONTEXT( CImumDiskSpaceObserverOperation::BaseConstructL, 0, KImumMtmLog ); + IMUM_IN(); + + iDiskObserver = CImumDiskSpaceObserver::NewL( + *this, iMsvSession.FileSession() ); + + // Create own instance of API because ImumDiskSpaceObserver outlives + // the owner of iMailboxApi reference in ImumOnlineOperation + iEmailApi = CreateEmailApiL(); + + CImumOnlineOperation::BaseConstructL( aMtmType ); + + IMUM_OUT(); + } + + +// ---------------------------------------------------------------------------- +// CImumDiskSpaceObserverOperation::~CImumDiskSpaceObserverOperation() +// ---------------------------------------------------------------------------- +CImumDiskSpaceObserverOperation::~CImumDiskSpaceObserverOperation() + { + IMUM_CONTEXT( CImumDiskSpaceObserverOperation::~CImumDiskSpaceObserverOperation, 0, KImumMtmLog ); + IMUM_IN(); + + delete iEmailApi; + delete iDiskObserver; + iDiskObserver = NULL; + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumDiskSpaceObserverOperation::DoCancel() +// ---------------------------------------------------------------------------- +// +void CImumDiskSpaceObserverOperation::DoCancel() + { + IMUM_CONTEXT( CImumDiskSpaceObserverOperation::DoCancel, 0, KImumMtmLog ); + IMUM_IN(); + + iDiskObserver->Cancel(); + CImumOnlineOperation::DoCancel(); + IMUM_OUT(); + } + +// ---------------------------------------------------------------------------- +// CImumDiskSpaceObserverOperation::DoDiskSpaceCheckL() +// ---------------------------------------------------------------------------- +// +TInt CImumDiskSpaceObserverOperation::DoDiskSpaceCheckL() + { + IMUM_CONTEXT( CImumDiskSpaceObserverOperation::DoDiskSpaceCheckL, 0, KImumMtmLog ); + IMUM_IN(); + + // Make sure we are operating in safe levels + if( !MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelWithOverheadL( + iEmailApi->MsvSession(), 0, KImumSafetyMargin ) ) + { + // Get current drive + TInt currentDrive = iEmailApi->MsvSession().CurrentDriveL(); + TInt64 currentLimit = KImumCriticalThreshold + KImumSafetyMargin; + + // Enough space, issue new request + iDiskObserver->Cancel(); + iDiskObserver->NotifyDiskSpace( currentLimit, currentDrive ); + IMUM_OUT(); + + return KErrNone; + } + IMUM_OUT(); + + // Disk full for operation, indicate with error + return KErrDiskFull; + } + +// ---------------------------------------------------------------------------- +// CImumDiskSpaceObserverOperation::HandleDiskSpaceEvent() +// ---------------------------------------------------------------------------- +// +void CImumDiskSpaceObserverOperation::HandleDiskSpaceEvent() + { + IMUM_CONTEXT( CImumDiskSpaceObserverOperation::HandleDiskSpaceEvent, 0, KImumMtmLog ); + IMUM_IN(); + + Cancel(); + IMUM_OUT(); + } + +// End of File + +