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); }
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); } } }