Skip to content
This repository has been archived by the owner on Jun 10, 2023. It is now read-only.

Commit

Permalink
Add dependency resolution.
Browse files Browse the repository at this point in the history
  • Loading branch information
DeadlyKitten committed Feb 25, 2021
1 parent 4531c86 commit 0049e69
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 7 deletions.
59 changes: 53 additions & 6 deletions MonkeModManager/FormMain.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
Expand Down Expand Up @@ -46,10 +47,18 @@ private void LoadReleases()
for (int i = 0; i < allMods.Count; i++)
{
JSONNode current = allMods[i];
ReleaseInfo release = new ReleaseInfo(current["author"], current["gitPath"], current["releaseId"], current["tag"]);
ReleaseInfo release = new ReleaseInfo(current["name"], current["author"], current["gitPath"], current["releaseId"], current["tag"], current["dependencies"].AsArray);
UpdateReleaseInfo(ref release);
releases.Add(release);
}

foreach (ReleaseInfo release in releases)
{
foreach (string dep in release.Dependencies)
{
releases.Where(x => x.Name == dep).FirstOrDefault()?.Dependents.Add(release.Name);
}
}
//WriteReleasesToDisk();
}

Expand All @@ -64,7 +73,7 @@ private void LoadRequiredPlugins()
foreach (ReleaseInfo release in releases)
{
ListViewItem item = new ListViewItem();
item.Text = release.Name;
item.Text = $"{release.Name} - {release.Version}";
if (release.Tag != string.Empty) { item.Text = string.Format("{0} - ({1})",release.Name, release.Tag); };
item.SubItems.Add(release.Author);
item.Tag = release;
Expand Down Expand Up @@ -92,8 +101,6 @@ private void UpdateReleaseInfo(ref ReleaseInfo release)

release.Version = rootNode["tag_name"];

release.Name = rootNode["name"];

var assetsNode = rootNode["assets"];
var downloadReleaseNode = assetsNode[release.ReleaseId];
release.Link = downloadReleaseNode["browser_download_url"];
Expand Down Expand Up @@ -173,6 +180,45 @@ private void buttonFolderBrowser_Click(object sender, EventArgs e)
private void listViewMods_ItemChecked(object sender, ItemCheckedEventArgs e)
{
ReleaseInfo release = (ReleaseInfo)e.Item.Tag;

if (release.Dependencies.Count > 0)
{
foreach (ListViewItem item in listViewMods.Items)
{
var plugin = (ReleaseInfo)item.Tag;

if (plugin.Name == release.Name) continue;

// if this depends on plugin
if (release.Dependencies.Contains(plugin.Name))
{
if (e.Item.Checked)
{
item.Checked = true;
item.ForeColor = System.Drawing.Color.DimGray;
}
else
{
release.Install = false;
if (releases.Count(x => plugin.Dependents.Contains(x.Name) && x.Install) <= 1)
{
item.Checked = false;
item.ForeColor = System.Drawing.Color.Black;
}
}
}
}
}

// don't allow user to uncheck if a dependent is checked
if (release.Dependents.Count > 0)
{
if (releases.Count(x => release.Dependents.Contains(x.Name) && x.Install) > 0)
{
e.Item.Checked = true;
}
}

if (release.Name.Contains("BepInEx")) { e.Item.Checked = true; };
release.Install = e.Item.Checked;
}
Expand Down Expand Up @@ -220,7 +266,7 @@ private string DownloadSite(string URL)
RQuest.CookieContainer = PermCookie;
RQuest.ContentType = "application/x-www-form-urlencoded";
RQuest.Referer = "";
RQuest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
RQuest.UserAgent = "Monke-Mod-Manager";
RQuest.Proxy = null;
HttpWebResponse Response = (HttpWebResponse)RQuest.GetResponse();
StreamReader Sr = new StreamReader(Response.GetResponseStream());
Expand All @@ -238,7 +284,7 @@ private string DownloadSite(string URL)
{
MessageBox.Show("Failed to update version info, please check your internet connection", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
//Process.GetCurrentProcess().Kill();
Process.GetCurrentProcess().Kill();
return null;
}
}
Expand Down Expand Up @@ -377,6 +423,7 @@ private void CheckDefaultMod(ReleaseInfo release, ListViewItem item)
if (release.Name.Contains("BepInEx"))
{
item.Checked = true;
item.ForeColor = System.Drawing.Color.DimGray;
}
else
{
Expand Down
12 changes: 11 additions & 1 deletion MonkeModManager/Internals/ReleaseInfo.cs
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MonkeModManager.Internals.SimpleJSON;

namespace MonkeModManager.Internals
{
Expand All @@ -15,12 +16,21 @@ public class ReleaseInfo
public string Tag;
public int ReleaseId;
public bool Install = true;
public ReleaseInfo(string _author, string _gitPath, int _releaseId, string _tag)
public List<string> Dependencies = new List<string>();
public List<string> Dependents = new List<string>();
public ReleaseInfo(string _name, string _author, string _gitPath, int _releaseId, string _tag, JSONArray dependencies)
{
Name = _name;
Author = _author;
GitPath = _gitPath;
ReleaseId = _releaseId;
Tag = _tag;

if (dependencies == null) return;
for (int i = 0; i < dependencies.Count; i++)
{
Dependencies.Add(dependencies[i]);
}
}
}
}

0 comments on commit 0049e69

Please sign in to comment.