All containers and first level folders are automatically added to Selective Sync...
[pithos-ms-client] / trunk / Pithos.Client.WPF / App.xaml.cs
index 86e35ce..b399db6 100644 (file)
@@ -52,9 +52,11 @@ using System.Windows;
 using Caliburn.Micro;
 using Pithos.Client.WPF.Configuration;
 using Pithos.Client.WPF.Properties;
+using Pithos.Interfaces;
 using log4net.Appender;
 using log4net.Core;
 using log4net.Repository.Hierarchy;
+using System.Runtime.InteropServices;
 
 
 namespace Pithos.Client.WPF
@@ -66,14 +68,19 @@ namespace Pithos.Client.WPF
     {
         private static readonly log4net.ILog Log = log4net.LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType );
         
-
+            ///DLL Import to add restart manager support
+            [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
+            static extern uint RegisterApplicationRestart(string pwzCommandLine, RestartFlags dwFlags);
+               
         public App()
         {
 
             //var instanceMutex=new Mutex()
-
             InitializeLogging();
 
+            ///Register Application in the Restartmanager service
+            RegisterApplicationRestart("Upgrade", RestartFlags.NONE);
+
 
             DispatcherUnhandledException += OnDispatcherUnhandledException;
             AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
@@ -203,18 +210,52 @@ namespace Pithos.Client.WPF
             });
 
 
-            var message = String.Format(@"{0}<LineBreak/>{1}<LineBreak/><LineBreak/>{2}", 
+            //Do not display any messages if this is a 304 code
+            var ignoreExceptions = from exc in e.Exception.InnerExceptions.OfType<WebException>()
+                                   where IsAllowedException(exc)
+                                   select exc;
+
+            if (ignoreExceptions.Any())
+            {
+                e.SetObserved();
+                return;
+            }
+
+
+           /* var message = String.Format(@"{0}" + Environment.NewLine + "{1}" + Environment.NewLine + "{2}", 
                 WPF.Properties.Resources.Unexpected_Error,
                 WPF.Properties.Resources.We_Apologize, 
                 WPF.Properties.Resources.Please_Submit_Error);
-            ShowMessages("Oops!",message, messages);
-            e.SetObserved();
+            ShowMessages("Oops!",message, messages);*/
+            e.SetObserved();            
+        }
+
+        private bool IsAllowedException(Exception exc)
+        {
+            var we = exc as WebException;
+            if (we==null)
+            {
+                return false;
+            }
+            var response = we.Response as HttpWebResponse;
+            return (response != null && response.StatusCode == HttpStatusCode.NotModified);
         }
 
         private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
         {
+
+            //Do not display any messages if this is a 304 code
+            if (IsAllowedException(e.ExceptionObject as Exception))
+            {
+                return;
+            }
+
             Log.Error("Unhandled exception", (Exception)e.ExceptionObject);
 
+            if (!e.IsTerminating)
+                //Do not display a message unless the application is terminating
+                return;
+
             var description = e.IsTerminating
                               ? WPF.Properties.Resources.Unexpected_Error_Terminating
                               : WPF.Properties.Resources.Unexpected_Error;
@@ -223,7 +264,6 @@ namespace Pithos.Client.WPF
                 WPF.Properties.Resources.We_Apologize,
                 WPF.Properties.Resources.Please_Submit_Error);
 
-
             var exc = ((Exception) e.ExceptionObject);
             var messages = new[]{
                                    new UserMessage
@@ -238,11 +278,19 @@ namespace Pithos.Client.WPF
             ShowMessages("Oops!", message,messages);
         }
 
+
+
         void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
         {
+            //Do not display any messages if this is a 304 code
+            if (IsAllowedException(e.Exception))
+            {
+                return;
+            }
+
             Log.Error("Unhandled Dispatcher exception", e.Exception);
             
-            var messages = new[]{
+           /* var messages = new[]{
                                    new UserMessage
                                        {
                                            Message = e.Exception.Message, 
@@ -252,7 +300,7 @@ namespace Pithos.Client.WPF
                                };
             ShowMessages(WPF.Properties.Resources.Error_Title, 
                 WPF.Properties.Resources.Unexpected_Error,
-                messages);
+                messages);*/
             e.Handled=true;
         }
 
@@ -292,3 +340,15 @@ namespace Pithos.Client.WPF
     }
 
 }
+
+    enum RestartFlags
+    {
+        NONE = 0,
+        RESTART_CYCLICAL = 1,
+        RESTART_NOTIFY_SOLUTION = 2,
+        RESTART_NOTIFY_FAULT = 4,
+        RESTART_NO_CRASH = 8,
+        RESTART_NO_HANG = 16,
+        RESTART_NO_PATCH = 32,
+        RESTART_NO_REBOOT = 64
+    }
\ No newline at end of file