Fixed wrong file offset check
[pithos-ms-client] / trunk / Pithos.Core / NativeMethods.cs
index 8ed34cf..9d6bf42 100644 (file)
@@ -1,5 +1,47 @@
-using System;
+#region
+/* -----------------------------------------------------------------------
+ * <copyright file="NativeMethods.cs" company="GRNet">
+ * 
+ * Copyright 2011-2012 GRNET S.A. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above
+ *      copyright notice, this list of conditions and the following
+ *      disclaimer in the documentation and/or other materials
+ *      provided with the distribution.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and
+ * documentation are those of the authors and should not be
+ * interpreted as representing official policies, either expressed
+ * or implied, of GRNET S.A.
+ * </copyright>
+ * -----------------------------------------------------------------------
+ */
+#endregion
+using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Runtime.InteropServices;
 using System.Text;
@@ -26,7 +68,7 @@ namespace Pithos.Core
     /// <i>dwItem2</i> is not used and should be <see langword="null"/>.</para>
     /// </remarks>
     [Flags]
-    enum HChangeNotifyEventID
+    public enum HChangeNotifyEventID
     {
         /// <summary>
         /// All events have occurred. 
@@ -268,8 +310,7 @@ namespace Pithos.Core
 
     #endregion
 
-
-    internal static class NativeMethods
+    public static class NativeMethods
     {
         [DllImport("shell32.dll")]
         public static extern void SHChangeNotify(HChangeNotifyEventID wEventId,
@@ -277,5 +318,30 @@ namespace Pithos.Core
                                            IntPtr dwItem1,
                                            IntPtr dwItem2);
 
+        public static void RaiseChangeNotification(string path)
+        {
+            if (String.IsNullOrWhiteSpace(path))
+                throw new ArgumentNullException("path", "The path parameter must not be emtpy");
+
+            if (!Directory.Exists(path) && !File.Exists(path))
+                return;
+
+
+            IntPtr pathPointer = Marshal.StringToCoTaskMemAuto(path);
+
+            try
+            {
+                NativeMethods.SHChangeNotify(HChangeNotifyEventID.SHCNE_UPDATEITEM,
+                                             HChangeNotifyFlags.SHCNF_PATHW | HChangeNotifyFlags.SHCNF_FLUSHNOWAIT,
+                                             pathPointer, IntPtr.Zero);
+            }
+            finally
+            {
+                Marshal.FreeHGlobal(pathPointer);
+            }
+
+        }
     }
+
+
 }