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;
17 namespace Pithos.Client.WPF
20 /// Interaction logic for App.xaml
22 public partial class App : Application
24 private log4net.ILog Log = log4net.LogManager.GetLogger(typeof (App));
27 //var extensionController = new ShellExtensionController();
28 //extensionController.RegisterExtensions();
29 log4net.Config.XmlConfigurator.Configure();
31 this.DispatcherUnhandledException += OnUnhandledException;
32 AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
33 TaskScheduler.UnobservedTaskException += OnUnobservedException;
36 var appPatth = Assembly.GetExecutingAssembly().Location;
37 Registry.LocalMachine.SetValue(@"Software\Pithos\AppPath",appPatth );
39 InitializeComponent();
40 //Application.Current.ApplyTheme("BureauBlue");
43 private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
45 var messages=new List<UserMessage>();
46 e.Exception.Handle(exc=>{
47 messages.Add(new UserMessage
49 Message = "Unexpected Exception",
50 Details = exc.ToString(),
51 Severity = Severity.Error
56 ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
60 private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
62 var message = e.IsTerminating
63 ? "Unexpected Exception. The application must terminate"
64 : "Unexpected Exception";
70 Message = (e.ExceptionObject as Exception).Message,
71 Details = e.ExceptionObject.ToString(),
72 Severity = Severity.Error
75 ShowMessages("Oops!", message,messages);
78 void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
83 Message = e.Exception.Message,
84 Details = e.Exception.ToString(),
85 Severity = Severity.Error
88 ShowMessages("Oops!", "Unexcpected Exception", messages);
92 void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
94 LogMessages(messages);
95 Execute.OnUIThread(()=>{
96 var messageView = new MessageView(messages);
97 messageView.Title = title;
98 messageView.Message = message;
99 messageView.ShowDialog();
103 private void LogMessages(IEnumerable<UserMessage> messages)
105 var logMessage = CreateMessage(messages);
107 Log.Error(logMessage);
110 private async void SendMessages(IEnumerable<UserMessage> messages )
112 var logMessage = CreateMessage(messages);
114 var mailer = new SmtpClient();
115 await mailer.SendTaskAsync("pithos@grnet.gr", "support@pithos.grnet.gr", "Errors", logMessage);
118 private static string CreateMessage(IEnumerable<UserMessage> messages)
120 var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
121 (builder, message) =>
123 builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
124 message.Message, message.Details);
127 var logMessage = messageBuilder.ToString();