diff --git a/CreamInstaller/Components/CustomTreeView.cs b/CreamInstaller/Components/CustomTreeView.cs index bf2de45..d729102 100644 --- a/CreamInstaller/Components/CustomTreeView.cs +++ b/CreamInstaller/Components/CustomTreeView.cs @@ -13,7 +13,7 @@ namespace CreamInstaller.Components; internal sealed class CustomTreeView : TreeView { - private const string KoaloaderToggleString = "Koaloader"; + private const string ProxyToggleString = "Proxy"; private static readonly Color C1 = ColorTranslator.FromHtml("#FFFF99"); private static readonly Color C2 = ColorTranslator.FromHtml("#696900"); @@ -121,7 +121,7 @@ internal sealed class CustomTreeView : TreeView if (form is SelectForm) { Selection selection = Selection.FromId(platform, id); - if (selection is not null) + if (selection is not null && selection.CanUseProxy) { if (bounds == node.Bounds) { @@ -130,7 +130,7 @@ internal sealed class CustomTreeView : TreeView graphics.FillRectangle(brush, bounds); } - CheckBoxState checkBoxState = selection.Koaloader + CheckBoxState checkBoxState = selection.UseProxy ? Enabled ? CheckBoxState.CheckedPressed : CheckBoxState.CheckedDisabled : Enabled ? CheckBoxState.UncheckedPressed @@ -142,7 +142,7 @@ internal sealed class CustomTreeView : TreeView graphics.FillRectangle(backBrush, bounds); point = new(bounds.Left, bounds.Top + bounds.Height / 2 - size.Height / 2 - 1); CheckBoxRenderer.DrawCheckBox(graphics, point, checkBoxState); - text = KoaloaderToggleString; + text = ProxyToggleString; size = TextRenderer.MeasureText(graphics, text, font); int left = 1; bounds = bounds with { X = bounds.X + bounds.Width, Width = size.Width + left }; @@ -152,12 +152,12 @@ internal sealed class CustomTreeView : TreeView point = new(bounds.Location.X - 1 + left, bounds.Location.Y + 1); TextRenderer.DrawText(graphics, text, font, point, Enabled ? C7 : C8, TextFormatFlags.Default); this.checkBoxBounds[selection] = RectangleToClient(checkBoxBounds); - if (selection.Koaloader) + if (selection.UseProxy) { comboBoxFont ??= new(font.FontFamily, 6, font.Style, font.Unit, font.GdiCharSet, font.GdiVerticalFont); ComboBoxState comboBoxState = Enabled ? ComboBoxState.Normal : ComboBoxState.Disabled; - text = (selection.KoaloaderProxy ?? Selection.DefaultKoaloaderProxy) + ".dll"; + text = (selection.Proxy ?? Selection.DefaultProxy) + ".dll"; size = TextRenderer.MeasureText(graphics, text, comboBoxFont) + new Size(6, 0); const int padding = 2; bounds = new(bounds.X + bounds.Width, bounds.Y + padding / 2, size.Width, bounds.Height - padding); @@ -233,8 +233,8 @@ internal sealed class CustomTreeView : TreeView if (canUse) _ = comboBoxDropDown.Items.Add(new ToolStripButton(proxy + ".dll", null, (_, _) => { - pair.Key.KoaloaderProxy = proxy == Selection.DefaultKoaloaderProxy ? null : proxy; - selectForm.OnKoaloaderChanged(); + pair.Key.Proxy = proxy == Selection.DefaultProxy ? null : proxy; + selectForm.OnProxyChanged(); }) { Font = comboBoxFont }); } @@ -247,8 +247,8 @@ internal sealed class CustomTreeView : TreeView _ = checkBoxBounds.Remove(pair.Key); else if (pair.Value.Contains(clickPoint)) { - pair.Key.Koaloader = !pair.Key.Koaloader; - selectForm?.OnKoaloaderChanged(); + pair.Key.UseProxy = !pair.Key.UseProxy; + selectForm?.OnProxyChanged(); break; } } diff --git a/CreamInstaller/CreamInstaller.csproj b/CreamInstaller/CreamInstaller.csproj index dc63935..6275e9f 100644 --- a/CreamInstaller/CreamInstaller.csproj +++ b/CreamInstaller/CreamInstaller.csproj @@ -4,7 +4,7 @@ net8.0-windows10.0.22621.0 True Resources\program.ico - 4.10.2 + 5.0.0.0 2021, pointfeev (https://github.com/pointfeev) CreamInstaller Automatic DLC Unlocker Installer & Configuration Generator @@ -22,7 +22,7 @@ False latest True - 8.0 + 10.0.17763.0 x64 @@ -38,120 +38,124 @@ False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + diff --git a/CreamInstaller/Forms/InstallForm.cs b/CreamInstaller/Forms/InstallForm.cs index af3ab3c..00c1fd7 100644 --- a/CreamInstaller/Forms/InstallForm.cs +++ b/CreamInstaller/Forms/InstallForm.cs @@ -64,6 +64,8 @@ internal sealed partial class InstallForm : CustomForm _ = await Repair(this, selection); } + bool useKoaloader = selection.UseProxy && (Program.UseSmokeAPI || selection.Platform is not Platform.Steam); + UpdateUser( $"{(uninstalling ? "Uninstalling" : "Installing")}" + $" {(uninstalling ? "from" : "for")} " + selection.Name @@ -93,7 +95,7 @@ internal sealed partial class InstallForm : CustomForm } } - if (uninstalling || !selection.Koaloader) + if (uninstalling || !useKoaloader) foreach ((string directory, BinaryType _) in selection.ExecutableDirectories) { if (Program.Canceled) @@ -111,7 +113,7 @@ internal sealed partial class InstallForm : CustomForm } } - bool uninstallProxy = uninstalling || selection.Koaloader; + bool uninstallingForKoaloader = uninstalling || useKoaloader; int count = selection.DllDirectories.Count, cur = 0; foreach (string directory in selection.DllDirectories) { @@ -119,23 +121,44 @@ internal sealed partial class InstallForm : CustomForm return; if (selection.Platform is Platform.Steam or Platform.Paradox) { - directory.GetSmokeApiComponents(out string api32, out string api32_o, out string api64, - out string api64_o, out string old_config, - out string config, out string old_log, out string log, out string cache); - if (uninstallProxy - ? api32_o.FileExists() || api64_o.FileExists() || old_config.FileExists() || - config.FileExists() || old_log.FileExists() || log.FileExists() - || cache.FileExists() - : api32.FileExists() || api64.FileExists()) + if (Program.UseSmokeAPI) { - UpdateUser( - $"{(uninstallProxy ? "Uninstalling" : "Installing")} SmokeAPI" + - $" {(uninstallProxy ? "from" : "for")} " + selection.Name - + $" in directory \"{directory}\" . . . ", LogTextBox.Operation); - if (uninstallProxy) - await SmokeAPI.Uninstall(directory, this); - else - await SmokeAPI.Install(directory, selection, this); + directory.GetSmokeApiComponents(out string api32, out string api32_o, out string api64, + out string api64_o, out string old_config, + out string config, out string old_log, out string log, out string cache); + if (uninstallingForKoaloader + ? api32_o.FileExists() || api64_o.FileExists() || old_config.FileExists() || + config.FileExists() || old_log.FileExists() || log.FileExists() + || cache.FileExists() + : api32.FileExists() || api64.FileExists()) + { + UpdateUser( + $"{(uninstallingForKoaloader ? "Uninstalling" : "Installing")} SmokeAPI" + + $" {(uninstallingForKoaloader ? "from" : "for")} " + selection.Name + + $" in directory \"{directory}\" . . . ", LogTextBox.Operation); + if (uninstallingForKoaloader) + await SmokeAPI.Uninstall(directory, this); + else + await SmokeAPI.Install(directory, selection, this); + } + } + else + { + directory.GetCreamApiComponents(out string api32, out string api32_o, out string api64, + out string api64_o, out string config); + if (uninstalling + ? api32_o.FileExists() || api64_o.FileExists() || config.FileExists() + : api32.FileExists() || api64.FileExists()) + { + UpdateUser( + $"{(uninstalling ? "Uninstalling" : "Installing")} CreamAPI" + + $" {(uninstalling ? "from" : "for")} " + selection.Name + + $" in directory \"{directory}\" . . . ", LogTextBox.Operation); + if (uninstalling) + await CreamAPI.Uninstall(directory, this); + else + await CreamAPI.Install(directory, selection, this); + } } } @@ -143,15 +166,15 @@ internal sealed partial class InstallForm : CustomForm { directory.GetScreamApiComponents(out string api32, out string api32_o, out string api64, out string api64_o, out string config, out string log); - if (uninstallProxy + if (uninstallingForKoaloader ? api32_o.FileExists() || api64_o.FileExists() || config.FileExists() || log.FileExists() : api32.FileExists() || api64.FileExists()) { UpdateUser( - $"{(uninstallProxy ? "Uninstalling" : "Installing")} ScreamAPI" + - $" {(uninstallProxy ? "from" : "for")} " + selection.Name + $"{(uninstallingForKoaloader ? "Uninstalling" : "Installing")} ScreamAPI" + + $" {(uninstallingForKoaloader ? "from" : "for")} " + selection.Name + $" in directory \"{directory}\" . . . ", LogTextBox.Operation); - if (uninstallProxy) + if (uninstallingForKoaloader) await ScreamAPI.Uninstall(directory, this); else await ScreamAPI.Install(directory, selection, this); @@ -162,15 +185,15 @@ internal sealed partial class InstallForm : CustomForm { directory.GetUplayR1Components(out string api32, out string api32_o, out string api64, out string api64_o, out string config, out string log); - if (uninstallProxy + if (uninstallingForKoaloader ? api32_o.FileExists() || api64_o.FileExists() || config.FileExists() || log.FileExists() : api32.FileExists() || api64.FileExists()) { UpdateUser( - $"{(uninstallProxy ? "Uninstalling" : "Installing")} Uplay R1 Unlocker" + - $" {(uninstallProxy ? "from" : "for")} " + selection.Name + $"{(uninstallingForKoaloader ? "Uninstalling" : "Installing")} Uplay R1 Unlocker" + + $" {(uninstallingForKoaloader ? "from" : "for")} " + selection.Name + $" in directory \"{directory}\" . . . ", LogTextBox.Operation); - if (uninstallProxy) + if (uninstallingForKoaloader) await UplayR1.Uninstall(directory, this); else await UplayR1.Install(directory, selection, this); @@ -178,15 +201,15 @@ internal sealed partial class InstallForm : CustomForm directory.GetUplayR2Components(out string old_api32, out string old_api64, out api32, out api32_o, out api64, out api64_o, out config, out log); - if (uninstallProxy + if (uninstallingForKoaloader ? api32_o.FileExists() || api64_o.FileExists() || config.FileExists() || log.FileExists() : old_api32.FileExists() || old_api64.FileExists() || api32.FileExists() || api64.FileExists()) { UpdateUser( - $"{(uninstallProxy ? "Uninstalling" : "Installing")} Uplay R2 Unlocker" + - $" {(uninstallProxy ? "from" : "for")} " + selection.Name + $"{(uninstallingForKoaloader ? "Uninstalling" : "Installing")} Uplay R2 Unlocker" + + $" {(uninstallingForKoaloader ? "from" : "for")} " + selection.Name + $" in directory \"{directory}\" . . . ", LogTextBox.Operation); - if (uninstallProxy) + if (uninstallingForKoaloader) await UplayR2.Uninstall(directory, this); else await UplayR2.Install(directory, selection, this); @@ -196,7 +219,7 @@ internal sealed partial class InstallForm : CustomForm UpdateProgress(++cur / count * 100); } - if (selection.Koaloader && !uninstalling) + if (useKoaloader && !uninstalling) foreach ((string directory, BinaryType binaryType) in selection.ExecutableDirectories) { if (Program.Canceled) diff --git a/CreamInstaller/Forms/SelectForm.Designer.cs b/CreamInstaller/Forms/SelectForm.Designer.cs index 3fc7c08..556f2d6 100644 --- a/CreamInstaller/Forms/SelectForm.Designer.cs +++ b/CreamInstaller/Forms/SelectForm.Designer.cs @@ -22,8 +22,8 @@ namespace CreamInstaller.Forms installButton = new Button(); cancelButton = new Button(); programsGroupBox = new GroupBox(); - koaloaderFlowPanel = new FlowLayoutPanel(); - koaloaderAllCheckBox = new CheckBox(); + proxyFlowPanel = new FlowLayoutPanel(); + proxyAllCheckBox = new CheckBox(); noneFoundLabel = new Label(); blockedGamesFlowPanel = new FlowLayoutPanel(); blockedGamesCheckBox = new CheckBox(); @@ -39,13 +39,13 @@ namespace CreamInstaller.Forms sortCheckBox = new CheckBox(); saveButton = new Button(); loadButton = new Button(); - resetKoaloaderButton = new Button(); + resetProxyButton = new Button(); resetButton = new Button(); - saveKoaloaderButton = new Button(); - loadKoaloaderButton = new Button(); + saveProxyButton = new Button(); + loadProxyButton = new Button(); selectionTreeView = new CustomTreeView(); programsGroupBox.SuspendLayout(); - koaloaderFlowPanel.SuspendLayout(); + proxyFlowPanel.SuspendLayout(); blockedGamesFlowPanel.SuspendLayout(); allCheckBoxLayoutPanel.SuspendLayout(); SuspendLayout(); @@ -82,7 +82,7 @@ namespace CreamInstaller.Forms // programsGroupBox // programsGroupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - programsGroupBox.Controls.Add(koaloaderFlowPanel); + programsGroupBox.Controls.Add(proxyFlowPanel); programsGroupBox.Controls.Add(noneFoundLabel); programsGroupBox.Controls.Add(blockedGamesFlowPanel); programsGroupBox.Controls.Add(allCheckBoxLayoutPanel); @@ -94,33 +94,33 @@ namespace CreamInstaller.Forms programsGroupBox.TabStop = false; programsGroupBox.Text = "Programs / Games"; // - // koaloaderFlowPanel + // proxyFlowPanel // - koaloaderFlowPanel.Anchor = AnchorStyles.Top | AnchorStyles.Right; - koaloaderFlowPanel.AutoSize = true; - koaloaderFlowPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink; - koaloaderFlowPanel.Controls.Add(koaloaderAllCheckBox); - koaloaderFlowPanel.Location = new System.Drawing.Point(422, -1); - koaloaderFlowPanel.Margin = new Padding(0); - koaloaderFlowPanel.Name = "koaloaderFlowPanel"; - koaloaderFlowPanel.Size = new System.Drawing.Size(81, 19); - koaloaderFlowPanel.TabIndex = 10005; - koaloaderFlowPanel.WrapContents = false; + proxyFlowPanel.Anchor = AnchorStyles.Top | AnchorStyles.Right; + proxyFlowPanel.AutoSize = true; + proxyFlowPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink; + proxyFlowPanel.Controls.Add(proxyAllCheckBox); + proxyFlowPanel.Location = new System.Drawing.Point(422, -1); + proxyFlowPanel.Margin = new Padding(0); + proxyFlowPanel.Name = "proxyFlowPanel"; + proxyFlowPanel.Size = new System.Drawing.Size(81, 19); + proxyFlowPanel.TabIndex = 10005; + proxyFlowPanel.WrapContents = false; // - // koaloaderAllCheckBox + // proxyAllCheckBox // - koaloaderAllCheckBox.Anchor = AnchorStyles.Top | AnchorStyles.Right; - koaloaderAllCheckBox.AutoSize = true; - koaloaderAllCheckBox.Checked = true; - koaloaderAllCheckBox.CheckState = CheckState.Checked; - koaloaderAllCheckBox.Enabled = false; - koaloaderAllCheckBox.Location = new System.Drawing.Point(2, 0); - koaloaderAllCheckBox.Margin = new Padding(2, 0, 0, 0); - koaloaderAllCheckBox.Name = "koaloaderAllCheckBox"; - koaloaderAllCheckBox.Size = new System.Drawing.Size(79, 19); - koaloaderAllCheckBox.TabIndex = 4; - koaloaderAllCheckBox.Text = "Koaloader"; - koaloaderAllCheckBox.CheckedChanged += OnKoaloaderAllCheckBoxChanged; + proxyAllCheckBox.Anchor = AnchorStyles.Top | AnchorStyles.Right; + proxyAllCheckBox.AutoSize = true; + proxyAllCheckBox.Checked = false; + proxyAllCheckBox.CheckState = CheckState.Checked; + proxyAllCheckBox.Enabled = false; + proxyAllCheckBox.Location = new System.Drawing.Point(2, 0); + proxyAllCheckBox.Margin = new Padding(2, 0, 0, 0); + proxyAllCheckBox.Name = "proxyAllCheckBox"; + proxyAllCheckBox.Size = new System.Drawing.Size(79, 19); + proxyAllCheckBox.TabIndex = 4; + proxyAllCheckBox.Text = "Proxy All"; + proxyAllCheckBox.CheckedChanged += OnProxyAllCheckBoxChanged; // // noneFoundLabel // @@ -323,19 +323,19 @@ namespace CreamInstaller.Forms loadButton.UseVisualStyleBackColor = true; loadButton.Click += OnLoadDlc; // - // resetKoaloaderButton + // resetProxyButton // - resetKoaloaderButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - resetKoaloaderButton.AutoSize = true; - resetKoaloaderButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; - resetKoaloaderButton.Enabled = false; - resetKoaloaderButton.Location = new System.Drawing.Point(12, 295); - resetKoaloaderButton.Name = "resetKoaloaderButton"; - resetKoaloaderButton.Size = new System.Drawing.Size(101, 25); - resetKoaloaderButton.TabIndex = 10010; - resetKoaloaderButton.Text = "Reset Koaloader"; - resetKoaloaderButton.UseVisualStyleBackColor = true; - resetKoaloaderButton.Click += OnResetKoaloader; + resetProxyButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + resetProxyButton.AutoSize = true; + resetProxyButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + resetProxyButton.Enabled = false; + resetProxyButton.Location = new System.Drawing.Point(12, 295); + resetProxyButton.Name = "resetProxyButton"; + resetProxyButton.Size = new System.Drawing.Size(101, 25); + resetProxyButton.TabIndex = 10010; + resetProxyButton.Text = "Reset Proxy"; + resetProxyButton.UseVisualStyleBackColor = true; + resetProxyButton.Click += OnResetProxy; // // resetButton // @@ -351,33 +351,33 @@ namespace CreamInstaller.Forms resetButton.UseVisualStyleBackColor = true; resetButton.Click += OnResetDlc; // - // saveKoaloaderButton + // saveProxyButton // - saveKoaloaderButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - saveKoaloaderButton.AutoSize = true; - saveKoaloaderButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; - saveKoaloaderButton.Enabled = false; - saveKoaloaderButton.Location = new System.Drawing.Point(119, 295); - saveKoaloaderButton.Name = "saveKoaloaderButton"; - saveKoaloaderButton.Size = new System.Drawing.Size(97, 25); - saveKoaloaderButton.TabIndex = 10009; - saveKoaloaderButton.Text = "Save Koaloader"; - saveKoaloaderButton.UseVisualStyleBackColor = true; - saveKoaloaderButton.Click += OnSaveKoaloader; + saveProxyButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + saveProxyButton.AutoSize = true; + saveProxyButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + saveProxyButton.Enabled = false; + saveProxyButton.Location = new System.Drawing.Point(119, 295); + saveProxyButton.Name = "saveProxyButton"; + saveProxyButton.Size = new System.Drawing.Size(97, 25); + saveProxyButton.TabIndex = 10009; + saveProxyButton.Text = "Save Proxy"; + saveProxyButton.UseVisualStyleBackColor = true; + saveProxyButton.Click += OnSaveProxy; // - // loadKoaloaderButton + // loadProxyButton // - loadKoaloaderButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - loadKoaloaderButton.AutoSize = true; - loadKoaloaderButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; - loadKoaloaderButton.Enabled = false; - loadKoaloaderButton.Location = new System.Drawing.Point(222, 295); - loadKoaloaderButton.Name = "loadKoaloaderButton"; - loadKoaloaderButton.Size = new System.Drawing.Size(99, 25); - loadKoaloaderButton.TabIndex = 10008; - loadKoaloaderButton.Text = "Load Koaloader"; - loadKoaloaderButton.UseVisualStyleBackColor = true; - loadKoaloaderButton.Click += OnLoadKoaloader; + loadProxyButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + loadProxyButton.AutoSize = true; + loadProxyButton.AutoSizeMode = AutoSizeMode.GrowAndShrink; + loadProxyButton.Enabled = false; + loadProxyButton.Location = new System.Drawing.Point(222, 295); + loadProxyButton.Name = "loadProxyButton"; + loadProxyButton.Size = new System.Drawing.Size(99, 25); + loadProxyButton.TabIndex = 10008; + loadProxyButton.Text = "Load Proxy"; + loadProxyButton.UseVisualStyleBackColor = true; + loadProxyButton.Click += OnLoadProxy; // // SelectForm // @@ -386,10 +386,10 @@ namespace CreamInstaller.Forms AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; ClientSize = new System.Drawing.Size(584, 361); - Controls.Add(loadKoaloaderButton); - Controls.Add(saveKoaloaderButton); + Controls.Add(loadProxyButton); + Controls.Add(saveProxyButton); Controls.Add(resetButton); - Controls.Add(resetKoaloaderButton); + Controls.Add(resetProxyButton); Controls.Add(loadButton); Controls.Add(saveButton); Controls.Add(sortCheckBox); @@ -412,8 +412,8 @@ namespace CreamInstaller.Forms Load += OnLoad; programsGroupBox.ResumeLayout(false); programsGroupBox.PerformLayout(); - koaloaderFlowPanel.ResumeLayout(false); - koaloaderFlowPanel.PerformLayout(); + proxyFlowPanel.ResumeLayout(false); + proxyFlowPanel.PerformLayout(); blockedGamesFlowPanel.ResumeLayout(false); blockedGamesFlowPanel.PerformLayout(); allCheckBoxLayoutPanel.ResumeLayout(false); @@ -441,14 +441,14 @@ namespace CreamInstaller.Forms private Label progressLabelGames; private Label progressLabelDLCs; private CheckBox sortCheckBox; - private FlowLayoutPanel koaloaderFlowPanel; - internal CheckBox koaloaderAllCheckBox; + private FlowLayoutPanel proxyFlowPanel; + internal CheckBox proxyAllCheckBox; private Button saveButton; private Button loadButton; - private Button resetKoaloaderButton; + private Button resetProxyButton; private Button resetButton; - private Button saveKoaloaderButton; - private Button loadKoaloaderButton; + private Button saveProxyButton; + private Button loadProxyButton; } } diff --git a/CreamInstaller/Forms/SelectForm.cs b/CreamInstaller/Forms/SelectForm.cs index 4b12ded..a0a03c6 100644 --- a/CreamInstaller/Forms/SelectForm.cs +++ b/CreamInstaller/Forms/SelectForm.cs @@ -23,6 +23,9 @@ namespace CreamInstaller.Forms; internal sealed partial class SelectForm : CustomForm { + // TODO: fix the form display reset save load buttons for proxy + // consolidate all reset save load functionality into only 3 buttons instead of 6? + private const string HelpButtonListPrefix = "\n • "; private static SelectForm current; @@ -562,16 +565,16 @@ internal sealed partial class SelectForm : CustomForm scanButton.Enabled = false; noneFoundLabel.Visible = false; allCheckBox.Enabled = false; - koaloaderAllCheckBox.Enabled = false; + proxyAllCheckBox.Enabled = false; installButton.Enabled = false; uninstallButton.Enabled = installButton.Enabled; selectionTreeView.Enabled = false; saveButton.Enabled = false; loadButton.Enabled = false; resetButton.Enabled = false; - saveKoaloaderButton.Enabled = false; - loadKoaloaderButton.Enabled = false; - resetKoaloaderButton.Enabled = false; + saveProxyButton.Enabled = false; + loadProxyButton.Enabled = false; + resetProxyButton.Enabled = false; progressLabel.Text = "Waiting for user to select which programs/games to scan . . ."; ShowProgressBar(); await ProgramData.Setup(this); @@ -693,20 +696,20 @@ internal sealed partial class SelectForm : CustomForm } OnLoadDlc(null, null); - OnLoadKoaloader(null, null); + OnLoadProxy(null, null); HideProgressBar(); selectionTreeView.Enabled = !Selection.All.IsEmpty; allCheckBox.Enabled = selectionTreeView.Enabled; - koaloaderAllCheckBox.Enabled = selectionTreeView.Enabled; + proxyAllCheckBox.Enabled = selectionTreeView.Enabled; noneFoundLabel.Visible = !selectionTreeView.Enabled; installButton.Enabled = Selection.AllEnabled.Any(); uninstallButton.Enabled = installButton.Enabled; saveButton.Enabled = CanSaveDlc(); loadButton.Enabled = CanLoadDlc(); resetButton.Enabled = CanResetDlc(); - saveKoaloaderButton.Enabled = CanSaveKoaloader(); - loadKoaloaderButton.Enabled = CanLoadKoaloader(); - resetKoaloaderButton.Enabled = CanResetKoaloader(); + saveProxyButton.Enabled = CanSaveProxy(); + loadProxyButton.Enabled = CanLoadProxy(); + resetProxyButton.Enabled = CanResetProxy(); cancelButton.Enabled = false; scanButton.Enabled = true; blockedGamesCheckBox.Enabled = true; @@ -1043,16 +1046,16 @@ internal sealed partial class SelectForm : CustomForm allCheckBox.CheckedChanged += OnAllCheckBoxChanged; } - private void OnKoaloaderAllCheckBoxChanged(object sender, EventArgs e) + private void OnProxyAllCheckBoxChanged(object sender, EventArgs e) { - bool shouldEnable = Selection.All.Keys.Any(selection => !selection.Koaloader); + bool shouldEnable = Selection.All.Keys.Any(selection => !selection.UseProxy); foreach (Selection selection in Selection.All.Keys) - selection.Koaloader = shouldEnable; + selection.UseProxy = shouldEnable; selectionTreeView.Invalidate(); - koaloaderAllCheckBox.CheckedChanged -= OnKoaloaderAllCheckBoxChanged; - koaloaderAllCheckBox.Checked = shouldEnable; - koaloaderAllCheckBox.CheckedChanged += OnKoaloaderAllCheckBoxChanged; - resetKoaloaderButton.Enabled = CanResetKoaloader(); + proxyAllCheckBox.CheckedChanged -= OnProxyAllCheckBoxChanged; + proxyAllCheckBox.Checked = shouldEnable; + proxyAllCheckBox.CheckedChanged += OnProxyAllCheckBoxChanged; + resetProxyButton.Enabled = CanResetProxy(); } private bool AreSelectionsDefault() @@ -1107,36 +1110,36 @@ internal sealed partial class SelectForm : CustomForm resetButton.Enabled = CanResetDlc(); } - private static bool AreKoaloaderSelectionsDefault() => - Selection.All.Keys.All(selection => selection.Koaloader && selection.KoaloaderProxy is null); + private static bool AreProxySelectionsDefault() => + Selection.All.Keys.All(selection => !selection.UseProxy && selection.Proxy is null); - private static bool CanSaveKoaloader() => - ProgramData.ReadKoaloaderChoices().Any() || !AreKoaloaderSelectionsDefault(); + private static bool CanSaveProxy() => + ProgramData.ReadProxyChoices().Any() || !AreProxySelectionsDefault(); - private void OnSaveKoaloader(object sender, EventArgs e) + private void OnSaveProxy(object sender, EventArgs e) { List<(Platform platform, string id, string proxy, bool enabled)> choices = - ProgramData.ReadKoaloaderChoices().ToList(); + ProgramData.ReadProxyChoices().ToList(); foreach (Selection selection in Selection.All.Keys) { _ = choices.RemoveAll(c => c.platform == selection.Platform && c.id == selection.Id); - if (selection.KoaloaderProxy is not null and not Selection.DefaultKoaloaderProxy || !selection.Koaloader) + if (selection.Proxy is not null and not Selection.DefaultProxy || selection.UseProxy) choices.Add((selection.Platform, selection.Id, - selection.KoaloaderProxy == Selection.DefaultKoaloaderProxy ? null : selection.KoaloaderProxy, - selection.Koaloader)); + selection.Proxy == Selection.DefaultProxy ? null : selection.Proxy, + selection.UseProxy)); } - ProgramData.WriteKoaloaderProxyChoices(choices); - saveKoaloaderButton.Enabled = CanSaveKoaloader(); - loadKoaloaderButton.Enabled = CanLoadKoaloader(); + ProgramData.WriteProxyChoices(choices); + saveProxyButton.Enabled = CanSaveProxy(); + loadProxyButton.Enabled = CanLoadProxy(); } - private static bool CanLoadKoaloader() => ProgramData.ReadKoaloaderChoices().Any(); + private static bool CanLoadProxy() => ProgramData.ReadProxyChoices().Any(); - private void OnLoadKoaloader(object sender, EventArgs e) + private void OnLoadProxy(object sender, EventArgs e) { List<(Platform platform, string id, string proxy, bool enabled)> choices = - ProgramData.ReadKoaloaderChoices().ToList(); + ProgramData.ReadProxyChoices().ToList(); foreach (Selection selection in Selection.All.Keys) if (choices.Any(c => c.platform == selection.Platform && c.id == selection.Id)) { @@ -1148,46 +1151,46 @@ internal sealed partial class SelectForm : CustomForm proxy.GetProxyInfoFromIdentifier(out currentProxy, out _); if (proxy != currentProxy && choices.Remove(choice)) // convert pre-v4.1.0.0 choices choices.Add((platform, id, currentProxy, enabled)); - if (currentProxy is null or Selection.DefaultKoaloaderProxy && enabled) + if (currentProxy is null or Selection.DefaultProxy && !enabled) _ = choices.RemoveAll(c => c.platform == platform && c.id == id); else { - selection.Koaloader = enabled; - selection.KoaloaderProxy = currentProxy == Selection.DefaultKoaloaderProxy ? currentProxy : proxy; + selection.UseProxy = enabled; + selection.Proxy = currentProxy == Selection.DefaultProxy ? currentProxy : proxy; } } else { - selection.Koaloader = true; - selection.KoaloaderProxy = null; + selection.UseProxy = false; + selection.Proxy = null; } - ProgramData.WriteKoaloaderProxyChoices(choices); - loadKoaloaderButton.Enabled = CanLoadKoaloader(); - OnKoaloaderChanged(); + ProgramData.WriteProxyChoices(choices); + loadProxyButton.Enabled = CanLoadProxy(); + OnProxyChanged(); } - private static bool CanResetKoaloader() => !AreKoaloaderSelectionsDefault(); + private static bool CanResetProxy() => !AreProxySelectionsDefault(); - private void OnResetKoaloader(object sender, EventArgs e) + private void OnResetProxy(object sender, EventArgs e) { foreach (Selection selection in Selection.All.Keys) { - selection.Koaloader = true; - selection.KoaloaderProxy = null; + selection.UseProxy = false; + selection.Proxy = null; } - OnKoaloaderChanged(); + OnProxyChanged(); } - internal void OnKoaloaderChanged() + internal void OnProxyChanged() { selectionTreeView.Invalidate(); - saveKoaloaderButton.Enabled = CanSaveKoaloader(); - resetKoaloaderButton.Enabled = CanResetKoaloader(); - koaloaderAllCheckBox.CheckedChanged -= OnKoaloaderAllCheckBoxChanged; - koaloaderAllCheckBox.Checked = Selection.All.Keys.All(selection => selection.Koaloader); - koaloaderAllCheckBox.CheckedChanged += OnKoaloaderAllCheckBoxChanged; + saveProxyButton.Enabled = CanSaveProxy(); + resetProxyButton.Enabled = CanResetProxy(); + proxyAllCheckBox.CheckedChanged -= OnProxyAllCheckBoxChanged; + proxyAllCheckBox.Checked = Selection.All.Keys.All(selection => !selection.CanUseProxy || selection.UseProxy); + proxyAllCheckBox.CheckedChanged += OnProxyAllCheckBoxChanged; } private void OnBlockProtectedGamesCheckBoxChanged(object sender, EventArgs e) diff --git a/CreamInstaller/Platforms/Paradox/ParadoxLauncher.cs b/CreamInstaller/Platforms/Paradox/ParadoxLauncher.cs index a96df40..0f5e502 100644 --- a/CreamInstaller/Platforms/Paradox/ParadoxLauncher.cs +++ b/CreamInstaller/Platforms/Paradox/ParadoxLauncher.cs @@ -75,7 +75,7 @@ internal static class ParadoxLauncher } using DialogForm dialogForm = new(form); - bool smokeInstalled = false; + bool creamInstalled = false; byte[] steamOriginalSdk32 = null; byte[] steamOriginalSdk64 = null; bool screamInstalled = false; @@ -86,24 +86,39 @@ internal static class ParadoxLauncher bool koaloaderInstalled = Koaloader.AutoLoadDLLs .Select(pair => (pair.unlocker, path: directory + @"\" + pair.dll)) .Any(pair => pair.path.FileExists() && pair.path.IsResourceFile()); - directory.GetSmokeApiComponents(out string api32, out string api32_o, out string api64, out string api64_o, - out string old_config, - out string config, out _, out _, out _); - smokeInstalled = smokeInstalled || api32_o.FileExists() || api64_o.FileExists() - || (old_config.FileExists() || config.FileExists()) && !koaloaderInstalled - || api32.FileExists() && api32.IsResourceFile(ResourceIdentifier.Steamworks32) - || api64.FileExists() && api64.IsResourceFile(ResourceIdentifier.Steamworks64); - await SmokeAPI.Uninstall(directory, deleteOthers: false); + string api32; + string api32_o; + string api64; + string api64_o; + if (Program.UseSmokeAPI) + { + directory.GetSmokeApiComponents(out api32, out api32_o, out api64, out api64_o, + out string old_config, out string config, out _, out _, out _); + creamInstalled = creamInstalled || api32_o.FileExists() || api64_o.FileExists() + || (old_config.FileExists() || config.FileExists()) && !koaloaderInstalled + || api32.FileExists() && api32.IsResourceFile(ResourceIdentifier.Steamworks32) + || api64.FileExists() && api64.IsResourceFile(ResourceIdentifier.Steamworks64); + await SmokeAPI.Uninstall(directory, deleteOthers: false); + } + else + { + directory.GetCreamApiComponents(out api32, out api32_o, out api64, out api64_o, out string config); + creamInstalled = creamInstalled || api32_o.FileExists() || api64_o.FileExists() || config.FileExists() + || api32.FileExists() && api32.IsResourceFile(ResourceIdentifier.Steamworks32) + || api64.FileExists() && api64.IsResourceFile(ResourceIdentifier.Steamworks64); + await CreamAPI.Uninstall(directory, deleteOthers: false); + } + if (steamOriginalSdk32 is null && api32.FileExists() && !api32.IsResourceFile(ResourceIdentifier.Steamworks32)) steamOriginalSdk32 = api32.ReadFileBytes(true); if (steamOriginalSdk64 is null && api64.FileExists() && !api64.IsResourceFile(ResourceIdentifier.Steamworks64)) steamOriginalSdk64 = api64.ReadFileBytes(true); - directory.GetScreamApiComponents(out api32, out api32_o, out api64, out api64_o, out config, + directory.GetScreamApiComponents(out api32, out api32_o, out api64, out api64_o, out string screamConfig, out string log); screamInstalled = screamInstalled || api32_o.FileExists() || api64_o.FileExists() - || (config.FileExists() || log.FileExists()) && !koaloaderInstalled + || (screamConfig.FileExists() || log.FileExists()) && !koaloaderInstalled || api32.FileExists() && api32.IsResourceFile(ResourceIdentifier.EpicOnlineServices32) || api64.FileExists() && api64.IsResourceFile(ResourceIdentifier.EpicOnlineServices64); await ScreamAPI.Uninstall(directory, deleteOthers: false); @@ -143,8 +158,16 @@ internal static class ParadoxLauncher neededRepair = true; } - if (smokeInstalled) - await SmokeAPI.Install(directory, selection, generateConfig: false); + if (creamInstalled) + if (Program.UseSmokeAPI) + { + await SmokeAPI.Install(directory, selection, generateConfig: false); + } + else + { + await CreamAPI.Install(directory, selection, generateConfig: false); + } + directory.GetScreamApiComponents(out api32, out _, out api64, out _, out _, out _); if (epicOriginalSdk32 is not null && api32.IsResourceFile(ResourceIdentifier.EpicOnlineServices32)) { diff --git a/CreamInstaller/Program.cs b/CreamInstaller/Program.cs index ecd25b9..fccbff5 100644 --- a/CreamInstaller/Program.cs +++ b/CreamInstaller/Program.cs @@ -35,6 +35,9 @@ internal static class Program internal static readonly string CurrentProcessFilePath = CurrentProcess.MainModule?.FileName; internal static readonly int CurrentProcessId = CurrentProcess.Id; + // this may forever be false, but who knows, maybe acidicoala makes it once again better than CreamAPI some day + internal static bool UseSmokeAPI = false; + internal static bool BlockProtectedGames = true; internal static readonly string[] ProtectedGames = ["PAYDAY 2"]; internal static readonly string[] ProtectedGameDirectories = [@"\EasyAntiCheat", @"\BattlEye"]; diff --git a/CreamInstaller/Resources/CreamAPI.cs b/CreamInstaller/Resources/CreamAPI.cs index 5b226dc..d6cb550 100644 --- a/CreamInstaller/Resources/CreamAPI.cs +++ b/CreamInstaller/Resources/CreamAPI.cs @@ -1,16 +1,21 @@ using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Text; using System.Threading.Tasks; +using CreamInstaller.Components; using CreamInstaller.Forms; +using CreamInstaller.Utility; using static CreamInstaller.Resources.Resources; namespace CreamInstaller.Resources; internal static class CreamAPI { + // TODO: add proxy mode support + internal static void GetCreamApiComponents(this string directory, out string api32, out string api32_o, - out string api64, out string api64_o, - out string config) + out string api64, out string api64_o, out string config) { api32 = directory + @"\steam_api.dll"; api32_o = directory + @"\steam_api_o.dll"; @@ -22,28 +27,171 @@ internal static class CreamAPI internal static void CheckConfig(string directory, Selection selection, InstallForm installForm = null) { - // TODO + directory.GetCreamApiComponents(out _, out _, out _, out _, out string config); + HashSet dlc = selection.DLC.Where(dlc => dlc.Enabled).ToHashSet(); + foreach (SelectionDLC extraDlc in selection.ExtraSelections.SelectMany(extraSelection => + extraSelection.DLC.Where(_dlc => _dlc.Enabled))) + _ = dlc.Add(extraDlc); + if (dlc.Count > 0) + { + /*if (installForm is not null) + installForm.UpdateUser("Generating CreamAPI configuration for " + selection.Name + $" in directory \"{directory}\" . . . ", LogTextBox.Operation);*/ + config.CreateFile(true, installForm)?.Close(); + StreamWriter writer = new(config, true, Encoding.UTF8); + WriteConfig(writer, selection.Name, selection.Id, + new(dlc.ToDictionary(_dlc => _dlc.Id, _dlc => _dlc.Name), PlatformIdComparer.String), installForm); + writer.Flush(); + writer.Close(); + } + else if (config.FileExists()) + { + config.DeleteFile(); + installForm?.UpdateUser($"Deleted unnecessary configuration: {Path.GetFileName(config)}", LogTextBox.Action, + false); + } } - private static void WriteConfig(StreamWriter writer, string appId, - SortedList injectDlc)> extraApps, - SortedList overrideDlc, SortedList injectDlc, - InstallForm installForm = null) + private static void WriteConfig(StreamWriter writer, string name, string appId, + SortedList dlc, InstallForm installForm = null) { - // TODO + writer.WriteLine($"; {name}"); + writer.WriteLine("[steam]"); + writer.WriteLine($"appid = {appId}"); + // TODO: check if we should add these + // writer.WriteLine("unlockall = true"); + // writer.WriteLine("extraprotection = true"); + writer.WriteLine(); + writer.WriteLine("[dlc]"); + // installForm?.UpdateUser($"Added game to cream_api.ini with appid {appId} ({name})", + // LogTextBox.Action, false); + foreach ((string dlcId, string dlcName) in dlc) + { + writer.WriteLine($"{dlcId} = {dlcName}"); + installForm?.UpdateUser($"Added DLC to cream_api.ini with appid {dlcId} ({dlcName})", + LogTextBox.Action, false); + } + } + + private static void DeleteSmokeApiComponents(string directory, InstallForm installForm = null) + { + directory.GetSmokeApiComponents(out _, out _, out _, out _, + out string old_config, out string config, out string old_log, out string log, out string cache); + if (old_config.FileExists()) + { + old_config.DeleteFile(); + installForm?.UpdateUser($"Deleted old SmokeAPI configuration: {Path.GetFileName(old_config)}", + LogTextBox.Action, false); + } + + if (config.FileExists()) + { + config.DeleteFile(); + installForm?.UpdateUser($"Deleted old SmokeAPI configuration: {Path.GetFileName(config)}", + LogTextBox.Action, false); + } + + if (old_log.FileExists()) + { + old_log.DeleteFile(); + installForm?.UpdateUser($"Deleted old SmokeAPI log: {Path.GetFileName(old_log)}", + LogTextBox.Action, false); + } + + if (log.FileExists()) + { + log.DeleteFile(); + installForm?.UpdateUser($"Deleted old SmokeAPI log: {Path.GetFileName(log)}", + LogTextBox.Action, false); + } + + if (cache.FileExists()) + { + cache.DeleteFile(); + installForm?.UpdateUser($"Deleted old SmokeAPI cache: {Path.GetFileName(cache)}", + LogTextBox.Action, false); + } } internal static async Task Uninstall(string directory, InstallForm installForm = null, bool deleteOthers = true) => await Task.Run(() => { - // TODO + DeleteSmokeApiComponents(directory, installForm); + + directory.GetCreamApiComponents(out string api32, out string api32_o, out string api64, out string api64_o, + out string config); + if (api32_o.FileExists()) + { + if (api32.FileExists()) + { + api32.DeleteFile(true); + installForm?.UpdateUser($"Deleted CreamAPI: {Path.GetFileName(api32)}", LogTextBox.Action, false); + } + + api32_o.MoveFile(api32!); + installForm?.UpdateUser( + $"Restored Steamworks: {Path.GetFileName(api32_o)} -> {Path.GetFileName(api32)}", LogTextBox.Action, + false); + } + + if (api64_o.FileExists()) + { + if (api64.FileExists()) + { + api64.DeleteFile(true); + installForm?.UpdateUser($"Deleted CreamAPI: {Path.GetFileName(api64)}", LogTextBox.Action, false); + } + + api64_o.MoveFile(api64!); + installForm?.UpdateUser( + $"Restored Steamworks: {Path.GetFileName(api64_o)} -> {Path.GetFileName(api64)}", LogTextBox.Action, + false); + } + + if (!deleteOthers) + return; + if (config.FileExists()) + { + config.DeleteFile(); + installForm?.UpdateUser($"Deleted configuration: {Path.GetFileName(config)}", LogTextBox.Action, false); + } }); internal static async Task Install(string directory, Selection selection, InstallForm installForm = null, bool generateConfig = true) => await Task.Run(() => { - // TODO + DeleteSmokeApiComponents(directory, installForm); + + directory.GetCreamApiComponents(out string api32, out string api32_o, out string api64, out string api64_o, + out _); + if (api32.FileExists() && !api32_o.FileExists()) + { + api32.MoveFile(api32_o!, true); + installForm?.UpdateUser($"Renamed Steamworks: {Path.GetFileName(api32)} -> {Path.GetFileName(api32_o)}", + LogTextBox.Action, false); + } + + if (api32_o.FileExists()) + { + "CreamAPI.steam_api.dll".WriteManifestResource(api32); + installForm?.UpdateUser($"Wrote CreamAPI: {Path.GetFileName(api32)}", LogTextBox.Action, false); + } + + if (api64.FileExists() && !api64_o.FileExists()) + { + api64.MoveFile(api64_o!, true); + installForm?.UpdateUser($"Renamed Steamworks: {Path.GetFileName(api64)} -> {Path.GetFileName(api64_o)}", + LogTextBox.Action, false); + } + + if (api64_o.FileExists()) + { + "CreamAPI.steam_api64.dll".WriteManifestResource(api64); + installForm?.UpdateUser($"Wrote CreamAPI: {Path.GetFileName(api64)}", LogTextBox.Action, false); + } + + if (generateConfig) + CheckConfig(directory, selection, installForm); }); internal static readonly Dictionary> ResourceMD5s = new() @@ -111,7 +259,11 @@ internal static class CreamAPI "23909B4B1C7A182A6596BD0FDF2BFC7C", // CreamAPI v5.0.0.0 Log build "E6DDF91F4419BE471FBE126A0966648B", // CreamAPI v5.0.0.0 Non-log build "B14007170E59B03D5DF844BD3457295B", // CreamAPI v5.1.0.0 Log build - "24C712826D939F5CEC9049D4B94FCBDB" // CreamAPI v5.1.0.0 Non-log build + "24C712826D939F5CEC9049D4B94FCBDB", // CreamAPI v5.1.0.0 Non-log build + "BAB060E3FB98BFAB60003089EFF3714B", // CreamAPI v5.2.0.0 Log build + "3DD6F774B64BA9F1C12A0CAAD801E4CB", // CreamAPI v5.2.0.0 Non-log build + "7B052096931080FDC7E10FB9BCE25177", // CreamAPI v5.3.0.0 Log build + "10638F7AC4E18DDBFA533EB6F307AE9E" // CreamAPI v5.3.0.0 Non-log build ], [ResourceIdentifier.Steamworks64] = [ @@ -176,7 +328,11 @@ internal static class CreamAPI "15D76C0CBB175AA94936200C5208611E", // CreamAPI v5.0.0.0 Log build "B7CF4BC4020C6419249E32EE126FF647", // CreamAPI v5.0.0.0 Non-log build "BE635705410B93A1075ED32AA97E3B5C", // CreamAPI v5.1.0.0 Log build - "1B14C913C0DF41CC0667993D9B37404D" // CreamAPI v5.1.0.0 Non-log build + "1B14C913C0DF41CC0667993D9B37404D", // CreamAPI v5.1.0.0 Non-log build + "218DC783A7E274494517F3A55FFCA225", // CreamAPI v5.2.0.0 Log build + "562F62C0AA6244397B92246C6C5A778F", // CreamAPI v5.2.0.0 Non-log build + "D719E3852BBA105B97F061630A08CA74", // CreamAPI v5.3.0.0 Log build + "87EA1775F0CEE3649DBB31043EB51FC0" // CreamAPI v5.3.0.0 Non-log build ] }; } \ No newline at end of file diff --git a/CreamInstaller/Resources/CreamAPI/steam_api.dll b/CreamInstaller/Resources/CreamAPI/steam_api.dll new file mode 100644 index 0000000..3cd2236 Binary files /dev/null and b/CreamInstaller/Resources/CreamAPI/steam_api.dll differ diff --git a/CreamInstaller/Resources/CreamAPI/steam_api64.dll b/CreamInstaller/Resources/CreamAPI/steam_api64.dll new file mode 100644 index 0000000..06abf17 Binary files /dev/null and b/CreamInstaller/Resources/CreamAPI/steam_api64.dll differ diff --git a/CreamInstaller/Resources/Koaloader.cs b/CreamInstaller/Resources/Koaloader.cs index b87ca5d..c83f4e6 100644 --- a/CreamInstaller/Resources/Koaloader.cs +++ b/CreamInstaller/Resources/Koaloader.cs @@ -182,7 +182,7 @@ internal static class Koaloader installForm?.UpdateUser($"Deleted configuration: {Path.GetFileName(config)}", LogTextBox.Action, false); } - await SmokeAPI.Uninstall(directory, installForm, deleteConfig); + if (Program.UseSmokeAPI) await SmokeAPI.Uninstall(directory, installForm, deleteConfig); await ScreamAPI.Uninstall(directory, installForm, deleteConfig); await UplayR1.Uninstall(directory, installForm, deleteConfig); await UplayR2.Uninstall(directory, installForm, deleteConfig); @@ -195,7 +195,7 @@ internal static class Koaloader InstallForm installForm = null, bool generateConfig = true) => await Task.Run(() => { - string proxy = selection.KoaloaderProxy ?? Selection.DefaultKoaloaderProxy; + string proxy = selection.Proxy ?? Selection.DefaultProxy; string path = directory + @"\" + proxy + ".dll"; foreach (string _path in directory.GetKoaloaderProxies().Where(p => p != path && p.FileExists() && p.IsResourceFile(ResourceIdentifier.Koaloader))) @@ -230,7 +230,7 @@ internal static class Koaloader break; } - if (selection.Platform is Platform.Steam or Platform.Paradox) + if (Program.UseSmokeAPI && selection.Platform is Platform.Steam or Platform.Paradox) { if (bit32) { diff --git a/CreamInstaller/Resources/SmokeAPI.cs b/CreamInstaller/Resources/SmokeAPI.cs index 82b682b..73bd0fb 100644 --- a/CreamInstaller/Resources/SmokeAPI.cs +++ b/CreamInstaller/Resources/SmokeAPI.cs @@ -174,20 +174,24 @@ internal static class SmokeAPI writer.WriteLine("}"); } + private static void DeleteCreamApiComponents(string directory, InstallForm installForm = null) + { + directory.GetCreamApiComponents(out _, out _, out _, out _, out string oldConfig); + if (oldConfig.FileExists()) + { + oldConfig.DeleteFile(); + installForm?.UpdateUser($"Deleted old CreamAPI configuration: {Path.GetFileName(oldConfig)}", + LogTextBox.Action, false); + } + } + internal static async Task Uninstall(string directory, InstallForm installForm = null, bool deleteOthers = true) => await Task.Run(() => { - directory.GetCreamApiComponents(out _, out _, out _, out _, out string oldConfig); - if (oldConfig.FileExists()) - { - oldConfig.DeleteFile(); - installForm?.UpdateUser($"Deleted old CreamAPI configuration: {Path.GetFileName(oldConfig)}", - LogTextBox.Action, false); - } + DeleteCreamApiComponents(directory, installForm); directory.GetSmokeApiComponents(out string api32, out string api32_o, out string api64, out string api64_o, - out string old_config, - out string config, out string old_log, out string log, out string cache); + out string old_config, out string config, out string old_log, out string log, out string cache); if (api32_o.FileExists()) { if (api32.FileExists()) @@ -254,13 +258,7 @@ internal static class SmokeAPI bool generateConfig = true) => await Task.Run(() => { - directory.GetCreamApiComponents(out _, out _, out _, out _, out string oldConfig); - if (oldConfig.FileExists()) - { - oldConfig.DeleteFile(); - installForm?.UpdateUser($"Deleted old CreamAPI configuration: {Path.GetFileName(oldConfig)}", - LogTextBox.Action, false); - } + DeleteCreamApiComponents(directory, installForm); directory.GetSmokeApiComponents(out string api32, out string api32_o, out string api64, out string api64_o, out _, out _, out _, out _, out _); diff --git a/CreamInstaller/Selection.cs b/CreamInstaller/Selection.cs index b67282c..cdca2fa 100644 --- a/CreamInstaller/Selection.cs +++ b/CreamInstaller/Selection.cs @@ -20,7 +20,10 @@ public enum Platform internal sealed class Selection : IEquatable { - internal const string DefaultKoaloaderProxy = "version"; + internal const string DefaultProxy = "version"; + + // TODO: add proxy mode support for CreamAPI and set this to true + internal bool CanUseProxy => Program.UseSmokeAPI || Platform is not Platform.Steam; internal static readonly ConcurrentDictionary All = new(); @@ -33,8 +36,8 @@ internal sealed class Selection : IEquatable internal readonly string RootDirectory; internal readonly TreeNode TreeNode; internal string Icon; - internal bool Koaloader; - internal string KoaloaderProxy; + internal bool UseProxy; + internal string Proxy; internal string Product; internal string Publisher; internal string SubIcon; @@ -55,7 +58,7 @@ internal sealed class Selection : IEquatable if (selectForm is null) return; Enabled = selectForm.allCheckBox.Checked; - Koaloader = selectForm.koaloaderAllCheckBox.Checked; + UseProxy = selectForm.proxyAllCheckBox.Checked; } internal static IEnumerable AllEnabled => All.Keys.Where(s => s.Enabled); diff --git a/CreamInstaller/Utility/ProgramData.cs b/CreamInstaller/Utility/ProgramData.cs index 2c38cf3..496bddc 100644 --- a/CreamInstaller/Utility/ProgramData.cs +++ b/CreamInstaller/Utility/ProgramData.cs @@ -162,7 +162,7 @@ internal static class ProgramData } } - internal static IEnumerable<(Platform platform, string id, string proxy, bool enabled)> ReadKoaloaderChoices() + internal static IEnumerable<(Platform platform, string id, string proxy, bool enabled)> ReadProxyChoices() { if (KoaloaderProxyChoicesPath.FileExists()) try @@ -180,7 +180,7 @@ internal static class ProgramData return Enumerable.Empty<(Platform platform, string id, string proxy, bool enabled)>(); } - internal static void WriteKoaloaderProxyChoices( + internal static void WriteProxyChoices( IEnumerable<(Platform platform, string id, string proxy, bool enabled)> choices) { try diff --git a/global.json b/global.json new file mode 100644 index 0000000..f575e66 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "8.0.0", + "rollForward": "latestMinor", + "allowPrerelease": false + } +} \ No newline at end of file