mirror of https://github.com/morpheus65535/bazarr
151 lines
5.6 KiB
Python
151 lines
5.6 KiB
Python
# coding=utf-8
|
|
|
|
import ast
|
|
|
|
from functools import wraps
|
|
from flask import request, abort
|
|
from operator import itemgetter
|
|
|
|
from app.config import settings, base_url
|
|
from languages.get_languages import language_from_alpha2, alpha3_from_alpha2
|
|
from app.database import get_audio_profile_languages, get_desired_languages
|
|
from utilities.path_mappings import path_mappings
|
|
|
|
None_Keys = ['null', 'undefined', '', None]
|
|
|
|
False_Keys = ['False', 'false', '0']
|
|
|
|
|
|
def authenticate(actual_method):
|
|
@wraps(actual_method)
|
|
def wrapper(*args, **kwargs):
|
|
apikey_settings = settings.auth.apikey
|
|
apikey_get = request.args.get('apikey')
|
|
apikey_post = request.form.get('apikey')
|
|
apikey_header = None
|
|
if 'X-API-KEY' in request.headers:
|
|
apikey_header = request.headers['X-API-KEY']
|
|
|
|
if apikey_settings in [apikey_get, apikey_post, apikey_header]:
|
|
return actual_method(*args, **kwargs)
|
|
|
|
return abort(401)
|
|
|
|
return wrapper
|
|
|
|
|
|
def postprocess(item):
|
|
# Remove ffprobe_cache
|
|
if item.get('radarrId'):
|
|
path_replace = path_mappings.path_replace_movie
|
|
else:
|
|
path_replace = path_mappings.path_replace
|
|
if item.get('ffprobe_cache'):
|
|
del item['ffprobe_cache']
|
|
|
|
# Parse audio language
|
|
if item.get('audio_language'):
|
|
item['audio_language'] = get_audio_profile_languages(item['audio_language'])
|
|
|
|
# Make sure profileId is a valid None value
|
|
if item.get('profileId') in None_Keys:
|
|
item['profileId'] = None
|
|
|
|
# Parse alternate titles
|
|
if item.get('alternativeTitles'):
|
|
item['alternativeTitles'] = ast.literal_eval(item['alternativeTitles'])
|
|
else:
|
|
item['alternativeTitles'] = []
|
|
|
|
# Parse subtitles
|
|
if item.get('subtitles'):
|
|
item['subtitles'] = ast.literal_eval(item['subtitles'])
|
|
for i, subs in enumerate(item['subtitles']):
|
|
language = subs[0].split(':')
|
|
file_size = subs[2] if len(subs) > 2 else 0
|
|
item['subtitles'][i] = {"path": path_replace(subs[1]),
|
|
"name": language_from_alpha2(language[0]),
|
|
"code2": language[0],
|
|
"code3": alpha3_from_alpha2(language[0]),
|
|
"forced": False,
|
|
"hi": False,
|
|
"file_size": file_size}
|
|
if len(language) > 1:
|
|
item['subtitles'][i].update(
|
|
{
|
|
"forced": language[1] == 'forced',
|
|
"hi": language[1] == 'hi',
|
|
}
|
|
)
|
|
if settings.general.embedded_subs_show_desired and item.get('profileId'):
|
|
desired_lang_list = get_desired_languages(item['profileId'])
|
|
item['subtitles'] = [x for x in item['subtitles'] if x['code2'] in desired_lang_list or x['path']]
|
|
item['subtitles'] = sorted(item['subtitles'], key=itemgetter('name', 'forced'))
|
|
else:
|
|
item['subtitles'] = []
|
|
|
|
# Parse missing subtitles
|
|
if item.get('missing_subtitles'):
|
|
item['missing_subtitles'] = ast.literal_eval(item['missing_subtitles'])
|
|
for i, subs in enumerate(item['missing_subtitles']):
|
|
language = subs.split(':')
|
|
item['missing_subtitles'][i] = {"name": language_from_alpha2(language[0]),
|
|
"code2": language[0],
|
|
"code3": alpha3_from_alpha2(language[0]),
|
|
"forced": False,
|
|
"hi": False}
|
|
if len(language) > 1:
|
|
item['missing_subtitles'][i].update(
|
|
{
|
|
"forced": language[1] == 'forced',
|
|
"hi": language[1] == 'hi',
|
|
}
|
|
)
|
|
else:
|
|
item['missing_subtitles'] = []
|
|
|
|
# Parse tags
|
|
if item.get('tags') is not None:
|
|
item['tags'] = ast.literal_eval(item.get('tags', '[]'))
|
|
else:
|
|
item['tags'] = []
|
|
if item.get('monitored'):
|
|
item['monitored'] = item.get('monitored') == 'True'
|
|
else:
|
|
item['monitored'] = False
|
|
if item.get('hearing_impaired'):
|
|
item['hearing_impaired'] = item.get('hearing_impaired') == 'True'
|
|
else:
|
|
item['hearing_impaired'] = False
|
|
|
|
if item.get('language'):
|
|
if item['language'] == 'None':
|
|
item['language'] = None
|
|
if item['language'] is not None:
|
|
splitted_language = item['language'].split(':')
|
|
item['language'] = {
|
|
"name": language_from_alpha2(splitted_language[0]),
|
|
"code2": splitted_language[0],
|
|
"code3": alpha3_from_alpha2(splitted_language[0]),
|
|
"forced": bool(item['language'].endswith(':forced')),
|
|
"hi": bool(item['language'].endswith(':hi')),
|
|
}
|
|
|
|
if item.get('path'):
|
|
item['path'] = path_replace(item['path'])
|
|
|
|
if item.get('subtitles_path'):
|
|
# Provide mapped subtitles path
|
|
item['subtitles_path'] = path_replace(item['subtitles_path'])
|
|
|
|
# map poster and fanart to server proxy
|
|
if item.get('poster') is not None:
|
|
poster = item['poster']
|
|
item['poster'] = f"{base_url}/images/{'movies' if item.get('radarrId') else 'series'}{poster}" if poster else None
|
|
|
|
if item.get('fanart') is not None:
|
|
fanart = item['fanart']
|
|
item['fanart'] = f"{base_url}/images/{'movies' if item.get('radarrId') else 'series'}{fanart}" if fanart else None
|
|
|
|
return item
|