Skip to content
This repository was archived by the owner on Dec 10, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions BeatSaberModManager/DataModels/ReleaseInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,15 @@ public class ReleaseInfo

public bool install;
public bool disabled;
public enum installSpecial { Dependency, Conflict, Required, None };
public int installType = (int)installSpecial.None;
public bool installPreviousState = false;

public ListViewItem itemHandle;

public List<ModLink> dependsOn;
public List<ModLink> conflictsWith;
public List<string> dependedBy = new List<string> { };

public ReleaseInfo(
string _name, string _title, string _version, string _author, string _description,
Expand Down
100 changes: 78 additions & 22 deletions BeatSaberModManager/Forms/FormMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,19 +175,19 @@ private void CheckDefaultMod(ReleaseInfo release, ListViewItem item)
{
string name = release.name.ToLower();
string category = release.category.ToLower();
if (name.Equals("bsipa") || category.Contains("libraries"))
if (name.Equals("bsipa"))
{
item.Text = $"[REQUIRED] {release.title}";
item.BackColor = Color.LightGray;
release.disabled = true;

release.installType = (int)ReleaseInfo.installSpecial.Required;
release.installPreviousState = true;
release.install = true;
item.Checked = true;
}

if (defaultMods.Contains(name))
{
item.Checked = true;
release.installPreviousState = true;
resolveDependencies(release, 1, true);
defaultMods.Remove(name);
}
}
Expand Down Expand Up @@ -216,6 +216,62 @@ private void buttonFolderBrowser_Click(object sender, EventArgs e)
installer.installDirectory = textBoxDirectory.Text;
}

private void resolveDependencies(ReleaseInfo release, int action, bool defaults = false)
{
if (release.dependsOn.Count > 0)
{
foreach (ModLink dependency in release.dependsOn)
{
foreach (ListViewItem lvi in listViewMods.Items)
{
ReleaseInfo check = (ReleaseInfo)lvi.Tag;
if (check.name == dependency.name)
{
if (action == 1)
{
if (!check.dependedBy.Contains(release.name))
{
check.dependedBy.Add(release.name);
}
}
else if (action == 0)
{
if (check.dependedBy.Contains(release.name))
{
check.dependedBy.Remove(release.name);
}
}
if (check.dependedBy.Count == 1 && action == 1 && !defaults)
{
check.installPreviousState = check.itemHandle.Checked;
}
if (check.dependedBy.Count > 0)
{
check.installType = (int)ReleaseInfo.installSpecial.Dependency;
check.disabled = true;
check.itemHandle.Checked = true;
check.install = true;
}
else
{
check.installType = (int)ReleaseInfo.installSpecial.None;
check.disabled = false;
check.itemHandle.Checked = check.installPreviousState;
}
if (check.itemHandle.Checked)
{
resolveDependencies(check, 1, true);
}
else
{
resolveDependencies(check, 0, true);
}
}
}
}
}
}

private void listViewMods_ItemChecked(object sender, ItemCheckedEventArgs e)
{
ReleaseInfo release = (ReleaseInfo)e.Item.Tag;
Expand All @@ -231,20 +287,11 @@ private void listViewMods_ItemChecked(object sender, ItemCheckedEventArgs e)

if (e.Item.Checked)
{
if (release.dependsOn.Count > 0)
{
foreach (ModLink dependency in release.dependsOn)
{
foreach (ListViewItem lvi in listViewMods.Items)
{
ReleaseInfo check = (ReleaseInfo)lvi.Tag;
if (check.name == dependency.name)
{
check.itemHandle.Checked = true;
}
}
}
}
resolveDependencies(release, 1);
}
else
{
resolveDependencies(release, 0);
}

if (e.Item.Checked)
Expand Down Expand Up @@ -292,11 +339,20 @@ private void ReRenderListView ()
foreach (ListViewItem item in listViewMods.Items)
{
ReleaseInfo release = (ReleaseInfo)item.Tag;
if (release.disabled)
if (release.installType == (int)ReleaseInfo.installSpecial.Required)
{
item.Checked = true;
release.install = true;
item.BackColor = Color.LightGray;
item.Text = $"[REQUIRED] {release.title}";
}
else
if (release.installType == (int)ReleaseInfo.installSpecial.Dependency)
{
item.Checked = release.install;
item.Checked = true;
release.install = true;
item.BackColor = Color.LightGray;
item.Text = $"[{(release.install ? "REQUIRED" : "CONFLICT")}] {release.title}";
item.Text = $"[DEPENDENCY] {release.title}";
}
else
{
Expand Down
4 changes: 2 additions & 2 deletions BeatSaberModManager/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.3.0.3")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("0.3.0.4")]
[assembly: AssemblyFileVersion("0.3.0.4")]
[assembly: NeutralResourcesLanguage("en")]