Skip to content

Commit

Permalink
Merge pull request #5213 from retailcoder/versioncheck
Browse files Browse the repository at this point in the history
Versioncheck tweaks and accidental fix for xml-doc analyzer
  • Loading branch information
retailcoder committed Oct 13, 2019
2 parents 9439c65 + a4b574a commit acdf44e
Show file tree
Hide file tree
Showing 12 changed files with 216 additions and 71 deletions.
3 changes: 3 additions & 0 deletions Rubberduck.Core/Settings/GeneralSettings.cs
Expand Up @@ -13,6 +13,7 @@ public interface IGeneralSettings
DisplayLanguageSetting Language { get; set; }
bool CanShowSplash { get; set; }
bool CanCheckVersion { get; set; }
bool IncludePreRelease { get; set; }
bool CompileBeforeParse { get; set; }
bool IsSmartIndenterPrompted { get; set; }
bool IsAutoSaveEnabled { get; set; }
Expand Down Expand Up @@ -43,6 +44,7 @@ public DisplayLanguageSetting Language

public bool CanShowSplash { get; set; }
public bool CanCheckVersion { get; set; }
public bool IncludePreRelease { get; set; }
public bool CompileBeforeParse { get; set; }
public bool IsSmartIndenterPrompted { get; set; }
public bool IsAutoSaveEnabled { get; set; }
Expand Down Expand Up @@ -89,6 +91,7 @@ public bool Equals(GeneralSettings other)
Language.Equals(other.Language) &&
CanShowSplash == other.CanShowSplash &&
CanCheckVersion == other.CanCheckVersion &&
IncludePreRelease == other.IncludePreRelease &&
CompileBeforeParse == other.CompileBeforeParse &&
IsSmartIndenterPrompted == other.IsSmartIndenterPrompted &&
IsAutoSaveEnabled == other.IsAutoSaveEnabled &&
Expand Down
25 changes: 18 additions & 7 deletions Rubberduck.Core/UI/Command/VersionCheckCommand.cs
Expand Up @@ -3,6 +3,8 @@
using Rubberduck.Interaction;
using Rubberduck.VersionCheck;
using Rubberduck.Resources;
using Rubberduck.SettingsProvider;
using Rubberduck.Settings;

namespace Rubberduck.UI.Command
{
Expand All @@ -28,37 +30,46 @@ public class VersionCheckCommand : CommandBase
private readonly IVersionCheck _versionCheck;
private readonly IMessageBox _prompt;
private readonly IExternalProcess _process;
IConfigurationService<Configuration> _config;

public VersionCheckCommand(IVersionCheck versionCheck, IMessageBox prompt, IExternalProcess process)
public VersionCheckCommand(IVersionCheck versionCheck, IMessageBox prompt, IExternalProcess process, IConfigurationService<Configuration> config)
{
_versionCheck = versionCheck;
_prompt = prompt;
_process = process;
_config = config;
}

protected override async void OnExecute(object parameter)
{
Logger.Info("Executing version check.");
var settings = _config.Read().UserSettings.GeneralSettings;
Logger.Info("Executing version check...");
await _versionCheck
.GetLatestVersionAsync()
.GetLatestVersionAsync(settings)
.ContinueWith(t =>
{
if (_versionCheck.CurrentVersion < t.Result)
{
PromptAndBrowse(t.Result);
PromptAndBrowse(t.Result, settings.IncludePreRelease);
}
});
}

private void PromptAndBrowse(Version latestVersion)
private void PromptAndBrowse(Version latestVersion, bool includePreRelease)
{
var prompt = string.Format(RubberduckUI.VersionCheck_NewVersionAvailable, latestVersion);
var buildType = includePreRelease
? RubberduckUI.VersionCheck_BuildType_PreRelease
: RubberduckUI.VersionCheck_BuildType_Release;
var prompt = string.Format(RubberduckUI.VersionCheck_NewVersionAvailable, _versionCheck.CurrentVersion, latestVersion, buildType);
if (!_prompt.Question(prompt, RubberduckUI.Rubberduck))
{
return;
}

_process.Start("https://github.com/rubberduck-vba/Rubberduck/releases/latest");
var url = includePreRelease
? "https://github.com/rubberduck-vba/Rubberduck/releases"
: "https://github.com/rubberduck-vba/Rubberduck/releases/latest";
_process.Start(url);
}
}
}
7 changes: 6 additions & 1 deletion Rubberduck.Core/UI/Settings/GeneralSettings.xaml
Expand Up @@ -128,7 +128,12 @@
IsChecked="{Binding ShowSplashAtStartup}" />

<CheckBox Margin="5,0,0,5" Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_CheckVersion}"
IsChecked="{Binding CheckVersionAtStartup}" />
IsChecked="{Binding CheckVersionAtStartup}"
x:Name="IsVersionCheckEnabled"/>
<CheckBox Margin="15,0,0,5" Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_IncludePreRelease}"
IsChecked="{Binding IncludePreRelease}"
IsEnabled="{Binding IsChecked, ElementName=IsVersionCheckEnabled}"/>

<CheckBox Margin="5,0,0,5" Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_CompileBeforeParse}"
IsChecked="{Binding CompileBeforeParse}" />
<CheckBox Margin="5,0,0,5" Content="{Resx ResxName=Rubberduck.Resources.RubberduckUI, Key=GeneralSettings_SetDpiUnaware}"
Expand Down
68 changes: 16 additions & 52 deletions Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs
Expand Up @@ -158,6 +158,20 @@ public bool CheckVersionAtStartup
}
}

private bool _includePreRelease;
public bool IncludePreRelease
{
get => _includePreRelease;
set
{
if (_includePreRelease != value)
{
_includePreRelease = value;
OnPropertyChanged();
}
}
}

private bool _compileBeforeParse;
public bool CompileBeforeParse
{
Expand Down Expand Up @@ -289,6 +303,7 @@ private Rubberduck.Settings.GeneralSettings GetCurrentGeneralSettings()
Language = SelectedLanguage,
CanShowSplash = ShowSplashAtStartup,
CanCheckVersion = CheckVersionAtStartup,
IncludePreRelease = IncludePreRelease,
CompileBeforeParse = CompileBeforeParse,
SetDpiUnaware = SetDpiUnaware,
IsSmartIndenterPrompted = _indenterPrompted,
Expand All @@ -314,6 +329,7 @@ private void TransferSettingsToView(IGeneralSettings general, IHotkeySettings ho
: new ObservableViewModelCollection<HotkeySettingViewModel>(hotkey.Settings.Select(data => new HotkeySettingViewModel(data)));
ShowSplashAtStartup = general.CanShowSplash;
CheckVersionAtStartup = general.CanCheckVersion;
IncludePreRelease = general.IncludePreRelease;
CompileBeforeParse = general.CompileBeforeParse;
SetDpiUnaware = general.SetDpiUnaware;
_indenterPrompted = general.IsSmartIndenterPrompted;
Expand Down Expand Up @@ -376,56 +392,4 @@ protected override void ExportSettings(Rubberduck.Settings.GeneralSettings setti
}
}
}

public class HotkeySettingViewModel : ViewModelBase
{
private readonly HotkeySetting wrapped;

public HotkeySettingViewModel(HotkeySetting wrapped)
{
this.wrapped = wrapped;
}

public HotkeySetting Unwrap() { return wrapped; }

public string Key1
{
get { return wrapped.Key1; }
set { wrapped.Key1 = value; OnPropertyChanged(); }
}

public bool IsEnabled
{
get { return wrapped.IsEnabled; }
set { wrapped.IsEnabled = value; OnPropertyChanged(); }
}

public bool HasShiftModifier
{
get { return wrapped.HasShiftModifier; }
set { wrapped.HasShiftModifier = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsValid)); }
}

public bool HasAltModifier
{
get { return wrapped.HasAltModifier; }
set { wrapped.HasAltModifier = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsValid)); }
}

public bool HasCtrlModifier
{
get { return wrapped.HasCtrlModifier; }
set { wrapped.HasCtrlModifier = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsValid)); }
}

public string CommandTypeName
{
get { return wrapped.CommandTypeName; }
set { wrapped.CommandTypeName = value; OnPropertyChanged(); }
}

public bool IsValid { get { return wrapped.IsValid; } }
// FIXME If this is the only use, the property should be inlined to here
public string Prompt { get { return wrapped.Prompt; } }
}
}
56 changes: 56 additions & 0 deletions Rubberduck.Core/UI/Settings/HotkeySettingViewModel.cs
@@ -0,0 +1,56 @@
using Rubberduck.Settings;

namespace Rubberduck.UI.Settings
{
public class HotkeySettingViewModel : ViewModelBase
{
private readonly HotkeySetting wrapped;

public HotkeySettingViewModel(HotkeySetting wrapped)
{
this.wrapped = wrapped;
}

public HotkeySetting Unwrap() { return wrapped; }

public string Key1
{
get { return wrapped.Key1; }
set { wrapped.Key1 = value; OnPropertyChanged(); }
}

public bool IsEnabled
{
get { return wrapped.IsEnabled; }
set { wrapped.IsEnabled = value; OnPropertyChanged(); }
}

public bool HasShiftModifier
{
get { return wrapped.HasShiftModifier; }
set { wrapped.HasShiftModifier = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsValid)); }
}

public bool HasAltModifier
{
get { return wrapped.HasAltModifier; }
set { wrapped.HasAltModifier = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsValid)); }
}

public bool HasCtrlModifier
{
get { return wrapped.HasCtrlModifier; }
set { wrapped.HasCtrlModifier = value; OnPropertyChanged(); OnPropertyChanged(nameof(IsValid)); }
}

public string CommandTypeName
{
get { return wrapped.CommandTypeName; }
set { wrapped.CommandTypeName = value; OnPropertyChanged(); }
}

public bool IsValid { get { return wrapped.IsValid; } }
// FIXME If this is the only use, the property should be inlined to here
public string Prompt { get { return wrapped.Prompt; } }
}
}
5 changes: 3 additions & 2 deletions Rubberduck.Core/VersionCheck/IVersionCheck.cs
@@ -1,12 +1,13 @@
using System;
using Rubberduck.Settings;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Rubberduck.VersionCheck
{
public interface IVersionCheck
{
Task<Version> GetLatestVersionAsync(CancellationToken token = default);
Task<Version> GetLatestVersionAsync(GeneralSettings settings, CancellationToken token = default);
Version CurrentVersion { get; }
}
}
13 changes: 9 additions & 4 deletions Rubberduck.Core/VersionCheck/VersionCheck.cs
@@ -1,4 +1,6 @@
using System;
using Rubberduck.Settings;
using Rubberduck.SettingsProvider;
using System;
using System.Linq;
using System.Net.Http;
using System.Threading;
Expand All @@ -12,19 +14,22 @@ public class VersionCheck : IVersionCheck
/// <param name="version">That would be the version of the assembly for the <c>_Extension</c> class.</param>
public VersionCheck(Version version)
{
_currentVersion = version;
_currentVersion = version;
}

private Version _latestVersion;
public async Task<Version> GetLatestVersionAsync(CancellationToken token = default)
public async Task<Version> GetLatestVersionAsync(GeneralSettings settings, CancellationToken token = default)
{
if (_latestVersion != default) { return _latestVersion; }

try
{
var url = settings.IncludePreRelease
? new Uri("http://rubberduckvba.com/build/version/prerelease")
: new Uri("http://rubberduckvba.com/build/version/stable");

using (var client = new HttpClient())
{
var url = new Uri("http://rubberduckvba.com/Build/Version/Stable");
var response = await client.GetAsync(url, token);
var content = await response.Content.ReadAsStringAsync();
var doc = new HtmlAgilityPack.HtmlDocument();
Expand Down
45 changes: 43 additions & 2 deletions Rubberduck.Resources/RubberduckUI.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit acdf44e

Please sign in to comment.