aboutsummaryrefslogtreecommitdiff
path: root/Packages/com.vrchat.core.bootstrap
diff options
context:
space:
mode:
Diffstat (limited to 'Packages/com.vrchat.core.bootstrap')
-rw-r--r--Packages/com.vrchat.core.bootstrap/Editor.meta8
-rw-r--r--Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs92
-rw-r--r--Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs.meta11
-rw-r--r--Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef15
-rw-r--r--Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef.meta7
-rw-r--r--Packages/com.vrchat.core.bootstrap/License.md11
-rw-r--r--Packages/com.vrchat.core.bootstrap/License.md.meta7
-rw-r--r--Packages/com.vrchat.core.bootstrap/package.json17
-rw-r--r--Packages/com.vrchat.core.bootstrap/package.json.meta7
9 files changed, 175 insertions, 0 deletions
diff --git a/Packages/com.vrchat.core.bootstrap/Editor.meta b/Packages/com.vrchat.core.bootstrap/Editor.meta
new file mode 100644
index 0000000..d8de383
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5ee5eebf1b35bbd49ae7983db316180a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs b/Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs
new file mode 100644
index 0000000..e1a0917
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs
@@ -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);
+ }
+ }
+ }
+}
diff --git a/Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs.meta b/Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs.meta
new file mode 100644
index 0000000..d7ac1ae
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/Editor/Bootstrap.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eea11c44cabdaaa43ac0a21dbbbd9824
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef b/Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef
new file mode 100644
index 0000000..115b3e2
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef
@@ -0,0 +1,15 @@
+{
+ "name": "VRChat.Bootstrapper.Editor",
+ "references": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+} \ No newline at end of file
diff --git a/Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef.meta b/Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef.meta
new file mode 100644
index 0000000..1d60f49
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/Editor/VRChat.Bootstrapper.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e0d8a3ed977bd0948b99f4bce8e56a07
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/com.vrchat.core.bootstrap/License.md b/Packages/com.vrchat.core.bootstrap/License.md
new file mode 100644
index 0000000..275530c
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/License.md
@@ -0,0 +1,11 @@
+# VRCHAT INC.
+### VRCHAT DISTRO LICENSE FILE
+Version: February 24, 2022
+
+**SUMMARY OF TERMS:** Any materials subject to this Distro Asset License may be distributed by you, with or without modifications, on a non-commercial basis (i.e., at no charge), in accordance with the full terms of the Materials License Agreement.
+
+This Distro License File is a "License File" as defined in the VRChat Materials License Agreement, found at https://hello.vrchat.com/legal/sdk (or any successor link designated by VRChat) (as may be revised from time to time, the "Materials License Agreement").
+
+This Distro License File applies to all the files in the Folder containing this Distro License File and those in all Child Folders within that Folder (except with respect to files in any Child Folder that contains a different License File) (such files, other than this Distro License File, the "Covered Files"). All capitalized terms used but not otherwise defined in this Distro License File have the meanings provided in the Materials License Agreement.
+
+This Distro License File only provides a summary of the terms applicable to the Covered Files. To understand your rights and obligations and the full set of terms that apply to use of the Covered Files, please see the relevant sections of the Materials License Agreement, including terms applicable to Distro Materials. \ No newline at end of file
diff --git a/Packages/com.vrchat.core.bootstrap/License.md.meta b/Packages/com.vrchat.core.bootstrap/License.md.meta
new file mode 100644
index 0000000..3a508bc
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/License.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a84f4a071b4a7fa49985f447a0ce2fe2
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/com.vrchat.core.bootstrap/package.json b/Packages/com.vrchat.core.bootstrap/package.json
new file mode 100644
index 0000000..d0b5080
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/package.json
@@ -0,0 +1,17 @@
+{
+ "name" : "com.vrchat.core.bootstrap",
+ "displayName" : "VRChat Package Bootstrapper",
+ "version" : "0.1.15",
+ "unity" : "2019.4",
+ "description" : "Tool to Download VPM Packages",
+ "vrchatVersion" : "2022.1.1",
+ "author" : {
+ "name" : "VRChat",
+ "email" : "developer@vrchat.com",
+ "url" : "https://github.com/vrchat/packages"
+ },
+ "url" : "",
+ "dependencies" : {
+ "com.unity.nuget.newtonsoft-json" : "2.0.2"
+ }
+}
diff --git a/Packages/com.vrchat.core.bootstrap/package.json.meta b/Packages/com.vrchat.core.bootstrap/package.json.meta
new file mode 100644
index 0000000..9aea588
--- /dev/null
+++ b/Packages/com.vrchat.core.bootstrap/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6c5fffb4815ba9046ad0a2e878396439
+PackageManifestImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: