mirror of https://github.com/morpheus65535/bazarr
106 lines
4.2 KiB
Python
106 lines
4.2 KiB
Python
# coding=utf-8
|
|
|
|
from flask import request, jsonify
|
|
from flask_restful import Resource
|
|
|
|
from database import TableEpisodes, TableShows, get_audio_profile_languages, get_profile_id
|
|
from helper import path_mappings
|
|
from get_providers import get_providers
|
|
from get_subtitle.manual import manual_search, manual_download_subtitle
|
|
from utils import history_log
|
|
from config import settings
|
|
from notifier import send_notifications
|
|
from list_subtitles import store_subtitles
|
|
|
|
from ..utils import authenticate
|
|
|
|
|
|
class ProviderEpisodes(Resource):
|
|
@authenticate
|
|
def get(self):
|
|
# Manual Search
|
|
sonarrEpisodeId = request.args.get('episodeid')
|
|
episodeInfo = TableEpisodes.select(TableEpisodes.path,
|
|
TableEpisodes.scene_name,
|
|
TableShows.title,
|
|
TableShows.profileId) \
|
|
.join(TableShows, on=(TableEpisodes.sonarrSeriesId == TableShows.sonarrSeriesId))\
|
|
.where(TableEpisodes.sonarrEpisodeId == sonarrEpisodeId) \
|
|
.dicts() \
|
|
.get_or_none()
|
|
|
|
if not episodeInfo:
|
|
return 'Episode not found', 500
|
|
|
|
title = episodeInfo['title']
|
|
episodePath = path_mappings.path_replace(episodeInfo['path'])
|
|
sceneName = episodeInfo['scene_name'] or "None"
|
|
profileId = episodeInfo['profileId']
|
|
|
|
providers_list = get_providers()
|
|
|
|
data = manual_search(episodePath, profileId, providers_list, sceneName, title, 'series')
|
|
if not data:
|
|
data = []
|
|
return jsonify(data=data)
|
|
|
|
@authenticate
|
|
def post(self):
|
|
# Manual Download
|
|
sonarrSeriesId = request.args.get('seriesid')
|
|
sonarrEpisodeId = request.args.get('episodeid')
|
|
episodeInfo = TableEpisodes.select(TableEpisodes.path,
|
|
TableEpisodes.scene_name,
|
|
TableShows.title) \
|
|
.join(TableShows, on=(TableEpisodes.sonarrSeriesId == TableShows.sonarrSeriesId)) \
|
|
.where(TableEpisodes.sonarrEpisodeId == sonarrEpisodeId) \
|
|
.dicts() \
|
|
.get_or_none()
|
|
|
|
if not episodeInfo:
|
|
return 'Episode not found', 500
|
|
|
|
title = episodeInfo['title']
|
|
episodePath = path_mappings.path_replace(episodeInfo['path'])
|
|
sceneName = episodeInfo['scene_name'] or "None"
|
|
|
|
hi = request.form.get('hi').capitalize()
|
|
forced = request.form.get('forced').capitalize()
|
|
use_original_format = request.form.get('original_format').capitalize()
|
|
selected_provider = request.form.get('provider')
|
|
subtitle = request.form.get('subtitle')
|
|
|
|
audio_language_list = get_audio_profile_languages(episode_id=sonarrEpisodeId)
|
|
if len(audio_language_list) > 0:
|
|
audio_language = audio_language_list[0]['name']
|
|
else:
|
|
audio_language = 'None'
|
|
|
|
try:
|
|
result = manual_download_subtitle(episodePath, audio_language, hi, forced, subtitle, selected_provider,
|
|
sceneName, title, 'series', use_original_format, profile_id=get_profile_id(episode_id=sonarrEpisodeId))
|
|
if result is not None:
|
|
message = result[0]
|
|
path = result[1]
|
|
forced = result[5]
|
|
if result[8]:
|
|
language_code = result[2] + ":hi"
|
|
elif forced:
|
|
language_code = result[2] + ":forced"
|
|
else:
|
|
language_code = result[2]
|
|
provider = result[3]
|
|
score = result[4]
|
|
subs_id = result[6]
|
|
subs_path = result[7]
|
|
history_log(2, sonarrSeriesId, sonarrEpisodeId, message, path, language_code, provider, score, subs_id,
|
|
subs_path)
|
|
if not settings.general.getboolean('dont_notify_manual_actions'):
|
|
send_notifications(sonarrSeriesId, sonarrEpisodeId, message)
|
|
store_subtitles(path, episodePath)
|
|
return result, 201
|
|
except OSError:
|
|
pass
|
|
|
|
return '', 204
|