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