mirror of
https://github.com/morpheus65535/bazarr.git
synced 2025-01-01 12:32:25 +08:00
Merge remote-tracking branch 'origin/development' into development
This commit is contained in:
commit
98c7364ce0
4 changed files with 57 additions and 23 deletions
|
@ -87,8 +87,7 @@ def manual_search(path, profile_id, providers, sceneName, title, media_type):
|
|||
logging.debug(f"BAZARR Skipping {s}, because it doesn't match our series/episode")
|
||||
except TypeError:
|
||||
logging.debug("BAZARR Ignoring invalid subtitles")
|
||||
finally:
|
||||
continue
|
||||
continue
|
||||
|
||||
initial_hi = None
|
||||
initial_hi_match = False
|
||||
|
|
|
@ -121,6 +121,33 @@ def is_episode(content):
|
|||
return "episode" in guessit(content, {"type": "episode"})
|
||||
|
||||
|
||||
_ENCS = ("utf-8", "ascii", "iso-8859-1", "iso-8859-2", "iso-8859-5", "cp1252")
|
||||
|
||||
|
||||
def _zip_from_subtitle_file(content):
|
||||
with tempfile.NamedTemporaryFile(prefix="spsub", suffix=".srt") as tmp_f:
|
||||
tmp_f.write(content)
|
||||
sub = None
|
||||
for enc in _ENCS:
|
||||
try:
|
||||
logger.debug("Trying %s encoding", enc)
|
||||
sub = pysubs2.load(tmp_f.name, encoding=enc)
|
||||
except Exception as error:
|
||||
logger.debug("%s: %s", type(error).__name__, error)
|
||||
continue
|
||||
else:
|
||||
break
|
||||
|
||||
if sub is not None:
|
||||
logger.debug("Identified subtitle file: %s", sub)
|
||||
zip_obj = zipfile.ZipFile(io.BytesIO(), mode="x")
|
||||
zip_obj.write(tmp_f.name, os.path.basename(tmp_f.name))
|
||||
return zip_obj
|
||||
|
||||
logger.debug("Couldn't load subtitle file")
|
||||
return None
|
||||
|
||||
|
||||
def get_archive_from_bytes(content: bytes):
|
||||
"""Get RarFile/ZipFile object from bytes. A ZipFile instance will be returned
|
||||
if a subtitle-like stream is found. Return None if something else is found."""
|
||||
|
@ -134,23 +161,7 @@ def get_archive_from_bytes(content: bytes):
|
|||
return zipfile.ZipFile(archive_stream)
|
||||
|
||||
logger.debug("No compression format found. Trying with subtitle-like files")
|
||||
|
||||
# If the file is a subtitle-like file
|
||||
with tempfile.NamedTemporaryFile(prefix="spsub", suffix=".srt") as tmp_f:
|
||||
try:
|
||||
tmp_f.write(content)
|
||||
sub = pysubs2.load(tmp_f.name)
|
||||
except Exception as error:
|
||||
logger.debug("Couldn't load file: '%s'", error)
|
||||
else:
|
||||
if sub is not None:
|
||||
logger.debug("Identified subtitle file: %s", sub)
|
||||
zip_obj = zipfile.ZipFile(io.BytesIO(), mode="x")
|
||||
zip_obj.write(tmp_f.name, os.path.basename(tmp_f.name))
|
||||
return zip_obj
|
||||
|
||||
logger.debug("Nothing found")
|
||||
return None
|
||||
return _zip_from_subtitle_file(content)
|
||||
|
||||
|
||||
def update_matches(
|
||||
|
|
|
@ -143,7 +143,7 @@ class ZimukuProvider(Provider):
|
|||
self.session.cookies.set("srcurl", string_to_hex(r.url))
|
||||
if tr:
|
||||
verify_resp = self.session.get(
|
||||
self.server_url + tr[0] + string_to_hex(self.code), allow_redirects=False)
|
||||
urljoin(self.server_url, tr[0] + string_to_hex(self.code)), allow_redirects=False)
|
||||
if verify_resp.status_code == 302 \
|
||||
and self.session.cookies.get("security_session_verify") is not None:
|
||||
pass
|
||||
|
@ -164,7 +164,7 @@ class ZimukuProvider(Provider):
|
|||
bs_obj = ParserBeautifulSoup(
|
||||
r.content.decode("utf-8", "ignore"), ["html.parser"]
|
||||
)
|
||||
subs_body = bs_obj.find("div", class_="subs box clearfix").find("tbody")
|
||||
subs_body = bs_obj.find("tbody")
|
||||
subs = []
|
||||
for sub in subs_body.find_all("tr"):
|
||||
a = sub.find("a")
|
||||
|
@ -208,7 +208,7 @@ class ZimukuProvider(Provider):
|
|||
|
||||
logger.debug("Searching subtitles %r", params)
|
||||
subtitles = []
|
||||
search_link = self.server_url + text_type(self.search_url).format(params)
|
||||
search_link = urljoin(self.server_url, text_type(self.search_url).format(params))
|
||||
|
||||
r = self.yunsuo_bypass(search_link, timeout=30)
|
||||
r.raise_for_status()
|
||||
|
@ -254,7 +254,7 @@ class ZimukuProvider(Provider):
|
|||
season_cn2 = num_to_cn(str(season))
|
||||
if season_cn1 != season_cn2:
|
||||
continue
|
||||
episode_link = self.server_url + title_a.attrs["href"]
|
||||
episode_link = urljoin(self.server_url, title_a.attrs["href"])
|
||||
new_subs = self._parse_episode_page(episode_link, subs_year)
|
||||
subtitles += new_subs
|
||||
|
||||
|
|
|
@ -107,6 +107,30 @@ def test_download_movie_subtitle(movies):
|
|||
assert subtitle.is_valid()
|
||||
|
||||
|
||||
def test_download_movie_subtitle_hungarian(movies):
|
||||
movie = movies["dune"]
|
||||
|
||||
subtitle = SuperSubtitlesSubtitle(
|
||||
Language.fromalpha2("hu"),
|
||||
"https://www.feliratok.eu//index.php?action=letolt&felirat=1681841063",
|
||||
1634579718,
|
||||
"Foo",
|
||||
0,
|
||||
0,
|
||||
"",
|
||||
["Foo"],
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
asked_for_episode=None,
|
||||
)
|
||||
assert subtitle.get_matches(movie)
|
||||
|
||||
with SuperSubtitlesProvider() as provider:
|
||||
provider.download_subtitle(subtitle)
|
||||
assert subtitle.is_valid()
|
||||
|
||||
|
||||
def test_subtitle_reprs(movies):
|
||||
subtitle = SuperSubtitlesSubtitle(
|
||||
Language.fromalpha2("en"),
|
||||
|
|
Loading…
Reference in a new issue