Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (7.2 kB)

1 255f5f86 Panagiotis Kanavos
#region
2 255f5f86 Panagiotis Kanavos
/* -----------------------------------------------------------------------
3 255f5f86 Panagiotis Kanavos
 * <copyright file="App.xaml.cs" company="GRNet">
4 255f5f86 Panagiotis Kanavos
 * 
5 255f5f86 Panagiotis Kanavos
 * Copyright 2011-2012 GRNET S.A. All rights reserved.
6 255f5f86 Panagiotis Kanavos
 *
7 255f5f86 Panagiotis Kanavos
 * Redistribution and use in source and binary forms, with or
8 255f5f86 Panagiotis Kanavos
 * without modification, are permitted provided that the following
9 255f5f86 Panagiotis Kanavos
 * conditions are met:
10 255f5f86 Panagiotis Kanavos
 *
11 255f5f86 Panagiotis Kanavos
 *   1. Redistributions of source code must retain the above
12 255f5f86 Panagiotis Kanavos
 *      copyright notice, this list of conditions and the following
13 255f5f86 Panagiotis Kanavos
 *      disclaimer.
14 255f5f86 Panagiotis Kanavos
 *
15 255f5f86 Panagiotis Kanavos
 *   2. Redistributions in binary form must reproduce the above
16 255f5f86 Panagiotis Kanavos
 *      copyright notice, this list of conditions and the following
17 255f5f86 Panagiotis Kanavos
 *      disclaimer in the documentation and/or other materials
18 255f5f86 Panagiotis Kanavos
 *      provided with the distribution.
19 255f5f86 Panagiotis Kanavos
 *
20 255f5f86 Panagiotis Kanavos
 *
21 255f5f86 Panagiotis Kanavos
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 255f5f86 Panagiotis Kanavos
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 255f5f86 Panagiotis Kanavos
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 255f5f86 Panagiotis Kanavos
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 255f5f86 Panagiotis Kanavos
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 255f5f86 Panagiotis Kanavos
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 255f5f86 Panagiotis Kanavos
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 255f5f86 Panagiotis Kanavos
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 255f5f86 Panagiotis Kanavos
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 255f5f86 Panagiotis Kanavos
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 255f5f86 Panagiotis Kanavos
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 255f5f86 Panagiotis Kanavos
 * POSSIBILITY OF SUCH DAMAGE.
33 255f5f86 Panagiotis Kanavos
 *
34 255f5f86 Panagiotis Kanavos
 * The views and conclusions contained in the software and
35 255f5f86 Panagiotis Kanavos
 * documentation are those of the authors and should not be
36 255f5f86 Panagiotis Kanavos
 * interpreted as representing official policies, either expressed
37 255f5f86 Panagiotis Kanavos
 * or implied, of GRNET S.A.
38 255f5f86 Panagiotis Kanavos
 * </copyright>
39 255f5f86 Panagiotis Kanavos
 * -----------------------------------------------------------------------
40 255f5f86 Panagiotis Kanavos
 */
41 255f5f86 Panagiotis Kanavos
#endregion
42 255f5f86 Panagiotis Kanavos
using System;
43 9bae55d1 Panagiotis Kanavos
using System.Collections.Generic;
44 9bae55d1 Panagiotis Kanavos
using System.Configuration;
45 9bae55d1 Panagiotis Kanavos
using System.Data;
46 5bcf6d70 Panagiotis Kanavos
using System.Diagnostics;
47 9bae55d1 Panagiotis Kanavos
using System.Linq;
48 f327ad2b Panagiotis Kanavos
using System.Net;
49 ff26eb71 Panagiotis Kanavos
using System.Net.Mail;
50 5bcf6d70 Panagiotis Kanavos
using System.Reflection;
51 ff26eb71 Panagiotis Kanavos
using System.Text;
52 759bd3c4 Panagiotis Kanavos
using System.Threading;
53 ff26eb71 Panagiotis Kanavos
using System.Threading.Tasks;
54 9bae55d1 Panagiotis Kanavos
using System.Windows;
55 ff26eb71 Panagiotis Kanavos
using Caliburn.Micro;
56 5bcf6d70 Panagiotis Kanavos
using Microsoft.Win32;
57 2c27cdd0 Panagiotis Kanavos
using Caliburn.Micro.Logging;
58 29a6b387 Panagiotis Kanavos
using Pithos.Client.WPF.Properties;
59 20e9a378 Panagiotis Kanavos
60 9bae55d1 Panagiotis Kanavos
61 9bae55d1 Panagiotis Kanavos
namespace Pithos.Client.WPF
62 9bae55d1 Panagiotis Kanavos
{
63 9bae55d1 Panagiotis Kanavos
    /// <summary>
64 9bae55d1 Panagiotis Kanavos
    /// Interaction logic for App.xaml
65 9bae55d1 Panagiotis Kanavos
    /// </summary>
66 9bae55d1 Panagiotis Kanavos
    public partial class App : Application
67 9bae55d1 Panagiotis Kanavos
    {
68 f734ab5b Panagiotis Kanavos
        private readonly log4net.ILog _log = log4net.LogManager.GetLogger(typeof (App));
69 f734ab5b Panagiotis Kanavos
70 9bae55d1 Panagiotis Kanavos
        public App()
71 9bae55d1 Panagiotis Kanavos
        {
72 ff26eb71 Panagiotis Kanavos
            log4net.Config.XmlConfigurator.Configure();            
73 f734ab5b Panagiotis Kanavos
            
74 ff26eb71 Panagiotis Kanavos
            this.DispatcherUnhandledException += OnUnhandledException;
75 ff26eb71 Panagiotis Kanavos
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
76 ff26eb71 Panagiotis Kanavos
            TaskScheduler.UnobservedTaskException += OnUnobservedException;
77 5bcf6d70 Panagiotis Kanavos
78 8a84d039 Panagiotis Kanavos
            //Fix incorrect proxy settings by switching to default proxy, if the proxy server settings is empty
79 8a84d039 Panagiotis Kanavos
            if (Settings.Default.UseManualProxy && String.IsNullOrWhiteSpace(Settings.Default.ProxyServer))
80 8a84d039 Panagiotis Kanavos
            {
81 8a84d039 Panagiotis Kanavos
                Settings.Default.UseManualProxy = false;
82 8a84d039 Panagiotis Kanavos
                Settings.Default.UseDefaultProxy = true;
83 8a84d039 Panagiotis Kanavos
            }
84 8a84d039 Panagiotis Kanavos
85 5bcf6d70 Panagiotis Kanavos
            InitializeComponent();            
86 9bae55d1 Panagiotis Kanavos
        }
87 ff26eb71 Panagiotis Kanavos
88 29a6b387 Panagiotis Kanavos
        protected override void OnStartup(StartupEventArgs e)
89 ca79acb7 Panagiotis Kanavos
        {
90 29a6b387 Panagiotis Kanavos
            if (!Settings.Default.StartOnSystemStartup && e.Args.Contains("startup"))
91 29a6b387 Panagiotis Kanavos
            {
92 29a6b387 Panagiotis Kanavos
                this.Shutdown();
93 ca79acb7 Panagiotis Kanavos
                return;
94 29a6b387 Panagiotis Kanavos
            }
95 ca79acb7 Panagiotis Kanavos
            
96 759bd3c4 Panagiotis Kanavos
            //TODO: Possibly add a delay here?
97 759bd3c4 Panagiotis Kanavos
            if (e.Args.Contains("startup"))
98 759bd3c4 Panagiotis Kanavos
            {
99 759bd3c4 Panagiotis Kanavos
                if (Settings.Default.StartupDelay>TimeSpan.Zero)
100 759bd3c4 Panagiotis Kanavos
                    Thread.Sleep(Settings.Default.StartupDelay);
101 759bd3c4 Panagiotis Kanavos
            }
102 759bd3c4 Panagiotis Kanavos
103 ca79acb7 Panagiotis Kanavos
            var splashScreen = new SplashScreen("images/logo.png");
104 ca79acb7 Panagiotis Kanavos
            splashScreen.Show(true);
105 ca79acb7 Panagiotis Kanavos
            
106 29a6b387 Panagiotis Kanavos
            base.OnStartup(e);
107 29a6b387 Panagiotis Kanavos
        }
108 29a6b387 Panagiotis Kanavos
109 ff26eb71 Panagiotis Kanavos
        private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
110 ff26eb71 Panagiotis Kanavos
        {            
111 ff26eb71 Panagiotis Kanavos
            var messages=new List<UserMessage>();
112 ff26eb71 Panagiotis Kanavos
            e.Exception.Handle(exc=>{
113 ff26eb71 Panagiotis Kanavos
                messages.Add(new UserMessage
114 ff26eb71 Panagiotis Kanavos
                {
115 ff26eb71 Panagiotis Kanavos
                    Message = "Unexpected Exception",
116 ff26eb71 Panagiotis Kanavos
                    Details = exc.ToString(),
117 ff26eb71 Panagiotis Kanavos
                    Severity = Severity.Error
118 ff26eb71 Panagiotis Kanavos
                });
119 ff26eb71 Panagiotis Kanavos
                return true;
120 ff26eb71 Panagiotis Kanavos
            });
121 ff26eb71 Panagiotis Kanavos
122 ff26eb71 Panagiotis Kanavos
            ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
123 ff26eb71 Panagiotis Kanavos
            e.SetObserved();
124 ff26eb71 Panagiotis Kanavos
        }
125 ff26eb71 Panagiotis Kanavos
126 ff26eb71 Panagiotis Kanavos
        private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
127 ff26eb71 Panagiotis Kanavos
        {
128 ff26eb71 Panagiotis Kanavos
            var message = e.IsTerminating
129 ff26eb71 Panagiotis Kanavos
                              ? "Unexpected Exception. The application must terminate"
130 ff26eb71 Panagiotis Kanavos
                              : "Unexpected Exception";
131 ff26eb71 Panagiotis Kanavos
132 ff26eb71 Panagiotis Kanavos
133 ff26eb71 Panagiotis Kanavos
            var messages = new[]{
134 ff26eb71 Panagiotis Kanavos
                                   new UserMessage
135 ff26eb71 Panagiotis Kanavos
                                       {
136 ff26eb71 Panagiotis Kanavos
                                           Message = (e.ExceptionObject as Exception).Message,
137 ff26eb71 Panagiotis Kanavos
                                           Details = e.ExceptionObject.ToString(),
138 ff26eb71 Panagiotis Kanavos
                                           Severity = Severity.Error
139 ff26eb71 Panagiotis Kanavos
                                       }
140 ff26eb71 Panagiotis Kanavos
                               };
141 ff26eb71 Panagiotis Kanavos
            ShowMessages("Oops!", message,messages);
142 ff26eb71 Panagiotis Kanavos
        }
143 ff26eb71 Panagiotis Kanavos
144 ff26eb71 Panagiotis Kanavos
        void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
145 ff26eb71 Panagiotis Kanavos
        {                        
146 ff26eb71 Panagiotis Kanavos
            var messages = new[]{
147 ff26eb71 Panagiotis Kanavos
                                   new UserMessage
148 ff26eb71 Panagiotis Kanavos
                                       {
149 ff26eb71 Panagiotis Kanavos
                                           Message = e.Exception.Message, 
150 ff26eb71 Panagiotis Kanavos
                                           Details = e.Exception.ToString(),
151 ff26eb71 Panagiotis Kanavos
                                           Severity = Severity.Error
152 ff26eb71 Panagiotis Kanavos
                                       }
153 ff26eb71 Panagiotis Kanavos
                               };
154 ff26eb71 Panagiotis Kanavos
            ShowMessages("Oops!", "Unexcpected Exception", messages);
155 ff26eb71 Panagiotis Kanavos
            e.Handled=true;
156 ff26eb71 Panagiotis Kanavos
        }
157 ff26eb71 Panagiotis Kanavos
158 ff26eb71 Panagiotis Kanavos
        void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
159 ff26eb71 Panagiotis Kanavos
        {
160 ff26eb71 Panagiotis Kanavos
            LogMessages(messages);
161 ff26eb71 Panagiotis Kanavos
            Execute.OnUIThread(()=>{
162 ff26eb71 Panagiotis Kanavos
                var messageView = new MessageView(messages);
163 ff26eb71 Panagiotis Kanavos
                messageView.Title = title;
164 ff26eb71 Panagiotis Kanavos
                messageView.Message = message;
165 ff26eb71 Panagiotis Kanavos
                messageView.ShowDialog();
166 ff26eb71 Panagiotis Kanavos
            });
167 ff26eb71 Panagiotis Kanavos
        }
168 ff26eb71 Panagiotis Kanavos
169 ff26eb71 Panagiotis Kanavos
        private void LogMessages(IEnumerable<UserMessage> messages)
170 ff26eb71 Panagiotis Kanavos
        {
171 ff26eb71 Panagiotis Kanavos
            var logMessage = CreateMessage(messages);
172 ff26eb71 Panagiotis Kanavos
173 f734ab5b Panagiotis Kanavos
            _log.Error(logMessage);
174 ff26eb71 Panagiotis Kanavos
        }
175 ff26eb71 Panagiotis Kanavos
176 ff26eb71 Panagiotis Kanavos
        private static string CreateMessage(IEnumerable<UserMessage> messages)
177 ff26eb71 Panagiotis Kanavos
        {
178 ff26eb71 Panagiotis Kanavos
            var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
179 ff26eb71 Panagiotis Kanavos
                                                    (builder, message) =>
180 ff26eb71 Panagiotis Kanavos
                                                        {
181 ff26eb71 Panagiotis Kanavos
                                                            builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
182 ff26eb71 Panagiotis Kanavos
                                                                                 message.Message, message.Details);
183 ff26eb71 Panagiotis Kanavos
                                                            return builder;
184 ff26eb71 Panagiotis Kanavos
                                                        });
185 ff26eb71 Panagiotis Kanavos
            var logMessage = messageBuilder.ToString();
186 ff26eb71 Panagiotis Kanavos
            return logMessage;
187 ff26eb71 Panagiotis Kanavos
        }
188 9bae55d1 Panagiotis Kanavos
    }
189 9bae55d1 Panagiotis Kanavos
190 9bae55d1 Panagiotis Kanavos
}