Added file event filtering due to downloads through network gate.
[pithos-ms-client] / trunk / Pithos.Core / Agents / FileSystemWatcherAdapter.cs
index ee2fe44..7e8675e 100644 (file)
@@ -66,12 +66,15 @@ namespace Pithos.Core.Agents
         //public event RenamedEventHandler Renamed;\r
         public event MovedEventHandler Moved;\r
 \r
-        public FileSystemWatcherAdapter(FileSystemWatcher watcher)\r
+        private FileAgent _agent;\r
+\r
+        public FileSystemWatcherAdapter(FileSystemWatcher watcher,FileAgent agent)\r
         {\r
             if (watcher==null)\r
                 throw new ArgumentNullException("watcher");\r
             Contract.EndContractBlock();\r
 \r
+            _agent =  agent;\r
             watcher.Changed += OnChangeOrCreate;\r
             watcher.Created += OnChangeOrCreate;\r
             watcher.Deleted += OnDeleted;\r
@@ -127,6 +130,11 @@ namespace Pithos.Core.Agents
 \r
         private void InnerOnDeleted(object sender, FileSystemEventArgs e)\r
         {\r
+            if (_agent.Ignore(e.FullPath))\r
+                return;\r
+            if (NetworkGate.GetNetworkState(e.FullPath) != NetworkOperation.None)\r
+                return;\r
+\r
 //Handle any previously deleted event\r
             if (Log.IsDebugEnabled)\r
                 Log.DebugFormat("[{0}] for [{1}]", Enum.GetName(typeof(WatcherChangeTypes), e.ChangeType), e.FullPath);\r
@@ -166,6 +174,11 @@ namespace Pithos.Core.Agents
 \r
         private void InnerRename(object sender, RenamedEventArgs e)\r
         {\r
+            if (_agent.Ignore(e.FullPath) || _agent.Ignore(e.OldFullPath))\r
+                return;\r
+            if (NetworkGate.GetNetworkState(e.FullPath) != NetworkOperation.None)\r
+                return;\r
+\r
             try\r
             {\r
                 if (Log.IsDebugEnabled)\r
@@ -227,6 +240,12 @@ namespace Pithos.Core.Agents
 \r
         private void InnerChangeOrCreated(object sender, FileSystemEventArgs e)\r
         {\r
+            if (_agent.Ignore(e.FullPath))\r
+                return;\r
+            var networkOperation = NetworkGate.GetNetworkState(e.FullPath);\r
+            if (networkOperation!=NetworkOperation.None)\r
+                return;\r
+\r
             try\r
             {\r
                 if (Log.IsDebugEnabled)\r