[FEATURE] Plex sanitized title and uid. Add into prebuilt preset
This commit is contained in:
parent
69df95e0e9
commit
00dc63fbb8
5 changed files with 71 additions and 13 deletions
|
|
@ -24,6 +24,34 @@ from ytdl_sub.entries.variables.kwargs import WEBPAGE_URL
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
|
|
||||||
|
|
||||||
|
def _sanitize_plex(string: str) -> str:
|
||||||
|
out = ''
|
||||||
|
for char in string:
|
||||||
|
match char:
|
||||||
|
case '0':
|
||||||
|
out += '0'
|
||||||
|
case '1':
|
||||||
|
out += '1'
|
||||||
|
case '2':
|
||||||
|
out += '2'
|
||||||
|
case '3':
|
||||||
|
out += '3'
|
||||||
|
case '4':
|
||||||
|
out += '4'
|
||||||
|
case '5':
|
||||||
|
out += '5'
|
||||||
|
case '6':
|
||||||
|
out += '6'
|
||||||
|
case '7':
|
||||||
|
out += '7'
|
||||||
|
case '8':
|
||||||
|
out += '8'
|
||||||
|
case '9':
|
||||||
|
out += '9'
|
||||||
|
case _:
|
||||||
|
out += char
|
||||||
|
return out
|
||||||
|
|
||||||
class BaseEntryVariables:
|
class BaseEntryVariables:
|
||||||
"""
|
"""
|
||||||
Source variables are ``{variables}`` that contain metadata from downloaded media.
|
Source variables are ``{variables}`` that contain metadata from downloaded media.
|
||||||
|
|
@ -53,6 +81,17 @@ class BaseEntryVariables:
|
||||||
"""
|
"""
|
||||||
return sanitize_filename(self.uid)
|
return sanitize_filename(self.uid)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def uid_sanitized_plex(self: "BaseEntry") -> str:
|
||||||
|
"""
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
str
|
||||||
|
The sanitized uid with additional sanitizing for Plex. Replaces numbers with
|
||||||
|
fixed-width numbers so Plex does not recognize them as season or episode numbers.
|
||||||
|
"""
|
||||||
|
return _sanitize_plex(self.uid_sanitized)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extractor(self: "BaseEntry") -> str:
|
def extractor(self: "BaseEntry") -> str:
|
||||||
"""
|
"""
|
||||||
|
|
@ -113,6 +152,17 @@ class BaseEntryVariables:
|
||||||
"""
|
"""
|
||||||
return sanitize_filename(self.title)
|
return sanitize_filename(self.title)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def title_sanitized_plex(self) -> str:
|
||||||
|
"""
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
str
|
||||||
|
The sanitized title with additional sanitizing for Plex. Replaces numbers with
|
||||||
|
fixed-width numbers so Plex does not recognize them as season or episode numbers.
|
||||||
|
"""
|
||||||
|
return _sanitize_plex(self.title_sanitized)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def webpage_url(self: "BaseEntry") -> str:
|
def webpage_url(self: "BaseEntry") -> str:
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,21 @@
|
||||||
presets:
|
presets:
|
||||||
|
|
||||||
|
_base:
|
||||||
|
overrides:
|
||||||
|
file_uid: "{uid_sanitized}"
|
||||||
|
file_title: "{title_sanitized}"
|
||||||
|
|
||||||
_kodi_base:
|
_kodi_base:
|
||||||
|
preset:
|
||||||
|
- "_base"
|
||||||
nfo_tags:
|
nfo_tags:
|
||||||
kodi_safe: True
|
kodi_safe: True
|
||||||
output_directory_nfo_tags:
|
output_directory_nfo_tags:
|
||||||
kodi_safe: True
|
kodi_safe: True
|
||||||
|
|
||||||
|
_plex_base:
|
||||||
|
preset:
|
||||||
|
- "_base"
|
||||||
|
overrides:
|
||||||
|
file_uid: "{uid_sanitized_plex}"
|
||||||
|
file_title: "{title_sanitized_plex}"
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ presets:
|
||||||
episode_plot: "{webpage_url}\n\n{description}"
|
episode_plot: "{webpage_url}\n\n{description}"
|
||||||
episode_year: "{upload_year}"
|
episode_year: "{upload_year}"
|
||||||
episode_date_standardized: "{upload_date_standardized}"
|
episode_date_standardized: "{upload_date_standardized}"
|
||||||
episode_file_name: "s{season_number_padded}.e{episode_number_padded} - {uid_sanitized}"
|
episode_file_name: "s{season_number_padded}.e{episode_number_padded} - {file_uid}"
|
||||||
episode_file_path: "Season {season_number_padded}/{episode_file_name}"
|
episode_file_path: "Season {season_number_padded}/{episode_file_name}"
|
||||||
|
|
||||||
_episode_video_tags:
|
_episode_video_tags:
|
||||||
|
|
@ -82,7 +82,6 @@ presets:
|
||||||
|
|
||||||
season_by_year_month__episode_by_day:
|
season_by_year_month__episode_by_day:
|
||||||
preset:
|
preset:
|
||||||
- "_episode_base"
|
|
||||||
- "_season_by_year_month"
|
- "_season_by_year_month"
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{upload_day}{upload_date_index_padded}"
|
episode_number: "{upload_day}{upload_date_index_padded}"
|
||||||
|
|
@ -90,7 +89,6 @@ presets:
|
||||||
|
|
||||||
season_by_year__episode_by_month_day:
|
season_by_year__episode_by_month_day:
|
||||||
preset:
|
preset:
|
||||||
- "_episode_base"
|
|
||||||
- "_season_by_year"
|
- "_season_by_year"
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{upload_month}{upload_day_padded}{upload_date_index_padded}"
|
episode_number: "{upload_month}{upload_day_padded}{upload_date_index_padded}"
|
||||||
|
|
@ -98,7 +96,6 @@ presets:
|
||||||
|
|
||||||
season_by_year__episode_by_month_day_reversed:
|
season_by_year__episode_by_month_day_reversed:
|
||||||
preset:
|
preset:
|
||||||
- "_episode_base"
|
|
||||||
- "_season_by_year"
|
- "_season_by_year"
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{upload_day_of_year_reversed}{upload_date_index_reversed_padded}"
|
episode_number: "{upload_day_of_year_reversed}{upload_date_index_reversed_padded}"
|
||||||
|
|
@ -106,7 +103,6 @@ presets:
|
||||||
|
|
||||||
season_by_year__episode_by_download_index:
|
season_by_year__episode_by_download_index:
|
||||||
preset:
|
preset:
|
||||||
- "_episode_base"
|
|
||||||
- "_season_by_year"
|
- "_season_by_year"
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{download_index}"
|
episode_number: "{download_index}"
|
||||||
|
|
@ -115,29 +111,21 @@ presets:
|
||||||
###############
|
###############
|
||||||
|
|
||||||
season_by_collection__episode_by_year_month_day:
|
season_by_collection__episode_by_year_month_day:
|
||||||
preset:
|
|
||||||
- "_episode_base"
|
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{upload_year_truncated}{upload_month_padded}{upload_day_padded}{upload_date_index_padded}"
|
episode_number: "{upload_year_truncated}{upload_month_padded}{upload_day_padded}{upload_date_index_padded}"
|
||||||
episode_number_padded: "{episode_number}"
|
episode_number_padded: "{episode_number}"
|
||||||
|
|
||||||
season_by_collection__episode_by_year_month_day_reversed:
|
season_by_collection__episode_by_year_month_day_reversed:
|
||||||
preset:
|
|
||||||
- "_episode_base"
|
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{upload_year_truncated_reversed}{upload_month_reversed_padded}{upload_day_reversed_padded}{upload_date_index_reversed_padded}"
|
episode_number: "{upload_year_truncated_reversed}{upload_month_reversed_padded}{upload_day_reversed_padded}{upload_date_index_reversed_padded}"
|
||||||
episode_number_padded: "{episode_number}"
|
episode_number_padded: "{episode_number}"
|
||||||
|
|
||||||
season_by_collection__episode_by_playlist_index:
|
season_by_collection__episode_by_playlist_index:
|
||||||
preset:
|
|
||||||
- "_episode_base"
|
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{playlist_index}"
|
episode_number: "{playlist_index}"
|
||||||
episode_number_padded: "{playlist_index_padded6}"
|
episode_number_padded: "{playlist_index_padded6}"
|
||||||
|
|
||||||
season_by_collection__episode_by_playlist_index_reversed:
|
season_by_collection__episode_by_playlist_index_reversed:
|
||||||
preset:
|
|
||||||
- "_episode_base"
|
|
||||||
overrides:
|
overrides:
|
||||||
episode_number: "{playlist_index_reversed}"
|
episode_number: "{playlist_index_reversed}"
|
||||||
episode_number_padded: "{playlist_index_reversed_padded6}"
|
episode_number_padded: "{playlist_index_reversed_padded6}"
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ presets:
|
||||||
|
|
||||||
_plex_tv_show:
|
_plex_tv_show:
|
||||||
preset:
|
preset:
|
||||||
|
- "_plex_base"
|
||||||
|
- "_episode_base"
|
||||||
- "_episode_video_tags"
|
- "_episode_video_tags"
|
||||||
ytdl_options:
|
ytdl_options:
|
||||||
format: "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best"
|
format: "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best"
|
||||||
|
|
@ -14,6 +16,8 @@ presets:
|
||||||
|
|
||||||
_jellyfin_tv_show:
|
_jellyfin_tv_show:
|
||||||
preset:
|
preset:
|
||||||
|
- "_base"
|
||||||
|
- "_episode_base"
|
||||||
- "_episode_video_tags"
|
- "_episode_video_tags"
|
||||||
- "_episode_nfo_tags"
|
- "_episode_nfo_tags"
|
||||||
overrides:
|
overrides:
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,8 @@ def mock_entry_to_dict(
|
||||||
"source_uploader": "abc123",
|
"source_uploader": "abc123",
|
||||||
"source_uploader_id": "abc123",
|
"source_uploader_id": "abc123",
|
||||||
"source_uploader_url": "https://yourname.here",
|
"source_uploader_url": "https://yourname.here",
|
||||||
|
"uid_sanitized_plex": "abc123",
|
||||||
|
"title_sanitized_plex": "entry {title}",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue