Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / Shell / FeedbackViewModel.cs @ 74d78c90

History | View | Annotate | Download (4.5 kB)

1
// -----------------------------------------------------------------------
2
// <copyright file="FeedbackViewModel.cs" company="Microsoft">
3
// TODO: Update copyright text.
4
// </copyright>
5
// -----------------------------------------------------------------------
6

    
7
using System.Collections.Specialized;
8
using System.ComponentModel.Composition;
9
using System.Diagnostics;
10
using System.Diagnostics.Contracts;
11
using System.IO;
12
using System.Net;
13
using System.Reflection;
14
using System.Windows;
15
using Caliburn.Micro;
16
using Pithos.Client.WPF.Properties;
17

    
18
namespace Pithos.Client.WPF.Shell
19
{
20
    using System;
21
    using System.Collections.Generic;
22
    using System.Linq;
23
    using System.Text;
24

    
25
    /// <summary>
26
    /// TODO: Update summary.
27
    /// </summary>
28
    [Export(typeof(FeedbackViewModel))]
29
    public class FeedbackViewModel:Screen
30
    {        
31
        public string Message { get; set; }
32

    
33
        public string Data { get; set; }
34

    
35
        private IWindowManager _windowManager;
36

    
37
        private static readonly log4net.ILog Log = log4net.LogManager.GetLogger("Pithos");
38

    
39

    
40
        [ImportingConstructor]
41
        public FeedbackViewModel(IWindowManager windowManager)
42
        {
43
            _windowManager = windowManager;
44
            Data = GetBasicData() ;
45
        }
46

    
47
        public void AppendData(string data)
48
        {
49
            Data = Data + "\r\n" + data;
50
        }
51

    
52
        private string GetBasicData()
53
        {
54
            Assembly assembly = Assembly.GetExecutingAssembly();
55

    
56
            var attributes = assembly.GetCustomAttributes(false);
57
            var versionAtt = attributes.OfType<AssemblyInformationalVersionAttribute>().First();
58
            var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);
59
            var released = DateTime.Parse(versionAtt.InformationalVersion);
60

    
61

    
62
            var builder = new StringBuilder();
63
            
64
            builder.AppendLine("Pithos Windows Client")
65
                .Append('-', 30)
66
                .AppendLine()
67
                .AppendFormat("Released: {0}\r\n", released)
68
                .AppendFormat("File Version: {0}\r\n", fileVersion.FileVersion)
69
                .AppendFormat("Assembly Version: {0}\r\n", assembly.GetName().Version)
70
                .AppendFormat("OS: {0} 64Bit: {1}\r\n",Environment.OSVersion,Environment.Is64BitOperatingSystem)
71
                .AppendFormat("Wokring Set: {0} bytes\r\n", Environment.WorkingSet)
72
                .AppendFormat("Processors: {0} \r\n", Environment.ProcessorCount)                
73
                .Append('=', 30)
74
                .AppendLine();
75
            var basicData = builder.ToString();
76
            return basicData;
77

    
78
        }
79
        
80
        public void Send()
81
        {
82
            var message = "Pithos Windows Client Feedback:\r\n" +Message;
83
            var fields = new Dictionary<string, string> { { "feedback-msg", message }, { "feedback-data", Data } };
84
            string token="0007";
85
            if (Settings.Default.Accounts.Count>0)
86
                token = Settings.Default.Accounts[0].ApiKey;
87
            try
88
            {
89
                PostForm(Settings.Default.FeedbackUri, token,fields);
90
            }
91
            catch (Exception exc)
92
            {
93
                Log.Error("Failed to submit feedback",exc);
94
                MessageBox.Show("There was an error while submitting your feedback. The error was logged", "Failed to submit feedback",
95
                                MessageBoxButton.OK, MessageBoxImage.Error);
96
            }
97
            
98
            TryClose();
99
        }
100

    
101
        private void PostForm(string formUrl, string token,Dictionary<string, string> fields)
102
        {
103

    
104
            if (String.IsNullOrWhiteSpace(formUrl))
105
                throw new ArgumentNullException("formUrl");
106
            if (String.IsNullOrWhiteSpace(token))
107
                throw new ArgumentNullException("token");
108
            if (fields == null)
109
                throw new ArgumentNullException("fields");
110
            Contract.EndContractBlock();
111

    
112

    
113
            var client = new WebClient();
114
            client.Headers.Add("X-Auth-Token", token);
115

    
116
            var values=new NameValueCollection();
117
            fields.Apply(field => values.Add(field.Key, Uri.EscapeDataString(field.Value)));
118
            try
119
            {
120
                client.UploadValues(formUrl, values);
121
            }
122
            catch (WebException exc)
123
            {
124
                Log.WarnFormat("Unexpected status returned from feedback form: {0} - {1}", exc.Status,exc.Message);                    
125
            }
126
        }
127
    }
128
}