49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
import re
|
|
import string
|
|
import unicodedata
|
|
from enum import Enum
|
|
from typing import List, Tuple
|
|
|
|
from .spodcast import Spodcast
|
|
|
|
valid_filename_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
|
|
|
|
def regex_input_for_urls(search_input) -> Tuple[str, str, str, str, str, str]:
|
|
episode_uri_search = re.search(
|
|
r'^spotify:episode:(?P<EpisodeID>[0-9a-zA-Z]{22})$', search_input)
|
|
episode_url_search = re.search(
|
|
r'^(https?://)?open\.spotify\.com/episode/(?P<EpisodeID>[0-9a-zA-Z]{22})(\?si=.+?)?$',
|
|
search_input,
|
|
)
|
|
|
|
show_uri_search = re.search(
|
|
r'^spotify:show:(?P<ShowID>[0-9a-zA-Z]{22})$', search_input)
|
|
show_url_search = re.search(
|
|
r'^(https?://)?open\.spotify\.com/show/(?P<ShowID>[0-9a-zA-Z]{22})(\?si=.+?)?$',
|
|
search_input,
|
|
)
|
|
if episode_uri_search is not None or episode_url_search is not None:
|
|
episode_id_str = (episode_uri_search
|
|
if episode_uri_search is not None else
|
|
episode_url_search).group('EpisodeID')
|
|
else:
|
|
episode_id_str = None
|
|
|
|
if show_uri_search is not None or show_url_search is not None:
|
|
show_id_str = (show_uri_search
|
|
if show_uri_search is not None else
|
|
show_url_search).group('ShowID')
|
|
else:
|
|
show_id_str = None
|
|
|
|
return episode_id_str, show_id_str
|
|
|
|
|
|
def clean_filename(filename, whitelist=valid_filename_chars, replace=' '):
|
|
for r in replace:
|
|
filename = filename.replace(r,'_')
|
|
|
|
cleaned_filename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore').decode()
|
|
cleaned_filename = ''.join(c for c in cleaned_filename if c in whitelist)
|
|
return cleaned_filename
|
|
|