commonservices/PlatformEnv/disknotifyhandler/src/diskspacewatcher.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonservices/PlatformEnv/disknotifyhandler/src/diskspacewatcher.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,259 @@
+/*
+* 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:  Class for disk space watcher
+*
+*/
+
+
+//  INCLUDES
+#include <e32std.h>
+#include <f32file.h>
+#include "diskspacewatcher.h"
+#include "disknotifyhandler.h"
+#include "disknotifyhandlerdebug.h"
+
+
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// SetEvent
+// ---------------------------------------------------------------------------
+//
+inline static void SetEvent(
+        MDiskNotifyHandlerCallback::TDiskSpaceEvent& aEvent,
+        TInt aDrive,
+        const TInt64& aThreshold )
+    {
+    aEvent.iDrive = aDrive;
+    aEvent.iThreshold = aThreshold;
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::CDiskSpaceWatcher
+// ---------------------------------------------------------------------------
+//
+CDiskSpaceWatcher::CDiskSpaceWatcher(
+        MDiskNotifyHandlerCallback& aCallback,
+        RFs& aFs,
+        RPointerArray< CDiskSpaceWatcher >& aWatcherList,
+        TInt aDrive,
+        const TInt64& aThreshold ) :
+    CDiskWatcherBase( aCallback, aFs ),
+    iWatcherList( aWatcherList ),
+    iDrive( aDrive ),
+    iThreshold( aThreshold )
+    {
+    FUNC_LOG
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::ConstructL()
+    {
+    FUNC_LOG
+
+    iWatcherList.InsertInOrderL( this, CompareFindObject );
+    Activate();
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::NewL
+// ---------------------------------------------------------------------------
+//
+CDiskSpaceWatcher* CDiskSpaceWatcher::NewL(
+        MDiskNotifyHandlerCallback& aCallback,
+        RFs& aFs,
+        RPointerArray< CDiskSpaceWatcher >& aWatcherList,
+        TInt aDrive,
+        const TInt64& aThreshold )
+    {
+    FUNC_LOG
+
+    CDiskSpaceWatcher* self = new ( ELeave ) CDiskSpaceWatcher(
+        aCallback, aFs, aWatcherList, aDrive, aThreshold );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::~CDiskSpaceWatcher
+// ---------------------------------------------------------------------------
+//
+CDiskSpaceWatcher::~CDiskSpaceWatcher()
+    {
+    FUNC_LOG
+
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::CompareFind
+// ---------------------------------------------------------------------------
+//
+TInt CDiskSpaceWatcher::CompareFind(
+        const TInt* aDrive,
+        const CDiskSpaceWatcher& aWatcher )
+    {
+    return Compare( *aDrive, aWatcher.iDrive );
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::CompareFindData
+// ---------------------------------------------------------------------------
+//
+TInt CDiskSpaceWatcher::CompareFindData(
+        const TFindData* aData,
+        const CDiskSpaceWatcher& aWatcher )
+    {
+    TInt ret( Compare( aData->iDrive, aWatcher.iDrive ) );
+    if ( !ret )
+        {
+        ret = Compare( aData->iThreshold, aWatcher.iThreshold );
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::CompareFindObject
+// ---------------------------------------------------------------------------
+//
+TInt CDiskSpaceWatcher::CompareFindObject(
+        const CDiskSpaceWatcher& aWatcher1,
+        const CDiskSpaceWatcher& aWatcher2 )
+   {
+    TInt ret( Compare( aWatcher1.iDrive, aWatcher2.iDrive ) );
+    if ( !ret )
+        {
+        ret = Compare( aWatcher1.iThreshold, aWatcher2.iThreshold );
+        }
+    return ret;
+   }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::WatcherError
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::WatcherError(
+        TInt aError,
+        const TBool& aKilled )
+    {
+    FUNC_LOG
+
+    LOG_IF_ERROR3(
+        aError,
+        "CDiskSpaceWatcher::WatcherError-iDrive=%d,iThreshold=%Ld,aError=%d",
+        iDrive, iThreshold, aError )
+
+    MDiskNotifyHandlerCallback::TDiskSpaceEvent event;
+    SetEvent( event, iDrive, iThreshold );
+    Callback().HandleNotifyDiskSpace( aError, event );
+    if ( aKilled )
+        {
+        return;
+        }
+    // Remove useless watcher if not manually activated from callback
+    if ( !IsActive() )
+        {
+        RemoveFromListAndDestroy();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::ReactivateWatcher
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::ReactivateWatcher()
+    {
+    FUNC_LOG
+
+    Activate();
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::RunWatcher
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::RunWatcher( const TBool& /*aKilled*/ )
+    {
+    FUNC_LOG
+    
+    INFO_LOG2(
+        "CDiskSpaceWatcher::RunWatcher-iThreshold=%Ld,iDrive=%d",
+        iThreshold, iDrive )
+
+    MDiskNotifyHandlerCallback::TDiskSpaceEvent event;
+    SetEvent( event, iDrive, iThreshold );
+    Callback().HandleNotifyDiskSpace( KErrNone, event );
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::CancelWatcher
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::CancelWatcher()
+    {
+    FUNC_LOG
+
+    INFO_LOG2(
+        "CDiskSpaceWatcher::CancelWatcher-iThreshold=%Ld,iDrive=%d",
+        iThreshold, iDrive )
+
+    Fs().NotifyDiskSpaceCancel( iStatus );
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::Activate
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::Activate()
+    {
+    FUNC_LOG
+
+    if( !IsActive() )
+        {
+        INFO_LOG2(
+            "CDiskSpaceWatcher::Activate-iThreshold=%Ld,iDrive=%d",
+            iThreshold, iDrive )
+        Fs().NotifyDiskSpace( iThreshold, iDrive, iStatus );
+        SetActive();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceWatcher::RemoveFromListAndDestroy
+// ---------------------------------------------------------------------------
+//
+void CDiskSpaceWatcher::RemoveFromListAndDestroy()
+    {
+    FUNC_LOG
+
+    TInt i( iWatcherList.FindInOrder( this, CompareFindObject ) );
+    if ( i >= 0 && i < iWatcherList.Count() )
+        {
+        INFO_LOG3(
+            "CDiskSpaceWatcher::RemoveFromListAndDestroy-iThreshold=%Ld,iDrive=%d,i=%d",
+            iThreshold, iDrive, i )
+        iWatcherList.Remove( i );
+        delete this;
+        }
+    }
+
+// End of File