mirror of
https://github.com/fergalmoran/Readarr.git
synced 2026-03-21 04:45:13 +00:00
* Cache result of GetAllArtists
* Fixed: Manual import not respecting album import notifications
* Fixed: partial album imports stay in queue, prompting manual import
* Fixed: Allow release if tracks are missing
* Fixed: Be tolerant of missing/extra "The" at start of artist name
* Improve manual import UI
* Omit video tracks from DB entirely
* Revert "faster test packaging in build.sh"
This reverts commit 2723e2a7b8.
-u and -T are not supported on macOS
* Fix tests on linux and macOS
* Actually lint on linux
On linux yarn runs scripts with sh not bash so ** doesn't recursively glob
* Match whole albums
* Option to disable fingerprinting
* Rip out MediaInfo
* Don't split up things that have the same album selected in manual import
* Try to speed up IndentificationService
* More speedups
* Some fixes and increase power of recording id
* Fix NRE when no tags
* Fix NRE when some (but not all) files in a directory have missing tags
* Bump taglib, tidy up tag parsing
* Add a health check
* Remove media info setting
* Tags -> audioTags
* Add some tests where tags are null
* Rename history events
* Add missing method to interface
* Reinstate MediaInfo tags and update info with artist scan
Also adds migration to remove old format media info
* This file no longer exists
* Don't penalise year if missing from tags
* Formatting improvements
* Use correct system newline
* Switch to the netstandard2.0 library to support net 461
* TagLib.File is IDisposable so should be in a using
* Improve filename matching and add tests
* Neater logging of parsed tags
* Fix disk scan tests for new media info update
* Fix quality detection source
* Fix Inexact Artist/Album match
* Add button to clear track mapping
* Fix warning
* Pacify eslint
* Use \ not /
* Fix UI updates
* Fix media covers
Prevent localizing URL propaging back to the metadata object
* Reduce database overhead broadcasting UI updates
* Relax timings a bit to make test pass
* Remove irrelevant tests
* Test framework for identification service
* Fix PreferMissingToBadMatch test case
* Make fingerprinting more robust
* More logging
* Penalize unknown media format and country
* Prefer USA to UK
* Allow Data CD
* Fix exception if fingerprinting fails for all files
* Fix tests
* Fix NRE
* Allow apostrophes and remove accents in filename aggregation
* Address codacy issues
* Cope with old versions of fpcalc and suggest upgrade
* fpcalc health check passes if fingerprinting disabled
* Get the Artist meta with the artist
* Fix the mapper so that lazy loaded lists will be populated on Join
And therefore we can join TrackFiles on Tracks by default and avoid an
extra query
* Rename subtitle -> lyric
* Tidy up MediaInfoFormatter
131 lines
3.9 KiB
C#
131 lines
3.9 KiB
C#
using System.Collections.Generic;
|
|
using NzbDrone.Core.MediaFiles;
|
|
using NzbDrone.Core.Qualities;
|
|
using NzbDrone.Core.Music;
|
|
using NzbDrone.Core.Parser.Model;
|
|
|
|
namespace NzbDrone.Core.Organizer
|
|
{
|
|
public interface IFilenameSampleService
|
|
{
|
|
SampleResult GetStandardTrackSample(NamingConfig nameSpec);
|
|
|
|
string GetArtistFolderSample(NamingConfig nameSpec);
|
|
string GetAlbumFolderSample(NamingConfig nameSpec);
|
|
}
|
|
|
|
public class FileNameSampleService : IFilenameSampleService
|
|
{
|
|
private readonly IBuildFileNames _buildFileNames;
|
|
|
|
private static Artist _standardArtist;
|
|
private static Album _standardAlbum;
|
|
private static Track _track1;
|
|
private static List<Track> _singleTrack;
|
|
private static TrackFile _singleTrackFile;
|
|
|
|
public FileNameSampleService(IBuildFileNames buildFileNames)
|
|
{
|
|
_buildFileNames = buildFileNames;
|
|
|
|
_standardArtist = new Artist
|
|
{
|
|
Metadata = new ArtistMetadata
|
|
{
|
|
Name = "The Artist Name"
|
|
}
|
|
};
|
|
|
|
_standardAlbum = new Album
|
|
{
|
|
Title = "The Album Title",
|
|
ReleaseDate = System.DateTime.Today,
|
|
AlbumType = "Album",
|
|
Disambiguation = "The Best Album",
|
|
};
|
|
|
|
var _release = new AlbumRelease
|
|
{
|
|
Album = _standardAlbum,
|
|
Media = new List<Medium>
|
|
{
|
|
new Medium
|
|
{
|
|
Name = "CD 1: First Years",
|
|
Format = "CD",
|
|
Number = 1
|
|
}
|
|
},
|
|
Monitored = true
|
|
};
|
|
|
|
_track1 = new Track
|
|
{
|
|
AlbumRelease = _release,
|
|
AbsoluteTrackNumber = 3,
|
|
MediumNumber = 1,
|
|
|
|
Title = "Track Title (1)",
|
|
|
|
};
|
|
|
|
_singleTrack = new List<Track> { _track1 };
|
|
|
|
var mediaInfo = new MediaInfoModel()
|
|
{
|
|
AudioFormat = "Flac Audio",
|
|
AudioChannels = 2,
|
|
AudioBitrate = 875,
|
|
AudioBits = 24,
|
|
AudioSampleRate = 44100
|
|
};
|
|
|
|
_singleTrackFile = new TrackFile
|
|
{
|
|
Quality = new QualityModel(Quality.MP3_256, new Revision(2)),
|
|
RelativePath = "Artist.Name.Album.Name.TrackNum.Track.Title.MP3256.mp3",
|
|
SceneName = "Artist.Name.Album.Name.TrackNum.Track.Title.MP3256",
|
|
ReleaseGroup = "RlsGrp",
|
|
MediaInfo = mediaInfo
|
|
};
|
|
|
|
}
|
|
|
|
public SampleResult GetStandardTrackSample(NamingConfig nameSpec)
|
|
{
|
|
var result = new SampleResult
|
|
{
|
|
FileName = BuildTrackSample(_singleTrack, _standardArtist, _standardAlbum, _singleTrackFile, nameSpec),
|
|
Artist = _standardArtist,
|
|
Album = _standardAlbum,
|
|
Tracks = _singleTrack,
|
|
TrackFile = _singleTrackFile
|
|
};
|
|
|
|
return result;
|
|
}
|
|
|
|
public string GetArtistFolderSample(NamingConfig nameSpec)
|
|
{
|
|
return _buildFileNames.GetArtistFolder(_standardArtist, nameSpec);
|
|
}
|
|
|
|
public string GetAlbumFolderSample(NamingConfig nameSpec)
|
|
{
|
|
return _buildFileNames.GetAlbumFolder(_standardArtist, _standardAlbum, nameSpec);
|
|
}
|
|
|
|
private string BuildTrackSample(List<Track> tracks, Artist artist, Album album, TrackFile trackFile, NamingConfig nameSpec)
|
|
{
|
|
try
|
|
{
|
|
return _buildFileNames.BuildTrackFileName(tracks, artist, album, trackFile, nameSpec);
|
|
}
|
|
catch (NamingFormatException)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
}
|
|
}
|
|
}
|