Added AudioFileScanner and AudioImageExtractor logic.

This commit is contained in:
2025-02-25 00:42:34 -05:00
parent 960c6b9ec7
commit b38e4dc858
8 changed files with 181 additions and 22 deletions

View File

@@ -0,0 +1,57 @@
using Harmonia.Core.Imaging;
using Harmonia.Core.Models;
using Harmonia.Core.Tags;
namespace Harmonia.Core.Scanner;
public class AudioFileScanner(ITagResolver tagResolver, IAudioImageExtractor audioImageExtractor) : IAudioFileScanner
{
public Song[] GetSongs(string[] fileNames)
{
List<Song> songs = [];
foreach (string fileName in fileNames)
{
if (string.IsNullOrWhiteSpace(fileName) || File.Exists(fileName) == false)
continue;
Song? song = GetSong(fileName);
if (song == null)
continue;
songs.Add(song);
}
return [.. songs];
}
private Song GetSong(string fileName)
{
FileInfo fileInfo = new(fileName);
SongTagInfo songTagInfo = tagResolver.GetSongTagInfo(fileName);
using SongPictureInfo songPictureInfo = audioImageExtractor.ExtractImage(fileName, songTagInfo);
Song song = new()
{
FileName = fileName,
Size = (ulong)fileInfo.Length,
LastModified = fileInfo.LastWriteTime,
Title = songTagInfo.Title,
Album = songTagInfo.Album,
Artists = songTagInfo.Artists,
AlbumArtists = songTagInfo.AlbumArtists,
DiscNumber = songTagInfo.DiscNumber,
TrackNumber = songTagInfo.TrackNumber,
Length = songTagInfo.Length,
Year = songTagInfo.Year,
Genre = songTagInfo.Genre,
BitRate = songTagInfo.BitRate,
SampleRate = songTagInfo.SampleRate,
ImageName = songPictureInfo.ImageName,
ImageHash = songPictureInfo.ImageHash
};
return song;
}
}

View File

@@ -0,0 +1,8 @@
using Harmonia.Core.Models;
namespace Harmonia.Core.Scanner;
public interface IAudioFileScanner
{
Song[] GetSongs(string[] fileNames);
}