mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-03-05 13:20:20 -05:00
Support for multiple seriesIds in Rename API endpoint
This commit is contained in:
@@ -8,6 +8,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||
public interface IMediaFileRepository : IBasicRepository<EpisodeFile>
|
||||
{
|
||||
List<EpisodeFile> GetFilesBySeries(int seriesId);
|
||||
List<EpisodeFile> GetFilesBySeriesIds(List<int> seriesIds);
|
||||
List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber);
|
||||
List<EpisodeFile> GetFilesWithoutMediaInfo();
|
||||
List<EpisodeFile> GetFilesWithRelativePath(int seriesId, string relativePath);
|
||||
@@ -26,6 +27,11 @@ namespace NzbDrone.Core.MediaFiles
|
||||
return Query(c => c.SeriesId == seriesId).ToList();
|
||||
}
|
||||
|
||||
public List<EpisodeFile> GetFilesBySeriesIds(List<int> seriesIds)
|
||||
{
|
||||
return Query(c => seriesIds.Contains(c.SeriesId)).ToList();
|
||||
}
|
||||
|
||||
public List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber)
|
||||
{
|
||||
return Query(c => c.SeriesId == seriesId && c.SeasonNumber == seasonNumber).ToList();
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||
void Update(List<EpisodeFile> episodeFiles);
|
||||
void Delete(EpisodeFile episodeFile, DeleteMediaFileReason reason);
|
||||
List<EpisodeFile> GetFilesBySeries(int seriesId);
|
||||
List<EpisodeFile> GetFilesBySeriesIds(List<int> seriesIds);
|
||||
List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber);
|
||||
List<EpisodeFile> GetFiles(IEnumerable<int> ids);
|
||||
List<EpisodeFile> GetFilesWithoutMediaInfo();
|
||||
@@ -71,6 +72,11 @@ namespace NzbDrone.Core.MediaFiles
|
||||
return _mediaFileRepository.GetFilesBySeries(seriesId);
|
||||
}
|
||||
|
||||
public List<EpisodeFile> GetFilesBySeriesIds(List<int> seriesIds)
|
||||
{
|
||||
return _mediaFileRepository.GetFilesBySeriesIds(seriesIds);
|
||||
}
|
||||
|
||||
public List<EpisodeFile> GetFilesBySeason(int seriesId, int seasonNumber)
|
||||
{
|
||||
return _mediaFileRepository.GetFilesBySeason(seriesId, seasonNumber);
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||
{
|
||||
List<RenameEpisodeFilePreview> GetRenamePreviews(int seriesId);
|
||||
List<RenameEpisodeFilePreview> GetRenamePreviews(int seriesId, int seasonNumber);
|
||||
List<RenameEpisodeFilePreview> GetRenamePreviews(List<int> seriesIds);
|
||||
}
|
||||
|
||||
public class RenameEpisodeFileService : IRenameEpisodeFileService,
|
||||
@@ -75,6 +76,25 @@ namespace NzbDrone.Core.MediaFiles
|
||||
.OrderByDescending(e => e.EpisodeNumbers.First()).ToList();
|
||||
}
|
||||
|
||||
public List<RenameEpisodeFilePreview> GetRenamePreviews(List<int> seriesIds)
|
||||
{
|
||||
var seriesList = _seriesService.GetSeries(seriesIds);
|
||||
var episodesList = _episodeService.GetEpisodesBySeries(seriesIds).ToLookup(e => e.SeriesId);
|
||||
var filesList = _mediaFileService.GetFilesBySeriesIds(seriesIds).ToLookup(f => f.SeriesId);
|
||||
|
||||
return seriesList.SelectMany(series =>
|
||||
{
|
||||
var episodes = episodesList[series.Id].ToList();
|
||||
var files = filesList[series.Id].ToList();
|
||||
|
||||
return GetPreviews(series, episodes, files);
|
||||
})
|
||||
.OrderByDescending(e => e.SeriesId)
|
||||
.ThenByDescending(e => e.SeasonNumber)
|
||||
.ThenByDescending(e => e.EpisodeNumbers.First())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private IEnumerable<RenameEpisodeFilePreview> GetPreviews(Series series, List<Episode> episodes, List<EpisodeFile> files)
|
||||
{
|
||||
foreach (var f in files)
|
||||
|
||||
@@ -23,6 +23,7 @@ namespace NzbDrone.Core.Tv
|
||||
List<Episode> FindEpisodesBySceneNumbering(int seriesId, int sceneAbsoluteEpisodeNumber);
|
||||
Episode FindEpisode(int seriesId, string date, int? part);
|
||||
List<Episode> GetEpisodeBySeries(int seriesId);
|
||||
List<Episode> GetEpisodesBySeries(List<int> seriesIds);
|
||||
List<Episode> GetEpisodesBySeason(int seriesId, int seasonNumber);
|
||||
List<Episode> GetEpisodesBySceneSeason(int seriesId, int sceneSeasonNumber);
|
||||
List<Episode> EpisodesWithFiles(int seriesId);
|
||||
@@ -99,6 +100,11 @@ namespace NzbDrone.Core.Tv
|
||||
return _episodeRepository.GetEpisodes(seriesId).ToList();
|
||||
}
|
||||
|
||||
public List<Episode> GetEpisodesBySeries(List<int> seriesIds)
|
||||
{
|
||||
return _episodeRepository.GetEpisodesBySeriesIds(seriesIds).ToList();
|
||||
}
|
||||
|
||||
public List<Episode> GetEpisodesBySeason(int seriesId, int seasonNumber)
|
||||
{
|
||||
return _episodeRepository.GetEpisodes(seriesId, seasonNumber);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NzbDrone.Core.MediaFiles;
|
||||
using Sonarr.Http;
|
||||
using Sonarr.Http.REST;
|
||||
|
||||
namespace Sonarr.Api.V3.Episodes
|
||||
{
|
||||
@@ -26,5 +28,22 @@ namespace Sonarr.Api.V3.Episodes
|
||||
|
||||
return _renameEpisodeFileService.GetRenamePreviews(seriesId).ToResource();
|
||||
}
|
||||
|
||||
[HttpGet("bulk")]
|
||||
[Produces("application/json")]
|
||||
public List<RenameEpisodeResource> GetEpisodes([FromQuery] List<int> seriesIds)
|
||||
{
|
||||
if (seriesIds is { Count: 0 })
|
||||
{
|
||||
throw new BadRequestException("seriesIds must be provided");
|
||||
}
|
||||
|
||||
if (seriesIds.Any(seriesId => seriesId <= 0))
|
||||
{
|
||||
throw new BadRequestException("seriesIds must be positive integers");
|
||||
}
|
||||
|
||||
return _renameEpisodeFileService.GetRenamePreviews(seriesIds).ToResource();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user