chxavfilesystemwatcher.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:2k
源码类别:

Symbian

开发平台:

C/C++

  1. /************************************************************************
  2.  * chxavfilesystemwatcher.cpp
  3.  * --------------------------
  4.  *
  5.  * Synopsis:
  6.  * Manages active object and RFs to watch for file system events for a 
  7.  * given path.
  8.  *
  9.  * Notifications are forwarded to a single observer/client.
  10.  * 
  11.  * 
  12.  * Target:
  13.  * Symbian OS
  14.  *
  15.  *
  16.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  17.  *
  18.  ************************************************************************/ 
  19. // Symbian includes...
  20. #include <f32file.h>
  21. // Includes from this project...
  22. #include "chxavmisc.h"
  23. #include "hxsym_debug.h"
  24. #include "chxavfilesystemwatcher.h"
  25. CHXAvFileSystemWatcher::CHXAvFileSystemWatcher(RFs& fs)
  26. : m_fs(fs)
  27. , m_notifyType(ENotifyEntry)
  28. {
  29. }
  30. ///////////////////////////////////
  31. // dtor
  32. CHXAvFileSystemWatcher::~CHXAvFileSystemWatcher()
  33. {
  34.     StopWatching();
  35. }
  36. ////////////////////////////////////////////////////////
  37. //
  38. void CHXAvFileSystemWatcher::ConstructL()
  39. {
  40.     BaseConstructL();
  41.     m_spWatchPath = KNullDesC().AllocL();
  42. }
  43. ////////////////////////////////////////////////////////
  44. // path can have wildcard to watch directories across
  45. // drives, e.g.:
  46. //
  47. // *:realnetworksdata
  48. // c:realnetworksdata
  49. //
  50. // **** you cannot watch from the root, e.g., 'c:'
  51. //
  52. void CHXAvFileSystemWatcher::SetWatchPathL(const TDesC& path)
  53. {
  54.     // cleanup old stuff in case we are chaging the path
  55.     StopWatching(); 
  56.     m_spWatchPath = path.AllocL();
  57.     DPRINTF(SYMP_FILE, ("CHXAvFileSystemWatcher::SetWatchPathL(): watching '%s'n", dbg::CharPtr(path)()));
  58. }
  59. ////////////////////////////////////////////////////////
  60. //
  61. void CHXAvFileSystemWatcher::DoIssueRequest(const CHXAvActiveCmplPtr& spActive)
  62. {
  63.     if( m_spWatchPath->Length() > 0)
  64.     {
  65.         m_fs.NotifyChange(m_notifyType, spActive->Status(), *m_spWatchPath);
  66.     }
  67.     else
  68.     {
  69.         // no watch path; watch everything
  70.         m_fs.NotifyChange(m_notifyType, spActive->Status());
  71.     }
  72. }
  73. ////////////////////////////////////////////////////////
  74. //
  75. void CHXAvFileSystemWatcher::DoCancelRequest(const CHXAvActiveCmplPtr& spActive)
  76. {
  77.     m_fs.NotifyChangeCancel(spActive->Status());
  78. }