mirror of https://github.com/lidarr/Lidarr
Null Checks for Track Parsing, Parse by Title if TrackNumber is missing
This commit is contained in:
parent
02716c26f6
commit
5fec72395c
|
@ -13,7 +13,7 @@ namespace Lidarr.Api.V3.Albums
|
||||||
{
|
{
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public int ArtistId { get; set; }
|
public int ArtistId { get; set; }
|
||||||
public string Label { get; set; }
|
public string AlbumLabel { get; set; }
|
||||||
public bool Monitored { get; set; }
|
public bool Monitored { get; set; }
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
public int ProfileId { get; set; }
|
public int ProfileId { get; set; }
|
||||||
|
@ -41,7 +41,7 @@ namespace Lidarr.Api.V3.Albums
|
||||||
{
|
{
|
||||||
Id = model.Id,
|
Id = model.Id,
|
||||||
ArtistId = model.ArtistId,
|
ArtistId = model.ArtistId,
|
||||||
Label = model.Label,
|
AlbumLabel = model.Label,
|
||||||
Path = model.Path,
|
Path = model.Path,
|
||||||
ProfileId = model.ProfileId,
|
ProfileId = model.ProfileId,
|
||||||
Monitored = model.Monitored,
|
Monitored = model.Monitored,
|
||||||
|
|
|
@ -53,9 +53,9 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
|
|
||||||
private Response DownloadRelease(ReleaseResource release)
|
private Response DownloadRelease(ReleaseResource release)
|
||||||
{
|
{
|
||||||
var remoteEpisode = _remoteAlbumCache.Find(release.Guid);
|
var remoteAlbum = _remoteAlbumCache.Find(release.Guid);
|
||||||
|
|
||||||
if (remoteEpisode == null)
|
if (remoteAlbum == null)
|
||||||
{
|
{
|
||||||
_logger.Debug("Couldn't find requested release in cache, cache timeout probably expired.");
|
_logger.Debug("Couldn't find requested release in cache, cache timeout probably expired.");
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_downloadService.DownloadReport(remoteEpisode);
|
_downloadService.DownloadReport(remoteAlbum);
|
||||||
}
|
}
|
||||||
catch (ReleaseDownloadException ex)
|
catch (ReleaseDownloadException ex)
|
||||||
{
|
{
|
||||||
|
@ -77,15 +77,15 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
|
|
||||||
private List<ReleaseResource> GetReleases()
|
private List<ReleaseResource> GetReleases()
|
||||||
{
|
{
|
||||||
if (Request.Query.episodeId.HasValue)
|
if (Request.Query.albumId.HasValue)
|
||||||
{
|
{
|
||||||
return GetEpisodeReleases(Request.Query.episodeId);
|
return GetAlbumReleases(Request.Query.albumId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetRss();
|
return GetRss();
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ReleaseResource> GetEpisodeReleases(int albumId)
|
private List<ReleaseResource> GetAlbumReleases(int albumId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -96,7 +96,7 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Episode search failed: " + ex.Message, ex);
|
_logger.ErrorException("Album search failed: " + ex.Message, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new List<ReleaseResource>();
|
return new List<ReleaseResource>();
|
||||||
|
|
|
@ -64,7 +64,7 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
public static ReleaseResource ToResource(this DownloadDecision model)
|
public static ReleaseResource ToResource(this DownloadDecision model)
|
||||||
{
|
{
|
||||||
var releaseInfo = model.RemoteAlbum.Release;
|
var releaseInfo = model.RemoteAlbum.Release;
|
||||||
var parsedEpisodeInfo = model.RemoteAlbum.ParsedAlbumInfo;
|
var parsedAlbumInfo = model.RemoteAlbum.ParsedAlbumInfo;
|
||||||
var remoteEpisode = model.RemoteAlbum;
|
var remoteEpisode = model.RemoteAlbum;
|
||||||
var torrentInfo = (model.RemoteAlbum.Release as TorrentInfo) ?? new TorrentInfo();
|
var torrentInfo = (model.RemoteAlbum.Release as TorrentInfo) ?? new TorrentInfo();
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
return new ReleaseResource
|
return new ReleaseResource
|
||||||
{
|
{
|
||||||
Guid = releaseInfo.Guid,
|
Guid = releaseInfo.Guid,
|
||||||
Quality = parsedEpisodeInfo.Quality,
|
Quality = parsedAlbumInfo.Quality,
|
||||||
//QualityWeight
|
//QualityWeight
|
||||||
Age = releaseInfo.Age,
|
Age = releaseInfo.Age,
|
||||||
AgeHours = releaseInfo.AgeHours,
|
AgeHours = releaseInfo.AgeHours,
|
||||||
|
@ -80,14 +80,14 @@ namespace Lidarr.Api.V3.Indexers
|
||||||
Size = releaseInfo.Size,
|
Size = releaseInfo.Size,
|
||||||
IndexerId = releaseInfo.IndexerId,
|
IndexerId = releaseInfo.IndexerId,
|
||||||
Indexer = releaseInfo.Indexer,
|
Indexer = releaseInfo.Indexer,
|
||||||
ReleaseGroup = parsedEpisodeInfo.ReleaseGroup,
|
ReleaseGroup = parsedAlbumInfo.ReleaseGroup,
|
||||||
ReleaseHash = parsedEpisodeInfo.ReleaseHash,
|
ReleaseHash = parsedAlbumInfo.ReleaseHash,
|
||||||
Title = releaseInfo.Title,
|
Title = releaseInfo.Title,
|
||||||
//FullSeason = parsedEpisodeInfo.FullSeason,
|
//FullSeason = parsedEpisodeInfo.FullSeason,
|
||||||
//SeasonNumber = parsedEpisodeInfo.SeasonNumber,
|
//SeasonNumber = parsedEpisodeInfo.SeasonNumber,
|
||||||
Language = parsedEpisodeInfo.Language,
|
Language = parsedAlbumInfo.Language,
|
||||||
//AirDate = parsedEpisodeInfo.AirDate,
|
//AirDate = parsedEpisodeInfo.AirDate,
|
||||||
ArtistName = parsedEpisodeInfo.ArtistName,
|
ArtistName = parsedAlbumInfo.ArtistName,
|
||||||
|
|
||||||
//EpisodeNumbers = parsedEpisodeInfo.EpisodeNumbers,
|
//EpisodeNumbers = parsedEpisodeInfo.EpisodeNumbers,
|
||||||
//AbsoluteEpisodeNumbers = parsedEpisodeInfo.AbsoluteEpisodeNumbers,
|
//AbsoluteEpisodeNumbers = parsedEpisodeInfo.AbsoluteEpisodeNumbers,
|
||||||
|
|
|
@ -1,27 +1,59 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Common.Instrumentation.Extensions;
|
using NzbDrone.Common.Instrumentation.Extensions;
|
||||||
|
using NzbDrone.Core.Datastore;
|
||||||
|
using NzbDrone.Core.DecisionEngine;
|
||||||
using NzbDrone.Core.Download;
|
using NzbDrone.Core.Download;
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
|
using NzbDrone.Core.Queue;
|
||||||
|
using NzbDrone.Core.Music;
|
||||||
|
|
||||||
namespace NzbDrone.Core.IndexerSearch
|
namespace NzbDrone.Core.IndexerSearch
|
||||||
{
|
{
|
||||||
class AlbumSearchService : IExecute<AlbumSearchCommand>
|
class AlbumSearchService : IExecute<AlbumSearchCommand>,
|
||||||
//IExecute<MissingAlbumSearchCommand>,
|
IExecute<MissingAlbumSearchCommand>
|
||||||
//IExecute<CutoffUnmetAlbumSearchCommand>
|
//IExecute<CutoffUnmetAlbumSearchCommand>
|
||||||
{
|
{
|
||||||
private readonly ISearchForNzb _nzbSearchService;
|
private readonly ISearchForNzb _nzbSearchService;
|
||||||
|
private readonly IAlbumService _albumService;
|
||||||
|
private readonly IQueueService _queueService;
|
||||||
private readonly IProcessDownloadDecisions _processDownloadDecisions;
|
private readonly IProcessDownloadDecisions _processDownloadDecisions;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
public AlbumSearchService(ISearchForNzb nzbSearchService,
|
public AlbumSearchService(ISearchForNzb nzbSearchService,
|
||||||
|
IAlbumService albumService,
|
||||||
|
IQueueService queueService,
|
||||||
IProcessDownloadDecisions processDownloadDecisions,
|
IProcessDownloadDecisions processDownloadDecisions,
|
||||||
Logger logger)
|
Logger logger)
|
||||||
{
|
{
|
||||||
_nzbSearchService = nzbSearchService;
|
_nzbSearchService = nzbSearchService;
|
||||||
|
_albumService = albumService;
|
||||||
|
_queueService = queueService;
|
||||||
_processDownloadDecisions = processDownloadDecisions;
|
_processDownloadDecisions = processDownloadDecisions;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SearchForMissingAlbums(List<Album> albums, bool userInvokedSearch)
|
||||||
|
{
|
||||||
|
_logger.ProgressInfo("Performing missing search for {0} albums", albums.Count);
|
||||||
|
var downloadedCount = 0;
|
||||||
|
|
||||||
|
foreach (var album in albums)
|
||||||
|
{
|
||||||
|
List<DownloadDecision> decisions;
|
||||||
|
decisions = _nzbSearchService.AlbumSearch(album.Id, false, userInvokedSearch);
|
||||||
|
var processed = _processDownloadDecisions.ProcessDecisions(decisions);
|
||||||
|
|
||||||
|
downloadedCount += processed.Grabbed.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.ProgressInfo("Completed missing search for {0} albums. {1} reports downloaded.", albums.Count, downloadedCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Execute(AlbumSearchCommand message)
|
public void Execute(AlbumSearchCommand message)
|
||||||
{
|
{
|
||||||
foreach (var albumId in message.AlbumIds)
|
foreach (var albumId in message.AlbumIds)
|
||||||
|
@ -33,5 +65,47 @@ namespace NzbDrone.Core.IndexerSearch
|
||||||
_logger.ProgressInfo("Album search completed. {0} reports downloaded.", processed.Grabbed.Count);
|
_logger.ProgressInfo("Album search completed. {0} reports downloaded.", processed.Grabbed.Count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Execute(MissingAlbumSearchCommand message)
|
||||||
|
{
|
||||||
|
List<Album> albums;
|
||||||
|
|
||||||
|
if (message.ArtistId.HasValue)
|
||||||
|
{
|
||||||
|
int artistId = message.ArtistId.Value;
|
||||||
|
|
||||||
|
albums = _albumService.AlbumsWithoutFiles(new PagingSpec<Album>
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
PageSize = 100000,
|
||||||
|
SortDirection = SortDirection.Ascending,
|
||||||
|
SortKey = "Id",
|
||||||
|
FilterExpression =
|
||||||
|
v =>
|
||||||
|
v.Monitored == true &&
|
||||||
|
v.Artist.Monitored == true
|
||||||
|
}).Records.Where(e => e.ArtistId.Equals(artistId)).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
albums = _albumService.AlbumsWithoutFiles(new PagingSpec<Album>
|
||||||
|
{
|
||||||
|
Page = 1,
|
||||||
|
PageSize = 100000,
|
||||||
|
SortDirection = SortDirection.Ascending,
|
||||||
|
SortKey = "Id",
|
||||||
|
FilterExpression =
|
||||||
|
v =>
|
||||||
|
v.Monitored == true &&
|
||||||
|
v.Artist.Monitored == true
|
||||||
|
}).Records.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
var queue = _queueService.GetQueue().Select(q => q.Album.Id);
|
||||||
|
var missing = albums.Where(e => !queue.Contains(e.Id)).ToList();
|
||||||
|
|
||||||
|
SearchForMissingAlbums(missing, message.Trigger == CommandTrigger.Manual);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.IndexerSearch
|
||||||
|
{
|
||||||
|
public class MissingAlbumSearchCommand : Command
|
||||||
|
{
|
||||||
|
public int? ArtistId { get; set; }
|
||||||
|
|
||||||
|
public override bool SendUpdatesToClient => true;
|
||||||
|
|
||||||
|
public MissingAlbumSearchCommand()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public MissingAlbumSearchCommand(int artistId)
|
||||||
|
{
|
||||||
|
ArtistId = artistId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,20 +0,0 @@
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.IndexerSearch
|
|
||||||
{
|
|
||||||
public class MissingEpisodeSearchCommand : Command
|
|
||||||
{
|
|
||||||
public int? SeriesId { get; set; }
|
|
||||||
|
|
||||||
public override bool SendUpdatesToClient => true;
|
|
||||||
|
|
||||||
public MissingEpisodeSearchCommand()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public MissingEpisodeSearchCommand(int seriesId)
|
|
||||||
{
|
|
||||||
SeriesId = seriesId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -174,7 +174,7 @@ namespace NzbDrone.Core.Music
|
||||||
|
|
||||||
return Query.Where(s => s.CleanTitle == title)
|
return Query.Where(s => s.CleanTitle == title)
|
||||||
.AndWhere(s => s.ArtistId == artistId)
|
.AndWhere(s => s.ArtistId == artistId)
|
||||||
.SingleOrDefault();
|
.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Album FindByArtistAndName(string artistName, string cleanTitle)
|
public Album FindByArtistAndName(string artistName, string cleanTitle)
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Core.IndexerSearch;
|
||||||
|
using NzbDrone.Core.MediaFiles.Events;
|
||||||
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
|
using NzbDrone.Core.Messaging.Events;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Music
|
||||||
|
{
|
||||||
|
public class ArtistScannedHandler : IHandle<ArtistScannedEvent>,
|
||||||
|
IHandle<ArtistScanSkippedEvent>
|
||||||
|
{
|
||||||
|
private readonly IAlbumMonitoredService _albumMonitoredService;
|
||||||
|
private readonly IArtistService _artistService;
|
||||||
|
private readonly IManageCommandQueue _commandQueueManager;
|
||||||
|
//private readonly IEpisodeAddedService _episodeAddedService;
|
||||||
|
|
||||||
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
public ArtistScannedHandler(IAlbumMonitoredService albumMonitoredService,
|
||||||
|
IArtistService artistService,
|
||||||
|
IManageCommandQueue commandQueueManager,
|
||||||
|
//IEpisodeAddedService episodeAddedService,
|
||||||
|
Logger logger)
|
||||||
|
{
|
||||||
|
_albumMonitoredService = albumMonitoredService;
|
||||||
|
_artistService = artistService;
|
||||||
|
_commandQueueManager = commandQueueManager;
|
||||||
|
//_episodeAddedService = episodeAddedService;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HandleScanEvents(Artist artist)
|
||||||
|
{
|
||||||
|
if (artist.AddOptions == null)
|
||||||
|
{
|
||||||
|
//_episodeAddedService.SearchForRecentlyAdded(series.Id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.Info("[{0}] was recently added, performing post-add actions", artist.Name);
|
||||||
|
_albumMonitoredService.SetAlbumMonitoredStatus(artist, artist.AddOptions);
|
||||||
|
|
||||||
|
if (artist.AddOptions.SearchForMissingTracks)
|
||||||
|
{
|
||||||
|
_commandQueueManager.Push(new MissingAlbumSearchCommand(artist.Id));
|
||||||
|
}
|
||||||
|
|
||||||
|
artist.AddOptions = null;
|
||||||
|
_artistService.RemoveAddOptions(artist);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handle(ArtistScannedEvent message)
|
||||||
|
{
|
||||||
|
HandleScanEvents(message.Artist);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handle(ArtistScanSkippedEvent message)
|
||||||
|
{
|
||||||
|
HandleScanEvents(message.Artist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -697,7 +697,7 @@
|
||||||
<Compile Include="Indexers\Torznab\TorznabSettings.cs" />
|
<Compile Include="Indexers\Torznab\TorznabSettings.cs" />
|
||||||
<Compile Include="Indexers\XElementExtensions.cs" />
|
<Compile Include="Indexers\XElementExtensions.cs" />
|
||||||
<Compile Include="IndexerSearch\Definitions\SearchCriteriaBase.cs" />
|
<Compile Include="IndexerSearch\Definitions\SearchCriteriaBase.cs" />
|
||||||
<Compile Include="IndexerSearch\MissingEpisodeSearchCommand.cs" />
|
<Compile Include="IndexerSearch\MissingAlbumSearchCommand.cs" />
|
||||||
<Compile Include="IndexerSearch\NzbSearchService.cs" />
|
<Compile Include="IndexerSearch\NzbSearchService.cs" />
|
||||||
<Compile Include="Instrumentation\Commands\ClearLogCommand.cs" />
|
<Compile Include="Instrumentation\Commands\ClearLogCommand.cs" />
|
||||||
<Compile Include="Instrumentation\Commands\DeleteLogFilesCommand.cs" />
|
<Compile Include="Instrumentation\Commands\DeleteLogFilesCommand.cs" />
|
||||||
|
@ -865,6 +865,7 @@
|
||||||
<Compile Include="Music\MonitoringOptions.cs" />
|
<Compile Include="Music\MonitoringOptions.cs" />
|
||||||
<Compile Include="Music\AlbumMonitoredService.cs" />
|
<Compile Include="Music\AlbumMonitoredService.cs" />
|
||||||
<Compile Include="Music\MoveArtistService.cs" />
|
<Compile Include="Music\MoveArtistService.cs" />
|
||||||
|
<Compile Include="Music\ArtistScannedHandler.cs" />
|
||||||
<Compile Include="Music\TrackMonitoredService.cs" />
|
<Compile Include="Music\TrackMonitoredService.cs" />
|
||||||
<Compile Include="Music\Member.cs" />
|
<Compile Include="Music\Member.cs" />
|
||||||
<Compile Include="Music\AddArtistOptions.cs" />
|
<Compile Include="Music\AddArtistOptions.cs" />
|
||||||
|
|
|
@ -338,7 +338,7 @@ namespace NzbDrone.Core.Parser
|
||||||
|
|
||||||
var artist = file.Tag.FirstAlbumArtist;
|
var artist = file.Tag.FirstAlbumArtist;
|
||||||
|
|
||||||
if (artist.IsNotNullOrWhiteSpace())
|
if (artist.IsNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
artist = file.Tag.FirstPerformer;
|
artist = file.Tag.FirstPerformer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,6 @@ namespace NzbDrone.Core.Parser
|
||||||
{
|
{
|
||||||
private readonly IEpisodeService _episodeService;
|
private readonly IEpisodeService _episodeService;
|
||||||
private readonly ISeriesService _seriesService;
|
private readonly ISeriesService _seriesService;
|
||||||
|
|
||||||
private readonly IAlbumRepository _albumRepository;
|
|
||||||
private readonly IArtistService _artistService;
|
private readonly IArtistService _artistService;
|
||||||
private readonly IAlbumService _albumService;
|
private readonly IAlbumService _albumService;
|
||||||
private readonly ITrackService _trackService;
|
private readonly ITrackService _trackService;
|
||||||
|
@ -49,14 +47,12 @@ namespace NzbDrone.Core.Parser
|
||||||
ISeriesService seriesService,
|
ISeriesService seriesService,
|
||||||
ITrackService trackService,
|
ITrackService trackService,
|
||||||
IArtistService artistService,
|
IArtistService artistService,
|
||||||
IAlbumRepository albumRepository,
|
|
||||||
IAlbumService albumService,
|
IAlbumService albumService,
|
||||||
// ISceneMappingService sceneMappingService,
|
// ISceneMappingService sceneMappingService,
|
||||||
Logger logger)
|
Logger logger)
|
||||||
{
|
{
|
||||||
_episodeService = episodeService;
|
_episodeService = episodeService;
|
||||||
_seriesService = seriesService;
|
_seriesService = seriesService;
|
||||||
_albumRepository = albumRepository;
|
|
||||||
_albumService = albumService;
|
_albumService = albumService;
|
||||||
_artistService = artistService;
|
_artistService = artistService;
|
||||||
// _sceneMappingService = sceneMappingService;
|
// _sceneMappingService = sceneMappingService;
|
||||||
|
@ -694,11 +690,6 @@ namespace NzbDrone.Core.Parser
|
||||||
parsedTrackInfo = Parser.ParseMusicPath(filename);
|
parsedTrackInfo = Parser.ParseMusicPath(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (parsedTrackInfo == null)
|
|
||||||
//{
|
|
||||||
// var title = Path.GetFileNameWithoutExtension(filename);
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (parsedTrackInfo == null)
|
if (parsedTrackInfo == null)
|
||||||
{
|
{
|
||||||
if (MediaFileExtensions.Extensions.Contains(Path.GetExtension(filename)))
|
if (MediaFileExtensions.Extensions.Contains(Path.GetExtension(filename)))
|
||||||
|
@ -734,6 +725,28 @@ namespace NzbDrone.Core.Parser
|
||||||
{
|
{
|
||||||
var result = new List<Track>();
|
var result = new List<Track>();
|
||||||
|
|
||||||
|
if (parsedTrackInfo.AlbumTitle.IsNullOrWhiteSpace())
|
||||||
|
{
|
||||||
|
return new List<Track>();
|
||||||
|
}
|
||||||
|
|
||||||
|
var album = _albumService.FindByTitle(artist.Id, parsedTrackInfo.AlbumTitle);
|
||||||
|
|
||||||
|
if (album == null)
|
||||||
|
{
|
||||||
|
return new List<Track>();
|
||||||
|
}
|
||||||
|
|
||||||
|
Track trackInfo = null;
|
||||||
|
|
||||||
|
trackInfo = _trackService.FindTrackByTitle(artist.Id, album.Id, parsedTrackInfo.Title);
|
||||||
|
|
||||||
|
if (trackInfo !=null)
|
||||||
|
{
|
||||||
|
result.Add(trackInfo);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (parsedTrackInfo.TrackNumbers == null)
|
if (parsedTrackInfo.TrackNumbers == null)
|
||||||
{
|
{
|
||||||
return new List<Track>();
|
return new List<Track>();
|
||||||
|
@ -741,26 +754,13 @@ namespace NzbDrone.Core.Parser
|
||||||
|
|
||||||
foreach (var trackNumber in parsedTrackInfo.TrackNumbers)
|
foreach (var trackNumber in parsedTrackInfo.TrackNumbers)
|
||||||
{
|
{
|
||||||
Track trackInfo = null;
|
Track trackInfoByNumber = null;
|
||||||
|
|
||||||
//if (searchCriteria != null)
|
trackInfoByNumber = _trackService.FindTrack(artist.Id, album.Id, trackNumber);
|
||||||
//{
|
|
||||||
// trackInfo = searchCriteria.Episodes.SingleOrDefault(e => e.SeasonNumber == seasonNumber && e.EpisodeNumber == trackNumber);
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (trackInfo == null)
|
if (trackInfoByNumber != null)
|
||||||
{
|
{
|
||||||
var album = _albumRepository.FindByArtistAndName(parsedTrackInfo.ArtistTitle, Parser.CleanArtistTitle(parsedTrackInfo.AlbumTitle));
|
result.Add(trackInfoByNumber);
|
||||||
if (album == null)
|
|
||||||
{
|
|
||||||
return new List<Track>();
|
|
||||||
}
|
|
||||||
trackInfo = _trackService.FindTrack(artist.Id, album.Id, trackNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trackInfo != null)
|
|
||||||
{
|
|
||||||
result.Add(trackInfo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace NzbDrone.Core.Tv
|
||||||
|
|
||||||
if (series.AddOptions.SearchForMissingEpisodes)
|
if (series.AddOptions.SearchForMissingEpisodes)
|
||||||
{
|
{
|
||||||
_commandQueueManager.Push(new MissingEpisodeSearchCommand(series.Id));
|
_commandQueueManager.Push(new MissingAlbumSearchCommand(series.Id));
|
||||||
}
|
}
|
||||||
|
|
||||||
series.AddOptions = null;
|
series.AddOptions = null;
|
||||||
|
|
Loading…
Reference in New Issue