Added ability to remove language profiles based on tag values

pull/2639/head v1.4.4-beta.37
JayZed 3 months ago committed by GitHub
parent f1f3850f9e
commit e5f1528bba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -96,6 +96,7 @@ validators = [
Validator('general.path_mappings_movie', must_exist=True, default=[], is_type_of=list), Validator('general.path_mappings_movie', must_exist=True, default=[], is_type_of=list),
Validator('general.serie_tag_enabled', must_exist=True, default=False, is_type_of=bool), Validator('general.serie_tag_enabled', must_exist=True, default=False, is_type_of=bool),
Validator('general.movie_tag_enabled', must_exist=True, default=False, is_type_of=bool), Validator('general.movie_tag_enabled', must_exist=True, default=False, is_type_of=bool),
Validator('general.remove_profile_tags', must_exist=True, default=[], is_type_of=list, condition=validate_tags),
Validator('general.serie_default_enabled', must_exist=True, default=False, is_type_of=bool), Validator('general.serie_default_enabled', must_exist=True, default=False, is_type_of=bool),
Validator('general.serie_default_profile', must_exist=True, default='', is_type_of=(int, str)), Validator('general.serie_default_profile', must_exist=True, default='', is_type_of=(int, str)),
Validator('general.movie_default_enabled', must_exist=True, default=False, is_type_of=bool), Validator('general.movie_default_enabled', must_exist=True, default=False, is_type_of=bool),
@ -468,6 +469,7 @@ array_keys = ['excluded_tags',
'enabled_integrations', 'enabled_integrations',
'path_mappings', 'path_mappings',
'path_mappings_movie', 'path_mappings_movie',
'remove_profile_tags',
'language_equals', 'language_equals',
'blacklisted_languages', 'blacklisted_languages',
'blacklisted_providers'] 'blacklisted_providers']

@ -152,6 +152,10 @@ def movieParser(movie, action, tags_dict, language_profiles, movie_default_profi
tag_profile = get_matching_profile(tags, language_profiles) tag_profile = get_matching_profile(tags, language_profiles)
if tag_profile: if tag_profile:
parsed_movie['profileId'] = tag_profile parsed_movie['profileId'] = tag_profile
remove_profile_tags_list = settings.general.remove_profile_tags
if len(remove_profile_tags_list) > 0:
if set(tags) & set(remove_profile_tags_list):
parsed_movie['profileId'] = None
return parsed_movie return parsed_movie

@ -78,6 +78,10 @@ def seriesParser(show, action, tags_dict, language_profiles, serie_default_profi
tag_profile = get_matching_profile(tags, language_profiles) tag_profile = get_matching_profile(tags, language_profiles)
if tag_profile: if tag_profile:
parsed_series['profileId'] = tag_profile parsed_series['profileId'] = tag_profile
remove_profile_tags_list = settings.general.remove_profile_tags
if len(remove_profile_tags_list) > 0:
if set(tags) & set(remove_profile_tags_list):
parsed_series['profileId'] = None
return parsed_series return parsed_series

@ -1,7 +1,9 @@
import { FunctionComponent } from "react"; import { FunctionComponent } from "react";
import { Text as MantineText } from "@mantine/core";
import { useLanguageProfiles, useLanguages } from "@/apis/hooks"; import { useLanguageProfiles, useLanguages } from "@/apis/hooks";
import { import {
Check, Check,
Chips,
CollapseBox, CollapseBox,
Layout, Layout,
Message, Message,
@ -121,12 +123,21 @@ const SettingsLanguagesView: FunctionComponent = () => {
Sonarr (or a Movie from Radarr) to find a matching Bazarr language Sonarr (or a Movie from Radarr) to find a matching Bazarr language
profile tag. It will use as the language profile the FIRST tag from profile tag. It will use as the language profile the FIRST tag from
Sonarr/Radarr that matches the tag of a Bazarr language profile Sonarr/Radarr that matches the tag of a Bazarr language profile
EXACTLY. If mutiple tags match, there is no guarantee as to which one EXACTLY. If multiple tags match, there is no guarantee as to which one
will be used, so choose your tag names carefully. Also, if you update will be used, so choose your tag names carefully. Also, if you update
the tag names in Sonarr/Radarr, Bazarr will detect this and repeat the the tag names in Sonarr/Radarr, Bazarr will detect this and repeat the
matching process for the affected shows. However, if a show's only matching process for the affected shows. However, if a show's only
matching tag is removed from Sonarr/Radarr, Bazarr will NOT remove the matching tag is removed from Sonarr/Radarr, Bazarr will NOT remove the
show's existing language profile, but keep it, as is. show's existing language profile for that reason. But if you wish to
have language profiles removed automatically by tag value, simply
enter a list of one or more tags in the{" "}
<MantineText fw={700} span>
Remove Profile Tags
</MantineText>{" "}
entry list below. If your video tag matches one of the tags in that
list, then Bazarr will remove the language profile for that video. If
there is a conflict between profile selection and profile removal,
then profile removal wins out and is performed.
</Message> </Message>
<Check <Check
label="Series" label="Series"
@ -136,6 +147,19 @@ const SettingsLanguagesView: FunctionComponent = () => {
label="Movies" label="Movies"
settingKey="settings-general-movie_tag_enabled" settingKey="settings-general-movie_tag_enabled"
></Check> ></Check>
<Chips
label="Remove Profile Tags"
settingKey="settings-general-remove_profile_tags"
sanitizeFn={(values: string[] | null) =>
values?.map((item) =>
item.replace(/[^a-z0-9_-]/gi, "").toLowerCase(),
)
}
></Chips>
<Message>
Enter tag values that will trigger a language profile removal. Leave
empty if you don't want Bazarr to remove language profiles.
</Message>
</Section> </Section>
<Section header="Default Settings"> <Section header="Default Settings">
<Check <Check

@ -62,6 +62,7 @@ declare namespace Settings {
postprocessing_cmd?: string; postprocessing_cmd?: string;
postprocessing_threshold: number; postprocessing_threshold: number;
postprocessing_threshold_movie: number; postprocessing_threshold_movie: number;
remove_profile_tags: string[];
single_language: boolean; single_language: boolean;
subfolder: string; subfolder: string;
subfolder_custom?: string; subfolder_custom?: string;

Loading…
Cancel
Save