ui(client): recent profile selector
This commit is contained in:
@@ -8,12 +8,14 @@ using Avalonia.Threading;
|
||||
using ModpackUpdater.Apps.Client.Gui.LangRes;
|
||||
using ModpackUpdater.Manager;
|
||||
using Pilz.Extensions;
|
||||
using Pilz.Extensions.Collections;
|
||||
using Pilz.UI.Symbols;
|
||||
|
||||
namespace ModpackUpdater.Apps.Client.Gui;
|
||||
|
||||
public partial class MainForm : Window
|
||||
{
|
||||
private readonly MenuFlyout menuFlyoutSearchProfileFolder = new();
|
||||
private readonly UpdateCheckOptions updateOptions = new();
|
||||
private ModpackInfo modpackInfo = new();
|
||||
private ModpackConfig updateConfig = new();
|
||||
@@ -21,16 +23,13 @@ public partial class MainForm : Window
|
||||
private UpdateCheckResult? lastUpdateCheckResult;
|
||||
private bool currentUpdating;
|
||||
private bool loadingData;
|
||||
private int curOptionsRow = 3;
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
Title = $"{Title} (v{Assembly.GetExecutingAssembly().GetAppVersion().ToShortString()})";
|
||||
|
||||
Closing += MainForm_Closing;
|
||||
Loaded += MainForm_Loaded;
|
||||
ButtonSearchProfileFolder.Flyout = menuFlyoutSearchProfileFolder;
|
||||
|
||||
ButtonSearchProfileFolder.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.opened_folder);
|
||||
ButtonCheckForUpdates.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.update_done);
|
||||
@@ -54,12 +53,50 @@ public partial class MainForm : Window
|
||||
TextStatus.Text = "-";
|
||||
ImageStatus.Source = null;
|
||||
}
|
||||
private void LoadRecentFilesToUi()
|
||||
{
|
||||
menuFlyoutSearchProfileFolder.Items.Clear();
|
||||
|
||||
if (AppConfig.Instance.RecentMinecraftProfilePaths.Count == 0)
|
||||
{
|
||||
menuFlyoutSearchProfileFolder.Items.Add(new TextBlock
|
||||
{
|
||||
Text = GeneralLangRes.NoRecentProfilesAvailable,
|
||||
FontStyle = FontStyle.Italic,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
AppConfig.Instance.RecentMinecraftProfilePaths.ForEach(path =>
|
||||
{
|
||||
if (File.Exists(path))
|
||||
return;
|
||||
|
||||
var item = new MenuItem
|
||||
{
|
||||
Header = path.Length > 50 ? $"...{path[^50..]}" : path,
|
||||
DataContext = path,
|
||||
};
|
||||
item.Click += MenuItemRecentMinecraftProfilePathItem_Click;
|
||||
menuFlyoutSearchProfileFolder.Items.Add(item);
|
||||
});
|
||||
}
|
||||
|
||||
private void StoreRecentMinecraftProfilePath(string? path)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(path))
|
||||
return;
|
||||
|
||||
AppConfig.Instance.RecentMinecraftProfilePaths.Remove(path);
|
||||
AppConfig.Instance.RecentMinecraftProfilePaths.Insert(0, path);
|
||||
AppConfig.Instance.RecentMinecraftProfilePaths.Skip(10).ForEach(n => AppConfig.Instance.RecentMinecraftProfilePaths.Remove(n));
|
||||
}
|
||||
|
||||
private void LoadProfileToUi()
|
||||
{
|
||||
loadingData = true;
|
||||
|
||||
TextBoxMinecraftProfileFolder.Text = modpackInfo.LocalPath ?? AppConfig.Instance.LastMinecraftProfilePath ?? TextBoxMinecraftProfileFolder.Text;
|
||||
TextBoxMinecraftProfileFolder.Text = modpackInfo.LocalPath ?? AppConfig.Instance.RecentMinecraftProfilePaths.FirstOrDefault() ?? TextBoxMinecraftProfileFolder.Text;
|
||||
TextBoxModpackConfig.Text = modpackInfo.ConfigUrl ?? TextBoxModpackConfig.Text;
|
||||
TextBoxInstallKey.Text = modpackInfo.ExtrasKey ?? TextBoxInstallKey.Text;
|
||||
|
||||
@@ -76,8 +113,13 @@ public partial class MainForm : Window
|
||||
|
||||
private async void CheckStatusAndUpdate(bool loadProfileToUi)
|
||||
{
|
||||
if (CheckStatus(loadProfileToUi))
|
||||
await ExecuteUpdate(false, false);
|
||||
if (!CheckStatus(loadProfileToUi))
|
||||
return;
|
||||
|
||||
await ExecuteUpdate(false, false);
|
||||
|
||||
StoreRecentMinecraftProfilePath(modpackInfo.LocalPath);
|
||||
LoadRecentFilesToUi();
|
||||
}
|
||||
|
||||
private bool CheckStatus(bool loadProfileToUi)
|
||||
@@ -262,18 +304,13 @@ public partial class MainForm : Window
|
||||
|
||||
#region Gui
|
||||
|
||||
private void MainForm_Closing(object? sender, WindowClosingEventArgs e)
|
||||
{
|
||||
AppConfig.Instance.LastMinecraftProfilePath = TextBoxMinecraftProfileFolder.Text?.Trim();
|
||||
}
|
||||
|
||||
private async void MainForm_Loaded(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var updates = new AppUpdates(Program.UpdateUrl, this);
|
||||
updates.OnDownloadProgramUpdate += (o, _) => SetStatus(GeneralLangRes.DownloadProgramUpdate, AppGlobals.Symbols.GetImageSource(AppSymbols.software_installer));
|
||||
updates.OnDownloadProgramUpdate += (_, _) => SetStatus(GeneralLangRes.DownloadProgramUpdate, AppGlobals.Symbols.GetImageSource(AppSymbols.software_installer));
|
||||
await updates.UpdateApp();
|
||||
ClearStatus();
|
||||
|
||||
LoadRecentFilesToUi();
|
||||
CheckStatusAndUpdate(true);
|
||||
}
|
||||
|
||||
@@ -332,5 +369,11 @@ public partial class MainForm : Window
|
||||
await ExecuteUpdate(true, true);
|
||||
}
|
||||
|
||||
private void MenuItemRecentMinecraftProfilePathItem_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is MenuItem item && item.DataContext is string path)
|
||||
TextBoxMinecraftProfileFolder.Text = path;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user