Exemplo n.º 1
0
        private RenamingEventArgs FireRenamingEvent(Id3Tag tag, string oldName, string newName)
        {
            EventHandler <RenamingEventArgs> renaming = Renaming;
            var args = new RenamingEventArgs(tag, oldName)
            {
                NewName = newName
            };

            if (renaming != null)
            {
                renaming(this, args);
            }
            return(args);
        }
Exemplo n.º 2
0
        private IEnumerable <T> RenameOrSuggest <T>(IEnumerable <string> filePaths)
            where T : RenameAction, new()
        {
            foreach (string filePath in filePaths)
            {
                if (string.IsNullOrWhiteSpace(filePath))
                {
                    yield return(new T {
                        Directory = filePath,
                        OriginalName = filePath,
                        Status = RenameStatus.Error,
                        ErrorMessage = Id3FileMessages.InvalidFilePath
                    });

                    continue;
                }

                if (!File.Exists(filePath))
                {
                    yield return(new T {
                        Directory = filePath,
                        OriginalName = filePath,
                        Status = RenameStatus.Error,
                        ErrorMessage = Id3FileMessages.MissingFile
                    });

                    continue;
                }

                var result = new T {
                    Directory    = Path.GetDirectoryName(filePath),
                    OriginalName = Path.GetFileName(filePath)
                };

                using (var mp3 = new Mp3File(filePath))
                {
                    Id3Tag tag = mp3.GetTag(2, 3);
                    if (tag == null)
                    {
                        result.Status       = RenameStatus.Error;
                        result.ErrorMessage = Id3FileMessages.MissingId3v23TagInFile;
                        yield return(result);

                        continue;
                    }

                    string missingFrameName = null;
                    string newName          = FramePlaceholderPattern.Replace(_pattern, match => {
                        string frameName           = match.Groups[1].Value;
                        string frameNameKey        = frameName.ToLowerInvariant();
                        PropertyInfo frameProperty = _mapping[frameNameKey];
                        var frame         = (Id3Frame)frameProperty.GetValue(tag, null);
                        string frameValue = frame.IsAssigned ? frame.ToString() : FireResolveMissingDataEvent(tag, frame, result.OriginalName);
                        if (string.IsNullOrEmpty(frameValue))
                        {
                            missingFrameName = frameName;
                        }
                        return(frameValue);
                    });

                    if (missingFrameName != null)
                    {
                        result.Status       = RenameStatus.Error;
                        result.ErrorMessage = string.Format(Id3FileMessages.MissingDataForFrame, missingFrameName);
                        yield return(result);

                        continue;
                    }

                    result.NewName = newName + ".mp3";
                    RenamingEventArgs renamingEventResult = FireRenamingEvent(tag, result.OriginalName, result.NewName);
                    if (renamingEventResult.Cancel)
                    {
                        result.Status = RenameStatus.Cancelled;
                    }
                    else
                    {
                        result.NewName = renamingEventResult.NewName;
                    }
                    if (result.OriginalName.Equals(result.NewName, StringComparison.Ordinal))
                    {
                        result.Status = RenameStatus.CorrectlyNamed;
                    }
                    yield return(result);
                }
            }
        }