1
0
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:
nuxen
2025-07-08 02:33:40 +02:00
committed by GitHub
parent d3c3a6ebce
commit 010bbbd222
5 changed files with 57 additions and 0 deletions

View File

@@ -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();

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);

View File

@@ -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();
}
}
}