Skip to content

Commit 8f12f52

Browse files
committed
Allow changing version list endpoint
1 parent 12eeca9 commit 8f12f52

7 files changed

+120
-9
lines changed

MCLauncher/MCLauncher.csproj

+7
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@
103103
<Compile Include="RelayCommand.cs" />
104104
<Compile Include="VersionDownloader.cs" />
105105
<Compile Include="VersionList.cs" />
106+
<Compile Include="VersionListEndpointDialog.xaml.cs">
107+
<DependentUpon>VersionListEndpointDialog.xaml</DependentUpon>
108+
</Compile>
106109
<Compile Include="WUProtocol.cs" />
107110
<Compile Include="WUTokenHelper.cs" />
108111
<Page Include="MainWindow.xaml">
@@ -121,6 +124,10 @@
121124
<SubType>Designer</SubType>
122125
<Generator>MSBuild:Compile</Generator>
123126
</DesignData>
127+
<Page Include="VersionListEndpointDialog.xaml">
128+
<SubType>Designer</SubType>
129+
<Generator>MSBuild:Compile</Generator>
130+
</Page>
124131
</ItemGroup>
125132
<ItemGroup>
126133
<Compile Include="Properties\AssemblyInfo.cs">

MCLauncher/MainWindow.xaml

+1
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@
110110
<MenuItem Header="Delete APPX after download to save space" IsCheckable="True" Name="DeleteAppxAfterDownloadOption" Checked="DeleteAppxAfterDownloadCheck_Changed" Unchecked="DeleteAppxAfterDownloadCheck_Changed" IsChecked="{Binding UserPrefs.DeleteAppxAfterDownload }" />
111111
<MenuItem Header="Uninstall all versions" Name="CleanupForMicrosoftStoreReinstall" Click="MenuItemCleanupForMicrosoftStoreReinstallClicked" />
112112
<MenuItem Header="Refresh version list" Name="RefreshVersionList" Click="MenuItemRefreshVersionListClicked" />
113+
<MenuItem Header="Set version list endpoint..." Name="SetVersionListEndpoint" Click="MenuItemSetVersionListEndpointClicked" />
113114
</MenuItem>
114115
</Menu>
115116
<TabControl Grid.Row="1" Margin="0,5,0,0" BorderThickness="0,1,0,0" Padding="0" Width="Auto">

MCLauncher/MainWindow.xaml.cs

+22-6
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,18 @@ public partial class MainWindow : Window, ICommonVersionCommands {
4040
private volatile bool _hasLaunchTask = false;
4141

4242
public MainWindow() {
43-
_versions = new VersionList("versions.json", IMPORTED_VERSIONS_PATH, VERSIONS_API, this, VersionEntryPropertyChanged);
44-
InitializeComponent();
45-
ShowInstalledVersionsOnlyCheckbox.DataContext = this;
46-
47-
4843
if (File.Exists(PREFS_PATH)) {
4944
UserPrefs = JsonConvert.DeserializeObject<Preferences>(File.ReadAllText(PREFS_PATH));
5045
} else {
5146
UserPrefs = new Preferences();
5247
RewritePrefs();
5348
}
5449

50+
var versionsApi = UserPrefs.VersionsApi != "" ? UserPrefs.VersionsApi : VERSIONS_API;
51+
_versions = new VersionList("versions.json", IMPORTED_VERSIONS_PATH, versionsApi, this, VersionEntryPropertyChanged);
52+
InitializeComponent();
53+
ShowInstalledVersionsOnlyCheckbox.DataContext = this;
54+
5555
var versionListViewRelease = Resources["versionListViewRelease"] as CollectionViewSource;
5656
versionListViewRelease.Filter += new FilterEventHandler((object sender, FilterEventArgs e) => {
5757
var v = e.Item as Version;
@@ -107,7 +107,7 @@ private async void LoadVersionList() {
107107
Debug.WriteLine("List cache load failed:\n" + e.ToString());
108108
}
109109

110-
LoadingProgressLabel.Content = "Updating versions list from " + VERSIONS_API;
110+
LoadingProgressLabel.Content = "Updating versions list from " + _versions.VersionsApi;
111111
LoadingProgressBar.Value = 2;
112112
try {
113113
await _versions.DownloadList();
@@ -480,6 +480,22 @@ private void MenuItemCleanupForMicrosoftStoreReinstallClicked(object sender, Rou
480480
private void MenuItemRefreshVersionListClicked(object sender, RoutedEventArgs e) {
481481
Dispatcher.Invoke(LoadVersionList);
482482
}
483+
484+
private void onEndpointChangedHandler(object sender, string newEndpoint) {
485+
UserPrefs.VersionsApi = newEndpoint;
486+
_versions.VersionsApi = newEndpoint == "" ? VERSIONS_API : newEndpoint;
487+
Dispatcher.Invoke(LoadVersionList);
488+
RewritePrefs();
489+
}
490+
491+
private void MenuItemSetVersionListEndpointClicked(object sender, RoutedEventArgs e) {
492+
var dialog = new VersionListEndpointDialog(UserPrefs.VersionsApi) {
493+
Owner = this
494+
};
495+
dialog.OnEndpointChanged += onEndpointChangedHandler;
496+
497+
dialog.Show();
498+
}
483499
}
484500

485501
struct MinecraftPackageFamilies

MCLauncher/Preferences.cs

+2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@ public class Preferences {
33
public bool ShowInstalledOnly { get; set; } = false;
44

55
public bool DeleteAppxAfterDownload { get; set; } = true;
6+
7+
public string VersionsApi { get; set; } = "";
68
}
79
}

MCLauncher/VersionList.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
namespace MCLauncher {
1313
public class VersionList : ObservableCollection<WPFDataTypes.Version> {
1414

15+
public string VersionsApi { get; set; }
16+
1517
private readonly string _cacheFile;
1618
private readonly string _importedDirectory;
17-
private readonly string _versionsApi;
1819
private readonly WPFDataTypes.ICommonVersionCommands _commands;
1920
private readonly HttpClient _client = new HttpClient();
2021
HashSet<string> dbVersions = new HashSet<string>();
@@ -23,7 +24,7 @@ public class VersionList : ObservableCollection<WPFDataTypes.Version> {
2324
public VersionList(string cacheFile, string importedDirectory, string versionsApi, WPFDataTypes.ICommonVersionCommands commands, PropertyChangedEventHandler versionPropertyChangedEventHandler) {
2425
_cacheFile = cacheFile;
2526
_importedDirectory = importedDirectory;
26-
_versionsApi = versionsApi;
27+
VersionsApi = versionsApi;
2728
_commands = commands;
2829
_versionPropertyChangedHandler = versionPropertyChangedEventHandler;
2930
CollectionChanged += versionListOnCollectionChanged;
@@ -74,7 +75,7 @@ public async Task LoadFromCache() {
7475
}
7576

7677
public async Task DownloadList() {
77-
var resp = await _client.GetAsync(_versionsApi);
78+
var resp = await _client.GetAsync(VersionsApi);
7879
resp.EnsureSuccessStatusCode();
7980
var data = await resp.Content.ReadAsStringAsync();
8081
File.WriteAllText(_cacheFile, data);
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<Window x:Class="MCLauncher.VersionListEndpointDialog"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6+
xmlns:local="clr-namespace:MCLauncher"
7+
mc:Ignorable="d"
8+
ResizeMode="NoResize"
9+
ShowInTaskbar="False"
10+
SizeToContent="WidthAndHeight"
11+
MinWidth="400"
12+
WindowStartupLocation="CenterOwner"
13+
FocusManager.FocusedElement="{Binding ElementName=EndpointTextBox}"
14+
Title="Set version list endpoint...">
15+
<Grid Margin="5,5,5,5">
16+
<Grid.Resources>
17+
<Style TargetType="{x:Type Button}">
18+
<Setter Property="Width" Value="70" />
19+
<Setter Property="Height" Value="25" />
20+
<Setter Property="Margin" Value="5,0,0,0" />
21+
</Style>
22+
</Grid.Resources>
23+
<Grid.RowDefinitions>
24+
<RowDefinition Height="Auto" />
25+
<RowDefinition Height="Auto" />
26+
<RowDefinition Height="Auto" />
27+
<RowDefinition />
28+
</Grid.RowDefinitions>
29+
30+
<Grid.ColumnDefinitions>
31+
<ColumnDefinition Width="Auto" />
32+
<ColumnDefinition />
33+
</Grid.ColumnDefinitions>
34+
35+
<Label Content="Set the URL to get versions.json from (empty for default):" Grid.Row="0" Padding="0,5,0,5"/>
36+
<TextBox Name="EndpointTextBox" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" Margin="0,5,0,5" />
37+
38+
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,5,0,0">
39+
<Button Name="okButton" Click="okButton_Click" IsDefault="True">OK</Button>
40+
<Button Name="cancelButton" Click="cancelButton_Click" IsCancel="True">Cancel</Button>
41+
</StackPanel>
42+
</Grid>
43+
</Window>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using System.Windows;
7+
using System.Windows.Controls;
8+
using System.Windows.Data;
9+
using System.Windows.Documents;
10+
using System.Windows.Input;
11+
using System.Windows.Media;
12+
using System.Windows.Media.Imaging;
13+
using System.Windows.Shapes;
14+
15+
namespace MCLauncher
16+
{
17+
/// <summary>
18+
/// Interaction logic for VersionListEndpointDialog.xaml
19+
/// </summary>
20+
public partial class VersionListEndpointDialog : Window
21+
{
22+
public event SetEndpointHandler OnEndpointChanged;
23+
24+
public delegate void SetEndpointHandler(object sender, string newEndpoint);
25+
26+
27+
public VersionListEndpointDialog(string currentEndpoint) {
28+
InitializeComponent();
29+
EndpointTextBox.Text = currentEndpoint;
30+
}
31+
32+
private void okButton_Click(object sender, RoutedEventArgs e) {
33+
OnEndpointChanged?.Invoke(this, EndpointTextBox.Text);
34+
Close();
35+
}
36+
37+
private void cancelButton_Click(object sender, RoutedEventArgs e) {
38+
Close();
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)