Revision 2c27cdd0 trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs

b/trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs
5 5
// -----------------------------------------------------------------------
6 6

  
7 7
using System.ComponentModel.Composition;
8
using System.IO;
9
using System.Net;
10
using System.Reflection;
11
using System.Windows;
8 12
using Caliburn.Micro;
13
using Pithos.Client.WPF.Properties;
9 14

  
10 15
namespace Pithos.Client.WPF.Shell
11 16
{
......
19 24
    /// </summary>
20 25
    [Export(typeof(FeedbackViewModel))]
21 26
    public class FeedbackViewModel:Screen
22
    {
23

  
27
    {        
24 28
        public string Message { get; set; }
25 29

  
26 30
        public string Data { get; set; }
27 31

  
32
        private IWindowManager _windowManager;
33

  
34
        private static readonly log4net.ILog Log = log4net.LogManager.GetLogger("Pithos");
35

  
36

  
37
        [ImportingConstructor]
38
        public FeedbackViewModel(IWindowManager windowManager)
39
        {
40
            _windowManager = windowManager;
41
            Data = GetBasicData() ;
42
        }
43

  
44
        public void AppendData(string data)
45
        {
46
            Data = Data + "\r\n" + data;
47
        }
48

  
49
        private string GetBasicData()
50
        {
51
            var assembly = Assembly.GetExecutingAssembly();
52
            var attributes = assembly.GetCustomAttributes(false);
53
            var versionAtt = attributes.OfType<AssemblyInformationalVersionAttribute>().First();
54
            var fileVersion = attributes.OfType<AssemblyFileVersionAttribute>().First();
55

  
28 56

  
29
        public bool CanSend{get { return (!String.IsNullOrWhiteSpace(Message)); }}
57
            var builder = new StringBuilder();
58
            
59
            builder.AppendLine("Pithos Windows Client")
60
                .Append('-', 30)
61
                .AppendLine()
62
                .AppendFormat("Released: {0}\r\n", versionAtt.InformationalVersion)
63
                .AppendFormat("File Version: {0}\r\n", fileVersion.Version)
64
                .AppendFormat("Assembly Version: {0}\r\n", assembly.GetName().Version)
65
                .AppendFormat("OS: {0} 64Bit: {1}\r\n",Environment.OSVersion,Environment.Is64BitOperatingSystem)
66
                .AppendFormat("Wokring Set: {0} bytes\r\n", Environment.WorkingSet)
67
                .AppendFormat("Processors: {0} \r\n", Environment.ProcessorCount)                
68
                .Append('=', 30)
69
                .AppendLine();
70
            var basicData = builder.ToString();
71
            return basicData;
30 72

  
73
        }
74
        
31 75
        public void Send()
32 76
        {
77
            var message = "Pithos Windows Client Feedback:\r\n" +Message;
78
            var fields = new Dictionary<string, string> { { "feedback-msg", message }, { "feedback-data", Data } };
79
            try
80
            {
81
                PostForm(Settings.Default.FeedbackUri, fields);
82
            }
83
            catch (Exception exc)
84
            {
85
                Log.Error("Failed to submit feedback",exc);
86
                MessageBox.Show("There was an error while submitting your feedback. The error was logged", "Failed to submit feedback",
87
                                MessageBoxButton.OK, MessageBoxImage.Error);
88
            }
89
            
90
            TryClose();
91
        }
92

  
93
        private async void PostForm(string formUrl, Dictionary<string, string> fields)
94
        {
95
            var request = WebRequest.Create(formUrl);
96
            request.Method = "POST";
97

  
98
            var builder = new StringBuilder();
99
            foreach (var field in fields)
100
            {
101
                builder.AppendFormat("{0}={1}&", field.Key, Uri.EscapeDataString(field.Value));
102
            }
103

  
104
            var postData = builder.ToString().TrimEnd('&');
105
            var byteArray = Encoding.UTF8.GetBytes(postData);
106

  
107
            request.ContentType = "application/x-www-form-urlencoded";
108
            request.ContentLength = byteArray.Length;
109
            using (var stream = request.GetRequestStream())
110
            {
111
                stream.Write(byteArray, 0, byteArray.Length);
112
            }
33 113
            
114

  
115
            // Get the response.
116
            var response = await request.GetResponseAsync();
117

  
118

  
119
            var webResponse = ((HttpWebResponse)response);
120
            var result=webResponse.StatusCode;
121
            if (result != HttpStatusCode.OK)
122
            {
123
                // Get the stream containing content returned by the server.
124
                using (var responseStream = webResponse.GetResponseStream())
125
                using (var reader = new StreamReader(responseStream))
126
                {
127
                    var responseFromServer = reader.ReadToEnd();
128
                    Log.WarnFormat("Unexpected status returned from feedback form: {0} - {1}\r\n{2}",result,webResponse.StatusDescription, responseFromServer);                    
129
                }
130
            }
131
            response.Close();
34 132
        }
35 133
    }
36 134
}

Also available in: Unified diff