mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
New: Allow Selection Original Movie Languge in Profile
This commit is contained in:
@@ -18,11 +18,14 @@ function createMapStateToProps() {
|
|||||||
items
|
items
|
||||||
} = languages;
|
} = languages;
|
||||||
|
|
||||||
|
const filterItems = ['Any', 'Original'];
|
||||||
|
const filteredLanguages = items.filter((lang) => !filterItems.includes(lang.name));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
isFetching,
|
isFetching,
|
||||||
isPopulated,
|
isPopulated,
|
||||||
error,
|
error,
|
||||||
items
|
items: filteredLanguages
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -54,7 +57,9 @@ class SelectLanguageModalContentConnector extends Component {
|
|||||||
const language = _.find(this.props.items,
|
const language = _.find(this.props.items,
|
||||||
(item) => item.id === parseInt(languageId));
|
(item) => item.id === parseInt(languageId));
|
||||||
|
|
||||||
|
if (language !== undefined) {
|
||||||
languages.push(language);
|
languages.push(language);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.props.dispatchUpdateInteractiveImportItems({
|
this.props.dispatchUpdateInteractiveImportItems({
|
||||||
|
@@ -18,7 +18,7 @@ function createMapStateToProps() {
|
|||||||
items
|
items
|
||||||
} = languages;
|
} = languages;
|
||||||
|
|
||||||
const filterItems = ['Any'];
|
const filterItems = ['Any', 'Original'];
|
||||||
const filteredLanguages = items.filter((lang) => !filterItems.includes(lang.name));
|
const filteredLanguages = items.filter((lang) => !filterItems.includes(lang.name));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -57,7 +57,9 @@ class SelectLanguageModalContentConnector extends Component {
|
|||||||
const language = _.find(this.props.items,
|
const language = _.find(this.props.items,
|
||||||
(item) => item.id === parseInt(languageId));
|
(item) => item.id === parseInt(languageId));
|
||||||
|
|
||||||
|
if (language !== undefined) {
|
||||||
languages.push(language);
|
languages.push(language);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.props.dispatchupdateMovieFiles({
|
this.props.dispatchupdateMovieFiles({
|
||||||
|
@@ -65,6 +65,8 @@ class UISettings extends Component {
|
|||||||
...otherProps
|
...otherProps
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
|
const uiLanguages = languages.filter((item) => item.value !== 'Original');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageContent title={translate('UISettings')}>
|
<PageContent title={translate('UISettings')}>
|
||||||
<SettingsToolbarConnector
|
<SettingsToolbarConnector
|
||||||
@@ -213,7 +215,7 @@ class UISettings extends Component {
|
|||||||
<FormInputGroup
|
<FormInputGroup
|
||||||
type={inputTypes.SELECT}
|
type={inputTypes.SELECT}
|
||||||
name="uiLanguage"
|
name="uiLanguage"
|
||||||
values={languages}
|
values={uiLanguages}
|
||||||
helpText={translate('UILanguageHelpText')}
|
helpText={translate('UILanguageHelpText')}
|
||||||
helpTextWarning={translate('UILanguageHelpTextWarning')}
|
helpTextWarning={translate('UILanguageHelpTextWarning')}
|
||||||
onChange={onInputChange}
|
onChange={onInputChange}
|
||||||
|
@@ -30,7 +30,8 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|||||||
Profile = new Profile
|
Profile = new Profile
|
||||||
{
|
{
|
||||||
Language = Language.English
|
Language = Language.English
|
||||||
}
|
},
|
||||||
|
OriginalLanguage = Language.French
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -45,6 +46,11 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|||||||
_remoteMovie.ParsedMovieInfo.Languages = new List<Language> { Language.German };
|
_remoteMovie.ParsedMovieInfo.Languages = new List<Language> { Language.German };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void WithFrenchRelease()
|
||||||
|
{
|
||||||
|
_remoteMovie.ParsedMovieInfo.Languages = new List<Language> { Language.French };
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void should_return_true_if_language_is_english()
|
public void should_return_true_if_language_is_english()
|
||||||
{
|
{
|
||||||
@@ -61,6 +67,26 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|||||||
Mocker.Resolve<LanguageSpecification>().IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeFalse();
|
Mocker.Resolve<LanguageSpecification>().IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_false_if_release_is_german_and_profile_original()
|
||||||
|
{
|
||||||
|
_remoteMovie.Movie.Profile.Language = Language.Original;
|
||||||
|
|
||||||
|
WithGermanRelease();
|
||||||
|
|
||||||
|
Mocker.Resolve<LanguageSpecification>().IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_return_true_if_release_is_french_and_profile_original()
|
||||||
|
{
|
||||||
|
_remoteMovie.Movie.Profile.Language = Language.Original;
|
||||||
|
|
||||||
|
WithFrenchRelease();
|
||||||
|
|
||||||
|
Mocker.Resolve<LanguageSpecification>().IsSatisfiedBy(_remoteMovie, null).Accepted.Should().BeTrue();
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void should_return_true_if_allowed_language_any()
|
public void should_return_true_if_allowed_language_any()
|
||||||
{
|
{
|
||||||
|
@@ -27,6 +27,19 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
|||||||
return Decision.Accept();
|
return Decision.Accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var originalLanguage = subject.Movie.OriginalLanguage;
|
||||||
|
|
||||||
|
if (wantedLanguage == Language.Original)
|
||||||
|
{
|
||||||
|
if (!subject.ParsedMovieInfo.Languages.Contains(originalLanguage))
|
||||||
|
{
|
||||||
|
_logger.Debug("Original Language({0}) is wanted, but found {1}", originalLanguage, subject.ParsedMovieInfo.Languages.ToExtendedString());
|
||||||
|
return Decision.Reject("Original Language ({0}) is wanted, but found {1}", originalLanguage, subject.ParsedMovieInfo.Languages.ToExtendedString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return Decision.Accept();
|
||||||
|
}
|
||||||
|
|
||||||
_logger.Debug("Checking if report meets language requirements. {0}", subject.ParsedMovieInfo.Languages.ToExtendedString());
|
_logger.Debug("Checking if report meets language requirements. {0}", subject.ParsedMovieInfo.Languages.ToExtendedString());
|
||||||
|
|
||||||
if (!subject.ParsedMovieInfo.Languages.Contains(wantedLanguage))
|
if (!subject.ParsedMovieInfo.Languages.Contains(wantedLanguage))
|
||||||
|
@@ -97,6 +97,7 @@ namespace NzbDrone.Core.Languages
|
|||||||
public static Language Lithuanian => new Language(24, "Lithuanian");
|
public static Language Lithuanian => new Language(24, "Lithuanian");
|
||||||
public static Language Czech => new Language(25, "Czech");
|
public static Language Czech => new Language(25, "Czech");
|
||||||
public static Language Any => new Language(-1, "Any");
|
public static Language Any => new Language(-1, "Any");
|
||||||
|
public static Language Original => new Language(-2, "Original");
|
||||||
|
|
||||||
public static List<Language> All
|
public static List<Language> All
|
||||||
{
|
{
|
||||||
@@ -130,7 +131,8 @@ namespace NzbDrone.Core.Languages
|
|||||||
Hebrew,
|
Hebrew,
|
||||||
Lithuanian,
|
Lithuanian,
|
||||||
Czech,
|
Czech,
|
||||||
Any
|
Any,
|
||||||
|
Original
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -72,10 +72,25 @@ namespace Radarr.Api.V3.Calendar
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(movie.Id).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, movie);
|
||||||
var resource = movie.ToResource(_qualityUpgradableSpecification, translation);
|
var resource = movie.ToResource(_qualityUpgradableSpecification, translation);
|
||||||
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MovieTranslation GetMovieTranslation(List<MovieTranslation> translations, Movie movie)
|
||||||
|
{
|
||||||
|
if ((Language)_configService.MovieInfoLanguage == Language.Original)
|
||||||
|
{
|
||||||
|
return new MovieTranslation
|
||||||
|
{
|
||||||
|
Title = movie.OriginalTitle,
|
||||||
|
Overview = movie.Overview
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return translations.FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage && t.MovieId == movie.Id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ using NzbDrone.Core.CustomFormats;
|
|||||||
using NzbDrone.Core.Datastore.Events;
|
using NzbDrone.Core.Datastore.Events;
|
||||||
using NzbDrone.Core.DecisionEngine.Specifications;
|
using NzbDrone.Core.DecisionEngine.Specifications;
|
||||||
using NzbDrone.Core.Exceptions;
|
using NzbDrone.Core.Exceptions;
|
||||||
|
using NzbDrone.Core.Languages;
|
||||||
using NzbDrone.Core.MediaFiles;
|
using NzbDrone.Core.MediaFiles;
|
||||||
using NzbDrone.Core.MediaFiles.Events;
|
using NzbDrone.Core.MediaFiles.Events;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
@@ -129,7 +130,8 @@ namespace Radarr.Api.V3.MovieFiles
|
|||||||
|
|
||||||
if (resource.Languages != null)
|
if (resource.Languages != null)
|
||||||
{
|
{
|
||||||
movieFile.Languages = resource.Languages;
|
// Don't allow user to set movieFile with 'Any' or 'Original' language
|
||||||
|
movieFile.Languages = resource.Languages.Where(l => l != Language.Any || l != Language.Original || l != null).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -109,7 +109,8 @@ namespace Radarr.Api.V3.Movies
|
|||||||
|
|
||||||
if (movie != null)
|
if (movie != null)
|
||||||
{
|
{
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(movie.Id).Where(t => t.Language == (Language)_configService.MovieInfoLanguage).FirstOrDefault();
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, movie);
|
||||||
moviesResources.AddIfNotNull(movie.ToResource(_qualityUpgradableSpecification, translation));
|
moviesResources.AddIfNotNull(movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -120,7 +121,7 @@ namespace Radarr.Api.V3.Movies
|
|||||||
|
|
||||||
foreach (var movie in movies)
|
foreach (var movie in movies)
|
||||||
{
|
{
|
||||||
var translation = translations.FirstOrDefault(t => t.MovieId == movie.Id);
|
var translation = GetMovieTranslation(translations, movie);
|
||||||
moviesResources.Add(movie.ToResource(_qualityUpgradableSpecification, translation));
|
moviesResources.Add(movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,7 +144,8 @@ namespace Radarr.Api.V3.Movies
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(movie.Id).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, movie);
|
||||||
|
|
||||||
var resource = movie.ToResource(_qualityUpgradableSpecification, translation);
|
var resource = movie.ToResource(_qualityUpgradableSpecification, translation);
|
||||||
MapCoversToLocal(resource);
|
MapCoversToLocal(resource);
|
||||||
@@ -151,6 +153,20 @@ namespace Radarr.Api.V3.Movies
|
|||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MovieTranslation GetMovieTranslation(List<MovieTranslation> translations, Movie movie)
|
||||||
|
{
|
||||||
|
if ((Language)_configService.MovieInfoLanguage == Language.Original)
|
||||||
|
{
|
||||||
|
return new MovieTranslation
|
||||||
|
{
|
||||||
|
Title = movie.OriginalTitle,
|
||||||
|
Overview = movie.Overview
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return translations.FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage && t.MovieId == movie.Id);
|
||||||
|
}
|
||||||
|
|
||||||
private int AddMovie(MovieResource moviesResource)
|
private int AddMovie(MovieResource moviesResource)
|
||||||
{
|
{
|
||||||
var movie = _addMovieService.AddMovie(moviesResource.ToModel());
|
var movie = _addMovieService.AddMovie(moviesResource.ToModel());
|
||||||
@@ -180,7 +196,8 @@ namespace Radarr.Api.V3.Movies
|
|||||||
var model = moviesResource.ToModel(movie);
|
var model = moviesResource.ToModel(movie);
|
||||||
|
|
||||||
var updatedMovie = _moviesService.UpdateMovie(model);
|
var updatedMovie = _moviesService.UpdateMovie(model);
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(updatedMovie.Id).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, movie);
|
||||||
|
|
||||||
BroadcastResourceChange(ModelAction.Updated, updatedMovie.ToResource(_qualityUpgradableSpecification, translation));
|
BroadcastResourceChange(ModelAction.Updated, updatedMovie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
@@ -203,7 +220,8 @@ namespace Radarr.Api.V3.Movies
|
|||||||
|
|
||||||
public void Handle(MovieImportedEvent message)
|
public void Handle(MovieImportedEvent message)
|
||||||
{
|
{
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(message.ImportedMovie.MovieId).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(message.ImportedMovie.Movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, message.ImportedMovie.Movie);
|
||||||
BroadcastResourceChange(ModelAction.Updated, message.ImportedMovie.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
BroadcastResourceChange(ModelAction.Updated, message.ImportedMovie.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,13 +237,15 @@ namespace Radarr.Api.V3.Movies
|
|||||||
|
|
||||||
public void Handle(MovieUpdatedEvent message)
|
public void Handle(MovieUpdatedEvent message)
|
||||||
{
|
{
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(message.Movie.Id).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(message.Movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, message.Movie);
|
||||||
BroadcastResourceChange(ModelAction.Updated, message.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
BroadcastResourceChange(ModelAction.Updated, message.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(MovieEditedEvent message)
|
public void Handle(MovieEditedEvent message)
|
||||||
{
|
{
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(message.Movie.Id).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(message.Movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, message.Movie);
|
||||||
BroadcastResourceChange(ModelAction.Updated, message.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
BroadcastResourceChange(ModelAction.Updated, message.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,7 +259,8 @@ namespace Radarr.Api.V3.Movies
|
|||||||
|
|
||||||
public void Handle(MovieRenamedEvent message)
|
public void Handle(MovieRenamedEvent message)
|
||||||
{
|
{
|
||||||
var translation = _movieTranslationService.GetAllTranslationsForMovie(message.Movie.Id).FirstOrDefault(t => t.Language == (Language)_configService.MovieInfoLanguage);
|
var translations = _movieTranslationService.GetAllTranslationsForMovie(message.Movie.Id);
|
||||||
|
var translation = GetMovieTranslation(translations, message.Movie);
|
||||||
BroadcastResourceChange(ModelAction.Updated, message.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
BroadcastResourceChange(ModelAction.Updated, message.Movie.ToResource(_qualityUpgradableSpecification, translation));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user