Revision ff26eb71 trunk/Pithos.Client.WPF/App.xaml.cs

b/trunk/Pithos.Client.WPF/App.xaml.cs
4 4
using System.Data;
5 5
using System.Diagnostics;
6 6
using System.Linq;
7
using System.Net.Mail;
7 8
using System.Reflection;
9
using System.Text;
10
using System.Threading.Tasks;
8 11
using System.Windows;
12
using Caliburn.Micro;
9 13
using Microsoft.Win32;
14
using Pithos.Client.WPF.Caliburn.Micro.Logging;
10 15
using WPF.Themes;
11 16

  
12 17
namespace Pithos.Client.WPF
......
16 21
    /// </summary>
17 22
    public partial class App : Application
18 23
    {
24
        private log4net.ILog Log = log4net.LogManager.GetLogger(typeof (App));
19 25
        public App()
20 26
        {
21 27
            //var extensionController = new ShellExtensionController();
22 28
            //extensionController.RegisterExtensions();
23
            
29
            log4net.Config.XmlConfigurator.Configure();            
24 30

  
25
            var appPatth =    Assembly.GetExecutingAssembly().Location;
26
            Registry.LocalMachine.SetValue(@"Software\Pithos\AppPath",appPatth );
31
            this.DispatcherUnhandledException += OnUnhandledException;
32
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
33
            TaskScheduler.UnobservedTaskException += OnUnobservedException;
27 34

  
35
            var appPatth =    Assembly.GetExecutingAssembly().Location;
36
            Registry.LocalMachine.SetValue(@"Software\Pithos\AppPath",appPatth );            
28 37
            InitializeComponent();            
29 38
            //Application.Current.ApplyTheme("BureauBlue");
30 39
        }
40

  
41
        private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
42
        {            
43
            var messages=new List<UserMessage>();
44
            e.Exception.Handle(exc=>{
45
                messages.Add(new UserMessage
46
                {
47
                    Message = "Unexpected Exception",
48
                    Details = exc.ToString(),
49
                    Severity = Severity.Error
50
                });
51
                return true;
52
            });
53

  
54
            ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
55
            e.SetObserved();
56
        }
57

  
58
        private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
59
        {
60
            var message = e.IsTerminating
61
                              ? "Unexpected Exception. The application must terminate"
62
                              : "Unexpected Exception";
63

  
64

  
65
            var messages = new[]{
66
                                   new UserMessage
67
                                       {
68
                                           Message = (e.ExceptionObject as Exception).Message,
69
                                           Details = e.ExceptionObject.ToString(),
70
                                           Severity = Severity.Error
71
                                       }
72
                               };
73
            ShowMessages("Oops!", message,messages);
74
        }
75

  
76
        void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
77
        {                        
78
            var messages = new[]{
79
                                   new UserMessage
80
                                       {
81
                                           Message = e.Exception.Message, 
82
                                           Details = e.Exception.ToString(),
83
                                           Severity = Severity.Error
84
                                       }
85
                               };
86
            ShowMessages("Oops!", "Unexcpected Exception", messages);
87
            e.Handled=true;
88
        }
89

  
90
        void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
91
        {
92
            LogMessages(messages);
93
            Execute.OnUIThread(()=>{
94
                var messageView = new MessageView(messages);
95
                messageView.Title = title;
96
                messageView.Message = message;
97
                messageView.ShowDialog();
98
            });
99
        }
100

  
101
        private void LogMessages(IEnumerable<UserMessage> messages)
102
        {
103
            var logMessage = CreateMessage(messages);
104

  
105
            Log.Error(logMessage);
106
        }
107

  
108
        private async void SendMessages(IEnumerable<UserMessage> messages )
109
        {
110
            var logMessage = CreateMessage(messages);
111

  
112
            var mailer = new SmtpClient();
113
            await mailer.SendTaskAsync("pithos@grnet.gr", "support@pithos.grnet.gr", "Errors", logMessage);
114
        }
115

  
116
        private static string CreateMessage(IEnumerable<UserMessage> messages)
117
        {
118
            var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
119
                                                    (builder, message) =>
120
                                                        {
121
                                                            builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
122
                                                                                 message.Message, message.Details);
123
                                                            return builder;
124
                                                        });
125
            var logMessage = messageBuilder.ToString();
126
            return logMessage;
127
        }
31 128
    }
32 129

  
33 130
}

Also available in: Unified diff