using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.ComponentModel.Composition; using System.Linq; using System.Linq.Expressions; using System.Net; using System.Net.Mail; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using Caliburn.Micro; using Pithos.Client.WPF.Shell; using Pithos.Network; namespace Pithos.Client.WPF { /// /// Interaction logic for MessageView.xaml /// public partial class MessageView : Window, INotifyPropertyChanged { public ObservableCollection UserMessages { get; set; } private string _message; public string Message { get { return _message; } set { _message = value; NotifyOfPropertyChange(()=>Message); } } public MessageView(IEnumerable userMessages) { UserMessages = new ObservableCollection(userMessages); DataContext = this; InitializeComponent(); } public MessageView(WebException exception) { DataContext = this; InitializeComponent(); var messages = new List(); if ((exception.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized) { Message = "Your authorization token has expired. Please renew the token and try again "; Title = "Authorization expired"; } else { messages.Add(new UserMessage { Message = exception.InnerException.Message, Details = exception.InnerException.ToString(), Severity = Severity.Warn }); Message = "There was an error while retrieving the item's information"; Title = "Error"; } UserMessages = new ObservableCollection(messages); } public MessageView(RetryException exception) { DataContext = this; InitializeComponent(); var messages = new List{ new UserMessage{ Message = exception.InnerException.Message, Details = exception.InnerException.ToString(), Severity = Severity.Warn } }; Title = "Network error"; Message = "The connection to the server timed out. Please check your network connection and try again later"; UserMessages = new ObservableCollection(messages); } public MessageView(Exception exception) { DataContext = this; InitializeComponent(); var messages = new List{ new UserMessage{ Message = exception.InnerException.Message, Details = exception.InnerException.ToString(), Severity = Severity.Warn } }; Title = "Unexpected error"; Message = "An unexpected error has occured"; UserMessages = new ObservableCollection(messages); } /// /// Copies the messages to the clipboard /// private void OnCopy(object sender, ExecutedRoutedEventArgs e) { var text = GetLogText(); Clipboard.SetText(text); } private string GetLogText() { StringBuilder logText = new StringBuilder() .Append('-', 30) .AppendLine("\r\nPithos") .Append('-', 30) .AppendLine() .AppendLine(); foreach (var message in UserMessages) { logText .Append('-', 20) .AppendFormat("\r\n[{0,5}]\t{1}", message.Severity, message.Message) .AppendLine() .AppendLine(message.Details) .AppendLine(); } var text = logText.ToString(); return text; } private void OnClose(object sender, ExecutedRoutedEventArgs e) { this.Close(); } public event PropertyChangedEventHandler PropertyChanged; private void NotifyOfPropertyChange(Expression> property) { if (PropertyChanged!=null) PropertyChanged(this,new PropertyChangedEventArgs(property.GetMemberInfo().Name)); } private void OnSend(object sender, RoutedEventArgs e) { var manager=IoC.Get(); var logText = GetLogText(); var feedBack = IoC.Get(); feedBack.AppendData(logText); manager.ShowWindow(feedBack); this.Close(); } } public class UserMessage { public string Message { get; set; } public Severity Severity { get; set; } public string Details { get; set; } } public enum Severity { Info, Warn, Error } }