Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / App.xaml.cs @ c92e02f3

History | View | Annotate | Download (5 kB)

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
}