1 // -----------------------------------------------------------------------
2 // <copyright file="FeedbackViewModel.cs" company="Microsoft">
3 // TODO: Update copyright text.
5 // -----------------------------------------------------------------------
7 using System.ComponentModel.Composition;
10 using System.Reflection;
13 using Pithos.Client.WPF.Properties;
15 namespace Pithos.Client.WPF.Shell
18 using System.Collections.Generic;
23 /// TODO: Update summary.
25 [Export(typeof(FeedbackViewModel))]
26 public class FeedbackViewModel:Screen
28 public string Message { get; set; }
30 public string Data { get; set; }
32 private IWindowManager _windowManager;
34 private static readonly log4net.ILog Log = log4net.LogManager.GetLogger("Pithos");
37 [ImportingConstructor]
38 public FeedbackViewModel(IWindowManager windowManager)
40 _windowManager = windowManager;
41 Data = GetBasicData() ;
44 public void AppendData(string data)
46 Data = Data + "\r\n" + data;
49 private string GetBasicData()
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();
57 var builder = new StringBuilder();
59 builder.AppendLine("Pithos Windows Client")
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)
70 var basicData = builder.ToString();
77 var message = "Pithos Windows Client Feedback:\r\n" +Message;
78 var fields = new Dictionary<string, string> { { "feedback-msg", message }, { "feedback-data", Data } };
81 PostForm(Settings.Default.FeedbackUri, fields);
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);
93 private async void PostForm(string formUrl, Dictionary<string, string> fields)
95 var request = WebRequest.Create(formUrl);
96 request.Method = "POST";
98 var builder = new StringBuilder();
99 foreach (var field in fields)
101 builder.AppendFormat("{0}={1}&", field.Key, Uri.EscapeDataString(field.Value));
104 var postData = builder.ToString().TrimEnd('&');
105 var byteArray = Encoding.UTF8.GetBytes(postData);
107 request.ContentType = "application/x-www-form-urlencoded";
108 request.ContentLength = byteArray.Length;
109 using (var stream = request.GetRequestStream())
111 stream.Write(byteArray, 0, byteArray.Length);
116 var response = await request.GetResponseAsync();
119 var webResponse = ((HttpWebResponse)response);
120 var result=webResponse.StatusCode;
121 if (result != HttpStatusCode.OK)
123 // Get the stream containing content returned by the server.
124 using (var responseStream = webResponse.GetResponseStream())
125 using (var reader = new StreamReader(responseStream))
127 var responseFromServer = reader.ReadToEnd();
128 Log.WarnFormat("Unexpected status returned from feedback form: {0} - {1}\r\n{2}",result,webResponse.StatusDescription, responseFromServer);