mirror of
https://github.com/knah/VRCMelonAssistant.git
synced 2024-05-03 03:54:03 +12:00
Merge pull request #23 from DubyaDude/master
Move to api/v1 + additional QOL changes
This commit is contained in:
commit
f905428238
|
@ -80,7 +80,7 @@ namespace VRCMelonAssistant
|
|||
|
||||
public static async Task InstallMod(Mod mod)
|
||||
{
|
||||
string downloadLink = mod.versions[0].downloadlink;
|
||||
string downloadLink = mod.versions[0].downloadLink;
|
||||
|
||||
if (string.IsNullOrEmpty(downloadLink))
|
||||
{
|
||||
|
@ -91,21 +91,27 @@ namespace VRCMelonAssistant
|
|||
if (mod.installedFilePath != null)
|
||||
File.Delete(mod.installedFilePath);
|
||||
|
||||
var modUri = new Uri(downloadLink);
|
||||
var targetFilePath = Path.Combine(App.VRChatInstallDirectory, mod.versions[0].IsPlugin ? "Plugins" : "Mods",
|
||||
mod.versions[0].IsBroken ? "Broken" : "", modUri.Segments.Last());
|
||||
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(targetFilePath));
|
||||
string targetFilePath = "";
|
||||
|
||||
using (Stream stream = await DownloadFileToMemory(downloadLink))
|
||||
using (var resp = await Http.HttpClient.GetAsync(downloadLink))
|
||||
{
|
||||
var stream = new MemoryStream();
|
||||
await resp.Content.CopyToAsync(stream);
|
||||
stream.Position = 0;
|
||||
|
||||
targetFilePath = Path.Combine(App.VRChatInstallDirectory, mod.versions[0].IsPlugin ? "Plugins" : "Mods",
|
||||
mod.versions[0].IsBroken ? "Broken" : (mod.versions[0].IsRetired ? "Retired" : ""), resp.RequestMessage.RequestUri.Segments.Last());
|
||||
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(targetFilePath));
|
||||
|
||||
using var targetFile = File.OpenWrite(targetFilePath);
|
||||
await stream.CopyToAsync(targetFile);
|
||||
}
|
||||
|
||||
mod.ListItem.IsInstalled = true;
|
||||
mod.installedFilePath = targetFilePath;
|
||||
mod.ListItem.InstalledVersion = mod.versions[0].modversion;
|
||||
mod.ListItem.InstalledVersion = mod.versions[0].modVersion;
|
||||
mod.ListItem.InstalledModInfo = mod;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ namespace VRCMelonAssistant
|
|||
public class Mod
|
||||
{
|
||||
public int _id;
|
||||
public string uploaddate;
|
||||
public string uploadDate;
|
||||
public string category;
|
||||
public string[] aliases;
|
||||
public ModVersion[] versions;
|
||||
|
@ -15,25 +15,27 @@ namespace VRCMelonAssistant
|
|||
public string installedFilePath;
|
||||
public string installedVersion;
|
||||
public bool installedInBrokenDir;
|
||||
public bool installedInRetiredDir;
|
||||
|
||||
public class ModVersion
|
||||
{
|
||||
public int _version;
|
||||
public string name;
|
||||
public string modversion;
|
||||
public string modtype;
|
||||
public string modVersion;
|
||||
public string modType;
|
||||
public string author;
|
||||
public string description;
|
||||
public string downloadlink;
|
||||
public string sourcelink;
|
||||
public string downloadLink;
|
||||
public string sourceLink;
|
||||
public string hash;
|
||||
public string updatedate;
|
||||
public string vrchatversion;
|
||||
public string loaderversion;
|
||||
public string updateDate;
|
||||
public string vrchatVersion;
|
||||
public string loaderVersion;
|
||||
public int approvalStatus;
|
||||
|
||||
public bool IsBroken => approvalStatus == 2;
|
||||
public bool IsPlugin => modtype.Equals("plugin", StringComparison.InvariantCultureIgnoreCase);
|
||||
public bool IsRetired => approvalStatus == 3;
|
||||
public bool IsPlugin => modType.Equals("plugin", StringComparison.InvariantCultureIgnoreCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace VRCMelonAssistant
|
|||
public class Constants
|
||||
{
|
||||
public const string VRChatAppId = "438100";
|
||||
public const string VRCMGModsJson = "https://api.vrcmg.com/v0/mods.json";
|
||||
public const string VRCMGModsJson = "https://api.vrcmg.com/v1/mods";
|
||||
public const string WeebCDNAPIURL = "https://pat.assistant.moe/api/v1.0/";
|
||||
public const string MD5Spacer = " ";
|
||||
public static readonly char[] IllegalCharacters = new char[]
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace VRCMelonAssistant
|
|||
InstallButton.IsEnabled = false;
|
||||
}
|
||||
|
||||
private async Task ShowModsPage()
|
||||
public async Task ShowModsPage()
|
||||
{
|
||||
void OpenModsPage()
|
||||
{
|
||||
|
|
|
@ -18,9 +18,9 @@ namespace VRCMelonAssistant
|
|||
ModDescription.Text = mod.versions[0].description ?? (string) FindResource("ModInfoWindow:NoDescription");
|
||||
ModName.Text = mod.versions[0].name;
|
||||
ModAuthor.Text = string.Format((string) FindResource("ModInfoWindow:Author"), mod.versions[0].author ?? FindResource("ModInfoWindow:NoAuthor"));
|
||||
ModVersion.Text = mod.versions[0].modversion;
|
||||
ModVersion.Text = mod.versions[0].modVersion;
|
||||
|
||||
var dlLink = mod.versions[0].downloadlink;
|
||||
var dlLink = mod.versions[0].downloadLink;
|
||||
DownloadLink.Text = (string) FindResource("ModInfoWindow:DownloadLink");
|
||||
DownloadLink.Inlines.Add(new Run(" "));
|
||||
if (dlLink?.StartsWith("http") == true)
|
||||
|
@ -28,7 +28,7 @@ namespace VRCMelonAssistant
|
|||
else
|
||||
DownloadLink.Inlines.Add(new Run(dlLink));
|
||||
|
||||
var srcLink = mod.versions[0].sourcelink;
|
||||
var srcLink = mod.versions[0].sourceLink;
|
||||
SourceCodeLink.Text = (string) FindResource("ModInfoWindow:SourceCodeLink");
|
||||
SourceCodeLink.Inlines.Add(new Run(" "));
|
||||
if (srcLink?.StartsWith("http") == true)
|
||||
|
|
|
@ -37,10 +37,11 @@ namespace VRCMelonAssistant.Pages
|
|||
MainWindow.Instance.ModsButton.IsEnabled = true;
|
||||
|
||||
string text = (string) FindResource("Intro:ModsTabEnabled");
|
||||
Utils.SendNotify(text);
|
||||
MainWindow.Instance.MainText = text;
|
||||
Properties.Settings.Default.Agreed = true;
|
||||
Properties.Settings.Default.Save();
|
||||
|
||||
MainWindow.Instance.ShowModsPage().NoAwait();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<TextBlock
|
||||
Name="SearchText"
|
||||
Grid.Row="0"
|
||||
Height="0"
|
||||
Height="20"
|
||||
Padding="5,0,0,0"
|
||||
Panel.ZIndex="1"
|
||||
Background="{DynamicResource BottomStatusBarBackground}"
|
||||
|
@ -37,7 +37,7 @@
|
|||
<TextBox
|
||||
Name="SearchBar"
|
||||
Grid.Row="0"
|
||||
Height="0"
|
||||
Height="20"
|
||||
Margin="0,-1,0,0"
|
||||
Padding="3,1,0,0"
|
||||
Panel.ZIndex="2"
|
||||
|
|
|
@ -31,6 +31,7 @@ namespace VRCMelonAssistant.Pages
|
|||
public static Mods Instance = new Mods();
|
||||
|
||||
private static readonly ModListItem.CategoryInfo BrokenCategory = new("Broken", "These mods were broken by a game update. They will be temporarily removed and restored once they are updated for the current game version");
|
||||
private static readonly ModListItem.CategoryInfo RetiredCategory = new("Retired", "These mods are either no longer needed due to VRChat updates or are no longer being maintained");
|
||||
private static readonly ModListItem.CategoryInfo UncategorizedCategory = new("Uncategorized", "Mods without a category assigned");
|
||||
private static readonly ModListItem.CategoryInfo UnknownCategory = new("Unknown/Unverified", "Mods not coming from VRCMG. Potentially dangerous.");
|
||||
|
||||
|
@ -138,10 +139,12 @@ namespace VRCMelonAssistant.Pages
|
|||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
CheckInstallDir("Plugins", false);
|
||||
CheckInstallDir("Mods", false);
|
||||
CheckInstallDir("Plugins/Broken", true);
|
||||
CheckInstallDir("Mods/Broken", true);
|
||||
CheckInstallDir("Plugins");
|
||||
CheckInstallDir("Mods");
|
||||
CheckInstallDir("Plugins/Broken", isBrokenDir: true);
|
||||
CheckInstallDir("Mods/Broken", isBrokenDir: true);
|
||||
CheckInstallDir("Plugins/Retired", isRetiredDir: true);
|
||||
CheckInstallDir("Mods/Retired", isRetiredDir: true);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -168,7 +171,7 @@ namespace VRCMelonAssistant.Pages
|
|||
}
|
||||
}
|
||||
|
||||
private void CheckInstallDir(string directory, bool isBrokenDir)
|
||||
private void CheckInstallDir(string directory, bool isBrokenDir = false, bool isRetiredDir = false)
|
||||
{
|
||||
if (!Directory.Exists(Path.Combine(App.VRChatInstallDirectory, directory)))
|
||||
{
|
||||
|
@ -193,6 +196,7 @@ namespace VRCMelonAssistant.Pages
|
|||
mod.installedFilePath = file;
|
||||
mod.installedVersion = modInfo.ModVersion;
|
||||
mod.installedInBrokenDir = isBrokenDir;
|
||||
mod.installedInRetiredDir = isRetiredDir;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -203,12 +207,13 @@ namespace VRCMelonAssistant.Pages
|
|||
installedFilePath = file,
|
||||
installedVersion = modInfo.ModVersion,
|
||||
installedInBrokenDir = isBrokenDir,
|
||||
installedInRetiredDir = isRetiredDir,
|
||||
versions = new []
|
||||
{
|
||||
new Mod.ModVersion()
|
||||
{
|
||||
name = modInfo.ModName,
|
||||
modversion = modInfo.ModVersion,
|
||||
modVersion = modInfo.ModVersion,
|
||||
author = modInfo.ModAuthor,
|
||||
description = ""
|
||||
}
|
||||
|
@ -255,11 +260,17 @@ namespace VRCMelonAssistant.Pages
|
|||
|
||||
public async Task PopulateModsList()
|
||||
{
|
||||
foreach (Mod mod in AllModsList)
|
||||
foreach (Mod mod in AllModsList.Where(x => !x.versions[0].IsBroken && !x.versions[0].IsRetired))
|
||||
AddModToList(mod);
|
||||
|
||||
foreach (var mod in UnknownMods)
|
||||
AddModToList(mod, UnknownCategory);
|
||||
|
||||
foreach (Mod mod in AllModsList.Where(x => x.versions[0].IsBroken))
|
||||
AddModToList(mod);
|
||||
|
||||
foreach (Mod mod in AllModsList.Where(x => x.versions[0].IsRetired))
|
||||
AddModToList(mod);
|
||||
}
|
||||
|
||||
private void AddModToList(Mod mod, ModListItem.CategoryInfo categoryOverride = null)
|
||||
|
@ -285,14 +296,14 @@ namespace VRCMelonAssistant.Pages
|
|||
IsSelected = preSelected,
|
||||
IsEnabled = true,
|
||||
ModName = latestVersion.name,
|
||||
ModVersion = latestVersion.modversion,
|
||||
ModVersion = latestVersion.modVersion,
|
||||
ModAuthor = HardcodedCategories.FixupAuthor(latestVersion.author),
|
||||
ModDescription = latestVersion.description.Replace("\r\n", " ").Replace("\n", " "),
|
||||
ModInfo = mod,
|
||||
IsInstalled = mod.installedFilePath != null,
|
||||
InstalledVersion = mod.installedVersion,
|
||||
InstalledModInfo = mod,
|
||||
Category = categoryOverride ?? (latestVersion.IsBroken ? BrokenCategory : GetCategory(mod))
|
||||
Category = categoryOverride ?? (latestVersion.IsBroken ? BrokenCategory : (latestVersion.IsRetired ? RetiredCategory : GetCategory(mod)))
|
||||
};
|
||||
|
||||
foreach (Promotion promo in Promotions.ActivePromotions)
|
||||
|
@ -319,7 +330,7 @@ namespace VRCMelonAssistant.Pages
|
|||
foreach (Mod mod in AllModsList)
|
||||
{
|
||||
// Ignore mods that are newer than installed version or up-to-date
|
||||
if (mod.ListItem.GetVersionComparison >= 0 && mod.installedInBrokenDir == mod.versions[0].IsBroken) continue;
|
||||
if (mod.ListItem.GetVersionComparison >= 0 && mod.installedInBrokenDir == mod.versions[0].IsBroken && mod.installedInRetiredDir == mod.versions[0].IsRetired) continue;
|
||||
|
||||
if (mod.ListItem.IsSelected)
|
||||
{
|
||||
|
@ -506,14 +517,14 @@ namespace VRCMelonAssistant.Pages
|
|||
if (SearchBar.Height == 0)
|
||||
{
|
||||
SearchBar.Focus();
|
||||
Animate(SearchBar, 0, 16, new TimeSpan(0, 0, 0, 0, 300));
|
||||
Animate(SearchText, 0, 16, new TimeSpan(0, 0, 0, 0, 300));
|
||||
Animate(SearchBar, 0, 20, new TimeSpan(0, 0, 0, 0, 300));
|
||||
Animate(SearchText, 0, 20, new TimeSpan(0, 0, 0, 0, 300));
|
||||
ModsListView.Items.Filter = new Predicate<object>(SearchFilter);
|
||||
}
|
||||
else
|
||||
{
|
||||
Animate(SearchBar, 16, 0, new TimeSpan(0, 0, 0, 0, 300));
|
||||
Animate(SearchText, 16, 0, new TimeSpan(0, 0, 0, 0, 300));
|
||||
Animate(SearchBar, 20, 0, new TimeSpan(0, 0, 0, 0, 300));
|
||||
Animate(SearchText, 20, 0, new TimeSpan(0, 0, 0, 0, 300));
|
||||
ModsListView.Items.Filter = null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,5 +51,5 @@ using System.Windows;
|
|||
// 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("1.1.23.1029")]
|
||||
[assembly: AssemblyFileVersion("1.1.23.1029+vrc")]
|
||||
[assembly: AssemblyVersion("1.1.26.1029")]
|
||||
[assembly: AssemblyFileVersion("1.1.26.1029+vrc")]
|
||||
|
|
Loading…
Reference in a new issue