-
Notifications
You must be signed in to change notification settings - Fork 68
/
Copy pathNetSparkleUpdateWindow.cs
139 lines (115 loc) · 4.2 KB
/
NetSparkleUpdateWindow.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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using NetSparkle;
using NetSparkle.Enums;
using NetSparkle.Interfaces;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EasyConnect
{
public partial class NetSparkleUpdateWindow : Form, IUpdateAvailable
{
private AppCastItem[] _items;
private Timer _ensureDialogShownTimer = null;
public NetSparkleUpdateWindow(AppCastItem[] items, Sparkle sparkle)
{
InitializeComponent();
_items = items;
_updateAvailableLabel.Text = $"Version {items[0].Version} of EasyConnect is available, you have version {items[0].AppVersionInstalled}. Would you like to update?";
WebClient webClient = new WebClient();
string releaseNotes = "";
foreach (AppCastItem item in items)
{
string currentReleaseNotes = webClient.DownloadString(item.ReleaseNotesLink);
currentReleaseNotes = currentReleaseNotes.Substring(currentReleaseNotes.IndexOf("<body>") + 6);
currentReleaseNotes = currentReleaseNotes.Substring(0, currentReleaseNotes.IndexOf("</body>"));
currentReleaseNotes = currentReleaseNotes.Replace("<h3>Change log</h3>", "<h3>" + item.Version + "</h3>");
releaseNotes += currentReleaseNotes;
}
releaseNotes = "<html><body style=\"font-family: 'Segoe UI', 'sans-serif'; font-size: 10pt\">" + releaseNotes + "</body></html>";
_changeLogText.Invoke((MethodInvoker)delegate
{
_changeLogText.Navigate("about:blank");
_changeLogText.Document.OpenNew(true);
_changeLogText.Document.Write(releaseNotes);
_changeLogText.DocumentText = releaseNotes;
});
EnsureDialogShown();
}
public void EnsureDialogShown()
{
_ensureDialogShownTimer = new Timer();
_ensureDialogShownTimer.Tick += new EventHandler(_ensureDialogShownTimer_Tick);
_ensureDialogShownTimer.Interval = 250; // in milliseconds
_ensureDialogShownTimer.Start();
}
private void _ensureDialogShownTimer_Tick(object sender, EventArgs e)
{
Activate();
TopMost = true;
TopMost = false;
Focus();
_ensureDialogShownTimer.Enabled = false;
_ensureDialogShownTimer = null;
}
public UpdateAvailableResult Result
{
get
{
return DefaultUIFactory.ConvertDialogResultToUpdateAvailableResult(DialogResult);
}
}
public AppCastItem CurrentItem
{
get
{
return _items[0];
}
}
public event EventHandler UserResponded;
public void HideReleaseNotes()
{
_changeLogText.Invoke((MethodInvoker)delegate
{
_changeLogText.Navigate("about:blank");
});
}
public void HideRemindMeLaterButton()
{
_remindButton.Enabled = false;
}
public void HideSkipButton()
{
_skipButton.Enabled = false;
}
private void _skipButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.No;
Close();
}
private void _remindButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Retry;
Close();
}
private void _updateButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Yes;
Close();
}
void IUpdateAvailable.Show()
{
ShowDialog();
UserResponded.Invoke(this, new EventArgs());
}
private void NetSparkleUpdateWindow_FormClosing(object sender, FormClosingEventArgs e)
{
}
}
}