diff -r d881023c13eb -r cbb1bfb7ebfb mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h --- a/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h Mon May 03 12:58:40 2010 +0300 +++ b/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h Fri May 14 16:21:14 2010 +0300 @@ -20,21 +20,35 @@ #define CMPXMEDIAREMOVALMONITOR_H #include +#include #include "mpxsystemeventobserver.h" /** * Class to monitors for File System dismount events + * + * The monitor emits events to MMPXSystemEventObserver + * + * EDiskDismountEvent whenever a drive is about to be dismounted (see RFs::NotifyDismount). + * EDiskRemovedEvent whenever a specified drive has been dismounted or removed + * EDiskInsertedEvent whenever a specified drive has been inserted + * + * The observer is expected to prepare the drive for dismounting during the EDiskDismountEvent. + * + * Dismount monitoring is automatically subscribed for all non-remote drives. + * Inserted/Removed monitor is subscribed only for the drive given in the constructor. + * * @lib Harvester * @since S60 3.0 */ -class CMPXMediaRemovalMonitor : public CActive +class CMPXMediaRemovalMonitor : public CBase, + public MDiskNotifyHandlerCallback { public: /** * Two-phase constructor - * @param aDrive drive to monitor + * @param aDrive drive to monitor for insertions and removals * @param aFs file server session * @param aObserver observer to the event */ @@ -55,24 +69,24 @@ * Virtual destructor */ virtual ~CMPXMediaRemovalMonitor(); - -protected: // From base class - /* - * From CActive + /** + * Check the status of the monitored disks + * + * This check should be done whenever there is a risk that we got + * a NotifyDismount even though the drives actually weren't dismounted. + * */ - void RunL(); - - /* - * From CActive - */ - void DoCancel(); + void CheckDriveStatus(); + +protected: // From Base Class /** - * From CActive + * From MDiskNotifyHandlerCallback */ - TInt RunError(TInt aError); - + void HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent ); + void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent ); + private: /** @@ -89,6 +103,7 @@ private: // data + CDiskNotifyHandler* iDiskNotifyHandler; // Disk notification handler TInt iDrive; // Drive that is being monitored RFs& iFs; // File Session, not owned TBool iDiskRemoved; // Is the disk inserted