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.
69 lines
1.9 KiB
69 lines
1.9 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 __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"),
|
|
}
|