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 | } |