1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-29 18:15:37 -04:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Bogdan
d999aea36f Add missing translation in release profiles 2023-10-26 00:18:52 +03:00
Jordy
5d45f1de89 Update link to Docker instructions in readme (#9318) 2023-10-25 11:21:51 +03:00
7 changed files with 82 additions and 95 deletions

View File

@@ -2,7 +2,7 @@
[![Build Status](https://dev.azure.com/Radarr/Radarr/_apis/build/status/Radarr.Radarr?branchName=develop)](https://dev.azure.com/Radarr/Radarr/_build/latest?definitionId=1&branchName=develop)
[![Translated](https://translate.servarr.com/widgets/servarr/-/radarr/svg-badge.svg)](https://translate.servarr.com/engage/radarr/?utm_source=widget)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/radarr.svg)](https://wiki.servarr.com/radarr/installation#docker)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/radarr.svg)](https://wiki.servarr.com/radarr/installation/docker)
![Github Downloads](https://img.shields.io/github/downloads/Radarr/Radarr/total.svg)
[![Backers on Open Collective](https://opencollective.com/Radarr/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/Radarr/sponsors/badge.svg)](#sponsors)

View File

@@ -7,6 +7,8 @@ using Moq;
using NUnit.Framework;
using NzbDrone.Core.ImportLists;
using NzbDrone.Core.ImportLists.ImportListMovies;
using NzbDrone.Core.MetadataSource;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.ImportListTests
@@ -34,6 +36,10 @@ namespace NzbDrone.Core.Test.ImportListTests
_listMovies = Builder<ImportListMovie>.CreateListOfSize(5)
.Build().ToList();
Mocker.GetMock<ISearchForNewMovie>()
.Setup(v => v.MapMovieToTmdbMovie(It.IsAny<MovieMetadata>()))
.Returns<MovieMetadata>(m => new MovieMetadata { TmdbId = m.TmdbId });
}
private void GivenList(int id, bool enabled, bool enabledAuto, ImportListFetchResult fetchResult)
@@ -129,6 +135,9 @@ namespace NzbDrone.Core.Test.ImportListTests
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeFalse();
Mocker.GetMock<IImportListMovieService>()
.Verify(v => v.SyncMoviesForList(It.IsAny<List<ImportListMovie>>(), listId), Times.Once());
}
[Test]
@@ -140,6 +149,9 @@ namespace NzbDrone.Core.Test.ImportListTests
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
Mocker.GetMock<IImportListMovieService>()
.Verify(v => v.SyncMoviesForList(It.IsAny<List<ImportListMovie>>(), listId), Times.Never());
}
[Test]
@@ -154,6 +166,9 @@ namespace NzbDrone.Core.Test.ImportListTests
var listResult = Subject.Fetch();
listResult.AnyFailure.Should().BeTrue();
Mocker.GetMock<IImportListMovieService>()
.Verify(v => v.SyncMoviesForList(It.IsAny<List<ImportListMovie>>(), passedListId), Times.Once());
}
[Test]

View File

@@ -7,7 +7,6 @@ using NzbDrone.Core.Configuration;
using NzbDrone.Core.ImportLists;
using NzbDrone.Core.ImportLists.ImportExclusions;
using NzbDrone.Core.ImportLists.ImportListMovies;
using NzbDrone.Core.MetadataSource;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Test.Framework;
@@ -60,7 +59,8 @@ namespace NzbDrone.Core.Test.ImportList
_importListFetch = new ImportListFetchResult
{
Movies = _list1Movies,
AnyFailure = false
AnyFailure = false,
SyncedLists = 1
};
_commandAll = new ImportListSyncCommand
@@ -84,10 +84,6 @@ namespace NzbDrone.Core.Test.ImportList
.Setup(v => v.MovieExists(It.IsAny<Movie>()))
.Returns(false);
Mocker.GetMock<IMovieService>()
.Setup(v => v.MovieExists(It.IsAny<Movie>()))
.Returns(false);
Mocker.GetMock<IMovieService>()
.Setup(v => v.AllMovieTmdbIds())
.Returns(new List<int>());
@@ -95,10 +91,6 @@ namespace NzbDrone.Core.Test.ImportList
Mocker.GetMock<IFetchAndParseImportList>()
.Setup(v => v.Fetch())
.Returns(_importListFetch);
Mocker.GetMock<ISearchForNewMovie>()
.Setup(v => v.MapMovieToTmdbMovie(It.IsAny<MovieMetadata>()))
.Returns<MovieMetadata>(m => new MovieMetadata { TmdbId = m.TmdbId });
}
private void GivenListFailure()
@@ -108,8 +100,7 @@ namespace NzbDrone.Core.Test.ImportList
private void GivenNoListSync()
{
_importListFetch.SyncedLists = new List<int>();
_importListFetch.SyncedWithoutFailure = new List<int>();
_importListFetch.SyncedLists = 0;
}
private void GivenCleanLevel(string cleanLevel)
@@ -123,9 +114,6 @@ namespace NzbDrone.Core.Test.ImportList
{
var importListDefinition = new ImportListDefinition { Id = id, EnableAuto = enabledAuto };
_importListFetch.SyncedLists.Add(id);
_importListFetch.SyncedWithoutFailure.Add(id);
Mocker.GetMock<IImportListFactory>()
.Setup(v => v.Get(id))
.Returns(importListDefinition);

View File

@@ -5,6 +5,9 @@ using System.Threading.Tasks;
using NLog;
using NzbDrone.Common.Instrumentation.Extensions;
using NzbDrone.Common.TPL;
using NzbDrone.Core.ImportLists.ImportListMovies;
using NzbDrone.Core.MetadataSource;
using NzbDrone.Core.Movies;
namespace NzbDrone.Core.ImportLists
{
@@ -18,14 +21,26 @@ namespace NzbDrone.Core.ImportLists
{
private readonly IImportListFactory _importListFactory;
private readonly IImportListStatusService _importListStatusService;
private readonly IImportListMovieService _listMovieService;
private readonly ISearchForNewMovie _movieSearch;
private readonly IProvideMovieInfo _movieInfoService;
private readonly IMovieMetadataService _movieMetadataService;
private readonly Logger _logger;
public FetchAndParseImportListService(IImportListFactory importListFactory,
IImportListStatusService importListStatusService,
IImportListMovieService listMovieService,
ISearchForNewMovie movieSearch,
IProvideMovieInfo movieInfoService,
IMovieMetadataService movieMetadataService,
Logger logger)
{
_importListFactory = importListFactory;
_importListStatusService = importListStatusService;
_listMovieService = listMovieService;
_movieSearch = movieSearch;
_movieInfoService = movieInfoService;
_movieMetadataService = movieMetadataService;
_logger = logger;
}
@@ -86,17 +101,21 @@ namespace NzbDrone.Core.ImportLists
if (!importListReports.AnyFailure)
{
var listMovies = importListReports.Movies;
var alreadyMapped = result.Movies.Where(x => importListReports.Movies.Any(r => r.TmdbId == x.TmdbId));
var listMovies = MapMovieReports(importListReports.Movies.Where(x => result.Movies.All(r => r.TmdbId != x.TmdbId))).Where(x => x.TmdbId > 0).ToList();
listMovies.AddRange(alreadyMapped);
listMovies = listMovies.DistinctBy(x => x.TmdbId).ToList();
listMovies.ForEach(m => m.ListId = importList.Definition.Id);
result.Movies.AddRange(listMovies);
result.SyncedWithoutFailure.Add(importList.Definition.Id);
_listMovieService.SyncMoviesForList(listMovies, importList.Definition.Id);
}
result.AnyFailure |= importListReports.AnyFailure;
result.SyncedLists.Add(importList.Definition.Id);
result.SyncedLists++;
_importListStatusService.UpdateListSyncStatus(importList.Definition.Id);
}
}
catch (Exception e)
@@ -110,17 +129,9 @@ namespace NzbDrone.Core.ImportLists
Task.WaitAll(taskList.ToArray());
foreach (var list in importLists)
{
if (result.SyncedLists.Contains(list.Definition.Id))
{
_importListStatusService.UpdateListSyncStatus(list.Definition.Id);
}
}
result.Movies = result.Movies.DistinctBy(r => new { r.TmdbId, r.ImdbId, r.Title }).ToList();
_logger.Debug("Found {0} total reports from {1} lists", result.Movies.Count, result.SyncedLists.Count);
_logger.Debug("Found {0} total reports from {1} lists", result.Movies.Count, result.SyncedLists);
return result;
}
@@ -149,19 +160,19 @@ namespace NzbDrone.Core.ImportLists
if (!importListReports.AnyFailure)
{
var listMovies = importListReports.Movies;
var listMovies = MapMovieReports(importListReports.Movies)
.Where(x => x.TmdbId > 0)
.DistinctBy(x => x.TmdbId)
.ToList();
listMovies.ForEach(m => m.ListId = importList.Definition.Id);
result.Movies.AddRange(listMovies);
result.SyncedWithoutFailure.Add(importList.Definition.Id);
_listMovieService.SyncMoviesForList(listMovies, importList.Definition.Id);
}
result.AnyFailure |= importListReports.AnyFailure;
result.SyncedLists.Add(importList.Definition.Id);
_importListStatusService.UpdateListSyncStatus(importList.Definition.Id);
}
}
@@ -176,5 +187,32 @@ namespace NzbDrone.Core.ImportLists
return result;
}
private List<ImportListMovie> MapMovieReports(IEnumerable<ImportListMovie> reports)
{
var mappedMovies = reports.Select(m => _movieSearch.MapMovieToTmdbMovie(new MovieMetadata { Title = m.Title, TmdbId = m.TmdbId, ImdbId = m.ImdbId, Year = m.Year }))
.Where(x => x != null)
.DistinctBy(x => x.TmdbId)
.ToList();
_movieMetadataService.UpsertMany(mappedMovies);
var mappedListMovies = new List<ImportListMovie>();
foreach (var movieMeta in mappedMovies)
{
var mappedListMovie = new ImportListMovie();
if (movieMeta != null)
{
mappedListMovie.MovieMetadata = movieMeta;
mappedListMovie.MovieMetadataId = movieMeta.Id;
}
mappedListMovies.Add(mappedListMovie);
}
return mappedListMovies;
}
}
}

View File

@@ -15,14 +15,11 @@ namespace NzbDrone.Core.ImportLists
public ImportListFetchResult()
{
Movies = new List<ImportListMovie>();
SyncedLists = new List<int>();
SyncedWithoutFailure = new List<int>();
}
public List<ImportListMovie> Movies { get; set; }
public bool AnyFailure { get; set; }
public List<int> SyncedLists { get; set; }
public List<int> SyncedWithoutFailure { get; set; }
public int SyncedLists { get; set; }
}
public abstract class ImportListBase<TSettings> : IImportList

View File

@@ -7,7 +7,6 @@ using NzbDrone.Core.Configuration;
using NzbDrone.Core.ImportLists.ImportExclusions;
using NzbDrone.Core.ImportLists.ImportListMovies;
using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.MetadataSource;
using NzbDrone.Core.Movies;
namespace NzbDrone.Core.ImportLists
@@ -18,8 +17,6 @@ namespace NzbDrone.Core.ImportLists
private readonly IImportListFactory _importListFactory;
private readonly IFetchAndParseImportList _listFetcherAndParser;
private readonly IMovieService _movieService;
private readonly IMovieMetadataService _movieMetadataService;
private readonly ISearchForNewMovie _movieSearch;
private readonly IAddMovieService _addMovieService;
private readonly IConfigService _configService;
private readonly IImportExclusionsService _exclusionService;
@@ -28,8 +25,6 @@ namespace NzbDrone.Core.ImportLists
public ImportListSyncService(IImportListFactory importListFactory,
IFetchAndParseImportList listFetcherAndParser,
IMovieService movieService,
IMovieMetadataService movieMetadataService,
ISearchForNewMovie movieSearch,
IAddMovieService addMovieService,
IConfigService configService,
IImportExclusionsService exclusionService,
@@ -39,8 +34,6 @@ namespace NzbDrone.Core.ImportLists
_importListFactory = importListFactory;
_listFetcherAndParser = listFetcherAndParser;
_movieService = movieService;
_movieMetadataService = movieMetadataService;
_movieSearch = movieSearch;
_addMovieService = addMovieService;
_exclusionService = exclusionService;
_listMovieService = listMovieService;
@@ -59,17 +52,17 @@ namespace NzbDrone.Core.ImportLists
var listItemsResult = _listFetcherAndParser.Fetch();
if (listItemsResult.SyncedLists.Count == 0)
if (listItemsResult.SyncedLists == 0)
{
return;
}
ProcessListItems(listItemsResult);
if (!listItemsResult.AnyFailure)
{
CleanLibrary();
}
ProcessListItems(listItemsResult);
}
private void SyncList(ImportListDefinition definition)
@@ -132,25 +125,7 @@ namespace NzbDrone.Core.ImportLists
private void ProcessListItems(ImportListFetchResult listFetchResult)
{
var allMappedMovies = new List<ImportListMovie>();
// Sync ListMovies table for Discovery view and Cleaning task
foreach (var listId in listFetchResult.SyncedWithoutFailure)
{
var listMovies = listFetchResult.Movies.Where(x => x.ListId == listId);
var alreadyMapped = allMappedMovies.Where(x => listMovies.Any(r => r.TmdbId == x.TmdbId));
var mappedListMovies = MapMovieReports(listMovies.Where(x => allMappedMovies.All(r => r.TmdbId != x.TmdbId)).ToList()).Where(x => x.TmdbId > 0).ToList();
mappedListMovies.AddRange(alreadyMapped);
mappedListMovies = mappedListMovies.DistinctBy(x => x.TmdbId).ToList();
mappedListMovies.ForEach(m => m.ListId = listId);
allMappedMovies.AddRange(mappedListMovies);
_listMovieService.SyncMoviesForList(mappedListMovies, listId);
}
allMappedMovies = allMappedMovies.DistinctBy(x =>
listFetchResult.Movies = listFetchResult.Movies.DistinctBy(x =>
{
if (x.TmdbId != 0)
{
@@ -165,7 +140,7 @@ namespace NzbDrone.Core.ImportLists
return x.Title;
}).ToList();
var listedMovies = allMappedMovies;
var listedMovies = listFetchResult.Movies.ToList();
var importExclusions = _exclusionService.GetAllExclusions();
var dbMovies = _movieService.AllMovieTmdbIds();
@@ -193,33 +168,6 @@ namespace NzbDrone.Core.ImportLists
}
}
private List<ImportListMovie> MapMovieReports(IEnumerable<ImportListMovie> reports)
{
var mappedMovies = reports.Select(m => _movieSearch.MapMovieToTmdbMovie(new MovieMetadata { Title = m.Title, TmdbId = m.TmdbId, ImdbId = m.ImdbId, Year = m.Year }))
.Where(x => x != null)
.DistinctBy(x => x.TmdbId)
.ToList();
_movieMetadataService.UpsertMany(mappedMovies);
var mappedListMovies = new List<ImportListMovie>();
foreach (var movieMeta in mappedMovies)
{
var mappedListMovie = new ImportListMovie();
if (movieMeta != null)
{
mappedListMovie.MovieMetadata = movieMeta;
mappedListMovie.MovieMetadataId = movieMeta.Id;
}
mappedListMovies.Add(mappedListMovie);
}
return mappedListMovies;
}
public void Execute(ImportListSyncCommand message)
{
if (message.DefinitionId.HasValue)

View File

@@ -373,6 +373,7 @@
"EnableInteractiveSearchHelpText": "Will be used when interactive search is used",
"EnableInteractiveSearchHelpTextWarning": "Search is not supported with this indexer",
"EnableMediaInfoHelpText": "Extract video information such as resolution, runtime and codec information from files. This requires Radarr to read parts of the file which may cause high disk or network activity during scans.",
"EnableProfile": "Enable Profile",
"EnableRSS": "Enable RSS",
"EnableSSL": "Enable SSL",
"EnableSslHelpText": " Requires restart running as administrator to take effect",