diff --git a/CreamInstaller/CreamInstaller.csproj b/CreamInstaller/CreamInstaller.csproj
index c3445d6..e25c4dc 100644
--- a/CreamInstaller/CreamInstaller.csproj
+++ b/CreamInstaller/CreamInstaller.csproj
@@ -6,7 +6,7 @@
true
ini.ico
true
- 1.0.5.2
+ 1.0.6.0
ini.ico
Automatically downloads and installs CreamAPI files for programs/games.
diff --git a/CreamInstaller/InstallForm.Designer.cs b/CreamInstaller/InstallForm.Designer.cs
index 28f1de0..80eab1e 100644
--- a/CreamInstaller/InstallForm.Designer.cs
+++ b/CreamInstaller/InstallForm.Designer.cs
@@ -65,7 +65,7 @@ namespace CreamInstaller
this.acceptButton.Location = new System.Drawing.Point(437, 286);
this.acceptButton.Name = "acceptButton";
this.acceptButton.Size = new System.Drawing.Size(75, 23);
- this.acceptButton.TabIndex = 3;
+ this.acceptButton.TabIndex = 4;
this.acceptButton.Text = "OK";
this.acceptButton.UseVisualStyleBackColor = true;
this.acceptButton.Click += new System.EventHandler(this.OnAccept);
@@ -77,7 +77,7 @@ namespace CreamInstaller
this.retryButton.Location = new System.Drawing.Point(356, 286);
this.retryButton.Name = "retryButton";
this.retryButton.Size = new System.Drawing.Size(75, 23);
- this.retryButton.TabIndex = 2;
+ this.retryButton.TabIndex = 3;
this.retryButton.Text = "Retry";
this.retryButton.UseVisualStyleBackColor = true;
this.retryButton.Click += new System.EventHandler(this.OnRetry);
@@ -115,7 +115,7 @@ namespace CreamInstaller
this.reselectButton.Location = new System.Drawing.Point(135, 286);
this.reselectButton.Name = "reselectButton";
this.reselectButton.Size = new System.Drawing.Size(175, 23);
- this.reselectButton.TabIndex = 5;
+ this.reselectButton.TabIndex = 2;
this.reselectButton.Text = "Reselect Programs / Games";
this.reselectButton.UseVisualStyleBackColor = true;
this.reselectButton.Click += new System.EventHandler(this.OnReselect);
diff --git a/CreamInstaller/InstallForm.cs b/CreamInstaller/InstallForm.cs
index 2d34d0a..f4e37f2 100644
--- a/CreamInstaller/InstallForm.cs
+++ b/CreamInstaller/InstallForm.cs
@@ -181,6 +181,8 @@ namespace CreamInstaller
break;
}
+ if (!selection.Enabled) { continue; }
+
Program.Cleanup(cancel: false, logout: false);
if (!Program.IsProgramRunningDialog(this, selection))
@@ -193,7 +195,7 @@ namespace CreamInstaller
await OperateFor(selection);
UpdateUser($"Operation succeeded for {selection.ProgramName}.", LogColor.Success);
- selection.Remove();
+ selection.Toggle(false);
}
catch (Exception exception)
{
@@ -203,17 +205,21 @@ namespace CreamInstaller
Program.Cleanup(logout: false);
- if (Program.ProgramSelections.Count == 1)
+ List FailedSelections = Program.ProgramSelections.FindAll(selection => selection.Enabled);
+ if (FailedSelections.Any())
{
- throw new Exception($"Operation failed for {Program.ProgramSelections.First().ProgramName}.");
- }
- else if (Program.ProgramSelections.Count > 1)
- {
- throw new Exception($"Operation failed for {Program.ProgramSelections.Count} programs.");
+ if (FailedSelections.Count == 1)
+ {
+ throw new Exception($"Operation failed for {FailedSelections.First().ProgramName}.");
+ }
+ else
+ {
+ throw new Exception($"Operation failed for {FailedSelections.Count} programs.");
+ }
}
}
- private readonly int ProgramCount = Program.ProgramSelections.Count;
+ private readonly int ProgramCount = Program.ProgramSelections.FindAll(selection => selection.Enabled).Count;
private async void Start()
{
diff --git a/CreamInstaller/ProgramSelection.cs b/CreamInstaller/ProgramSelection.cs
index 9757d21..71615f1 100644
--- a/CreamInstaller/ProgramSelection.cs
+++ b/CreamInstaller/ProgramSelection.cs
@@ -5,6 +5,8 @@ namespace CreamInstaller
{
public class ProgramSelection
{
+ public bool Enabled = true;
+
public string ProgramName;
public string ProgramDirectory;
public List SteamApiDllDirectories;
@@ -31,20 +33,9 @@ namespace CreamInstaller
Program.ProgramSelections.Add(this);
}
- public void Add()
+ public void Toggle(bool Enabled)
{
- if (!Program.ProgramSelections.Contains(this))
- {
- Program.ProgramSelections.Add(this);
- }
- }
-
- public void Remove()
- {
- if (Program.ProgramSelections.Contains(this))
- {
- Program.ProgramSelections.Remove(this);
- }
+ this.Enabled = Enabled;
}
}
}
diff --git a/CreamInstaller/SelectForm.Designer.cs b/CreamInstaller/SelectForm.Designer.cs
index eb75b46..b2b9e78 100644
--- a/CreamInstaller/SelectForm.Designer.cs
+++ b/CreamInstaller/SelectForm.Designer.cs
@@ -42,6 +42,7 @@ namespace CreamInstaller
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.label2 = new System.Windows.Forms.Label();
+ this.scanButton = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
@@ -52,7 +53,7 @@ namespace CreamInstaller
this.acceptButton.Location = new System.Drawing.Point(322, 254);
this.acceptButton.Name = "acceptButton";
this.acceptButton.Size = new System.Drawing.Size(150, 23);
- this.acceptButton.TabIndex = 101;
+ this.acceptButton.TabIndex = 102;
this.acceptButton.Text = "Download and Install";
this.acceptButton.UseVisualStyleBackColor = true;
this.acceptButton.Click += new System.EventHandler(this.OnAccept);
@@ -85,7 +86,7 @@ namespace CreamInstaller
this.groupBox1.Controls.Add(this.flowLayoutPanel1);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(460, 192);
+ this.groupBox1.Size = new System.Drawing.Size(460, 236);
this.groupBox1.TabIndex = 8;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Programs / Games";
@@ -111,7 +112,7 @@ namespace CreamInstaller
this.noneFoundLabel.Enabled = false;
this.noneFoundLabel.Location = new System.Drawing.Point(3, 19);
this.noneFoundLabel.Name = "noneFoundLabel";
- this.noneFoundLabel.Size = new System.Drawing.Size(454, 170);
+ this.noneFoundLabel.Size = new System.Drawing.Size(454, 214);
this.noneFoundLabel.TabIndex = 0;
this.noneFoundLabel.Text = "No CreamAPI-applicable programs or games were found on your computer!";
this.noneFoundLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -123,7 +124,7 @@ namespace CreamInstaller
this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 19);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
- this.flowLayoutPanel1.Size = new System.Drawing.Size(454, 170);
+ this.flowLayoutPanel1.Size = new System.Drawing.Size(454, 214);
this.flowLayoutPanel1.TabIndex = 1000;
//
// progressBar1
@@ -145,17 +146,30 @@ namespace CreamInstaller
this.label2.TabIndex = 10;
this.label2.Text = "Loading . . .";
//
+ // scanButton
+ //
+ this.scanButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.scanButton.Enabled = false;
+ this.scanButton.Location = new System.Drawing.Point(110, 254);
+ this.scanButton.Name = "scanButton";
+ this.scanButton.Size = new System.Drawing.Size(190, 23);
+ this.scanButton.TabIndex = 101;
+ this.scanButton.Text = "Rescan for Programs / Games";
+ this.scanButton.UseVisualStyleBackColor = true;
+ this.scanButton.Click += new System.EventHandler(this.OnScan);
+ //
// SelectForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(484, 289);
- this.Controls.Add(this.label2);
+ this.Controls.Add(this.scanButton);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.label1);
this.Controls.Add(this.cancelButton);
this.Controls.Add(this.acceptButton);
+ this.Controls.Add(this.label2);
this.DoubleBuffered = true;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
@@ -184,6 +198,7 @@ namespace CreamInstaller
private System.Windows.Forms.Label label2;
private System.Windows.Forms.CheckBox allCheckBox;
private Label noneFoundLabel;
+ private Button scanButton;
}
}
diff --git a/CreamInstaller/SelectForm.cs b/CreamInstaller/SelectForm.cs
index 69f75ee..69bb5aa 100644
--- a/CreamInstaller/SelectForm.cs
+++ b/CreamInstaller/SelectForm.cs
@@ -22,16 +22,12 @@ namespace CreamInstaller
Text = Program.ApplicationName;
}
- private List gameLibraryDirectories;
private List GameLibraryDirectories
{
get
{
- if (gameLibraryDirectories != null)
- {
- return gameLibraryDirectories;
- }
List gameDirectories = new List();
+ if (Program.Canceled) { return gameDirectories; }
string steamInstallPath = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Valve\\Steam", "InstallPath", null) as string;
if (steamInstallPath == null)
{
@@ -51,38 +47,37 @@ namespace CreamInstaller
}
}
}
- gameLibraryDirectories = gameDirectories;
return gameDirectories;
}
}
private List GetSteamApiDllDirectoriesFromGameDirectory(string gameDirectory, List steamApiDllDirectories = null)
{
+ if (Program.Canceled) { return null; }
if (steamApiDllDirectories is null)
{
steamApiDllDirectories = new();
}
-
string file = gameDirectory + "\\steam_api64.dll";
if (File.Exists(file))
{
steamApiDllDirectories.Add(gameDirectory);
}
-
foreach (string _directory in Directory.GetDirectories(gameDirectory))
{
+ if (Program.Canceled) { return null; }
GetSteamApiDllDirectoriesFromGameDirectory(_directory, steamApiDllDirectories);
}
if (!steamApiDllDirectories.Any())
{
return null;
}
-
return steamApiDllDirectories;
}
private string GetGameDirectoryFromLibraryDirectory(string gameName, string libraryDirectory)
{
+ if (Program.Canceled) { return null; }
if (Path.GetFileName(libraryDirectory) == gameName)
{
return libraryDirectory;
@@ -91,6 +86,7 @@ namespace CreamInstaller
{
foreach (string _directory in Directory.GetDirectories(libraryDirectory))
{
+ if (Program.Canceled) { return null; }
string dir = GetGameDirectoryFromLibraryDirectory(gameName, _directory);
if (dir != null)
{
@@ -105,10 +101,12 @@ namespace CreamInstaller
private readonly List checkBoxes = new();
private void GetCreamApiApplicablePrograms(IProgress progress)
{
+ if (Program.Canceled) { return; }
int maxProgress = 0;
IEnumerable fileNodes = Program.MegaApiClient.GetNodesFromLink(new Uri("https://mega.nz/folder/45YBwIxZ#fsZNZZu9twY2PVLgrB86fA"));
foreach (INode node in fileNodes)
{
+ if (Program.Canceled) { return; }
if (node.Type == NodeType.Directory && node.Name != "CreamAPI" && node.Name != "Outdated")
{
++maxProgress;
@@ -119,9 +117,11 @@ namespace CreamInstaller
progress.Report(curProgress);
foreach (INode node in fileNodes)
{
+ if (Program.Canceled) { return; }
if (node.Type == NodeType.Directory && node.Name != "CreamAPI" && node.Name != "Outdated")
{
progress.Report(++curProgress);
+ if (Program.ProgramSelections.Any(selection => selection.ProgramName == node.Name)) { continue; }
string rootDirectory;
List directories = null;
if (node.Name == "Paradox Launcher")
@@ -139,6 +139,7 @@ namespace CreamInstaller
directories = null;
foreach (string libraryDirectory in GameLibraryDirectories)
{
+ if (Program.Canceled) { return; }
rootDirectory = GetGameDirectoryFromLibraryDirectory(node.Name, libraryDirectory);
if (rootDirectory != null)
{
@@ -149,60 +150,67 @@ namespace CreamInstaller
}
if (!(directories is null))
{
+ if (Program.Canceled) { return; }
flowLayoutPanel1.Invoke((MethodInvoker)delegate
- {
- ProgramSelection selection = new();
- selection.ProgramName = node.Name;
- selection.ProgramDirectory = rootDirectory;
- selection.SteamApiDllDirectories = new();
- selection.SteamApiDllDirectories.AddRange(directories);
-
- foreach (INode _node in fileNodes)
- {
- if (_node.Type == NodeType.File && _node.ParentId == node.Id)
- {
- selection.DownloadNode = _node;
- break;
- }
- }
-
- CheckBox checkBox = new();
- checkBoxes.Add(checkBox);
- checkBox.AutoSize = true;
- checkBox.Parent = flowLayoutPanel1;
- checkBox.Text = node.Name;
- checkBox.Checked = true;
- checkBox.Enabled = false;
- checkBox.TabStop = true;
- checkBox.TabIndex = 1 + checkBoxes.Count;
-
- checkBox.CheckedChanged += (sender, e) =>
- {
- if (checkBox.Checked)
- {
- selection.Add();
- }
- else
- {
- selection.Remove();
- }
-
- acceptButton.Enabled = Program.ProgramSelections.Count > 0;
-
- allCheckBox.CheckedChanged -= OnAllCheckBoxChanged;
- allCheckBox.Checked = checkBoxes.TrueForAll(checkBox => checkBox.Checked);
- allCheckBox.CheckedChanged += OnAllCheckBoxChanged;
- };
- });
+ {
+ if (Program.Canceled) { return; }
+
+ ProgramSelection selection = new();
+ selection.ProgramName = node.Name;
+ selection.ProgramDirectory = rootDirectory;
+ selection.SteamApiDllDirectories = new();
+ selection.SteamApiDllDirectories.AddRange(directories);
+
+ foreach (INode _node in fileNodes)
+ {
+ if (_node.Type == NodeType.File && _node.ParentId == node.Id)
+ {
+ selection.DownloadNode = _node;
+ break;
+ }
+ }
+
+ CheckBox checkBox = new();
+ checkBoxes.Add(checkBox);
+ checkBox.AutoSize = true;
+ checkBox.Parent = flowLayoutPanel1;
+ checkBox.Text = node.Name;
+ checkBox.Checked = true;
+ checkBox.Enabled = false;
+ checkBox.TabStop = true;
+ checkBox.TabIndex = 1 + checkBoxes.Count;
+
+ checkBox.CheckedChanged += (sender, e) =>
+ {
+ selection.Toggle(checkBox.Checked);
+ acceptButton.Enabled = Program.ProgramSelections.Any(selection => selection.Enabled);
+ allCheckBox.CheckedChanged -= OnAllCheckBoxChanged;
+ allCheckBox.Checked = checkBoxes.TrueForAll(checkBox => checkBox.Checked);
+ allCheckBox.CheckedChanged += OnAllCheckBoxChanged;
+ };
+ });
}
}
}
progress.Report(maxProgress);
}
- private async void OnLoad(object sender, EventArgs e)
+ private async void OnLoad()
{
- label2.Text = "Finding CreamAPI-applicable programs on your computer . . . ";
+ Program.Canceled = false;
+ cancelButton.Enabled = true;
+ scanButton.Enabled = false;
+ noneFoundLabel.Visible = false;
+ allCheckBox.Enabled = false;
+ acceptButton.Enabled = false;
+ checkBoxes.ForEach(checkBox => checkBox.Enabled = false);
+
+ label2.Visible = true;
+ progressBar1.Visible = true;
+ progressBar1.Value = 0;
+ groupBox1.Size = new Size(groupBox1.Size.Width, groupBox1.Size.Height - 44);
+
+ label2.Text = "Scanning for CreamAPI-applicable programs on your computer . . . ";
int maxProgress = 0;
Progress progress = new();
progress.ProgressChanged += (sender, _progress) =>
@@ -214,32 +222,48 @@ namespace CreamInstaller
else
{
int p = (int)((float)(_progress / (float)maxProgress) * 100);
- label2.Text = "Finding CreamAPI-applicable programs on your computer . . . " + p + "% (" + _progress + "/" + maxProgress + ")";
+ label2.Text = "Scanning for CreamAPI-applicable programs on your computer . . . " + p + "% (" + _progress + "/" + maxProgress + ")";
progressBar1.Value = p;
}
};
await Task.Run(() => GetCreamApiApplicablePrograms(progress));
- groupBox1.Size = new Size(groupBox1.Size.Width, groupBox1.Size.Height + 44);
+ Program.ProgramSelections.ForEach(selection => selection.SteamApiDllDirectories.RemoveAll(directory => !Directory.Exists(directory)));
+ Program.ProgramSelections.RemoveAll(selection => !Directory.Exists(selection.ProgramDirectory) || !selection.SteamApiDllDirectories.Any());
+ foreach (CheckBox checkBox in checkBoxes)
+ {
+ if (!Program.ProgramSelections.Any(selection => selection.ProgramName == checkBox.Text))
+ {
+ checkBox.Dispose();
+ }
+ }
- label2.Hide();
- progressBar1.Hide();
+ progressBar1.Value = 100;
+ groupBox1.Size = new Size(groupBox1.Size.Width, groupBox1.Size.Height + 44);
+ label2.Visible = false;
+ progressBar1.Visible = false;
if (Program.ProgramSelections.Any())
{
allCheckBox.Enabled = true;
- foreach (CheckBox checkBox in checkBoxes)
+ checkBoxes.ForEach(checkBox => checkBox.Enabled = true);
+ if (Program.ProgramSelections.Any(selection => selection.Enabled))
{
- checkBox.Enabled = true;
+ acceptButton.Enabled = true;
}
-
- acceptButton.Enabled = true;
}
else
{
noneFoundLabel.Visible = true;
}
+ cancelButton.Enabled = false;
+ scanButton.Enabled = true;
+ }
+
+ private void OnLoad(object sender, EventArgs e)
+ {
+ OnLoad();
}
private void OnAccept(object sender, EventArgs e)
@@ -276,9 +300,14 @@ namespace CreamInstaller
}
}
+ private void OnScan(object sender, EventArgs e)
+ {
+ OnLoad();
+ }
+
private void OnCancel(object sender, EventArgs e)
{
- Close();
+ Program.Cleanup(logout: false);
}
private void OnAllCheckBoxChanged(object sender, EventArgs e)
@@ -291,12 +320,10 @@ namespace CreamInstaller
shouldCheck = true;
}
}
-
foreach (CheckBox checkBox in checkBoxes)
{
checkBox.Checked = shouldCheck;
}
-
allCheckBox.Checked = shouldCheck;
}
}