SuperSubtitles provider: fix hungarian subtitles downloads

pull/2138/head v1.2.2-beta.1
Vitiko 2 years ago
parent 09f0a27833
commit e83f37d42e

@ -121,38 +121,49 @@ def is_episode(content):
return "episode" in guessit(content, {"type": "episode"}) return "episode" in guessit(content, {"type": "episode"})
def get_archive_from_bytes(content: bytes): _ENCS = ("utf-8", "ascii", "iso-8859-1", "iso-8859-2", "iso-8859-5", "cp1252")
"""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."""
archive_stream = io.BytesIO(content)
if rarfile.is_rarfile(archive_stream):
logger.debug("Identified rar archive")
return rarfile.RarFile(archive_stream)
elif zipfile.is_zipfile(archive_stream):
logger.debug("Identified zip archive")
return zipfile.ZipFile(archive_stream)
logger.debug("No compression format found. Trying with subtitle-like files")
# If the file is a subtitle-like file def _zip_from_subtitle_file(content):
with tempfile.NamedTemporaryFile(prefix="spsub", suffix=".srt") as tmp_f: with tempfile.NamedTemporaryFile(prefix="spsub", suffix=".srt") as tmp_f:
try:
tmp_f.write(content) tmp_f.write(content)
sub = pysubs2.load(tmp_f.name) 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: except Exception as error:
logger.debug("Couldn't load file: '%s'", error) logger.debug("%s: %s", type(error).__name__, error)
continue
else: else:
break
if sub is not None: if sub is not None:
logger.debug("Identified subtitle file: %s", sub) logger.debug("Identified subtitle file: %s", sub)
zip_obj = zipfile.ZipFile(io.BytesIO(), mode="x") zip_obj = zipfile.ZipFile(io.BytesIO(), mode="x")
zip_obj.write(tmp_f.name, os.path.basename(tmp_f.name)) zip_obj.write(tmp_f.name, os.path.basename(tmp_f.name))
return zip_obj return zip_obj
logger.debug("Nothing found") logger.debug("Couldn't load subtitle file")
return None 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."""
archive_stream = io.BytesIO(content)
if rarfile.is_rarfile(archive_stream):
logger.debug("Identified rar archive")
return rarfile.RarFile(archive_stream)
elif zipfile.is_zipfile(archive_stream):
logger.debug("Identified zip archive")
return zipfile.ZipFile(archive_stream)
logger.debug("No compression format found. Trying with subtitle-like files")
return _zip_from_subtitle_file(content)
def update_matches( def update_matches(
matches, matches,
video, video,

@ -107,6 +107,30 @@ def test_download_movie_subtitle(movies):
assert subtitle.is_valid() 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): def test_subtitle_reprs(movies):
subtitle = SuperSubtitlesSubtitle( subtitle = SuperSubtitlesSubtitle(
Language.fromalpha2("en"), Language.fromalpha2("en"),

Loading…
Cancel
Save