Пример #1
0
        public void Test_AnalyserWithNotEnoughData()
        {
            var firstItem = new TestMp3File("1. name1 - title1.mp3")
            {
                TrackId = "1", Title = "title1", Artist = "name1"
            };
            var secondItem = new TestMp3File("2.  - title2.mp3")
            {
                TrackId = "1", Title = "title2", Artist = "name1"
            };
            var thirdItem = new TestMp3File("3. .mp3")
            {
                TrackId = "1", Title = "title3", Artist = "name3"
            };

            var files = new TestMp3File[]
            {
                firstItem,
                secondItem,
                thirdItem,
            };

            var analyser = new Mp3FileAnalyser(files, "{id}. {artist} - {title}");
            var diffs    = analyser.GetDifferences().ToList();

            var expectedDiff1 = new FileDifferences(secondItem);

            expectedDiff1.Add(TagType.Id, new Diff {
                FileNameValue = "2", TagValue = "1"
            });
            expectedDiff1.Add(TagType.Artist, new Diff {
                FileNameValue = "", TagValue = "name1"
            });

            var expectedDiff2 = new FileDifferences(thirdItem);

            expectedDiff2.Add(TagType.Id, new Diff {
                FileNameValue = "3", TagValue = "1"
            });
            expectedDiff2.Add(TagType.Title, new Diff {
                FileNameValue = "", TagValue = "title3"
            });
            expectedDiff2.Add(TagType.Artist, new Diff {
                FileNameValue = "", TagValue = "name3"
            });

            var expectedDiffs = new List <FileDifferences>()
            {
                expectedDiff1,
                expectedDiff2,
            };

            Assert.AreEqual(expectedDiffs.Count, diffs.Count);

            for (var i = 0; i < diffs.Count; i++)
            {
                Assert.AreEqual(expectedDiffs[i].Mp3File, diffs[i].Mp3File);

                Assert.AreEqual(expectedDiffs[i].Diffs.Count, diffs[i].Diffs.Count);

                foreach (var diff in expectedDiffs[i].Diffs)
                {
                    Assert.AreEqual(expectedDiffs[i].Diffs[diff.Key].FileNameValue, diffs[i].Diffs[diff.Key].FileNameValue);
                    Assert.AreEqual(expectedDiffs[i].Diffs[diff.Key].TagValue, diffs[i].Diffs[diff.Key].TagValue);
                }
            }
        }
Пример #2
0
        public static void Main(string[] args)
        {
            /*try
             * {*/
            var argsManager = new ArgsManager(args);

            argsManager.CheckArgsValidity();

            var     data = argsManager.ExtactArgs();
            Mp3File mp3;
            IEnumerable <IMp3File> mp3Files;

            switch (data.Action)
            {
            case ProgramAction.Analyse:
                mp3Files = Directory.GetFiles(data.Path, "*.mp3").Select(file => new Mp3File(file, new FileSaver(file))).ToArray();
                var pathAnalyser = new Mp3FileAnalyser(mp3Files, data.Mask);

                var differences = pathAnalyser.GetDifferences();
                new CommunicationWithUser().ShowDifferences(differences, new ConsoleCommunication());

                foreach (var mp3File in mp3Files)
                {
                    mp3File?.Dispose();
                }

                break;

            case ProgramAction.Mp3Edit:
                using (mp3 = new Mp3File(data.Path, new FileSaver(data.Path)))
                {
                    var tagsChanger = new Mp3TagChanger(mp3, data.Mask, new FileSaver(RollbackData));
                    tagsChanger.ChangeTags();
                }
                break;

            case ProgramAction.FileRename:
                using (mp3 = new Mp3File(data.Path, new FileSaver(data.Path)))
                {
                    var renamer     = new Mp3FileNameChanger(mp3, data.Mask, new FileSaver(RollbackData));
                    var newFileName = renamer.GetNewFileName();
                    mp3.ChangeFileName(newFileName);
                }
                break;

            case ProgramAction.Sync:
                mp3Files = Directory.GetFiles(data.Path, "*.mp3").Select(file => new Mp3File(file, new FileSaver(file))).ToArray();
                var syncer = new Mp3Syncing(mp3Files, data.Mask, new ConsoleCommunication(), new FileSaver(RollbackData));
                syncer.SyncFiles();

                foreach (var mp3File in mp3Files)
                {
                    mp3File?.Dispose();
                }

                break;

            case ProgramAction.Rollback:

                using (var rollbackSystem = new RollbackManager(new FileSaver(RollbackData)))
                {
                    var state = rollbackSystem.Rollback();

                    Console.WriteLine(
                        state.State == RollbackState.Fail
                                                                ? $"Error occured while trying doing rollback. Details : \n\tError:{state.FailReason}"
                                                                : $"Rollback success.");
                }

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            Console.WriteLine("Done!");

            /*}
             * catch (Exception e)
             * {
             #if DEBUG
             *      Console.WriteLine("Exeption: \r\n{0} \r\n\nAt:\n{1}", e.Message, e.StackTrace);
             #else
             *      Console.WriteLine("Error occured: {0}", e.Message);
             #endif
             * }
             * finally
             * {
             *      Console.ReadKey();
             * }*/
        }