If available, use sceneName from Sonarr imported episodes #46

pull/56/merge
morpheus65535 7 years ago
parent 490bdae53f
commit a987149341

@ -1,4 +1,4 @@
bazarr_version = '0.3.3' bazarr_version = '0.3.5'
import os import os
import sys import sys
@ -261,7 +261,7 @@ def episodes(no):
series_details = c.execute("SELECT title, overview, poster, fanart, hearing_impaired, tvdbid, audio_language, languages, path_substitution(path) FROM table_shows WHERE sonarrSeriesId LIKE ?", (str(no),)).fetchone() series_details = c.execute("SELECT title, overview, poster, fanart, hearing_impaired, tvdbid, audio_language, languages, path_substitution(path) FROM table_shows WHERE sonarrSeriesId LIKE ?", (str(no),)).fetchone()
tvdbid = series_details[5] tvdbid = series_details[5]
episodes = c.execute("SELECT title, path_substitution(path), season, episode, subtitles, sonarrSeriesId, missing_subtitles, sonarrEpisodeId FROM table_episodes WHERE sonarrSeriesId LIKE ? ORDER BY episode ASC", (str(no),)).fetchall() episodes = c.execute("SELECT title, path_substitution(path), season, episode, subtitles, sonarrSeriesId, missing_subtitles, sonarrEpisodeId, scene_name FROM table_episodes WHERE sonarrSeriesId LIKE ? ORDER BY episode ASC", (str(no),)).fetchall()
number = len(episodes) number = len(episodes)
languages = c.execute("SELECT code2, name FROM table_settings_languages WHERE enabled = 1").fetchall() languages = c.execute("SELECT code2, name FROM table_settings_languages WHERE enabled = 1").fetchall()
c.close() c.close()
@ -317,7 +317,7 @@ def history():
thisyear.append(datetime.fromtimestamp(stat[0]).date()) thisyear.append(datetime.fromtimestamp(stat[0]).date())
stats = [len(today), len(thisweek), len(thisyear), total] stats = [len(today), len(thisweek), len(thisyear), total]
c.execute("SELECT table_history.action, table_shows.title, table_episodes.season || 'x' || table_episodes.episode, table_episodes.title, table_history.timestamp, table_history.description, table_history.sonarrSeriesId FROM table_history INNER JOIN table_shows on table_shows.sonarrSeriesId = table_history.sonarrSeriesId INNER JOIN table_episodes on table_episodes.sonarrEpisodeId = table_history.sonarrEpisodeId ORDER BY id DESC LIMIT 15 OFFSET ?", (offset,)) c.execute("SELECT table_history.action, table_shows.title, table_episodes.season || 'x' || table_episodes.episode, table_episodes.title, table_history.timestamp, table_history.description, table_history.sonarrSeriesId FROM table_history LEFT JOIN table_shows on table_shows.sonarrSeriesId = table_history.sonarrSeriesId LEFT JOIN table_episodes on table_episodes.sonarrEpisodeId = table_history.sonarrEpisodeId ORDER BY id DESC LIMIT 15 OFFSET ?", (offset,))
data = c.fetchall() data = c.fetchall()
c.close() c.close()
data = reversed(sorted(data, key=operator.itemgetter(4))) data = reversed(sorted(data, key=operator.itemgetter(4)))
@ -726,7 +726,7 @@ def remove_subtitles():
history_log(0, sonarrSeriesId, sonarrEpisodeId, result) history_log(0, sonarrSeriesId, sonarrEpisodeId, result)
except OSError: except OSError:
pass pass
store_subtitles(episodePath) store_subtitles(unicode(episodePath))
list_missing_subtitles(sonarrSeriesId) list_missing_subtitles(sonarrSeriesId)
@route(base_url + 'get_subtitle', method='POST') @route(base_url + 'get_subtitle', method='POST')
@ -734,6 +734,7 @@ def get_subtitle():
ref = request.environ['HTTP_REFERER'] ref = request.environ['HTTP_REFERER']
episodePath = request.forms.get('episodePath') episodePath = request.forms.get('episodePath')
sceneName = request.forms.get('sceneName')
language = request.forms.get('language') language = request.forms.get('language')
hi = request.forms.get('hi') hi = request.forms.get('hi')
sonarrSeriesId = request.forms.get('sonarrSeriesId') sonarrSeriesId = request.forms.get('sonarrSeriesId')
@ -764,11 +765,11 @@ def get_subtitle():
providers_auth = None providers_auth = None
try: try:
result = download_subtitle(episodePath, language, hi, providers_list, providers_auth) result = download_subtitle(episodePath, language, hi, providers_list, providers_auth, sceneName)
if result is not None: if result is not None:
history_log(1, sonarrSeriesId, sonarrEpisodeId, result) history_log(1, sonarrSeriesId, sonarrEpisodeId, result)
send_notifications(sonarrSeriesId, sonarrEpisodeId, result) send_notifications(sonarrSeriesId, sonarrEpisodeId, result)
store_subtitles(episodePath) store_subtitles(unicode(episodePath))
list_missing_subtitles(sonarrSeriesId) list_missing_subtitles(sonarrSeriesId)
redirect(ref) redirect(ref)
except OSError: except OSError:

@ -32,12 +32,15 @@ def update_all_episodes():
if episode['hasFile'] and episode['episodeFile']['size'] > 20480: if episode['hasFile'] and episode['episodeFile']['size'] > 20480:
# Add shows in Sonarr to current shows list # Add shows in Sonarr to current shows list
current_episodes_sonarr.append(episode['id']) current_episodes_sonarr.append(episode['id'])
if 'sceneName' in episode['episodeFile']:
sceneName = episode['episodeFile']['sceneName']
else:
sceneName = None
try: try:
c.execute('''INSERT INTO table_episodes(sonarrSeriesId, sonarrEpisodeId, title, path, season, episode) VALUES (?, ?, ?, ?, ?, ?)''', (episode['seriesId'], episode['id'], episode['title'], episode['episodeFile']['path'], episode['seasonNumber'], episode['episodeNumber'])) c.execute('''INSERT INTO table_episodes(sonarrSeriesId, sonarrEpisodeId, title, path, season, episode, scene_name) VALUES (?, ?, ?, ?, ?, ?, ?)''', (episode['seriesId'], episode['id'], episode['title'], episode['episodeFile']['path'], episode['seasonNumber'], episode['episodeNumber'], sceneName))
db.commit() db.commit()
except sqlite3.Error: except sqlite3.Error:
c.execute('''UPDATE table_episodes SET sonarrSeriesId = ?, sonarrEpisodeId = ?, title = ?, path = ?, season = ?, episode = ? WHERE sonarrEpisodeId = ?''', (episode['seriesId'], episode['id'], episode['title'], episode['episodeFile']['path'], episode['seasonNumber'], episode['episodeNumber'], episode['id'])) c.execute('''UPDATE table_episodes SET sonarrSeriesId = ?, sonarrEpisodeId = ?, title = ?, path = ?, season = ?, episode = ?, scene_name = ? WHERE sonarrEpisodeId = ?''', (episode['seriesId'], episode['id'], episode['title'], episode['episodeFile']['path'], episode['seasonNumber'], episode['episodeNumber'], sceneName, episode['id']))
db.commit() db.commit()
else: else:
continue continue
@ -93,9 +96,12 @@ def add_new_episodes():
if episode['hasFile'] and episode['episodeFile']['size'] > 20480: if episode['hasFile'] and episode['episodeFile']['size'] > 20480:
# Add shows in Sonarr to current shows list # Add shows in Sonarr to current shows list
current_episodes_sonarr.append(episode['id']) current_episodes_sonarr.append(episode['id'])
if 'sceneName' in episode['episodeFile']:
sceneName = episode['episodeFile']['sceneName']
else:
sceneName = None
try: try:
c.execute('''INSERT INTO table_episodes(sonarrSeriesId, sonarrEpisodeId, title, path, season, episode) VALUES (?, ?, ?, ?, ?, ?)''', (episode['seriesId'], episode['id'], episode['title'], episode['episodeFile']['path'], episode['seasonNumber'], episode['episodeNumber'])) c.execute('''INSERT INTO table_episodes(sonarrSeriesId, sonarrEpisodeId, title, path, season, episode, scene_name) VALUES (?, ?, ?, ?, ?, ?, ?)''', (episode['seriesId'], episode['id'], episode['title'], episode['episodeFile']['path'], episode['seasonNumber'], episode['episodeNumber'], sceneName))
except: except:
pass pass
db.commit() db.commit()

@ -13,15 +13,19 @@ from notifier import send_notifications
# configure the cache # configure the cache
region.configure('dogpile.cache.memory') region.configure('dogpile.cache.memory')
def download_subtitle(path, language, hi, providers, providers_auth): def download_subtitle(path, language, hi, providers, providers_auth, sceneName):
try: try:
video = scan_video(path) if sceneName is None:
video = scan_video(path)
else:
video = Video.fromname(sceneName)
except Exception as e: except Exception as e:
logging.exception('Error trying to extract information from this filename: ' + path) logging.exception('Error trying to extract information from this filename: ' + path)
return None return None
else: else:
try: try:
best_subtitles = download_best_subtitles([video], {Language(language)}, providers=providers, hearing_impaired=hi, provider_configs=providers_auth) best_subtitles = download_best_subtitles([video], {Language(language)}, providers=providers, hearing_impaired=hi, provider_configs=providers_auth)
except Exception as e: except Exception as e:
logging.exception('Error trying to best subtitles for this file: ' + path) logging.exception('Error trying to best subtitles for this file: ' + path)
return None return None
@ -34,6 +38,8 @@ def download_subtitle(path, language, hi, providers, providers_auth):
else: else:
single = get_general_settings()[7] single = get_general_settings()[7]
try: try:
if sceneName is not None:
video = scan_video(path)
if single == 'True': if single == 'True':
result = save_subtitles(video, [best_subtitle], single=True, encoding='utf-8') result = save_subtitles(video, [best_subtitle], single=True, encoding='utf-8')
else: else:
@ -51,7 +57,7 @@ def download_subtitle(path, language, hi, providers, providers_auth):
def series_download_subtitles(no): def series_download_subtitles(no):
conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30) conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
c_db = conn_db.cursor() c_db = conn_db.cursor()
episodes_details = c_db.execute("SELECT path, missing_subtitles, sonarrEpisodeId FROM table_episodes WHERE sonarrSeriesId = ?", (no,)).fetchall() episodes_details = c_db.execute("SELECT path, missing_subtitles, sonarrEpisodeId, scene_name FROM table_episodes WHERE sonarrSeriesId = ?", (no,)).fetchall()
series_details = c_db.execute("SELECT hearing_impaired FROM table_shows WHERE sonarrSeriesId = ?", (no,)).fetchone() series_details = c_db.execute("SELECT hearing_impaired FROM table_shows WHERE sonarrSeriesId = ?", (no,)).fetchone()
enabled_providers = c_db.execute("SELECT * FROM table_settings_providers WHERE enabled = 1").fetchall() enabled_providers = c_db.execute("SELECT * FROM table_settings_providers WHERE enabled = 1").fetchall()
c_db.close() c_db.close()
@ -75,7 +81,7 @@ def series_download_subtitles(no):
for episode in episodes_details: for episode in episodes_details:
for language in ast.literal_eval(episode[1]): for language in ast.literal_eval(episode[1]):
message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), series_details[0], providers_list, providers_auth) message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), series_details[0], providers_list, providers_auth, episode[3])
if message is not None: if message is not None:
store_subtitles(path_replace(episode[0])) store_subtitles(path_replace(episode[0]))
history_log(1, no, episode[2], message) history_log(1, no, episode[2], message)
@ -85,7 +91,7 @@ def series_download_subtitles(no):
def wanted_download_subtitles(path): def wanted_download_subtitles(path):
conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30) conn_db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
c_db = conn_db.cursor() c_db = conn_db.cursor()
episodes_details = c_db.execute("SELECT table_episodes.path, table_episodes.missing_subtitles, table_episodes.sonarrEpisodeId, table_episodes.sonarrSeriesId, table_shows.hearing_impaired FROM table_episodes INNER JOIN table_shows on table_shows.sonarrSeriesId = table_episodes.sonarrSeriesId WHERE table_episodes.path = ? AND missing_subtitles != '[]'", (path_replace_reverse(path),)).fetchall() episodes_details = c_db.execute("SELECT table_episodes.path, table_episodes.missing_subtitles, table_episodes.sonarrEpisodeId, table_episodes.sonarrSeriesId, table_shows.hearing_impaired, table_episodes.scene_name FROM table_episodes INNER JOIN table_shows on table_shows.sonarrSeriesId = table_episodes.sonarrSeriesId WHERE table_episodes.path = ? AND missing_subtitles != '[]'", (path_replace_reverse(path),)).fetchall()
enabled_providers = c_db.execute("SELECT * FROM table_settings_providers WHERE enabled = 1").fetchall() enabled_providers = c_db.execute("SELECT * FROM table_settings_providers WHERE enabled = 1").fetchall()
c_db.close() c_db.close()
@ -108,7 +114,7 @@ def wanted_download_subtitles(path):
for episode in episodes_details: for episode in episodes_details:
for language in ast.literal_eval(episode[1]): for language in ast.literal_eval(episode[1]):
message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), episode[4], providers_list, providers_auth) message = download_subtitle(path_replace(episode[0]), str(pycountry.languages.lookup(language).alpha_3), episode[4], providers_list, providers_auth, episode[5])
if message is not None: if message is not None:
store_subtitles(path_replace(episode[0])) store_subtitles(path_replace(episode[0]))
list_missing_subtitles(episode[3]) list_missing_subtitles(episode[3])

@ -49,6 +49,15 @@ if os.path.exists(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'))
for provider in providers: for provider in providers:
c.execute('INSERT INTO `table_settings_notifier` (name, enabled) VALUES (?, ?);', (provider,'0')) c.execute('INSERT INTO `table_settings_notifier` (name, enabled) VALUES (?, ?);', (provider,'0'))
try:
c.execute('alter table table_episodes add column "scene_name" TEXT')
db.commit()
except:
pass
else:
from get_episodes import update_all_episodes
update_all_episodes()
# Commit change to db # Commit change to db
db.commit() db.commit()

@ -183,7 +183,7 @@
%end %end
%if missing_languages is not None: %if missing_languages is not None:
%for language in missing_languages: %for language in missing_languages:
<a data-episodePath="{{episode[1]}}" data-language="{{pycountry.languages.lookup(str(language)).alpha_3}}" data-hi="{{details[4]}}" data-sonarrSeriesId={{episode[5]}} data-sonarrEpisodeId={{episode[7]}} class="get_subtitle ui tiny label"> <a data-episodePath="{{episode[1]}}" data-scenename="{{episode[8]}}" data-language="{{pycountry.languages.lookup(str(language)).alpha_3}}" data-hi="{{details[4]}}" data-sonarrSeriesId={{episode[5]}} data-sonarrEpisodeId={{episode[7]}} class="get_subtitle ui tiny label">
{{language}} {{language}}
<i style="margin-left:3px; margin-right:0px" class="search icon"></i> <i style="margin-left:3px; margin-right:0px" class="search icon"></i>
</a> </a>

@ -79,14 +79,24 @@
</div> </div>
%end %end
</td> </td>
<td><a href="{{base_url}}episodes/{{row[6]}}">{{row[1]}}</a></td> <td>
<a href="{{base_url}}episodes/{{row[6]}}">{{row[1]}}</a>
</td>
<td class="collapsing"> <td class="collapsing">
<%episode = row[2].split('x')%> %if row[2] is not None:
% episode = row[2].split('x')
{{episode[0] + 'x' + episode[1].zfill(2)}} {{episode[0] + 'x' + episode[1].zfill(2)}}
%end
</td>
<td>
%if row[3] is not None:
{{row[3]}}
%else:
<em>Deleted episode</em>
%end
</td> </td>
<td>{{row[3]}}</td>
<td class="collapsing"> <td class="collapsing">
<div class="ui inverted" data-tooltip="{{time.strftime('%A, %B %d %Y %H:%M', time.localtime(row[4]))}}" data-inverted=""> <div class="ui inverted" data-tooltip="{{time.strftime('%Y/%m/%d %H:%M', time.localtime(row[4]))}}" data-inverted="">
{{pretty.date(int(row[4]))}} {{pretty.date(int(row[4]))}}
</div> </div>
</td> </td>

Loading…
Cancel
Save