--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysresmonitoring/oodmonitor/oodmonitor2/src/outofdisknotifyobserver.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,245 @@
+/*
+* Copyright (c) 2007 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: Implementation of COutOfDiskNotifyObserver class.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <driveinfo.h>
+
+// USER INCLUDES
+#include "outofdisknotifyobserver.h"
+#include "UiklafInternalCRKeys.h"
+#include "OodTraces.h"
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+COutOfDiskNotifyObserver* COutOfDiskNotifyObserver::NewL(COutOfDiskMonitor* aOutOfDiskMonitor,
+ RFs& aFs)
+ { // static
+ TRACES("COutOfDiskNotifyObserver::NewL");
+ COutOfDiskNotifyObserver* self = new(ELeave) COutOfDiskNotifyObserver(aOutOfDiskMonitor, aFs);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+COutOfDiskNotifyObserver::~COutOfDiskNotifyObserver()
+ {
+ TRACES("COutOfDiskNotifyObserver::~COutOfDiskNotifyObserver");
+ delete iWait;
+ delete iDiskNotifyHandler;
+ TRACES("COutOfDiskNotifyObserver::~COutOfDiskNotifyObserver: End");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+COutOfDiskNotifyObserver::COutOfDiskNotifyObserver(COutOfDiskMonitor* aOutOfDiskMonitor,
+ RFs& aFs) :
+ iFs(aFs),
+ iOutOfDiskMonitor( aOutOfDiskMonitor ),
+ iCritical2OK(EFalse)
+ {
+ TRACES("COutOfDiskNotifyObserver::COutOfDiskNotifyObserver");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::ConstructL()
+ {
+ TRACES("COutOfDiskNotifyObserver::ConstructL");
+
+ TRACES("COutOfDiskNotifyObserver::ConstructL: Create ActiveScheduler");
+ iWait = new ( ELeave )CActiveSchedulerWait;
+ TRACES("COutOfDiskNotifyObserver::ConstructL: Create iDiskNotifyHandler");
+ iDiskNotifyHandler = CDiskNotifyHandler::NewL( *this, iFs );
+
+ // Start listening disk events first
+ TInt status = iDiskNotifyHandler->NotifyDisk();
+ TRACES1("COutOfDiskNotifyObserver::ConstructL: NotifyDisk status %d",status);
+
+ TRACES("COutOfDiskNotifyObserver::ConstructL: Get list of already mounted drives");
+ TDriveList driveListInt;
+ TInt driveCountInt(0);
+ User::LeaveIfError(DriveInfo::GetUserVisibleDrives(
+ iFs, driveListInt, driveCountInt, KDriveAttInternal | KDriveAttRemovable )); // Get already inserted internal and removable drives
+ for( TInt i = EDriveA; i <= EDriveZ; i++ )
+ {
+ if (driveListInt[i])
+ {
+ TRACES("COutOfDiskNotifyObserver::ConstructL: Add disk +++++++++++++++++++++++++++++");
+ DiskAddedL(i);
+ TRACES("COutOfDiskNotifyObserver::ConstructL: Disk added ---------------------------");
+ }
+ }
+
+ iWait->Start();
+ TRACES("COutOfDiskNotifyObserver::ConstructL: End");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::NotifyDiskSpace(TInt64 aWarningThreshold, TInt64 aCriticalThreshold,
+ TInt aDrive)
+ {
+ TRACES("COutOfDiskNotifyObserver::NotifyDiskSpace");
+ TRACES1("COutOfDiskNotifyObserver::NotifyDiskSpace: Drive %c",aDrive+'A');
+
+ TRACES1("COutOfDiskNotifyObserver::NotifyDiskSpace: WarningThreshold %ld",aWarningThreshold);
+ TRACES1("COutOfDiskNotifyObserver::NotifyDiskSpace: CriticalThreshold %ld",aCriticalThreshold);
+
+ iDiskNotifyHandler->NotifyDiskSpace(aWarningThreshold, aDrive);
+ iDiskNotifyHandler->NotifyDiskSpace(aCriticalThreshold, aDrive);
+ TRACES("COutOfDiskNotifyObserver::NotifyDiskSpace: End");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::DiskAddedL(TInt aDrive)
+ {
+ TRACES1("COutOfDiskNotifyObserver::DiskAddedL: Drive %c",aDrive+'A');
+
+ TUint driveStatus(0);
+ if ( DriveInfo::GetDriveStatus( iFs, aDrive, driveStatus ) == KErrNone )
+ {
+ if (driveStatus & DriveInfo::EDriveRemote)
+ {
+ TRACES("COutOfDiskNotifyObserver::DiskAddedL: Do not monitor remote drives");
+ return;
+ }
+ }
+
+ TInt64 warningThreshold = iOutOfDiskMonitor->GetThreshold(DISK_SPACE_WARNING, aDrive);
+ TInt64 criticalThreshold = iOutOfDiskMonitor->GetThreshold(DISK_SPACE_CRITICAL, aDrive);
+ TRACES1("COutOfDiskNotifyObserver::DiskAddedL: Warning Threshold: %ld",warningThreshold);
+ TRACES1("COutOfDiskNotifyObserver::DiskAddedL: Critical Threshold: %ld",criticalThreshold);
+
+ if (warningThreshold <= 0 || criticalThreshold <= 0)
+ {
+ TRACES("COutOfDiskNotifyObserver::DiskAddedL: Cannot get threshold of the drive");
+ return;
+ }
+
+ TInt status = iOutOfDiskMonitor->GetDriveStatus(aDrive);
+ iOutOfDiskMonitor->SaveDriveStatus(aDrive, status, ETrue);
+ iOutOfDiskMonitor->ShowGlobalQueryIfNeededL();
+ NotifyDiskSpace(warningThreshold,
+ criticalThreshold,
+ aDrive);
+ TRACES("COutOfDiskNotifyObserver::DiskAddedL: End");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::HandleNotifyDisk(
+ TInt /*aError*/, const TDiskEvent& aEvent )
+ {
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk +++++++++++++++++++++++++++++");
+ TRACES1("COutOfDiskNotifyObserver::HandleNotifyDisk: Drive %c:",aEvent.iDrive+'A');
+
+ switch(aEvent.iType)
+ {
+ case EDiskAdded:
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk: EDiskAdded");
+ TRAP_IGNORE( DiskAddedL(aEvent.iDrive) );
+ break;
+ case EDiskError:
+ case EDiskRemoved:
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk: EDiskRemoved");
+ iDiskNotifyHandler->CancelNotifyDiskSpace(aEvent.iDrive);
+ break;
+ case EDiskStatusChanged:
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk: EDiskStatusChanged");
+ TVolumeInfo volInfo;
+ TInt ret( iFs.Volume( volInfo, aEvent.iDrive ) );
+ TRACES1("COutOfDiskMonitor::HandleNotifyDisk: Free space: %d",volInfo.iFree);
+ if (volInfo.iFree >= 0)
+ {
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk: Added");
+ TRAP_IGNORE( DiskAddedL(aEvent.iDrive) );
+ }
+ else
+ {
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk: Removed");
+ iDiskNotifyHandler->CancelNotifyDiskSpace(aEvent.iDrive);
+ iOutOfDiskMonitor->SaveDriveStatus(aEvent.iDrive, DISK_SPACE_OK, ETrue);
+ TRAP_IGNORE( iOutOfDiskMonitor->ShowGlobalQueryIfNeededL() );
+ }
+ break;
+ }
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDisk: End ------------------------------ ");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::HandleNotifyDismount(
+ TInt /*aError*/, const TDismountEvent& aEvent )
+ {
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDismount +++++++++++++++++++++++++++++");
+ iDiskNotifyHandler->CancelNotifyDiskSpace(aEvent.iDrive);
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDismount: End ------------------------------ ");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::HandleNotifyDiskSpace(
+ TInt /*aError*/, const TDiskSpaceEvent& aEvent )
+ {
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDiskSpace +++++++++++++++++++++++++++++");
+ TRACES1("COutOfDiskNotifyObserver::HandleNotifyDiskSpace: Drive %c:",aEvent.iDrive+'A');
+ TRACES1("COutOfDiskNotifyObserver::HandleNotifyDiskSpace: Threshold: %ld",aEvent.iThreshold);
+
+ iOutOfDiskMonitor->SaveDriveStatus(aEvent.iDrive,
+ iOutOfDiskMonitor->GetDriveStatus(aEvent.iDrive));
+ TRAP_IGNORE( iOutOfDiskMonitor->ShowGlobalQueryIfNeededL() );
+
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyDismount: End ------------------------------ ");
+ }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void COutOfDiskNotifyObserver::HandleNotifyEntry(
+ TInt /*aError*/, const TEntryEvent& /*aEvent*/ )
+ {
+ TRACES("COutOfDiskNotifyObserver::HandleNotifyEntry");
+ }
+// End of file.