You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bazarr/libs/fese/disposition.py

75 lines
2.1 KiB

# -*- coding: utf-8 -*-
import logging
import re
logger = logging.getLogger(__name__)
class FFprobeSubtitleDisposition:
def __init__(self, data: dict):
self.default = False
self.generic = False
self.dub = False
self.original = False
self.comment = False
self.lyrics = False
self.karaoke = False
self.forced = False
self.hearing_impaired = False
self.visual_impaired = False
self.clean_effects = False
self.attached_pic = False
self.timed_thumbnails = False
self._content_type = None
for key, val in data.items():
if hasattr(self, key):
setattr(self, key, bool(val))
for key in _content_types.keys():
if getattr(self, key, None):
self._content_type = key
def update_from_tags(self, tags):
tag_title = tags.get("title")
if tag_title is None:
logger.debug("Title not found. Marking as generic")
self.generic = True
return None
l_tag_title = tag_title.lower()
for key, val in _content_types.items():
if val.search(l_tag_title) is not None:
logger.debug("Found %s: %s", key, l_tag_title)
self._content_type = key
setattr(self, key, True)
return None
logger.debug("Generic disposition title found: %s", l_tag_title)
self.generic = True
return None
@property
def suffix(self):
return self._content_type or ""
def language_kwargs(self):
return {
"hi": self._content_type == "hearing_impaired",
"forced": self._content_type == "forced",
}
def __str__(self):
return self.suffix.upper() or "GENERIC"
_content_types = {
"hearing_impaired": re.compile(r"sdh|hearing impaired|cc"),
"forced": re.compile(r"forced|non[- ]english"),
"comment": re.compile(r"comment"),
"visual_impaired": re.compile(r"signs|visual impair"),
"karaoke": re.compile(r"karaoke|songs"),
}