示例#1
0
        /// <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);
示例#2
0
        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());
        }
示例#3
0
 /// <summary>
 /// Performs an operation on the given folder
 /// </summary>
 public abstract OperationLog[] Operate(PathString target, PathString destination, EFileOperation operation);