root / trunk / Pithos.Client.WPF / App.xaml.cs @ 0771dfd7
History | View | Annotate | Download (10.7 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 | db8a9589 | Panagiotis Kanavos | using System.IO; |
45 | 9bae55d1 | Panagiotis Kanavos | using System.Linq; |
46 | 5bcf6d70 | Panagiotis Kanavos | using System.Reflection; |
47 | ff26eb71 | Panagiotis Kanavos | using System.Text; |
48 | 759bd3c4 | Panagiotis Kanavos | using System.Threading; |
49 | ff26eb71 | Panagiotis Kanavos | using System.Threading.Tasks; |
50 | 9bae55d1 | Panagiotis Kanavos | using System.Windows; |
51 | ff26eb71 | Panagiotis Kanavos | using Caliburn.Micro; |
52 | adfa4645 | Panagiotis Kanavos | using Pithos.Client.WPF.Configuration; |
53 | 29a6b387 | Panagiotis Kanavos | using Pithos.Client.WPF.Properties; |
54 | db8a9589 | Panagiotis Kanavos | using log4net.Appender; |
55 | 6f03d6e1 | Panagiotis Kanavos | using log4net.Core; |
56 | db8a9589 | Panagiotis Kanavos | using log4net.Repository.Hierarchy; |
57 | 20e9a378 | Panagiotis Kanavos | |
58 | 9bae55d1 | Panagiotis Kanavos | |
59 | 9bae55d1 | Panagiotis Kanavos | namespace Pithos.Client.WPF |
60 | 9bae55d1 | Panagiotis Kanavos | { |
61 | 9bae55d1 | Panagiotis Kanavos | /// <summary> |
62 | 9bae55d1 | Panagiotis Kanavos | /// Interaction logic for App.xaml |
63 | 9bae55d1 | Panagiotis Kanavos | /// </summary> |
64 | 9bae55d1 | Panagiotis Kanavos | public partial class App : Application |
65 | 9bae55d1 | Panagiotis Kanavos | { |
66 | db8a9589 | Panagiotis Kanavos | private static readonly log4net.ILog Log = log4net.LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType ); |
67 | 8d2b4fa3 | Panagiotis Kanavos | |
68 | 46426dbd | Panagiotis Kanavos | |
69 | 9bae55d1 | Panagiotis Kanavos | public App() |
70 | 9bae55d1 | Panagiotis Kanavos | { |
71 | 46426dbd | Panagiotis Kanavos | |
72 | 8d2b4fa3 | Panagiotis Kanavos | //var instanceMutex=new Mutex() |
73 | 8d2b4fa3 | Panagiotis Kanavos | |
74 | db8a9589 | Panagiotis Kanavos | InitializeLogging(); |
75 | db8a9589 | Panagiotis Kanavos | |
76 | db8a9589 | Panagiotis Kanavos | |
77 | db8a9589 | Panagiotis Kanavos | DispatcherUnhandledException += OnDispatcherUnhandledException; |
78 | ff26eb71 | Panagiotis Kanavos | AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; |
79 | ff26eb71 | Panagiotis Kanavos | TaskScheduler.UnobservedTaskException += OnUnobservedException; |
80 | 5bcf6d70 | Panagiotis Kanavos | |
81 | 46426dbd | Panagiotis Kanavos | |
82 | 8a84d039 | Panagiotis Kanavos | //Fix incorrect proxy settings by switching to default proxy, if the proxy server settings is empty |
83 | 8a84d039 | Panagiotis Kanavos | if (Settings.Default.UseManualProxy && String.IsNullOrWhiteSpace(Settings.Default.ProxyServer)) |
84 | 8a84d039 | Panagiotis Kanavos | { |
85 | 8a84d039 | Panagiotis Kanavos | Settings.Default.UseManualProxy = false; |
86 | 8a84d039 | Panagiotis Kanavos | Settings.Default.UseDefaultProxy = true; |
87 | 8a84d039 | Panagiotis Kanavos | } |
88 | 8a84d039 | Panagiotis Kanavos | |
89 | 8d2b4fa3 | Panagiotis Kanavos | |
90 | 5bcf6d70 | Panagiotis Kanavos | InitializeComponent(); |
91 | 8d2b4fa3 | Panagiotis Kanavos | } |
92 | 8d2b4fa3 | Panagiotis Kanavos | |
93 | ff26eb71 | Panagiotis Kanavos | |
94 | 79f92570 | Panagiotis Kanavos | /* |
95 | 46426dbd | Panagiotis Kanavos | private void OnUpdateDetected(object sender, UpdateDetectedEventArgs e) |
96 | 46426dbd | Panagiotis Kanavos | { |
97 | 46426dbd | Panagiotis Kanavos | Log.InfoFormat("Update Detected {0}",e.LatestVersion.Version); |
98 | 46426dbd | Panagiotis Kanavos | } |
99 | 79f92570 | Panagiotis Kanavos | */ |
100 | 46426dbd | Panagiotis Kanavos | |
101 | db8a9589 | Panagiotis Kanavos | private static void InitializeLogging() |
102 | db8a9589 | Panagiotis Kanavos | { |
103 | db8a9589 | Panagiotis Kanavos | log4net.Config.XmlConfigurator.Configure(); |
104 | db8a9589 | Panagiotis Kanavos | |
105 | db8a9589 | Panagiotis Kanavos | try |
106 | db8a9589 | Panagiotis Kanavos | { |
107 | adfa4645 | Panagiotis Kanavos | var pithosDataPath = PithosSettings.PithosDataPath; |
108 | db8a9589 | Panagiotis Kanavos | if (!Directory.Exists(pithosDataPath)) |
109 | db8a9589 | Panagiotis Kanavos | Directory.CreateDirectory(pithosDataPath); |
110 | db8a9589 | Panagiotis Kanavos | |
111 | db8a9589 | Panagiotis Kanavos | var loggerRepository = (Hierarchy)log4net.LogManager.GetRepository(); |
112 | 6f03d6e1 | Panagiotis Kanavos | |
113 | db8a9589 | Panagiotis Kanavos | var appenders = loggerRepository.GetAppenders(); |
114 | 6f03d6e1 | Panagiotis Kanavos | |
115 | 81c5c310 | pkanavos | |
116 | db8a9589 | Panagiotis Kanavos | var lossyAppender = appenders.OfType<BufferingForwardingAppender>() |
117 | 6f03d6e1 | Panagiotis Kanavos | .FirstOrDefault(appender => appender.Name == "LossyFileAppender"); |
118 | 6f03d6e1 | Panagiotis Kanavos | if (lossyAppender!=null) |
119 | 6f03d6e1 | Panagiotis Kanavos | { |
120 | 6f03d6e1 | Panagiotis Kanavos | var dumpAppender = lossyAppender.Appenders.OfType<RollingFileAppender>().First(); |
121 | 6f03d6e1 | Panagiotis Kanavos | dumpAppender.File = Path.Combine(pithosDataPath, "errorlog.xml"); |
122 | 6f03d6e1 | Panagiotis Kanavos | dumpAppender.ActivateOptions(); |
123 | 6f03d6e1 | Panagiotis Kanavos | } |
124 | 6f03d6e1 | Panagiotis Kanavos | |
125 | 6f03d6e1 | Panagiotis Kanavos | var debugAppender =appenders.OfType<RollingFileAppender>() |
126 | 6f03d6e1 | Panagiotis Kanavos | .FirstOrDefault(a => a.Name == "DebugFileAppender"); |
127 | 6f03d6e1 | Panagiotis Kanavos | if (debugAppender != null) |
128 | 6f03d6e1 | Panagiotis Kanavos | { |
129 | 6f03d6e1 | Panagiotis Kanavos | debugAppender.File = Path.Combine(pithosDataPath, "debuglog.xml"); |
130 | 6f03d6e1 | Panagiotis Kanavos | if (!Settings.Default.DebugLoggingEnabled) |
131 | 6f03d6e1 | Panagiotis Kanavos | debugAppender.Threshold = Level.Off; |
132 | 6f03d6e1 | Panagiotis Kanavos | debugAppender.ActivateOptions(); |
133 | 6f03d6e1 | Panagiotis Kanavos | } |
134 | db8a9589 | Panagiotis Kanavos | } |
135 | db8a9589 | Panagiotis Kanavos | catch (Exception exc) |
136 | db8a9589 | Panagiotis Kanavos | { |
137 | db8a9589 | Panagiotis Kanavos | Log.Error("Dumpl appender initialization failed",exc); |
138 | db8a9589 | Panagiotis Kanavos | } |
139 | db8a9589 | Panagiotis Kanavos | } |
140 | db8a9589 | Panagiotis Kanavos | |
141 | 8d2b4fa3 | Panagiotis Kanavos | private Mutex _singleInstanceMutex; |
142 | 8d2b4fa3 | Panagiotis Kanavos | |
143 | 29a6b387 | Panagiotis Kanavos | protected override void OnStartup(StartupEventArgs e) |
144 | ca79acb7 | Panagiotis Kanavos | { |
145 | 29a6b387 | Panagiotis Kanavos | if (!Settings.Default.StartOnSystemStartup && e.Args.Contains("startup")) |
146 | 29a6b387 | Panagiotis Kanavos | { |
147 | db8a9589 | Panagiotis Kanavos | Shutdown(); |
148 | ca79acb7 | Panagiotis Kanavos | return; |
149 | 29a6b387 | Panagiotis Kanavos | } |
150 | db8a9589 | Panagiotis Kanavos | |
151 | 8d2b4fa3 | Panagiotis Kanavos | bool firstInstance; |
152 | 8d2b4fa3 | Panagiotis Kanavos | _singleInstanceMutex = new Mutex(false, "PITHOSMUTEX", out firstInstance); |
153 | 8d2b4fa3 | Panagiotis Kanavos | if (!firstInstance) |
154 | 8d2b4fa3 | Panagiotis Kanavos | { |
155 | 8d2b4fa3 | Panagiotis Kanavos | _singleInstanceMutex.Dispose(); |
156 | 8d2b4fa3 | Panagiotis Kanavos | _singleInstanceMutex = null; |
157 | 8d2b4fa3 | Panagiotis Kanavos | Shutdown(); |
158 | 8d2b4fa3 | Panagiotis Kanavos | return; |
159 | 8d2b4fa3 | Panagiotis Kanavos | } |
160 | 8d2b4fa3 | Panagiotis Kanavos | |
161 | db8a9589 | Panagiotis Kanavos | //Delay during startup |
162 | 759bd3c4 | Panagiotis Kanavos | if (e.Args.Contains("startup")) |
163 | 759bd3c4 | Panagiotis Kanavos | { |
164 | 759bd3c4 | Panagiotis Kanavos | if (Settings.Default.StartupDelay>TimeSpan.Zero) |
165 | 759bd3c4 | Panagiotis Kanavos | Thread.Sleep(Settings.Default.StartupDelay); |
166 | 759bd3c4 | Panagiotis Kanavos | } |
167 | 759bd3c4 | Panagiotis Kanavos | |
168 | ca79acb7 | Panagiotis Kanavos | var splashScreen = new SplashScreen("images/logo.png"); |
169 | ca79acb7 | Panagiotis Kanavos | splashScreen.Show(true); |
170 | ca79acb7 | Panagiotis Kanavos | |
171 | 29a6b387 | Panagiotis Kanavos | base.OnStartup(e); |
172 | 29a6b387 | Panagiotis Kanavos | } |
173 | 29a6b387 | Panagiotis Kanavos | |
174 | 8d2b4fa3 | Panagiotis Kanavos | protected override void OnExit(ExitEventArgs e) |
175 | 8d2b4fa3 | Panagiotis Kanavos | { |
176 | 8d2b4fa3 | Panagiotis Kanavos | try |
177 | 8d2b4fa3 | Panagiotis Kanavos | { |
178 | 8d2b4fa3 | Panagiotis Kanavos | if (_singleInstanceMutex!=null) |
179 | 8d2b4fa3 | Panagiotis Kanavos | _singleInstanceMutex.Dispose(); |
180 | 8d2b4fa3 | Panagiotis Kanavos | _singleInstanceMutex = null; |
181 | 8d2b4fa3 | Panagiotis Kanavos | } |
182 | 8d2b4fa3 | Panagiotis Kanavos | catch { } |
183 | 8d2b4fa3 | Panagiotis Kanavos | base.OnExit(e); |
184 | 8d2b4fa3 | Panagiotis Kanavos | } |
185 | 8d2b4fa3 | Panagiotis Kanavos | |
186 | ff26eb71 | Panagiotis Kanavos | private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e) |
187 | 81c5c310 | pkanavos | { |
188 | 81c5c310 | pkanavos | Log.Error("Unobserved Task Exception", e.Exception); |
189 | 81c5c310 | pkanavos | |
190 | 81c5c310 | pkanavos | var messages = new List<UserMessage>(); |
191 | ff26eb71 | Panagiotis Kanavos | e.Exception.Handle(exc=>{ |
192 | ff26eb71 | Panagiotis Kanavos | messages.Add(new UserMessage |
193 | ff26eb71 | Panagiotis Kanavos | { |
194 | ff26eb71 | Panagiotis Kanavos | Message = "Unexpected Exception", |
195 | ff26eb71 | Panagiotis Kanavos | Details = exc.ToString(), |
196 | ff26eb71 | Panagiotis Kanavos | Severity = Severity.Error |
197 | ff26eb71 | Panagiotis Kanavos | }); |
198 | ff26eb71 | Panagiotis Kanavos | return true; |
199 | ff26eb71 | Panagiotis Kanavos | }); |
200 | ff26eb71 | Panagiotis Kanavos | |
201 | 81c5c310 | pkanavos | |
202 | 81c5c310 | pkanavos | var message = String.Format(@"{0}<LineBreak/>{1}<LineBreak/><LineBreak/>{2}", |
203 | db8a9589 | Panagiotis Kanavos | WPF.Properties.Resources.Unexpected_Error, |
204 | db8a9589 | Panagiotis Kanavos | WPF.Properties.Resources.We_Apologize, |
205 | db8a9589 | Panagiotis Kanavos | WPF.Properties.Resources.Please_Submit_Error); |
206 | db8a9589 | Panagiotis Kanavos | ShowMessages("Oops!",message, messages); |
207 | ff26eb71 | Panagiotis Kanavos | e.SetObserved(); |
208 | ff26eb71 | Panagiotis Kanavos | } |
209 | ff26eb71 | Panagiotis Kanavos | |
210 | ff26eb71 | Panagiotis Kanavos | private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) |
211 | ff26eb71 | Panagiotis Kanavos | { |
212 | db8a9589 | Panagiotis Kanavos | Log.Error("Unhandled exception", (Exception)e.ExceptionObject); |
213 | db8a9589 | Panagiotis Kanavos | |
214 | db8a9589 | Panagiotis Kanavos | var description = e.IsTerminating |
215 | db8a9589 | Panagiotis Kanavos | ? WPF.Properties.Resources.Unexpected_Error_Terminating |
216 | db8a9589 | Panagiotis Kanavos | : WPF.Properties.Resources.Unexpected_Error; |
217 | 0771dfd7 | pkanavos | var message = String.Format(@"{0}<LineBreak/>{1}<LineBreak/><LineBreak/>{2}", |
218 | db8a9589 | Panagiotis Kanavos | description, |
219 | db8a9589 | Panagiotis Kanavos | WPF.Properties.Resources.We_Apologize, |
220 | db8a9589 | Panagiotis Kanavos | WPF.Properties.Resources.Please_Submit_Error); |
221 | ff26eb71 | Panagiotis Kanavos | |
222 | ff26eb71 | Panagiotis Kanavos | |
223 | db8a9589 | Panagiotis Kanavos | var exc = ((Exception) e.ExceptionObject); |
224 | ff26eb71 | Panagiotis Kanavos | var messages = new[]{ |
225 | ff26eb71 | Panagiotis Kanavos | new UserMessage |
226 | ff26eb71 | Panagiotis Kanavos | { |
227 | db8a9589 | Panagiotis Kanavos | Message = exc.Message, |
228 | db8a9589 | Panagiotis Kanavos | Details = exc.ToString(), |
229 | ff26eb71 | Panagiotis Kanavos | Severity = Severity.Error |
230 | ff26eb71 | Panagiotis Kanavos | } |
231 | ff26eb71 | Panagiotis Kanavos | }; |
232 | db8a9589 | Panagiotis Kanavos | |
233 | db8a9589 | Panagiotis Kanavos | |
234 | ff26eb71 | Panagiotis Kanavos | ShowMessages("Oops!", message,messages); |
235 | ff26eb71 | Panagiotis Kanavos | } |
236 | ff26eb71 | Panagiotis Kanavos | |
237 | db8a9589 | Panagiotis Kanavos | void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) |
238 | db8a9589 | Panagiotis Kanavos | { |
239 | db8a9589 | Panagiotis Kanavos | Log.Error("Unhandled Dispatcher exception", e.Exception); |
240 | db8a9589 | Panagiotis Kanavos | |
241 | ff26eb71 | Panagiotis Kanavos | var messages = new[]{ |
242 | ff26eb71 | Panagiotis Kanavos | new UserMessage |
243 | ff26eb71 | Panagiotis Kanavos | { |
244 | ff26eb71 | Panagiotis Kanavos | Message = e.Exception.Message, |
245 | ff26eb71 | Panagiotis Kanavos | Details = e.Exception.ToString(), |
246 | ff26eb71 | Panagiotis Kanavos | Severity = Severity.Error |
247 | ff26eb71 | Panagiotis Kanavos | } |
248 | ff26eb71 | Panagiotis Kanavos | }; |
249 | db8a9589 | Panagiotis Kanavos | ShowMessages(WPF.Properties.Resources.Error_Title, |
250 | db8a9589 | Panagiotis Kanavos | WPF.Properties.Resources.Unexpected_Error, |
251 | db8a9589 | Panagiotis Kanavos | messages); |
252 | ff26eb71 | Panagiotis Kanavos | e.Handled=true; |
253 | ff26eb71 | Panagiotis Kanavos | } |
254 | ff26eb71 | Panagiotis Kanavos | |
255 | ff26eb71 | Panagiotis Kanavos | void ShowMessages(string title,string message,IEnumerable<UserMessage> messages ) |
256 | ff26eb71 | Panagiotis Kanavos | { |
257 | db8a9589 | Panagiotis Kanavos | var messageList = messages.ToList(); |
258 | db8a9589 | Panagiotis Kanavos | LogMessages(messageList); |
259 | ff26eb71 | Panagiotis Kanavos | Execute.OnUIThread(()=>{ |
260 | db8a9589 | Panagiotis Kanavos | var messageView = new MessageView(messageList) |
261 | db8a9589 | Panagiotis Kanavos | { |
262 | db8a9589 | Panagiotis Kanavos | Title = title, |
263 | db8a9589 | Panagiotis Kanavos | Message = message |
264 | db8a9589 | Panagiotis Kanavos | }; |
265 | db8a9589 | Panagiotis Kanavos | messageView.ShowDialog(); |
266 | ff26eb71 | Panagiotis Kanavos | }); |
267 | ff26eb71 | Panagiotis Kanavos | } |
268 | ff26eb71 | Panagiotis Kanavos | |
269 | ff26eb71 | Panagiotis Kanavos | private void LogMessages(IEnumerable<UserMessage> messages) |
270 | ff26eb71 | Panagiotis Kanavos | { |
271 | ff26eb71 | Panagiotis Kanavos | var logMessage = CreateMessage(messages); |
272 | ff26eb71 | Panagiotis Kanavos | |
273 | db8a9589 | Panagiotis Kanavos | Log.Error(logMessage); |
274 | ff26eb71 | Panagiotis Kanavos | } |
275 | ff26eb71 | Panagiotis Kanavos | |
276 | ff26eb71 | Panagiotis Kanavos | private static string CreateMessage(IEnumerable<UserMessage> messages) |
277 | ff26eb71 | Panagiotis Kanavos | { |
278 | ff26eb71 | Panagiotis Kanavos | var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"), |
279 | ff26eb71 | Panagiotis Kanavos | (builder, message) => |
280 | ff26eb71 | Panagiotis Kanavos | { |
281 | ff26eb71 | Panagiotis Kanavos | builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity, |
282 | ff26eb71 | Panagiotis Kanavos | message.Message, message.Details); |
283 | ff26eb71 | Panagiotis Kanavos | return builder; |
284 | ff26eb71 | Panagiotis Kanavos | }); |
285 | ff26eb71 | Panagiotis Kanavos | var logMessage = messageBuilder.ToString(); |
286 | ff26eb71 | Panagiotis Kanavos | return logMessage; |
287 | ff26eb71 | Panagiotis Kanavos | } |
288 | 9bae55d1 | Panagiotis Kanavos | } |
289 | 9bae55d1 | Panagiotis Kanavos | |
290 | 9bae55d1 | Panagiotis Kanavos | } |