mirror of
https://github.com/morpheus65535/bazarr.git
synced 2024-09-20 07:25:58 +08:00
Compare commits
2 commits
855da6b1bb
...
ee622e64b4
Author | SHA1 | Date | |
---|---|---|---|
ee622e64b4 | |||
0e876fcc93 |
|
@ -37,6 +37,12 @@ def validate_ip_address(ip_string):
|
|||
except ValueError:
|
||||
return False
|
||||
|
||||
def validate_tags(tags):
|
||||
if not tags:
|
||||
return True
|
||||
|
||||
return all(re.match( r'^[a-z0-9_-]+$', item) for item in tags)
|
||||
|
||||
|
||||
ONE_HUNDRED_YEARS_IN_MINUTES = 52560000
|
||||
ONE_HUNDRED_YEARS_IN_HOURS = 876000
|
||||
|
@ -178,7 +184,7 @@ validators = [
|
|||
Validator('sonarr.only_monitored', must_exist=True, default=False, is_type_of=bool),
|
||||
Validator('sonarr.series_sync', must_exist=True, default=60, is_type_of=int,
|
||||
is_in=[15, 60, 180, 360, 720, 1440, 10080, ONE_HUNDRED_YEARS_IN_MINUTES]),
|
||||
Validator('sonarr.excluded_tags', must_exist=True, default=[], is_type_of=list),
|
||||
Validator('sonarr.excluded_tags', must_exist=True, default=[], is_type_of=list, condition=validate_tags),
|
||||
Validator('sonarr.excluded_series_types', must_exist=True, default=[], is_type_of=list),
|
||||
Validator('sonarr.use_ffprobe_cache', must_exist=True, default=True, is_type_of=bool),
|
||||
Validator('sonarr.exclude_season_zero', must_exist=True, default=False, is_type_of=bool),
|
||||
|
@ -201,7 +207,7 @@ validators = [
|
|||
Validator('radarr.only_monitored', must_exist=True, default=False, is_type_of=bool),
|
||||
Validator('radarr.movies_sync', must_exist=True, default=60, is_type_of=int,
|
||||
is_in=[15, 60, 180, 360, 720, 1440, 10080, ONE_HUNDRED_YEARS_IN_MINUTES]),
|
||||
Validator('radarr.excluded_tags', must_exist=True, default=[], is_type_of=list),
|
||||
Validator('radarr.excluded_tags', must_exist=True, default=[], is_type_of=list, condition=validate_tags),
|
||||
Validator('radarr.use_ffprobe_cache', must_exist=True, default=True, is_type_of=bool),
|
||||
Validator('radarr.defer_search_signalr', must_exist=True, default=False, is_type_of=bool),
|
||||
Validator('radarr.sync_only_monitored_movies', must_exist=True, default=False, is_type_of=bool),
|
||||
|
|
8
frontend/package-lock.json
generated
8
frontend/package-lock.json
generated
|
@ -38,7 +38,7 @@
|
|||
"@types/jest": "^29.5.12",
|
||||
"@types/lodash": "^4.17.1",
|
||||
"@types/node": "^20.12.6",
|
||||
"@types/react": "^18.3.3",
|
||||
"@types/react": "^18.3.4",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"@vite-pwa/assets-generator": "^0.2.4",
|
||||
"@vitejs/plugin-react": "^4.2.1",
|
||||
|
@ -3876,9 +3876,9 @@
|
|||
"devOptional": true
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "18.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
|
||||
"integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
|
||||
"version": "18.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.4.tgz",
|
||||
"integrity": "sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==",
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"@types/prop-types": "*",
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
"@types/jest": "^29.5.12",
|
||||
"@types/lodash": "^4.17.1",
|
||||
"@types/node": "^20.12.6",
|
||||
"@types/react": "^18.3.3",
|
||||
"@types/react": "^18.3.4",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"@vite-pwa/assets-generator": "^0.2.4",
|
||||
"@vitejs/plugin-react": "^4.2.1",
|
||||
|
|
|
@ -54,6 +54,11 @@ const SettingsRadarrView: FunctionComponent = () => {
|
|||
<Chips
|
||||
label="Excluded Tags"
|
||||
settingKey="settings-radarr-excluded_tags"
|
||||
sanitizeFn={(values: string[] | null) =>
|
||||
values?.map((item) =>
|
||||
item.replace(/[^a-z0-9_-]/gi, "").toLowerCase(),
|
||||
)
|
||||
}
|
||||
></Chips>
|
||||
<Message>
|
||||
Movies with those tags (case sensitive) in Radarr will be excluded
|
||||
|
|
|
@ -56,6 +56,11 @@ const SettingsSonarrView: FunctionComponent = () => {
|
|||
<Chips
|
||||
label="Excluded Tags"
|
||||
settingKey="settings-sonarr-excluded_tags"
|
||||
sanitizeFn={(values: string[] | null) =>
|
||||
values?.map((item) =>
|
||||
item.replace(/[^a-z0-9_-]/gi, "").toLowerCase(),
|
||||
)
|
||||
}
|
||||
></Chips>
|
||||
<Message>
|
||||
Episodes from series with those tags (case sensitive) in Sonarr will
|
||||
|
|
|
@ -160,13 +160,25 @@ export const Slider: FunctionComponent<SliderProps> = (props) => {
|
|||
};
|
||||
|
||||
type ChipsProp = BaseInput<string[]> &
|
||||
Omit<ChipInputProps, "onChange" | "data">;
|
||||
Omit<ChipInputProps, "onChange" | "data"> & {
|
||||
sanitizeFn?: (values: string[] | null) => string[] | undefined;
|
||||
};
|
||||
|
||||
export const Chips: FunctionComponent<ChipsProp> = (props) => {
|
||||
const { value, update, rest } = useBaseInput(props);
|
||||
|
||||
const handleChange = (value: string[] | null) => {
|
||||
const sanitizedValues = props.sanitizeFn?.(value) ?? value;
|
||||
|
||||
update(sanitizedValues || null);
|
||||
};
|
||||
|
||||
return (
|
||||
<ChipInput {...rest} value={value ?? []} onChange={update}></ChipInput>
|
||||
<ChipInput
|
||||
{...rest}
|
||||
value={value ?? []}
|
||||
onChange={handleChange}
|
||||
></ChipInput>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue