124 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			124 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.IO;
							 | 
						|||
| 
								 | 
							
								using System.Linq;
							 | 
						|||
| 
								 | 
							
								using SRDebugger.Internal.Editor;
							 | 
						|||
| 
								 | 
							
								using SRF;
							 | 
						|||
| 
								 | 
							
								using UnityEngine;
							 | 
						|||
| 
								 | 
							
								using UnityEditor;
							 | 
						|||
| 
								 | 
							
								#pragma warning disable 162
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace SRDebugger.Editor
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    [InitializeOnLoad]
							 | 
						|||
| 
								 | 
							
								    static class Migrations
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        static Migrations()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            RunMigrations();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private const bool EnableLog = false;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public class Migration
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            public readonly string Id;
							 | 
						|||
| 
								 | 
							
								            public readonly string[] ObsoleteFiles;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            public Migration(string id, string[] obsoleteFiles)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Id = id;
							 | 
						|||
| 
								 | 
							
								                ObsoleteFiles = obsoleteFiles;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static List<Migration> AvailableMigrations = new List<Migration>()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            new Migration("DeleteOldEditorResources", new[]
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/BG_Dark.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/BG_Light.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/DemoSprite.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Logo_DarkBG.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Logo_LightBG.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/WelcomeLogo_DarkBG.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/WelcomeLogo_LightBG.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Icons/Dark/console-25.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Icons/Dark/options-25.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Icons/Dark/profiler-25.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Icons/Light/console-25.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Icons/Light/options-25.png",
							 | 
						|||
| 
								 | 
							
								                "Editor/Resources/SRDebugger/Icons/Light/profiler-25.png",
							 | 
						|||
| 
								 | 
							
								            })
							 | 
						|||
| 
								 | 
							
								        };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static void RunMigrations(bool forceRun = false)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if(EnableLog)
							 | 
						|||
| 
								 | 
							
								                Debug.Log("[SRDebugger] Running Migrations...");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            foreach (var m in AvailableMigrations)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                var key = GetProjectPrefsKey(m.Id);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (!forceRun && EditorPrefs.GetBool(key, false))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    continue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                EditorPrefs.SetBool(key, true);
							 | 
						|||
| 
								 | 
							
								                RunMigration(m);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static void RunMigration(Migration migration)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (EnableLog)
							 | 
						|||
| 
								 | 
							
								                Debug.Log("Running Migration: " + migration.Id);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var assetPaths = AssetDatabase.GetAllAssetPaths();
							 | 
						|||
| 
								 | 
							
								            var root = new DirectoryInfo(SRDebugEditorUtil.GetRootPath());
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if(EnableLog)
							 | 
						|||
| 
								 | 
							
								                Debug.Log("Using Root Path: " + root.FullName);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var obsoleteAssets = migration.ObsoleteFiles.Select(p => root + "/" + p).ToList();
							 | 
						|||
| 
								 | 
							
								            var deleteQueue = assetPaths.Where(assetPath => obsoleteAssets.Contains(assetPath)).ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (deleteQueue.Count == 0)
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var message = "The following files used by a previous version of SRDebugger are obsolete and can be safely deleted: \n\n" +
							 | 
						|||
| 
								 | 
							
								                          deleteQueue.Aggregate((s1, s2) => s1 + "\n" + s2);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Debug.Log(message);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            message += "\n\nIt is recommended to delete these files.";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (EditorUtility.DisplayDialog("SRDebugger Migration Assistant",
							 | 
						|||
| 
								 | 
							
								                message, "Delete Now", "Ignore"))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                foreach (var s in deleteQueue)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Debug.Log("[SRDebugger] Deleting Asset {0}".Fmt(s));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    if (!AssetDatabase.DeleteAsset(s))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        Debug.LogWarning("[SRDebugger] Error deleting asset {0}".Fmt(s));
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                Debug.Log("[SRDebugger] Migration Complete");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                EditorUtility.DisplayDialog("SRDebugger Migration Assitant",
							 | 
						|||
| 
								 | 
							
								                    "You can run this migration check again via the \"Run Migrations\" button in the advanced tab of the SRDebugger settings window.", "OK");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private static string GetProjectPrefsKey(string key)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return "SRDebugger_Migration_" + Application.dataPath + "_" + key;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |