/
FeedbackForm.cs
123 lines (111 loc) · 3.89 KB
/
FeedbackForm.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Collections.Specialized;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
namespace MsCommon.ClickOnce
{
public partial class FeedbackForm : AppForm
{
public static string FeedbackEndpoint { get; set; }
private string _mood;
public FeedbackForm()
{
InitializeComponent();
this.AcceptButton = btnSubmit;
this.CancelButton = btnCancel;
if (string.IsNullOrEmpty(FeedbackEndpoint))
throw new ApplicationException("Programmers error: FeedbackEndpoint is not set");
}
private void HandleFormLoad(object sender, EventArgs e)
{
UpdateStatus(Color.Black, "");
BringToFront();
btnSubmit.Focus();
}
private void ButtonState(bool enabled)
{
btnSubmit.Enabled = enabled;
btnCancel.Enabled = enabled;
tbMessage.ReadOnly = !enabled;
rbHappy.Enabled = enabled;
rbSad.Enabled = enabled;
}
private async void HandleSubmitClicked(object sender, EventArgs e)
{
ButtonState(false);
var data = new NameValueCollection();
data["appname"] = AppVersion.AppName;
data["appversion"] = AppVersion.GetVersion();
data["mood"] = _mood ?? "no mood";
data["message"] = tbMessage.Text ?? "no message";
UpdateStatus(Color.Blue, "Submitting...");
using (var client = new WebClient())
{
try
{
byte[] response = await client.UploadValuesTaskAsync(FeedbackEndpoint, "POST", data);
string responseStr = Encoding.ASCII.GetString(response);
if (responseStr.Equals("ok"))
{
UpdateStatus(Color.Green, "Submitted, thank you!");
}
else
{
UpdateStatus(Color.Red, "Oops: " + responseStr);
ButtonState(true);
}
}
catch (Exception uploadex)
{
UpdateStatus(Color.Red, "Failed to submit: " + uploadex.Message);
ButtonState(true);
}
}
}
private void HandleCancelClicked(object sender, EventArgs e)
{
Close();
}
private void UpdateStatus(Color c, string status)
{
if (lblStatus.InvokeRequired)
{
lblStatus.Invoke((Action<Color, string>)UpdateStatus, c, status);
return;
}
lblStatus.Font = new Font(Label.DefaultFont, FontStyle.Bold);
lblStatus.ForeColor = c;
lblStatus.Text = status;
}
private void HandleMoodClicked(object sender, EventArgs e)
{
if (tbMessage.ReadOnly)
return;
pbHappy.BackColor = Control.DefaultBackColor;
pbHappy.BorderStyle = BorderStyle.None;
rbHappy.Checked = false;
pbSad.BackColor = Control.DefaultBackColor;
pbSad.BorderStyle = BorderStyle.None;
rbSad.Checked = false;
if (sender == pbHappy || sender == rbHappy)
{
pbHappy.BorderStyle = BorderStyle.FixedSingle;
pbHappy.BackColor = Color.LightGreen;
rbHappy.Checked = true;
_mood = "Happy";
}
if (sender == pbSad || sender == rbSad)
{
pbSad.BorderStyle = BorderStyle.FixedSingle;
pbSad.BackColor = Color.LightGreen;
rbSad.Checked = true;
_mood = "Sad";
}
}
}
}