aboutsummaryrefslogtreecommitdiff
path: root/Assets/Plugins/GitHub/Editor/ExtensionLoader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Plugins/GitHub/Editor/ExtensionLoader.cs')
-rw-r--r--Assets/Plugins/GitHub/Editor/ExtensionLoader.cs93
1 files changed, 93 insertions, 0 deletions
diff --git a/Assets/Plugins/GitHub/Editor/ExtensionLoader.cs b/Assets/Plugins/GitHub/Editor/ExtensionLoader.cs
new file mode 100644
index 0000000..f3a7e9e
--- /dev/null
+++ b/Assets/Plugins/GitHub/Editor/ExtensionLoader.cs
@@ -0,0 +1,93 @@
+using UnityEditor;
+using UnityEngine;
+using System.IO;
+using System;
+
+namespace GitHub.Unity
+{
+ [InitializeOnLoad]
+ public class ExtensionLoader : ScriptableSingleton<ExtensionLoader>
+ {
+ [SerializeField] private bool initialized = true;
+
+ public bool Initialized
+ {
+ get
+ {
+ return initialized;
+ }
+ set
+ {
+ initialized = value;
+ Save(true);
+ }
+ }
+
+ private static bool inSourceMode = false;
+ private const string sourceModePath = "Assets/Editor/build/";
+ private const string realPath = "Assets/Plugins/GitHub/Editor/";
+
+ private static string[] assemblies20 = { "System.Threading.dll", "AsyncBridge.Net35.dll", "ReadOnlyCollectionsInterfaces.dll", "GitHub.Api.dll", "GitHub.Unity.dll" };
+ private static string[] assemblies45 = { "GitHub.Api.45.dll", "GitHub.Unity.45.dll" };
+
+ private const string GITHUB_UNITY_DISABLE = "GITHUB_UNITY_DISABLE";
+ private static bool IsDisabled { get { return Environment.GetEnvironmentVariable(GITHUB_UNITY_DISABLE) == "1"; } }
+
+ static ExtensionLoader()
+ {
+ if (IsDisabled)
+ {
+ return;
+ }
+ EditorApplication.update += Initialize;
+ }
+
+ private static void Initialize()
+ {
+ EditorApplication.update -= Initialize;
+
+ // we're always doing this right now because if the plugin gets updated all the meta files will be disabled and we need to re-enable them
+ // we should probably detect if our assets change and re-run this instead of doing it every time
+ //if (!ExtensionLoader.instance.Initialized)
+ {
+ var scriptPath = Path.Combine(Application.dataPath, "Editor" + Path.DirectorySeparatorChar + "GitHub.Unity" + Path.DirectorySeparatorChar + "EntryPoint.cs");
+ inSourceMode = File.Exists(scriptPath);
+ ToggleAssemblies();
+ //ExtensionLoader.instance.Initialized = true;
+ AssetDatabase.SaveAssets();
+ }
+
+ }
+
+ private static void ToggleAssemblies()
+ {
+ var path = inSourceMode ? sourceModePath : realPath;
+#if NET_4_6
+ ToggleAssemblies(path, assemblies20, false);
+ ToggleAssemblies(path, assemblies45, true);
+#else
+ ToggleAssemblies(path, assemblies45, false);
+ ToggleAssemblies(path, assemblies20, true);
+#endif
+ }
+
+ private static void ToggleAssemblies(string path, string[] assemblies, bool enable)
+ {
+ foreach (var file in assemblies)
+ {
+ var filepath = path + file;
+ PluginImporter importer = AssetImporter.GetAtPath(filepath) as PluginImporter;
+ if (importer == null)
+ {
+ Debug.LogFormat("GitHub for Unity: Could not find importer for {0}. Some functionality may fail.", filepath);
+ continue;
+ }
+ if (importer.GetCompatibleWithEditor() != enable)
+ {
+ importer.SetCompatibleWithEditor(enable);
+ importer.SaveAndReimport();
+ }
+ }
+ }
+ }
+}