Example #1
0
        private void DrawFile(ICollection <FileMoveInfo> filesList, FileMoveInfo fileMoveInfo)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.BeginVertical();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("From:", GUILayout.Width(49));
            fileMoveInfo.From = EditorGUILayout.TextField("", fileMoveInfo.From);
            EditorGUILayout.LabelField("To:", GUILayout.Width(35));
            fileMoveInfo.To = EditorGUILayout.TextField("", fileMoveInfo.To);
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.BeginHorizontal();
            fileMoveInfo.PerformOnStage = (BuildStage)EditorGUILayout.EnumPopup("Perform on stage:", fileMoveInfo.PerformOnStage);
            if (fileMoveInfo.PerformOnStage == BuildStage.BeforeBuild)
            {
                fileMoveInfo.Revert = EditorGUILayout.Toggle("Revert", fileMoveInfo.Revert);
            }
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();
            if (GUILayout.Button("-", GUILayout.Width(30), GUILayout.Height(30)))
            {
                _frameAction += () => filesList.Remove(fileMoveInfo);
            }

            EditorGUILayout.EndHorizontal();
        }
        private static List <FileMoveResult> RecursiveMerge(this DirectoryInfo source, string newpath, ExistingFileBehaviour existingFileBehaviour = ExistingFileBehaviour.Error)
        {
            List <FileMoveInfo> MoveInfo = new List <FileMoveInfo>();

            foreach (FileInfo fi in source.EnumerateFiles("*", SearchOption.AllDirectories))
            {
                MoveInfo.Add(new FileMoveInfo(fi, source.FullName, newpath));
            }

            if (existingFileBehaviour == ExistingFileBehaviour.Error)
            {
                FileMoveInfo firstExists = MoveInfo.FirstOrDefault(f => f.TargetExists);

                if (firstExists != null)
                {
                    throw new FileAlreadyExistsException(firstExists.TargetPath);
                }
            }

            foreach (FileMoveInfo thisMoveInfo in MoveInfo)
            {
                DirectoryInfo parentDirectory = new FileInfo(thisMoveInfo.TargetPath).Directory;

                if (!parentDirectory.Exists)
                {
                    parentDirectory.Create();
                }

                thisMoveInfo.Source.MoveTo(thisMoveInfo.TargetPath, existingFileBehaviour);
            }

            List <DirectoryInfo> toRemove = source.EnumerateDirectories("*", SearchOption.AllDirectories).OrderByDescending(d => d.FullName.Length).ToList();

            foreach (DirectoryInfo di in toRemove)
            {
                if (!di.EnumerateFileSystemInfos().Any())
                {
                    di.Delete();
                }
            }

            if (!source.EnumerateFileSystemInfos().Any())
            {
                source.Delete();
            }

            return(MoveInfo.Select(m => m.Result).ToList());
        }