Updated wizard and AccountInfo to include the server's URL. Added account validation...
[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 readonly log4net.ILog _log = log4net.LogManager.GetLogger(typeof (App));
25
26         public App()
27         {
28             log4net.Config.XmlConfigurator.Configure();            
29             
30             this.DispatcherUnhandledException += OnUnhandledException;
31             AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
32             TaskScheduler.UnobservedTaskException += OnUnobservedException;
33
34             InitializeComponent();            
35         }
36
37         private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
38         {            
39             var messages=new List<UserMessage>();
40             e.Exception.Handle(exc=>{
41                 messages.Add(new UserMessage
42                 {
43                     Message = "Unexpected Exception",
44                     Details = exc.ToString(),
45                     Severity = Severity.Error
46                 });
47                 return true;
48             });
49
50             ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
51             e.SetObserved();
52         }
53
54         private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
55         {
56             var message = e.IsTerminating
57                               ? "Unexpected Exception. The application must terminate"
58                               : "Unexpected Exception";
59
60
61             var messages = new[]{
62                                    new UserMessage
63                                        {
64                                            Message = (e.ExceptionObject as Exception).Message,
65                                            Details = e.ExceptionObject.ToString(),
66                                            Severity = Severity.Error
67                                        }
68                                };
69             ShowMessages("Oops!", message,messages);
70         }
71
72         void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
73         {                        
74             var messages = new[]{
75                                    new UserMessage
76                                        {
77                                            Message = e.Exception.Message, 
78                                            Details = e.Exception.ToString(),
79                                            Severity = Severity.Error
80                                        }
81                                };
82             ShowMessages("Oops!", "Unexcpected Exception", messages);
83             e.Handled=true;
84         }
85
86         void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
87         {
88             LogMessages(messages);
89             Execute.OnUIThread(()=>{
90                 var messageView = new MessageView(messages);
91                 messageView.Title = title;
92                 messageView.Message = message;
93                 messageView.ShowDialog();
94             });
95         }
96
97         private void LogMessages(IEnumerable<UserMessage> messages)
98         {
99             var logMessage = CreateMessage(messages);
100
101             _log.Error(logMessage);
102         }
103
104         private static string CreateMessage(IEnumerable<UserMessage> messages)
105         {
106             var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
107                                                     (builder, message) =>
108                                                         {
109                                                             builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
110                                                                                  message.Message, message.Details);
111                                                             return builder;
112                                                         });
113             var logMessage = messageBuilder.ToString();
114             return logMessage;
115         }
116     }
117
118 }