2 using System.Collections.Generic;
3 using System.Configuration;
5 using System.Diagnostics;
8 using System.Reflection;
10 using System.Threading.Tasks;
13 using Microsoft.Win32;
14 using Caliburn.Micro.Logging;
15 using Pithos.Client.WPF.Properties;
18 namespace Pithos.Client.WPF
21 /// Interaction logic for App.xaml
23 public partial class App : Application
25 private readonly log4net.ILog _log = log4net.LogManager.GetLogger(typeof (App));
29 log4net.Config.XmlConfigurator.Configure();
31 this.DispatcherUnhandledException += OnUnhandledException;
32 AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
33 TaskScheduler.UnobservedTaskException += OnUnobservedException;
35 //Fix incorrect proxy settings by switching to default proxy, if the proxy server settings is empty
36 if (Settings.Default.UseManualProxy && String.IsNullOrWhiteSpace(Settings.Default.ProxyServer))
38 Settings.Default.UseManualProxy = false;
39 Settings.Default.UseDefaultProxy = true;
42 InitializeComponent();
45 protected override void OnStartup(StartupEventArgs e)
47 if (!Settings.Default.StartOnSystemStartup && e.Args.Contains("startup"))
54 private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
56 var messages=new List<UserMessage>();
57 e.Exception.Handle(exc=>{
58 messages.Add(new UserMessage
60 Message = "Unexpected Exception",
61 Details = exc.ToString(),
62 Severity = Severity.Error
67 ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
71 private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
73 var message = e.IsTerminating
74 ? "Unexpected Exception. The application must terminate"
75 : "Unexpected Exception";
81 Message = (e.ExceptionObject as Exception).Message,
82 Details = e.ExceptionObject.ToString(),
83 Severity = Severity.Error
86 ShowMessages("Oops!", message,messages);
89 void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
94 Message = e.Exception.Message,
95 Details = e.Exception.ToString(),
96 Severity = Severity.Error
99 ShowMessages("Oops!", "Unexcpected Exception", messages);
103 void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
105 LogMessages(messages);
106 Execute.OnUIThread(()=>{
107 var messageView = new MessageView(messages);
108 messageView.Title = title;
109 messageView.Message = message;
110 messageView.ShowDialog();
114 private void LogMessages(IEnumerable<UserMessage> messages)
116 var logMessage = CreateMessage(messages);
118 _log.Error(logMessage);
121 private static string CreateMessage(IEnumerable<UserMessage> messages)
123 var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
124 (builder, message) =>
126 builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
127 message.Message, message.Details);
130 var logMessage = messageBuilder.ToString();