main - remote-2023-08-20T02:24:11 now-2023-08-20T18:40:38

This commit is contained in:
Adversary 2023-08-20 18:40:38 +00:00
commit 4cf5c80442
161 changed files with 12176 additions and 0 deletions

View file

@ -0,0 +1,92 @@
using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
namespace VRC.PackageManagement.Core
{
public class Bootstrap
{
// JSON property names in Project Manifest
public const string UNITY_PACKAGES_FOLDER = "Packages";
public const string UNITY_MANIFEST_FILENAME = "manifest.json";
// VRC Values
public const string VRC_CONFIG = "https://api.vrchat.cloud/api/1/config";
public const string VRC_AGENT = "VCCBootstrap 1.0";
public const string VRC_RESOLVER_PACKAGE = "com.vrchat.core.vpm-resolver";
// Finds url for bootstrap package without using JSON
private static Regex _bootstrapRegex = new Regex("\"bootstrap\"\\s*:\\s*\"(.+?(?=\"))\"");
public static string ManifestPath => Path.Combine(Directory.GetCurrentDirectory(), UNITY_PACKAGES_FOLDER, UNITY_MANIFEST_FILENAME);
// Path where we expect the target package to exist
public static string ResolverPath =>
Path.Combine(Directory.GetCurrentDirectory(), UNITY_PACKAGES_FOLDER, VRC_RESOLVER_PACKAGE);
[InitializeOnLoadMethod]
public static async void CheckForRestore()
{
if (!new DirectoryInfo(ResolverPath).Exists)
{
try
{
await AddResolver();
}
catch (Exception e)
{
Debug.LogError($"Could not download and install the VPM Package Resolver - you may be missing packages. Exception: {e.Message}");
}
}
}
public static async Task AddResolver()
{
var configData = await GetRemoteString(VRC_CONFIG);
if (string.IsNullOrWhiteSpace(configData))
{
Debug.LogWarning($"Could not get VPM libraries, try again later");
return;
}
var bootstrapMatch = _bootstrapRegex.Match(configData);
if (!bootstrapMatch.Success || bootstrapMatch.Groups.Count < 2)
{
Debug.LogError($"Could not find bootstrap in config, try again later");
return;
}
var url = bootstrapMatch.Groups[1].Value;
var targetFile = Path.Combine(Path.GetTempPath(), $"resolver-{DateTime.Now.ToString("yyyyMMddTHHmmss")}.unitypackage");
// Download to dir
using (var client = new WebClient())
{
// Add User Agent or else CloudFlare will return 1020
client.Headers.Add(HttpRequestHeader.UserAgent, VRC_AGENT);
await client.DownloadFileTaskAsync(url, targetFile);
if (File.Exists(targetFile))
{
Debug.Log($"Downloaded Resolver to {targetFile}");
AssetDatabase.ImportPackage(targetFile, false);
}
}
return;
}
public static async Task<string> GetRemoteString(string url)
{
using (var client = new WebClient())
{
// Add User Agent or else CloudFlare will return 1020
client.Headers.Add(HttpRequestHeader.UserAgent, VRC_AGENT);
return await client.DownloadStringTaskAsync(url);
}
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: eea11c44cabdaaa43ac0a21dbbbd9824
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,15 @@
{
"name": "VRChat.Bootstrapper.Editor",
"references": [],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e0d8a3ed977bd0948b99f4bce8e56a07
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: