X-Git-Url: https://code.grnet.gr/git/pithos-ms-client/blobdiff_plain/4b0a2fc0d4ad36c28bbc1150b7bb5bbecbc606b3..2c27cdd0a1ab28fbfb7c06abb5a3fe629af33977:/trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs diff --git a/trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs b/trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs index ed8379c..94c980e 100644 --- a/trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs +++ b/trunk/Pithos.Client.WPF/Shell/FeedbackViewModel.cs @@ -5,7 +5,12 @@ // ----------------------------------------------------------------------- using System.ComponentModel.Composition; +using System.IO; +using System.Net; +using System.Reflection; +using System.Windows; using Caliburn.Micro; +using Pithos.Client.WPF.Properties; namespace Pithos.Client.WPF.Shell { @@ -19,18 +24,111 @@ namespace Pithos.Client.WPF.Shell /// [Export(typeof(FeedbackViewModel))] public class FeedbackViewModel:Screen - { - + { public string Message { get; set; } public string Data { get; set; } + private IWindowManager _windowManager; + + private static readonly log4net.ILog Log = log4net.LogManager.GetLogger("Pithos"); + + + [ImportingConstructor] + public FeedbackViewModel(IWindowManager windowManager) + { + _windowManager = windowManager; + Data = GetBasicData() ; + } + + public void AppendData(string data) + { + Data = Data + "\r\n" + data; + } + + private string GetBasicData() + { + var assembly = Assembly.GetExecutingAssembly(); + var attributes = assembly.GetCustomAttributes(false); + var versionAtt = attributes.OfType().First(); + var fileVersion = attributes.OfType().First(); + - public bool CanSend{get { return (!String.IsNullOrWhiteSpace(Message)); }} + var builder = new StringBuilder(); + + builder.AppendLine("Pithos Windows Client") + .Append('-', 30) + .AppendLine() + .AppendFormat("Released: {0}\r\n", versionAtt.InformationalVersion) + .AppendFormat("File Version: {0}\r\n", fileVersion.Version) + .AppendFormat("Assembly Version: {0}\r\n", assembly.GetName().Version) + .AppendFormat("OS: {0} 64Bit: {1}\r\n",Environment.OSVersion,Environment.Is64BitOperatingSystem) + .AppendFormat("Wokring Set: {0} bytes\r\n", Environment.WorkingSet) + .AppendFormat("Processors: {0} \r\n", Environment.ProcessorCount) + .Append('=', 30) + .AppendLine(); + var basicData = builder.ToString(); + return basicData; + } + public void Send() { + var message = "Pithos Windows Client Feedback:\r\n" +Message; + var fields = new Dictionary { { "feedback-msg", message }, { "feedback-data", Data } }; + try + { + PostForm(Settings.Default.FeedbackUri, fields); + } + catch (Exception exc) + { + Log.Error("Failed to submit feedback",exc); + MessageBox.Show("There was an error while submitting your feedback. The error was logged", "Failed to submit feedback", + MessageBoxButton.OK, MessageBoxImage.Error); + } + + TryClose(); + } + + private async void PostForm(string formUrl, Dictionary fields) + { + var request = WebRequest.Create(formUrl); + request.Method = "POST"; + + var builder = new StringBuilder(); + foreach (var field in fields) + { + builder.AppendFormat("{0}={1}&", field.Key, Uri.EscapeDataString(field.Value)); + } + + var postData = builder.ToString().TrimEnd('&'); + var byteArray = Encoding.UTF8.GetBytes(postData); + + request.ContentType = "application/x-www-form-urlencoded"; + request.ContentLength = byteArray.Length; + using (var stream = request.GetRequestStream()) + { + stream.Write(byteArray, 0, byteArray.Length); + } + + // Get the response. + var response = await request.GetResponseAsync(); + + + var webResponse = ((HttpWebResponse)response); + var result=webResponse.StatusCode; + if (result != HttpStatusCode.OK) + { + // Get the stream containing content returned by the server. + using (var responseStream = webResponse.GetResponseStream()) + using (var reader = new StreamReader(responseStream)) + { + var responseFromServer = reader.ReadToEnd(); + Log.WarnFormat("Unexpected status returned from feedback form: {0} - {1}\r\n{2}",result,webResponse.StatusDescription, responseFromServer); + } + } + response.Close(); } } }