예제 #1
0
        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);
        }
예제 #2
0
        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);
        }