diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/mmshui/src/musuimmcmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsharing/mmshui/src/musuimmcmonitor.cpp Wed Sep 01 12:31:01 2010 +0100 @@ -0,0 +1,196 @@ +/* +* Copyright (c) 2005 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 "musuimmcmonitor.h" +#include "muslogger.h" // debug logging + +#include + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiMmcMonitor* CMusUiMmcMonitor::NewL( MMusUiMmcObserver& aObserver ) + { + CMusUiMmcMonitor* self = new ( ELeave ) CMusUiMmcMonitor( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiMmcMonitor::ConstructL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::ConstructL" ); + User::LeaveIfError( iFs.Connect() ); + const TDesC& memoryCardPath = PathInfo::MemoryCardRootPath(); + TInt driveNumber = 0; + if ( memoryCardPath.Length() > 0 ) + { + MUS_LOG( "mus: [MUSUI ] CMusUiMmcMonitor::ConstructL: \ + ( memoryCardPath.Length() > 0 )" ); + TChar driveChar( memoryCardPath[0] ); + iFs.CharToDrive( driveChar, driveNumber ); + iDriveNumber = static_cast(driveNumber); + } + else + { + MUS_LOG( "mus: [MUSUI ] CMusUiMmcMonitor::ConstructL: else" ); + TParsePtrC parser( RProcess().FileName() ); + TChar driveChar( parser.Drive()[0] ); + iFs.CharToDrive( driveChar, driveNumber ); + iDriveNumber = static_cast(driveNumber); + } + + iRemovableDrive = IsRemovableDrive( iDriveNumber ); + iDriveRemoved = DriveRemoved(); + MonitorMmc(); + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::ConstructL" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiMmcMonitor::CMusUiMmcMonitor( MMusUiMmcObserver& aObserver ) + : CActive( CActive::EPriorityStandard ), + iObserver( aObserver ) + { + CActiveScheduler::Add( this ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CMusUiMmcMonitor::~CMusUiMmcMonitor() + { + Cancel(); + iFs.Close(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiMmcMonitor::RunL() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::RunL" ); + if( DriveRemoved() ) + { + iObserver.MmcRemoved(); + } + else // continue monitoring + { + MonitorMmc(); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::RunL" ); + } + +// ------------------------------------------------------------------------- +// If RunL() leaves,It should be handled here. +// ------------------------------------------------------------------------- +// +TInt CMusUiMmcMonitor::RunError( TInt aError ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::RunError" ); + // Nothing can be done here. + aError = KErrNone; + + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::RunError" ); + return aError; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiMmcMonitor::DoCancel() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::DoCancel" ); + iFs.NotifyChangeCancel(); + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::DoCancel" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMusUiMmcMonitor::MonitorMmc() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::MonitorMmc" ); + if( !IsActive() && iRemovableDrive && !iDriveRemoved ) + { + MUS_LOG( "mus: [MUSUI ] CMusUiMmcMonitor::MonitorMmc: calling iFs.NotifyChange" ); + iFs.NotifyChange( ENotifyDisk, iStatus ); + SetActive(); + } + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::MonitorMmc" ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusUiMmcMonitor::DriveRemoved() + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::DriveRemoved" ); + if ( iDriveRemoved ) + { + return iDriveRemoved; + } + + TDriveInfo driveInfo; + iFs.Drive( driveInfo, iDriveNumber ); + + if ( driveInfo.iType == EMediaNotPresent ) + { + iDriveRemoved = ETrue; + } + + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::DriveRemoved" ); + return iDriveRemoved; + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TBool CMusUiMmcMonitor::IsRemovableDrive( TDriveNumber aDriveNumber ) + { + MUS_LOG( "mus: [MUSUI ] -> CMusUiMmcMonitor::IsRemovableDrive" ); + TDriveInfo driveInfo; + iFs.Drive( driveInfo, aDriveNumber ); + MUS_LOG( "mus: [MUSUI ] <- CMusUiMmcMonitor::IsRemovableDrive" ); + return ( driveInfo.iDriveAtt & KDriveAttRemovable ); + } + +// End of File