mirror of https://github.com/icsharpcode/ILSpy.git
Browse Source
- Decouple services to reduce circular dependencies - Move update panel to a separate control - Remove unrelated methods from MainWindowpull/3314/head
37 changed files with 525 additions and 448 deletions
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
// Copyright (c) 2024 Tom Englert for the SharpDevelop Team
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
// software and associated documentation files (the "Software"), to deal in the Software
|
||||
// without restriction, including without limitation the rights to use, copy, modify, merge,
|
||||
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
||||
// to whom the Software is furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all copies or
|
||||
// substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
using System; |
||||
using System.Diagnostics; |
||||
|
||||
namespace ICSharpCode.ILSpy.Util |
||||
{ |
||||
static class GlobalUtils |
||||
{ |
||||
public static void OpenLink(string link) |
||||
{ |
||||
try |
||||
{ |
||||
Process.Start(new ProcessStartInfo { FileName = link, UseShellExecute = true }); |
||||
} |
||||
catch (Exception) |
||||
{ |
||||
// Process.Start can throw several errors (not all of them documented),
|
||||
// just ignore all of them.
|
||||
} |
||||
} |
||||
|
||||
public static void ExecuteCommand(string fileName, string arguments) |
||||
{ |
||||
try |
||||
{ |
||||
Process.Start(fileName, arguments); |
||||
} |
||||
catch (Exception) |
||||
{ |
||||
// Process.Start can throw several errors (not all of them documented),
|
||||
// just ignore all of them.
|
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,100 @@
@@ -0,0 +1,100 @@
|
||||
// Copyright (c) 2024 Tom Englert for the SharpDevelop Team
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
||||
// software and associated documentation files (the "Software"), to deal in the Software
|
||||
// without restriction, including without limitation the rights to use, copy, modify, merge,
|
||||
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
||||
// to whom the Software is furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all copies or
|
||||
// substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
using System.Composition; |
||||
using System.Threading.Tasks; |
||||
using System.Windows.Input; |
||||
|
||||
using ICSharpCode.ILSpy.Updates; |
||||
|
||||
using TomsToolbox.Wpf; |
||||
|
||||
namespace ICSharpCode.ILSpy.ViewModels; |
||||
|
||||
[Export] |
||||
[NonShared] |
||||
public class UpdatePanelViewModel : ObservableObject |
||||
{ |
||||
bool isPanelVisible; |
||||
string updateAvailableDownloadUrl; |
||||
readonly SettingsService settingsService; |
||||
|
||||
public UpdatePanelViewModel(SettingsService settingsService) |
||||
{ |
||||
this.settingsService = settingsService; |
||||
|
||||
MessageBus<CheckIfUpdateAvailableEventArgs>.Subscribers += (_, e) => CheckIfUpdatesAvailableAsync(e.Notify).IgnoreExceptions(); |
||||
} |
||||
|
||||
public bool IsPanelVisible { |
||||
get => isPanelVisible; |
||||
set => SetProperty(ref isPanelVisible, value); |
||||
} |
||||
|
||||
public string UpdateAvailableDownloadUrl { |
||||
get => updateAvailableDownloadUrl; |
||||
set => SetProperty(ref updateAvailableDownloadUrl, value); |
||||
} |
||||
|
||||
public ICommand CloseCommand => new DelegateCommand(() => IsPanelVisible = false); |
||||
|
||||
public ICommand DownloadOrCheckUpdateCommand => new DelegateCommand(DownloadOrCheckUpdate); |
||||
|
||||
[PropertyDependency(nameof(UpdateAvailableDownloadUrl))] |
||||
public string ButtonText => UpdateAvailableDownloadUrl != null |
||||
? Properties.Resources.Download |
||||
: Properties.Resources.CheckAgain; |
||||
|
||||
[PropertyDependency(nameof(UpdateAvailableDownloadUrl))] |
||||
public string Message => UpdateAvailableDownloadUrl != null |
||||
? Properties.Resources.ILSpyVersionAvailable |
||||
: Properties.Resources.UpdateILSpyFound; |
||||
|
||||
async Task CheckIfUpdatesAvailableAsync(bool notify = false) |
||||
{ |
||||
var settings = settingsService.GetSettings<UpdateSettings>(); |
||||
|
||||
string downloadUrl = notify |
||||
? await UpdateService.CheckForUpdatesAsync(settings) |
||||
: await UpdateService.CheckForUpdatesIfEnabledAsync(settings); |
||||
|
||||
AdjustUpdateUIAfterCheck(downloadUrl, notify); |
||||
} |
||||
|
||||
async void DownloadOrCheckUpdate() |
||||
{ |
||||
if (updateAvailableDownloadUrl != null) |
||||
{ |
||||
GlobalUtils.OpenLink(updateAvailableDownloadUrl); |
||||
} |
||||
else |
||||
{ |
||||
IsPanelVisible = false; |
||||
|
||||
string downloadUrl = await UpdateService.CheckForUpdatesAsync(settingsService.GetSettings<UpdateSettings>()); |
||||
|
||||
AdjustUpdateUIAfterCheck(downloadUrl, true); |
||||
} |
||||
} |
||||
|
||||
void AdjustUpdateUIAfterCheck(string downloadUrl, bool notify) |
||||
{ |
||||
UpdateAvailableDownloadUrl = downloadUrl; |
||||
IsPanelVisible = notify; |
||||
} |
||||
} |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
<UserControl x:Class="ICSharpCode.ILSpy.Views.UpdatePanel" |
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
||||
xmlns:viewModels="clr-namespace:ICSharpCode.ILSpy.ViewModels" |
||||
xmlns:toms="urn:TomsToolbox" |
||||
mc:Ignorable="d" d:DesignWidth="500" d:DataContext="{d:DesignInstance viewModels:UpdatePanelViewModel}"> |
||||
<Border BorderBrush="Black" BorderThickness="1" Visibility="{Binding IsPanelVisible, Converter={toms:BooleanToVisibilityConverter} }"> |
||||
<DockPanel KeyboardNavigation.TabNavigation="Contained"> |
||||
<Button DockPanel.Dock="Right" MinWidth="0" Command="{Binding CloseCommand}" Content="X" /> |
||||
<StackPanel Orientation="Horizontal"> |
||||
<StackPanel Orientation="Horizontal"> |
||||
<TextBlock Margin="4,0" VerticalAlignment="Center" |
||||
Text="{Binding Message}" /> |
||||
<Button Content="{Binding ButtonText}" |
||||
Command="{Binding DownloadOrCheckUpdateCommand}"/> |
||||
</StackPanel> |
||||
</StackPanel> |
||||
</DockPanel> |
||||
</Border> |
||||
</UserControl> |
Loading…
Reference in new issue