mirror of https://github.com/2dust/v2rayN
Improvement check updates for Desktop
parent
c83dce3cc0
commit
8343a1002f
|
@ -0,0 +1,96 @@
|
||||||
|
<UserControl
|
||||||
|
x:Class="v2rayN.Desktop.Views.CheckUpdateView"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:resx="clr-namespace:ServiceLib.Resx;assembly=ServiceLib"
|
||||||
|
xmlns:vms="clr-namespace:ServiceLib.ViewModels;assembly=ServiceLib"
|
||||||
|
d:DesignHeight="450"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
x:DataType="vms:CheckUpdateViewModel"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<Button Classes="Tertiary">
|
||||||
|
<Button.Content>
|
||||||
|
<TextBlock Text="{x:Static resx:ResUI.menuCheckUpdate}" />
|
||||||
|
</Button.Content>
|
||||||
|
<Button.Flyout>
|
||||||
|
<Flyout Placement="RightEdgeAlignedTop">
|
||||||
|
<DockPanel Margin="16">
|
||||||
|
<StackPanel
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
Classes="Margin8"
|
||||||
|
DockPanel.Dock="Bottom"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Classes="Margin8"
|
||||||
|
Text="{x:Static resx:ResUI.TbSettingsEnableCheckPreReleaseUpdate}" />
|
||||||
|
<ToggleSwitch
|
||||||
|
x:Name="togEnableCheckPreReleaseUpdate"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Classes="Margin8" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
x:Name="btnCheckUpdate"
|
||||||
|
Width="100"
|
||||||
|
Classes="Margin8"
|
||||||
|
Content="{x:Static resx:ResUI.menuCheckUpdate}" />
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
<StackPanel>
|
||||||
|
<ListBox
|
||||||
|
x:Name="lstCheckUpdates"
|
||||||
|
BorderThickness="1"
|
||||||
|
ItemsSource="{Binding CheckUpdateItems}">
|
||||||
|
<ItemsControl.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<StackPanel Orientation="Vertical" />
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ItemsControl.ItemsPanel>
|
||||||
|
<ItemsControl.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<Border
|
||||||
|
Width="500"
|
||||||
|
Height="80"
|
||||||
|
Margin="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Theme="{StaticResource CardBorder}">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1*" />
|
||||||
|
<ColumnDefinition Width="1*" />
|
||||||
|
<ColumnDefinition Width="3*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ToggleSwitch
|
||||||
|
x:Name="togAutoRefresh"
|
||||||
|
Grid.Column="0"
|
||||||
|
Margin="8"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
IsChecked="{Binding isSelected}" />
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="1"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{Binding coreType}" />
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="2"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{Binding remarks}"
|
||||||
|
TextWrapping="WrapWithOverflow" />
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</DataTemplate>
|
||||||
|
</ItemsControl.ItemTemplate>
|
||||||
|
</ListBox>
|
||||||
|
</StackPanel>
|
||||||
|
</DockPanel>
|
||||||
|
</Flyout>
|
||||||
|
</Button.Flyout>
|
||||||
|
</Button>
|
||||||
|
</UserControl>
|
|
@ -0,0 +1,48 @@
|
||||||
|
using Avalonia.ReactiveUI;
|
||||||
|
using Avalonia.Threading;
|
||||||
|
using ReactiveUI;
|
||||||
|
using System.Reactive.Disposables;
|
||||||
|
|
||||||
|
namespace v2rayN.Desktop.Views
|
||||||
|
{
|
||||||
|
public partial class CheckUpdateView : ReactiveUserControl<CheckUpdateViewModel>
|
||||||
|
{
|
||||||
|
public CheckUpdateView()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
ViewModel = new CheckUpdateViewModel(UpdateViewHandler);
|
||||||
|
|
||||||
|
this.WhenActivated(disposables =>
|
||||||
|
{
|
||||||
|
this.OneWayBind(ViewModel, vm => vm.CheckUpdateItems, v => v.lstCheckUpdates.ItemsSource).DisposeWith(disposables);
|
||||||
|
|
||||||
|
this.Bind(ViewModel, vm => vm.EnableCheckPreReleaseUpdate, v => v.togEnableCheckPreReleaseUpdate.IsChecked).DisposeWith(disposables);
|
||||||
|
this.BindCommand(ViewModel, vm => vm.CheckUpdateCmd, v => v.btnCheckUpdate).DisposeWith(disposables);
|
||||||
|
this.OneWayBind(ViewModel, vm => vm.IsCheckUpdate, v => v.btnCheckUpdate.IsEnabled).DisposeWith(disposables);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)
|
||||||
|
{
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case EViewAction.DispatcherCheckUpdate:
|
||||||
|
if (obj is null) return false;
|
||||||
|
Dispatcher.UIThread.Post(() =>
|
||||||
|
ViewModel?.UpdateViewResult((CheckUpdateItem)obj),
|
||||||
|
DispatcherPriority.Default);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EViewAction.DispatcherCheckUpdateFinished:
|
||||||
|
if (obj is null) return false;
|
||||||
|
Dispatcher.UIThread.Post(() =>
|
||||||
|
ViewModel?.UpdateFinishedResult((bool)obj),
|
||||||
|
DispatcherPriority.Default);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return await Task.FromResult(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -104,7 +104,7 @@
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<Border
|
<Border
|
||||||
Width="160"
|
Width="160"
|
||||||
Margin="4,0"
|
Margin="0"
|
||||||
Padding="0"
|
Padding="0"
|
||||||
Theme="{StaticResource CardBorder}">
|
Theme="{StaticResource CardBorder}">
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
|
|
|
@ -87,16 +87,8 @@
|
||||||
|
|
||||||
<MenuItem Padding="8,0">
|
<MenuItem Padding="8,0">
|
||||||
<MenuItem.Header>
|
<MenuItem.Header>
|
||||||
<StackPanel Orientation="Horizontal">
|
<ContentControl x:Name="conCheckUpdate" />
|
||||||
<TextBlock Text="{x:Static resx:ResUI.menuCheckUpdate}" />
|
|
||||||
</StackPanel>
|
|
||||||
</MenuItem.Header>
|
</MenuItem.Header>
|
||||||
<MenuItem x:Name="menuCheckUpdateN" Header="V2rayN" />
|
|
||||||
<MenuItem x:Name="menuCheckUpdateXrayCore" Header="Xray Core" />
|
|
||||||
<MenuItem x:Name="menuCheckUpdateMihomoCore" Header="Mihomo Core" />
|
|
||||||
<MenuItem x:Name="menuCheckUpdateSingBoxCore" Header="Sing-box Core" />
|
|
||||||
<Separator />
|
|
||||||
<MenuItem x:Name="menuCheckUpdateGeo" Header="Geo files" />
|
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|
||||||
<MenuItem x:Name="menuHelp" Padding="8,0">
|
<MenuItem x:Name="menuHelp" Padding="8,0">
|
||||||
|
|
|
@ -72,13 +72,7 @@ namespace v2rayN.Desktop.Views
|
||||||
this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables);
|
this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables);
|
||||||
this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables);
|
this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables);
|
||||||
|
|
||||||
//check update
|
|
||||||
this.BindCommand(ViewModel, vm => vm.CheckUpdateNCmd, v => v.menuCheckUpdateN).DisposeWith(disposables);
|
|
||||||
this.BindCommand(ViewModel, vm => vm.CheckUpdateXrayCoreCmd, v => v.menuCheckUpdateXrayCore).DisposeWith(disposables);
|
|
||||||
this.BindCommand(ViewModel, vm => vm.CheckUpdateClashMetaCoreCmd, v => v.menuCheckUpdateMihomoCore).DisposeWith(disposables);
|
|
||||||
this.BindCommand(ViewModel, vm => vm.CheckUpdateSingBoxCoreCmd, v => v.menuCheckUpdateSingBoxCore).DisposeWith(disposables);
|
|
||||||
this.BindCommand(ViewModel, vm => vm.CheckUpdateGeoCmd, v => v.menuCheckUpdateGeo).DisposeWith(disposables);
|
|
||||||
|
|
||||||
this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables);
|
this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables);
|
||||||
this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables);
|
this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables);
|
||||||
|
|
||||||
|
@ -172,6 +166,7 @@ namespace v2rayN.Desktop.Views
|
||||||
tabClashConnections2.Content ??= new ClashConnectionsView();
|
tabClashConnections2.Content ??= new ClashConnectionsView();
|
||||||
}
|
}
|
||||||
conTheme.Content ??= new ThemeSettingView();
|
conTheme.Content ??= new ThemeSettingView();
|
||||||
|
conCheckUpdate.Content ??= new CheckUpdateView();
|
||||||
|
|
||||||
RestoreUI();
|
RestoreUI();
|
||||||
AddHelpMenuItem();
|
AddHelpMenuItem();
|
||||||
|
|
Loading…
Reference in New Issue