Removed unneeded registry key. Resolves #1690
[pithos-ms-client] / trunk / Pithos.Client.WPF / App.xaml.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Configuration;
4 using System.Data;
5 using System.Diagnostics;
6 using System.Linq;
7 using System.Net.Mail;
8 using System.Reflection;
9 using System.Text;
10 using System.Threading.Tasks;
11 using System.Windows;
12 using Caliburn.Micro;
13 using Microsoft.Win32;
14 using Caliburn.Micro.Logging;
15
16
17 namespace Pithos.Client.WPF
18 {
19     /// <summary>
20     /// Interaction logic for App.xaml
21     /// </summary>
22     public partial class App : Application
23     {
24         private log4net.ILog Log = log4net.LogManager.GetLogger(typeof (App));
25         public App()
26         {
27             //var extensionController = new ShellExtensionController();
28             //extensionController.RegisterExtensions();
29             log4net.Config.XmlConfigurator.Configure();            
30
31             this.DispatcherUnhandledException += OnUnhandledException;
32             AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
33             TaskScheduler.UnobservedTaskException += OnUnobservedException;
34
35 /*
36             var appPatth =    Assembly.GetExecutingAssembly().Location;
37             Registry.LocalMachine.SetValue(@"Software\Pithos\AppPath",appPatth );            
38 */
39             InitializeComponent();            
40             //Application.Current.ApplyTheme("BureauBlue");
41         }
42
43         private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
44         {            
45             var messages=new List<UserMessage>();
46             e.Exception.Handle(exc=>{
47                 messages.Add(new UserMessage
48                 {
49                     Message = "Unexpected Exception",
50                     Details = exc.ToString(),
51                     Severity = Severity.Error
52                 });
53                 return true;
54             });
55
56             ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
57             e.SetObserved();
58         }
59
60         private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
61         {
62             var message = e.IsTerminating
63                               ? "Unexpected Exception. The application must terminate"
64                               : "Unexpected Exception";
65
66
67             var messages = new[]{
68                                    new UserMessage
69                                        {
70                                            Message = (e.ExceptionObject as Exception).Message,
71                                            Details = e.ExceptionObject.ToString(),
72                                            Severity = Severity.Error
73                                        }
74                                };
75             ShowMessages("Oops!", message,messages);
76         }
77
78         void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
79         {                        
80             var messages = new[]{
81                                    new UserMessage
82                                        {
83                                            Message = e.Exception.Message, 
84                                            Details = e.Exception.ToString(),
85                                            Severity = Severity.Error
86                                        }
87                                };
88             ShowMessages("Oops!", "Unexcpected Exception", messages);
89             e.Handled=true;
90         }
91
92         void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
93         {
94             LogMessages(messages);
95             Execute.OnUIThread(()=>{
96                 var messageView = new MessageView(messages);
97                 messageView.Title = title;
98                 messageView.Message = message;
99                 messageView.ShowDialog();
100             });
101         }
102
103         private void LogMessages(IEnumerable<UserMessage> messages)
104         {
105             var logMessage = CreateMessage(messages);
106
107             Log.Error(logMessage);
108         }
109
110         private async void SendMessages(IEnumerable<UserMessage> messages )
111         {
112             var logMessage = CreateMessage(messages);
113
114             var mailer = new SmtpClient();
115             await mailer.SendTaskAsync("pithos@grnet.gr", "support@pithos.grnet.gr", "Errors", logMessage);
116         }
117
118         private static string CreateMessage(IEnumerable<UserMessage> messages)
119         {
120             var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
121                                                     (builder, message) =>
122                                                         {
123                                                             builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
124                                                                                  message.Message, message.Details);
125                                                             return builder;
126                                                         });
127             var logMessage = messageBuilder.ToString();
128             return logMessage;
129         }
130     }
131
132 }