Skip to content

Commit 425891d

Browse files
committed
implemented VersionCheckCommand
1 parent 4de68ab commit 425891d

File tree

6 files changed

+123
-1
lines changed

6 files changed

+123
-1
lines changed

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@
281281
<Reference Include="System.Core" />
282282
<Reference Include="System.Data" />
283283
<Reference Include="System.Drawing" />
284+
<Reference Include="System.Net.Http" />
284285
<Reference Include="System.Printing" />
285286
<Reference Include="System.Runtime.Serialization" />
286287
<Reference Include="System.Windows.Forms" />
@@ -493,6 +494,7 @@
493494
<Compile Include="UI\CodeExplorer\Commands\AddClassModuleCommand.cs" />
494495
<Compile Include="UI\CodeExplorer\Commands\AddStdModuleCommand.cs" />
495496
<Compile Include="UI\CodeExplorer\Commands\AddTestModuleCommand.cs" />
497+
<Compile Include="VersionCheck\IVersionCheck.cs" />
496498
<Compile Include="UI\Command\MenuItems\CommandBars\AppCommandBarBase.cs" />
497499
<Compile Include="UI\Command\MenuItems\CommandBars\ContextSelectionLabelMenuItem.cs" />
498500
<Compile Include="UI\Command\MenuItems\CommandBars\IContextFormatter.cs" />
@@ -507,6 +509,7 @@
507509
<Compile Include="UI\Command\MenuItems\RegexAssistantCommand.cs" />
508510
<Compile Include="UI\Command\MenuItems\RegexAssistantCommandMenuItem.cs" />
509511
<Compile Include="UI\Command\MenuItems\ParentMenus\ToolsParentMenu.cs" />
512+
<Compile Include="UI\Command\VersionCheckCommand.cs" />
510513
<Compile Include="UI\Controls\BindableTextEditor.cs" />
511514
<Compile Include="UI\Controls\LinkButton.xaml.cs">
512515
<DependentUpon>LinkButton.xaml</DependentUpon>
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
using System;
2+
using System.Diagnostics;
3+
using System.Windows.Forms;
4+
using NLog;
5+
using Rubberduck.VersionCheck;
6+
7+
namespace Rubberduck.UI.Command
8+
{
9+
public interface IExternalProcess
10+
{
11+
void Start(string fileName);
12+
}
13+
14+
public class ExternalProcess : IExternalProcess
15+
{
16+
public void Start(string fileName)
17+
{
18+
var info = new ProcessStartInfo(fileName)
19+
{
20+
WindowStyle = ProcessWindowStyle.Maximized
21+
};
22+
Process.Start(info);
23+
}
24+
}
25+
26+
public class VersionCheckCommand : CommandBase
27+
{
28+
private readonly IVersionCheck _versionCheck;
29+
private readonly IMessageBox _prompt;
30+
private readonly IExternalProcess _process;
31+
32+
public VersionCheckCommand(IVersionCheck versionCheck, IMessageBox prompt, IExternalProcess process)
33+
: base(LogManager.GetCurrentClassLogger())
34+
{
35+
_versionCheck = versionCheck;
36+
_prompt = prompt;
37+
_process = process;
38+
}
39+
40+
protected override void ExecuteImpl(object parameter)
41+
{
42+
_versionCheck.GetLatestVersionAsync().ContinueWith(Execute);
43+
}
44+
45+
private void Execute(Version latestVersion)
46+
{
47+
if (_versionCheck.CurrentVersion < latestVersion)
48+
{
49+
PromptAndBrowse(latestVersion);
50+
}
51+
}
52+
53+
private void PromptAndBrowse(Version latestVersion)
54+
{
55+
var prompt = string.Format(RubberduckUI.VersionCheck_NewVersionAvailable, latestVersion);
56+
if (_prompt.Show(prompt, RubberduckUI.Rubberduck, MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==
57+
DialogResult.No)
58+
{
59+
return;
60+
}
61+
62+
_process.Start("https://github.com/rubberduck-vba/Rubberduck/releases/latest");
63+
}
64+
}
65+
}

RetailCoder.VBE/UI/RubberduckUI.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RetailCoder.VBE/UI/RubberduckUI.fr.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,4 +1867,7 @@ End Sub</value>
18671867
<data name="SettingsCaption_ImportSettings" xml:space="preserve">
18681868
<value>Import</value>
18691869
</data>
1870+
<data name="VersionCheck_NewVersionAvailable" xml:space="preserve">
1871+
<value>La version {0} de Rubberduck est maintenant disponible! Souhaitez-vous consulter les notes de mise à jour maintenant?</value>
1872+
</data>
18701873
</root>

RetailCoder.VBE/UI/RubberduckUI.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1914,4 +1914,7 @@ Would you like to import them to Rubberduck?</value>
19141914
<data name="IndenterSettings_CodeSampleHeader" xml:space="preserve">
19151915
<value>Indented Code Sample</value>
19161916
</data>
1917+
<data name="VersionCheck_NewVersionAvailable" xml:space="preserve">
1918+
<value>Rubberduck version {0} is now available! Would you like to review the release notes now?</value>
1919+
</data>
19171920
</root>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
using System.Net.Http;
3+
using System.Reflection;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
7+
namespace Rubberduck.VersionCheck
8+
{
9+
public interface IVersionCheck
10+
{
11+
Task<Version> GetLatestVersionAsync(CancellationToken token = default(CancellationToken));
12+
Version CurrentVersion { get; }
13+
}
14+
15+
public class VersionCheck : IVersionCheck
16+
{
17+
private readonly Lazy<Version> _currentVersion;
18+
public VersionCheck()
19+
{
20+
_currentVersion = new Lazy<Version>(() => Assembly.GetExecutingAssembly().GetName().Version);
21+
}
22+
23+
private Version _latestVersion;
24+
public async Task<Version> GetLatestVersionAsync(CancellationToken token = default(CancellationToken))
25+
{
26+
if (_latestVersion != default(Version)) { return _latestVersion; }
27+
28+
using (var client = new HttpClient())
29+
{
30+
var url = new Uri("http://rubberduckvba.com/Build/Version/Stable");
31+
var response = await client.GetAsync(url, token);
32+
var version = await response.Content.ReadAsStringAsync();
33+
return _latestVersion = new Version(version);
34+
}
35+
}
36+
37+
public Version CurrentVersion { get { return _currentVersion.Value; } }
38+
}
39+
}

0 commit comments

Comments
 (0)