/// <summary> /// Returns the file operation based on enum /// </summary> /// <param name="operation"></param> /// <returns></returns> public static AFileOperation GetOperation(EFileOperation operation) { switch (operation) { case EFileOperation.ConvertToGameDataSo: return(new ConvertToGameDataSo()); } return(default);
public override OperationLog[] Operate(PathString target, PathString destination, EFileOperation operation) { List <OperationLog> logs = new List <OperationLog>(); AFileOperation op = UTEFileOperation.GetOperation(operation); if (!target.TryAsDirectoryInfo(out DirectoryInfo info)) { return(Error("Failed to get target as directory")); } DirectoryInfo[] dirs = info.GetDirectories(); for (int i = 0; i < dirs.Length; i++) { DirectoryInfo child = dirs[i]; string key = child.Name; PathString operationDest = destination + child.Name; EditorUtility.DisplayProgressBar(cBarTile, $"target:{child.FullName} - dest:{operationDest}", (float)i / dirs.Length); logs.AddRange(SingleDepthOperation(child, operationDest, op, key)); } EditorUtility.DisplayProgressBar(cBarTile, $"Refreshing Asset Database", 1); AssetDatabase.Refresh(); EditorUtility.ClearProgressBar(); OperationLog[] SingleDepthOperation(DirectoryInfo folder, PathString dest, AFileOperation innerOp, string key) { List <OperationLog> innerLogs = new List <OperationLog>(); dest.CreateIfNotExistsDirectory(); foreach (DirectoryInfo i in folder.GetDirectories()) { innerLogs.AddRange(SingleDepthOperation(i, dest + i.Name, innerOp, key)); } foreach (FileInfo i in folder.GetFiles()) { PathString targ = i.FullName; if (targ.Extension.Contains("meta")) { continue; } PathString child = dest + i.Name; innerLogs.Add(Info($"Performing {operation} with key:{key} on target {targ} to destination {child.RemoveAtEnd()}")); innerLogs.AddRange(innerOp.Operate(targ, dest + i.Name, key)); } return(innerLogs.ToArray()); } return(logs.ToArray()); }
/// <summary> /// Performs an operation on the given folder /// </summary> public abstract OperationLog[] Operate(PathString target, PathString destination, EFileOperation operation);