From c50299dcf4ee0380cf1fdd6fc39ae0f9e9f95e4d Mon Sep 17 00:00:00 2001 From: suchmememanyskill <38142618+suchmememanyskill@users.noreply.github.com> Date: Thu, 13 Jun 2024 22:43:10 +0200 Subject: [PATCH] Remote: Implement multiple base games --- LauncherGamePlugin/Forms/Form.cs | 40 +++++++++++------------ RemoteDownloaderPlugin/Game/OnlineGame.cs | 25 ++++++++++++++ SteamGridDbMiddleware/Gui/OnImageEdit.cs | 2 +- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/LauncherGamePlugin/Forms/Form.cs b/LauncherGamePlugin/Forms/Form.cs index 5e0b02e..f090eb2 100644 --- a/LauncherGamePlugin/Forms/Form.cs +++ b/LauncherGamePlugin/Forms/Form.cs @@ -66,31 +66,31 @@ public static Form CreateDismissibleTextPrompt(string text, IApp app) }); } - public static FormEntry TextInput(string label, string value = "") - => new TextInputElement(label, value); + public static TextInputElement TextInput(string label, string value = "") + => new(label, value); public static TextBoxElement TextBox(string text, FormAlignment alignment = FormAlignment.Default, string fontWeight = "") => new(text, fontWeight, alignment: alignment); - public static FormEntry ClickableLinkBox(string text, Action
action, + public static ClickableLinkBoxElement ClickableLinkBox(string text, Action action, FormAlignment alignment = FormAlignment.Default, string fontWeight = "") - => new ClickableLinkBoxElement(text, alignment: alignment, linkClick: x => action(x.ContainingForm), value: fontWeight); + => new(text, alignment: alignment, linkClick: x => action(x.ContainingForm), value: fontWeight); - public static FormEntry Toggle(string label, bool value, FormAlignment alignment = FormAlignment.Default, bool enabled = true) - => new ToggleElement(label, value ? "1" : "0", alignment: alignment, enabled: enabled); + public static ToggleElement Toggle(string label, bool value, FormAlignment alignment = FormAlignment.Default, bool enabled = true) + => new(label, value ? "1" : "0", alignment: alignment, enabled: enabled); - public static FormEntry FilePicker(string label, string value = "") - => new FilePickerElement(label, value); + public static FilePickerElement FilePicker(string label, string value = "") + => new(label, value); - public static FormEntry FolderPicker(string label, string value = "") - => new FolderPickerElement(label, value); + public static FolderPickerElement FolderPicker(string label, string value = "") + => new(label, value); - public static FormEntry Dropdown(string label, List dropdownOptions, string value = "") - => new DropdownElement(label, value, dropdownOptions: dropdownOptions); + public static DropdownElement Dropdown(string label, List dropdownOptions, string value = "") + => new(label, value, dropdownOptions: dropdownOptions); - public static FormEntry ButtonList(List buttons, FormAlignment alignment = FormAlignment.Default) - => new ButtonListElement(buttons: buttons, alignment: alignment); + public static ButtonListElement ButtonList(List buttons, FormAlignment alignment = FormAlignment.Default) + => new(buttons: buttons, alignment: alignment); public static FormEntry Button(string label, Action action, FormAlignment alignment = FormAlignment.Default) => ButtonList(new() {new(label, action)}, alignment); @@ -101,14 +101,14 @@ public static FormEntry Button(string label1, Action action1, string label public static FormEntry Button(string label1, Action action1, string label2, Action action2, string label3, Action action3, FormAlignment alignment = FormAlignment.Default) => ButtonList(new() {new(label1, action1), new(label2, action2), new(label3, action3)}, alignment); - public static FormEntry Image(string label, Func> image, Action? onClick = null, FormAlignment alignment = FormAlignment.Default) - => new ImageElement(label, getImage: image, alignment: alignment, click: x => onClick?.Invoke(x.ContainingForm)); + public static ImageElement Image(string label, Func> image, Action? onClick = null, FormAlignment alignment = FormAlignment.Default) + => new(label, getImage: image, alignment: alignment, click: x => onClick?.Invoke(x.ContainingForm)); - public static FormEntry Horizontal(List entries, int spacing = 5, FormAlignment alignment = FormAlignment.Default) - => new HorizontalPanelElement(entries: entries, value: spacing.ToString(), alignment: alignment); + public static HorizontalPanelElement Horizontal(List entries, int spacing = 5, FormAlignment alignment = FormAlignment.Default) + => new(entries: entries, value: spacing.ToString(), alignment: alignment); - public static FormEntry Separator(int height = 1) - => new SeperatorElement(value: height.ToString()); + public static SeperatorElement Separator(int height = 1) + => new(value: height.ToString()); } public static class FormExtensions diff --git a/RemoteDownloaderPlugin/Game/OnlineGame.cs b/RemoteDownloaderPlugin/Game/OnlineGame.cs index 16e7b31..ec438aa 100644 --- a/RemoteDownloaderPlugin/Game/OnlineGame.cs +++ b/RemoteDownloaderPlugin/Game/OnlineGame.cs @@ -1,5 +1,7 @@ using LauncherGamePlugin; using LauncherGamePlugin.Enums; +using LauncherGamePlugin.Extensions; +using LauncherGamePlugin.Forms; using LauncherGamePlugin.Interfaces; namespace RemoteDownloaderPlugin.Game; @@ -47,6 +49,29 @@ public OnlineGame(IEntry entry, Plugin plugin) public async Task Download() { + if (Entry is EmuEntry emuEntry) + { + var baseFiles = emuEntry.Files.Where(x => x.Type == "base").ToList(); + if (baseFiles.Count >= 2) + { + var form = new Form(new()); + + form.FormEntries.Add(Form.TextBox("Pick a base edition of the game:", FormAlignment.Center, "Bold")); + + baseFiles.ForEach(x => form.FormEntries.Add(Form.ClickableLinkBox($"{x.Name}: {x.DownloadSize.ReadableSize()}", _ => + { + emuEntry.Files.RemoveAll(y => y.Type == "base" && y.Name != x.Name); + Download(); + _plugin.App.HideForm(); + }, FormAlignment.Left))); + + form.FormEntries.Add(Form.Button("Back", _ => _plugin.App.HideForm())); + + _plugin.App.ShowForm(form); + return; + } + } + _download = new GameDownload(Entry); OnUpdate?.Invoke(); diff --git a/SteamGridDbMiddleware/Gui/OnImageEdit.cs b/SteamGridDbMiddleware/Gui/OnImageEdit.cs index 80320a6..3e389a4 100644 --- a/SteamGridDbMiddleware/Gui/OnImageEdit.cs +++ b/SteamGridDbMiddleware/Gui/OnImageEdit.cs @@ -66,7 +66,7 @@ public async void ShowGui() foreach (var imageGroup in imageGroups) { List i = imageGroup - .Select(x => Form.Image($"By {x.Author}", () => Storage.ImageDownload(x.Url), _ => Set(x))) + .Select(x => (FormEntry) Form.Image($"By {x.Author}", () => Storage.ImageDownload(x.Url), _ => Set(x))) .ToList(); if (i.Count == 1)