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; | |||
|  |         } | |||
|  |     } | |||
|  | } |