Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / Shell / MessageView.xaml.cs @ b449fa49

History | View | Annotate | Download (5.6 kB)

1 d53bbdf0 Panagiotis Kanavos
using System;
2 d53bbdf0 Panagiotis Kanavos
using System.Collections.Generic;
3 d53bbdf0 Panagiotis Kanavos
using System.Collections.ObjectModel;
4 d53bbdf0 Panagiotis Kanavos
using System.ComponentModel;
5 d53bbdf0 Panagiotis Kanavos
using System.ComponentModel.Composition;
6 d53bbdf0 Panagiotis Kanavos
using System.Linq;
7 d53bbdf0 Panagiotis Kanavos
using System.Linq.Expressions;
8 c92e02f3 Panagiotis Kanavos
using System.Net;
9 d53bbdf0 Panagiotis Kanavos
using System.Net.Mail;
10 d53bbdf0 Panagiotis Kanavos
using System.Text;
11 d53bbdf0 Panagiotis Kanavos
using System.Windows;
12 d53bbdf0 Panagiotis Kanavos
using System.Windows.Controls;
13 d53bbdf0 Panagiotis Kanavos
using System.Windows.Data;
14 d53bbdf0 Panagiotis Kanavos
using System.Windows.Documents;
15 d53bbdf0 Panagiotis Kanavos
using System.Windows.Input;
16 d53bbdf0 Panagiotis Kanavos
using System.Windows.Media;
17 d53bbdf0 Panagiotis Kanavos
using System.Windows.Media.Imaging;
18 d53bbdf0 Panagiotis Kanavos
using System.Windows.Shapes;
19 d53bbdf0 Panagiotis Kanavos
using Caliburn.Micro;
20 2c27cdd0 Panagiotis Kanavos
using Pithos.Client.WPF.Shell;
21 c92e02f3 Panagiotis Kanavos
using Pithos.Network;
22 d53bbdf0 Panagiotis Kanavos
23 d53bbdf0 Panagiotis Kanavos
namespace Pithos.Client.WPF
24 d53bbdf0 Panagiotis Kanavos
{
25 d53bbdf0 Panagiotis Kanavos
    /// <summary>
26 d53bbdf0 Panagiotis Kanavos
    /// Interaction logic for MessageView.xaml
27 d53bbdf0 Panagiotis Kanavos
    /// </summary>
28 d53bbdf0 Panagiotis Kanavos
    public partial class MessageView : Window, INotifyPropertyChanged
29 d53bbdf0 Panagiotis Kanavos
    {
30 d53bbdf0 Panagiotis Kanavos
        public ObservableCollection<UserMessage> UserMessages { get; set; }
31 d53bbdf0 Panagiotis Kanavos
32 d53bbdf0 Panagiotis Kanavos
        private string _message;
33 d53bbdf0 Panagiotis Kanavos
        public string Message
34 d53bbdf0 Panagiotis Kanavos
        {
35 d53bbdf0 Panagiotis Kanavos
            get
36 d53bbdf0 Panagiotis Kanavos
            {
37 d53bbdf0 Panagiotis Kanavos
                return _message;
38 d53bbdf0 Panagiotis Kanavos
            }
39 d53bbdf0 Panagiotis Kanavos
            set
40 d53bbdf0 Panagiotis Kanavos
            {
41 d53bbdf0 Panagiotis Kanavos
                _message = value;
42 d53bbdf0 Panagiotis Kanavos
                NotifyOfPropertyChange(()=>Message);
43 d53bbdf0 Panagiotis Kanavos
            }
44 d53bbdf0 Panagiotis Kanavos
        }
45 d53bbdf0 Panagiotis Kanavos
46 d53bbdf0 Panagiotis Kanavos
47 d53bbdf0 Panagiotis Kanavos
        public MessageView(IEnumerable<UserMessage> userMessages)
48 d53bbdf0 Panagiotis Kanavos
        {
49 d53bbdf0 Panagiotis Kanavos
            UserMessages = new ObservableCollection<UserMessage>(userMessages);
50 d53bbdf0 Panagiotis Kanavos
            DataContext = this;
51 d53bbdf0 Panagiotis Kanavos
            InitializeComponent();            
52 d53bbdf0 Panagiotis Kanavos
        }
53 d53bbdf0 Panagiotis Kanavos
54 c92e02f3 Panagiotis Kanavos
55 c92e02f3 Panagiotis Kanavos
        
56 c92e02f3 Panagiotis Kanavos
        public MessageView(WebException exception)
57 c92e02f3 Panagiotis Kanavos
        {
58 c92e02f3 Panagiotis Kanavos
            DataContext = this;
59 c92e02f3 Panagiotis Kanavos
            InitializeComponent();
60 c92e02f3 Panagiotis Kanavos
61 c92e02f3 Panagiotis Kanavos
            var messages = new List<UserMessage>();
62 c92e02f3 Panagiotis Kanavos
            
63 c92e02f3 Panagiotis Kanavos
            if ((exception.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized)
64 c92e02f3 Panagiotis Kanavos
            {
65 c92e02f3 Panagiotis Kanavos
                Message = "Your authorization token has expired. Please renew the token and try again ";
66 c92e02f3 Panagiotis Kanavos
                Title = "Authorization expired";
67 c92e02f3 Panagiotis Kanavos
            }
68 c92e02f3 Panagiotis Kanavos
            else
69 c92e02f3 Panagiotis Kanavos
            {
70 c92e02f3 Panagiotis Kanavos
                messages.Add(new UserMessage
71 c92e02f3 Panagiotis Kanavos
                {
72 c92e02f3 Panagiotis Kanavos
                    Message = exception.InnerException.Message,
73 c92e02f3 Panagiotis Kanavos
                    Details = exception.InnerException.ToString(),
74 c92e02f3 Panagiotis Kanavos
                    Severity = Severity.Warn
75 c92e02f3 Panagiotis Kanavos
                });
76 c92e02f3 Panagiotis Kanavos
                Message = "There was an error while retrieving the item's information";
77 c92e02f3 Panagiotis Kanavos
                Title = "Error";
78 c92e02f3 Panagiotis Kanavos
            }
79 c92e02f3 Panagiotis Kanavos
            UserMessages = new ObservableCollection<UserMessage>(messages);
80 c92e02f3 Panagiotis Kanavos
        }
81 c92e02f3 Panagiotis Kanavos
82 c92e02f3 Panagiotis Kanavos
        public MessageView(RetryException exception)
83 c92e02f3 Panagiotis Kanavos
        {
84 c92e02f3 Panagiotis Kanavos
            DataContext = this;
85 c92e02f3 Panagiotis Kanavos
            InitializeComponent();
86 c92e02f3 Panagiotis Kanavos
87 c92e02f3 Panagiotis Kanavos
            var messages = new List<UserMessage>{
88 c92e02f3 Panagiotis Kanavos
                new UserMessage{
89 c92e02f3 Panagiotis Kanavos
                        Message = exception.InnerException.Message,
90 c92e02f3 Panagiotis Kanavos
                        Details = exception.InnerException.ToString(),
91 c92e02f3 Panagiotis Kanavos
                        Severity = Severity.Warn
92 c92e02f3 Panagiotis Kanavos
                    }
93 c92e02f3 Panagiotis Kanavos
            };
94 c92e02f3 Panagiotis Kanavos
95 c92e02f3 Panagiotis Kanavos
            Title = "Network error";
96 c92e02f3 Panagiotis Kanavos
            Message = "The connection to the server timed out. Please check your network connection and try again later";                
97 c92e02f3 Panagiotis Kanavos
98 c92e02f3 Panagiotis Kanavos
            UserMessages = new ObservableCollection<UserMessage>(messages);
99 c92e02f3 Panagiotis Kanavos
        }
100 c92e02f3 Panagiotis Kanavos
        
101 c92e02f3 Panagiotis Kanavos
        public MessageView(Exception exception)
102 c92e02f3 Panagiotis Kanavos
        {
103 c92e02f3 Panagiotis Kanavos
            DataContext = this;
104 c92e02f3 Panagiotis Kanavos
            InitializeComponent();
105 c92e02f3 Panagiotis Kanavos
106 c92e02f3 Panagiotis Kanavos
            var messages = new List<UserMessage>{
107 c92e02f3 Panagiotis Kanavos
                new UserMessage{
108 c92e02f3 Panagiotis Kanavos
                        Message = exception.InnerException.Message,
109 c92e02f3 Panagiotis Kanavos
                        Details = exception.InnerException.ToString(),
110 c92e02f3 Panagiotis Kanavos
                        Severity = Severity.Warn
111 c92e02f3 Panagiotis Kanavos
                    }
112 c92e02f3 Panagiotis Kanavos
            };
113 c92e02f3 Panagiotis Kanavos
114 c92e02f3 Panagiotis Kanavos
            Title = "Unexpected error";
115 c92e02f3 Panagiotis Kanavos
            Message = "An unexpected error has occured";                
116 c92e02f3 Panagiotis Kanavos
117 c92e02f3 Panagiotis Kanavos
            UserMessages = new ObservableCollection<UserMessage>(messages);
118 c92e02f3 Panagiotis Kanavos
        }
119 c92e02f3 Panagiotis Kanavos
120 d53bbdf0 Panagiotis Kanavos
        /// <summary>
121 d53bbdf0 Panagiotis Kanavos
        /// Copies the messages to the clipboard
122 d53bbdf0 Panagiotis Kanavos
        /// </summary>
123 d53bbdf0 Panagiotis Kanavos
        private void OnCopy(object sender, ExecutedRoutedEventArgs e)
124 d53bbdf0 Panagiotis Kanavos
        {
125 2c27cdd0 Panagiotis Kanavos
            var text = GetLogText();
126 2c27cdd0 Panagiotis Kanavos
            Clipboard.SetText(text);
127 2c27cdd0 Panagiotis Kanavos
        }
128 2c27cdd0 Panagiotis Kanavos
129 2c27cdd0 Panagiotis Kanavos
        private string GetLogText()
130 2c27cdd0 Panagiotis Kanavos
        {
131 2c27cdd0 Panagiotis Kanavos
            StringBuilder logText = new StringBuilder()
132 d53bbdf0 Panagiotis Kanavos
                .Append('-', 30)
133 2c27cdd0 Panagiotis Kanavos
                .AppendLine("\r\nPithos")
134 d53bbdf0 Panagiotis Kanavos
                .Append('-', 30)
135 d53bbdf0 Panagiotis Kanavos
                .AppendLine()
136 d53bbdf0 Panagiotis Kanavos
                .AppendLine();
137 d53bbdf0 Panagiotis Kanavos
            foreach (var message in UserMessages)
138 d53bbdf0 Panagiotis Kanavos
            {
139 2c27cdd0 Panagiotis Kanavos
                logText
140 d53bbdf0 Panagiotis Kanavos
                    .Append('-', 20)
141 d53bbdf0 Panagiotis Kanavos
                    .AppendFormat("\r\n[{0,5}]\t{1}", message.Severity, message.Message)
142 d53bbdf0 Panagiotis Kanavos
                    .AppendLine()
143 d53bbdf0 Panagiotis Kanavos
                    .AppendLine(message.Details)
144 d53bbdf0 Panagiotis Kanavos
                    .AppendLine();
145 d53bbdf0 Panagiotis Kanavos
            }
146 d53bbdf0 Panagiotis Kanavos
147 2c27cdd0 Panagiotis Kanavos
            var text = logText.ToString();
148 2c27cdd0 Panagiotis Kanavos
            return text;
149 d53bbdf0 Panagiotis Kanavos
        }
150 d53bbdf0 Panagiotis Kanavos
151 d53bbdf0 Panagiotis Kanavos
        private void OnClose(object sender, ExecutedRoutedEventArgs e)
152 d53bbdf0 Panagiotis Kanavos
        {
153 d53bbdf0 Panagiotis Kanavos
            this.Close();
154 d53bbdf0 Panagiotis Kanavos
        }
155 d53bbdf0 Panagiotis Kanavos
156 d53bbdf0 Panagiotis Kanavos
        public event PropertyChangedEventHandler PropertyChanged;
157 d53bbdf0 Panagiotis Kanavos
158 d53bbdf0 Panagiotis Kanavos
        private void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
159 d53bbdf0 Panagiotis Kanavos
        {
160 d53bbdf0 Panagiotis Kanavos
            if (PropertyChanged!=null)
161 d53bbdf0 Panagiotis Kanavos
                PropertyChanged(this,new PropertyChangedEventArgs(property.GetMemberInfo().Name));
162 d53bbdf0 Panagiotis Kanavos
        }
163 d53bbdf0 Panagiotis Kanavos
164 d53bbdf0 Panagiotis Kanavos
        private void OnSend(object sender, RoutedEventArgs e)
165 d53bbdf0 Panagiotis Kanavos
        {
166 2c27cdd0 Panagiotis Kanavos
            var manager=IoC.Get<IWindowManager>();
167 2c27cdd0 Panagiotis Kanavos
            var logText = GetLogText();
168 2c27cdd0 Panagiotis Kanavos
            var feedBack = IoC.Get<FeedbackViewModel>();
169 2c27cdd0 Panagiotis Kanavos
            feedBack.AppendData(logText);
170 2c27cdd0 Panagiotis Kanavos
            manager.ShowWindow(feedBack);
171 2c27cdd0 Panagiotis Kanavos
            this.Close();
172 d53bbdf0 Panagiotis Kanavos
        }
173 d53bbdf0 Panagiotis Kanavos
    }
174 d53bbdf0 Panagiotis Kanavos
175 d53bbdf0 Panagiotis Kanavos
    public class UserMessage
176 d53bbdf0 Panagiotis Kanavos
    {
177 d53bbdf0 Panagiotis Kanavos
        public string Message { get; set; }
178 d53bbdf0 Panagiotis Kanavos
179 d53bbdf0 Panagiotis Kanavos
        public Severity Severity { get; set; }
180 d53bbdf0 Panagiotis Kanavos
        public string Details { get; set; }
181 d53bbdf0 Panagiotis Kanavos
    }
182 d53bbdf0 Panagiotis Kanavos
183 d53bbdf0 Panagiotis Kanavos
    public enum Severity
184 d53bbdf0 Panagiotis Kanavos
    {
185 d53bbdf0 Panagiotis Kanavos
        Info,
186 d53bbdf0 Panagiotis Kanavos
        Warn,
187 d53bbdf0 Panagiotis Kanavos
        Error
188 d53bbdf0 Panagiotis Kanavos
    }
189 d53bbdf0 Panagiotis Kanavos
}