2 using System.Collections.Generic;
3 using System.Collections.ObjectModel;
4 using System.ComponentModel;
5 using System.ComponentModel.Composition;
7 using System.Linq.Expressions;
12 using System.Windows.Controls;
13 using System.Windows.Data;
14 using System.Windows.Documents;
15 using System.Windows.Input;
16 using System.Windows.Media;
17 using System.Windows.Media.Imaging;
18 using System.Windows.Shapes;
20 using Pithos.Client.WPF.Shell;
23 namespace Pithos.Client.WPF
26 /// Interaction logic for MessageView.xaml
28 public partial class MessageView : Window, INotifyPropertyChanged
30 public ObservableCollection<UserMessage> UserMessages { get; set; }
32 private string _message;
42 NotifyOfPropertyChange(()=>Message);
47 public MessageView(IEnumerable<UserMessage> userMessages)
49 UserMessages = new ObservableCollection<UserMessage>(userMessages);
51 InitializeComponent();
56 public MessageView(WebException exception)
59 InitializeComponent();
61 var messages = new List<UserMessage>();
63 if ((exception.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized)
65 Message = "Your authorization token has expired. Please renew the token and try again ";
66 Title = "Authorization expired";
70 messages.Add(new UserMessage
72 Message = exception.InnerException.Message,
73 Details = exception.InnerException.ToString(),
74 Severity = Severity.Warn
76 Message = "There was an error while retrieving the item's information";
79 UserMessages = new ObservableCollection<UserMessage>(messages);
82 public MessageView(RetryException exception)
85 InitializeComponent();
87 var messages = new List<UserMessage>{
89 Message = exception.InnerException.Message,
90 Details = exception.InnerException.ToString(),
91 Severity = Severity.Warn
95 Title = "Network error";
96 Message = "The connection to the server timed out. Please check your network connection and try again later";
98 UserMessages = new ObservableCollection<UserMessage>(messages);
101 public MessageView(Exception exception)
104 InitializeComponent();
106 var messages = new List<UserMessage>{
108 Message = exception.InnerException.Message,
109 Details = exception.InnerException.ToString(),
110 Severity = Severity.Warn
114 Title = "Unexpected error";
115 Message = "An unexpected error has occured";
117 UserMessages = new ObservableCollection<UserMessage>(messages);
121 /// Copies the messages to the clipboard
123 private void OnCopy(object sender, ExecutedRoutedEventArgs e)
125 var text = GetLogText();
126 Clipboard.SetText(text);
129 private string GetLogText()
131 StringBuilder logText = new StringBuilder()
133 .AppendLine("\r\nPithos")
137 foreach (var message in UserMessages)
141 .AppendFormat("\r\n[{0,5}]\t{1}", message.Severity, message.Message)
143 .AppendLine(message.Details)
147 var text = logText.ToString();
151 private void OnClose(object sender, ExecutedRoutedEventArgs e)
156 public event PropertyChangedEventHandler PropertyChanged;
158 private void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
160 if (PropertyChanged!=null)
161 PropertyChanged(this,new PropertyChangedEventArgs(property.GetMemberInfo().Name));
164 private void OnSend(object sender, RoutedEventArgs e)
166 var manager=IoC.Get<IWindowManager>();
167 var logText = GetLogText();
168 var feedBack = IoC.Get<FeedbackViewModel>();
169 feedBack.AppendData(logText);
170 manager.ShowWindow(feedBack);
175 public class UserMessage
177 public string Message { get; set; }
179 public Severity Severity { get; set; }
180 public string Details { get; set; }