Exemple #1
0
    public static void Main(string[] args)
    {
        // Load preferences [creates an immutable object (record)]
        var prefs = Preferences.LoadConfig();

        // Process input arguments
        bool makeChangesPermanent = false;
        bool includeFolders       = false;

        string libraryPath = prefs.LibraryPath;

        if (args.Any())
        {
            if (args[0].Replace('\\', '/').Contains('/'))
            {
                libraryPath = args[0]; // if path is provided by argument, overrule config.json path
            }
            Console.WriteLine($"\nLibrary path: {Print.InfoText(libraryPath)}");

            // Flags
            string cliFlags = string.Join(" ", args).ToLowerInvariant();

            if (cliFlags.Contains("--rename"))
            {
                makeChangesPermanent = true;
            }
            if (cliFlags.Contains("--includefolders"))
            {
                includeFolders = true;
            }
        }

        // Update runtime preferences
        prefs.MakeChangesPermanent = makeChangesPermanent;
        prefs.RenameFolders        = includeFolders;

        // Init counters (unchanged, conflict, renamed)
        var counter = new Counter(0, 0, 0);

        // Rename folders
        if (prefs.RenameFolders)
        {
            var folders = Scan.Folders(libraryPath, prefs);
            if (folders.Any())
            {
                if (Print.FolderConfirmation(folders, makeChangesPermanent))
                {
                    for (int i = folders.Length - 1; i >= 0; i--)
                    {
                        // WARNING: Reversed loop order becasuse innermost folder must be renamed first
                        // Simplifying the outermost folder first will break address of inner folders
                        string fullPath = folders[i];
                        Rename.SimplifyFolder(prefs, fullPath, ref counter);
                    }
                }
            }
            Console.WriteLine("\n\n");
        }

        // Rename files
        var files = Scan.Files(libraryPath, prefs);

        if (files.Any())
        {
            if (Print.FilesConfirmation(files, makeChangesPermanent))
            {
                foreach (var fullPath in files)
                {
                    Rename.SimplifyFile(prefs, fullPath, ref counter);
                }
            }
        }

        // Print results
        Print.Results(counter.Renamed, counter.Conflict, counter.Unchanged);
    }