Exemplo n.º 1
0
        static async Task Work(CliEnvironment env)
        {
            var args   = env.Args;
            var client = DiscogsApiClientProvider.CreateDiscogsApiClient();

            var workingDirs = await GetWorkingDirectories(args);

            foreach (var dir in workingDirs.Filter(x => x.Tracks.Count < 2))
            {
                env.WriteInfoLine($"Ignoring {dir.Path}");
            }
            workingDirs = workingDirs.Filter(x => x.Tracks.Count >= 2).ToList();

            var counter = 0;

            void Up() => env.UpdateProgress((double)counter++ / workingDirs.Count);

            foreach (var dir in workingDirs)
            {
                env.WriteInfoLine($"Processing {dir.Path}");
                await ProcessDir(env, client, dir);

                Up();
            }
        }
Exemplo n.º 2
0
        static async Task ProcessDir(CliEnvironment env, DiscogsApiClient discogsApiClient, TrackDirInfo trackDirInfo)
        {
            var dirPath = trackDirInfo.Path;

            var outputRootOpt = await Matcher.Match(discogsApiClient, trackDirInfo);

            if (outputRootOpt.IsNone)
            {
                return;
            }
            var outputRoot = outputRootOpt.ValueUnsafe();

            foreach (var track in outputRoot.Tracks)
            {
                var trackNewFileName = $"{track.TrackNumber:00}. {track.Title}{Path.GetExtension(track.Path)}";

                var trackOldPath = track.Path;
                var trackNewPath = Path.Combine(dirPath, trackNewFileName);
                if (trackOldPath != trackNewPath)
                {
                    env.WriteInfoLine($"Rename '{Path.GetFileName(track.Path)}' -> '{trackNewFileName}'");
                    if (!env.Args.Dry)
                    {
                        File.Move(trackOldPath, trackNewPath);
                    }
                }

                if (!env.Args.Dry)
                {
                    var tagLibFile = TagLib.File.Create(trackNewPath);
                    var tags       = tagLibFile.Tag;
                    tags.Performers = outputRoot.Performers.ToArray();
                    tags.Album      = outputRoot.Album;
                    tags.Title      = track.Title;
                    tags.Track      = (uint)track.TrackNumber;
                    tagLibFile.Save();
                }
            }

            var newDirPath = Path.Combine(Path.GetDirectoryName(dirPath), outputRoot.Album);

            if (dirPath == newDirPath)
            {
                return;
            }
            env.WriteInfoLine($"Rename '{dirPath}' -> '{newDirPath}'");
            if (!env.Args.Dry)
            {
                Directory.Move(dirPath, newDirPath);
            }
        }
Exemplo n.º 3
0
 public EditorController(CliEnvironment cliEnv)
 {
     _cliEnv = cliEnv;
 }