Skip to content

Commit

Permalink
Improvement check updates for Desktop
Browse files Browse the repository at this point in the history
  • Loading branch information
2dust committed Sep 5, 2024
1 parent c83dce3 commit 8343a10
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 17 deletions.
96 changes: 96 additions & 0 deletions v2rayN/v2rayN.Desktop/Views/CheckUpdateView.axaml
Original file line number Diff line number Diff line change
@@ -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>
48 changes: 48 additions & 0 deletions v2rayN/v2rayN.Desktop/Views/CheckUpdateView.axaml.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
2 changes: 1 addition & 1 deletion v2rayN/v2rayN.Desktop/Views/ClashProxiesView.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
<DataTemplate>
<Border
Width="160"
Margin="4,0"
Margin="0"
Padding="0"
Theme="{StaticResource CardBorder}">
<DockPanel>
Expand Down
10 changes: 1 addition & 9 deletions v2rayN/v2rayN.Desktop/Views/MainWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,8 @@

<MenuItem Padding="8,0">
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Static resx:ResUI.menuCheckUpdate}" />
</StackPanel>
<ContentControl x:Name="conCheckUpdate" />
</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 x:Name="menuHelp" Padding="8,0">
Expand Down
9 changes: 2 additions & 7 deletions v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,7 @@ public MainWindow()
this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).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.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables);
Expand Down Expand Up @@ -172,6 +166,7 @@ public MainWindow()
tabClashConnections2.Content ??= new ClashConnectionsView();
}
conTheme.Content ??= new ThemeSettingView();
conCheckUpdate.Content ??= new CheckUpdateView();

RestoreUI();
AddHelpMenuItem();
Expand Down

0 comments on commit 8343a10

Please sign in to comment.