public AudioFileViewModel(ITaggedAudioFile audioFile) { AudioFile = audioFile; Metadata = new(audioFile.Metadata); Metadata.PropertyChanged += (_, e) => { if (e.PropertyName != null && e.PropertyName.Equals("Modified", StringComparison.Ordinal)) { RevertCommand !.RaiseCanExecuteChanged(); } }; SaveCommand = new(() => { AudioFile.SaveMetadata( ContainerLocator.Current.Resolve <IMetadataSettingService>() [IO.Path.GetExtension(Path).TrimStart('.')]); Metadata.UpdateModel(AudioFile.Metadata); }); RevertCommand = new(() => { AudioFile.LoadMetadata(); Metadata.UpdateModel(AudioFile.Metadata); }, () => Metadata.Modified); }
public FileInfo Extract([NotNull] ITaggedAudioFile audioFile) { if (audioFile == null) { throw new ArgumentNullException(nameof(audioFile)); } if (audioFile.Metadata.CoverArt == null) { return(null); } // The output directory defaults to the AudioFile's current directory var outputDirectory = _encodedDirectoryName?.ReplaceWith(audioFile.Metadata) ?? Path.GetDirectoryName(audioFile.Path); // ReSharper disable once AssignNullToNotNullAttribute var outputDirectoryInfo = Directory.CreateDirectory(outputDirectory); // The output file names default to the input file names var outputFileName = _encodedFileName?.ReplaceWith(audioFile.Metadata) ?? Path.GetFileNameWithoutExtension(audioFile.Path); var result = new FileInfo(Path.Combine(outputDirectoryInfo.FullName, outputFileName + audioFile.Metadata.CoverArt.FileExtension)); using (var fileStream = result.Open(Overwrite ? FileMode.Create : FileMode.CreateNew, FileAccess.Write)) { #if NETSTANDARD2_0 var data = audioFile.Metadata.CoverArt.Data; fileStream.Write(data.ToArray(), 0, data.Length); #else fileStream.Write(audioFile.Metadata.CoverArt.Data); #endif } return(result); }