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