aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLouis Vézina <[email protected]>2019-03-11 17:44:49 -0400
committerLouis Vézina <[email protected]>2019-03-11 17:44:49 -0400
commit41fd0e153ebea507280c323effe830d77af7983e (patch)
treec2c86d2b47f0f409b9eb12fe92217aa6107f671d
parent4a753c06db43f31018b8d1ce4352572dfe93f3c2 (diff)
downloadbazarr-41fd0e153ebea507280c323effe830d77af7983e.tar.gz
bazarr-41fd0e153ebea507280c323effe830d77af7983e.zip
Improvement to history in preparation for subtitles upgrading.
-rw-r--r--bazarr/get_subtitle.py51
-rw-r--r--bazarr/helper.py45
-rw-r--r--bazarr/main.py48
-rw-r--r--bazarr/update_db.py21
-rw-r--r--bazarr/utils.py12
5 files changed, 143 insertions, 34 deletions
diff --git a/bazarr/get_subtitle.py b/bazarr/get_subtitle.py
index 89187447f..eeea3242c 100644
--- a/bazarr/get_subtitle.py
+++ b/bazarr/get_subtitle.py
@@ -226,7 +226,12 @@ def download_subtitle(path, language, hi, providers, providers_auth, sceneName,
logging.info('BAZARR Post-processing result for file ' + path + ' : ' + out)
# fixme: support multiple languages at once
- return message
+ if media_type == 'series':
+ reversed_path = path_replace_reverse(path)
+ else:
+ reversed_path = path_replace_reverse_movie(path)
+
+ return message, reversed_path, downloaded_language_code2, downloaded_provider, subtitle.score
if not saved_any:
logging.debug('BAZARR No subtitles were found for this file: ' + path)
@@ -431,12 +436,17 @@ def series_download_subtitles(no):
for language in ast.literal_eval(episode[1]):
if language is not None:
notifications.write(msg='Searching for ' + str(language_from_alpha2(language)) + ' subtitles for this episode: ' + path_replace(episode[0]), queue='get_subtitle')
- message = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(language)),
+ result = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(language)),
series_details[0], providers_list, providers_auth, str(episode[3]),
series_details[1], 'series')
- if message is not None:
+ if result is not None:
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
store_subtitles(path_replace(episode[0]))
- history_log(1, no, episode[2], message)
+ history_log(1, no, episode[2], message, path, language_code, provider, score)
send_notifications(no, episode[2], message)
list_missing_subtitles(no)
@@ -457,11 +467,16 @@ def movies_download_subtitles(no):
for language in ast.literal_eval(movie[1]):
if language is not None:
notifications.write(msg='Searching for ' + str(language_from_alpha2(language)) + ' subtitles for this movie: ' + path_replace_movie(movie[0]), queue='get_subtitle')
- message = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(language)), movie[4],
+ result = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(language)), movie[4],
providers_list, providers_auth, str(movie[3]), movie[5], 'movie')
- if message is not None:
+ if result is not None:
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
store_subtitles_movie(path_replace_movie(movie[0]))
- history_log_movie(1, no, message)
+ history_log_movie(1, no, message, path, language_code, provider, score)
send_notifications_movie(no, message)
list_missing_subtitles_movies(no)
@@ -504,13 +519,18 @@ def wanted_download_subtitles(path):
if search_active(attempt[i][1]):
notifications.write(
msg='Searching ' + str(language_from_alpha2(language)) + ' subtitles for this episode: ' + path, queue='get_subtitle')
- message = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(language)),
+ result = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(language)),
episode[4], providers_list, providers_auth, str(episode[5]),
episode[7], 'series')
- if message is not None:
+ if result is not None:
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
store_subtitles(path_replace(episode[0]))
list_missing_subtitles(episode[3])
- history_log(1, episode[3], episode[2], message)
+ history_log(1, episode[3], episode[2], message, path, language_code, provider, score)
send_notifications(episode[3], episode[2], message)
else:
logging.debug(
@@ -552,13 +572,18 @@ def wanted_download_subtitles_movie(path):
if search_active(attempt[i][1]) is True:
notifications.write(
msg='Searching ' + str(language_from_alpha2(language)) + ' subtitles for this movie: ' + path, queue='get_subtitle')
- message = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(language)),
+ result = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(language)),
movie[4], providers_list, providers_auth, str(movie[5]), movie[7],
'movie')
- if message is not None:
+ if result is not None:
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
store_subtitles_movie(path_replace_movie(movie[0]))
list_missing_subtitles_movies(movie[3])
- history_log_movie(1, movie[3], message)
+ history_log_movie(1, movie[3], message, path, language_code, provider, score)
send_notifications_movie(movie[3], message)
else:
logging.info(
diff --git a/bazarr/helper.py b/bazarr/helper.py
index 903ea1029..258cfa6bc 100644
--- a/bazarr/helper.py
+++ b/bazarr/helper.py
@@ -4,8 +4,11 @@ import os
import re
import types
import logging
+import sqlite3
from config import settings
+from get_args import args
+from get_languages import alpha2_from_language
def path_replace(path):
@@ -121,3 +124,45 @@ def force_unicode(s):
except UnicodeDecodeError:
s = UnicodeDammit(s).unicode_markup
return s
+
+
+def upgrade_history():
+ # Open database connection
+ db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
+ c = db.cursor()
+
+ data = c.execute('SELECT sonarrEpisodeId, video_path, description, ROWID FROM table_history WHERE action = 1').fetchall()
+
+ for row in data:
+ if row[1] is None:
+ path = c.execute('SELECT path FROM table_episodes WHERE sonarrEpisodeId = ?', (row[0],)).fetchone()
+ c.execute('UPDATE table_history SET video_path = ? WHERE sonarrEpisodeId = ?', (path[0], row[0]))
+
+ values = re.split(r' subtitles downloaded from | with a score of | using', row[2])[:-1]
+ language = alpha2_from_language(values[0])
+ provider = values[1]
+ score = int(round((float(values[2][:-1])/100 * 360) - 0.5))
+ c.execute('UPDATE table_history SET language = ?, provider = ?, score = ? WHERE ROWID = ?', (language, provider, score, row[3]))
+ db.commit()
+ db.close()
+
+def upgrade_history_movies():
+ # Open database connection
+ db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
+ c = db.cursor()
+
+ data = c.execute(
+ 'SELECT radarrId, video_path, description, ROWID FROM table_history_movie WHERE action = 1').fetchall()
+
+ for row in data:
+ if row[1] is None:
+ path = c.execute('SELECT path FROM table_movies WHERE radarrId = ?', (row[0],)).fetchone()
+ c.execute('UPDATE table_history_movie SET video_path = ? WHERE radarrId = ?', (path[0], row[0]))
+
+ values = re.split(r' subtitles downloaded from | with a score of | using', row[2])[:-1]
+ language = alpha2_from_language(values[0])
+ provider = values[1]
+ score = int(round((float(values[2][:-1]) / 100 * 120) - 0.5))
+ c.execute('UPDATE table_history_movie SET language = ?, provider = ?, score = ? WHERE ROWID = ?', (language, provider, score, row[3]))
+ db.commit()
+ db.close()
diff --git a/bazarr/main.py b/bazarr/main.py
index ac827d1e0..9b1524cf0 100644
--- a/bazarr/main.py
+++ b/bazarr/main.py
@@ -1635,8 +1635,8 @@ def remove_subtitles():
os.remove(subtitlesPath)
result = language_from_alpha3(language) + " subtitles deleted from disk."
history_log(0, sonarrSeriesId, sonarrEpisodeId, result)
- except OSError:
- pass
+ except OSError as e:
+ logging.exception('BAZARR cannot delete subtitles file: ' + subtitlesPath)
store_subtitles(unicode(episodePath))
list_missing_subtitles(sonarrSeriesId)
@@ -1649,15 +1649,13 @@ def remove_subtitles_movie():
language = request.forms.get('language')
subtitlesPath = request.forms.get('subtitlesPath')
radarrId = request.forms.get('radarrId')
- subfolder = ('/' + get_subtitle_destination_folder() + '/') if get_subtitle_destination_folder() else '/'
- subtitlesPath = os.path.split(subtitlesPath)
try:
- os.remove(subtitlesPath[0] + subfolder + subtitlesPath[1])
+ os.remove(subtitlesPath)
result = language_from_alpha3(language) + " subtitles deleted from disk."
history_log_movie(0, radarrId, result)
- except OSError:
- pass
+ except OSError as e:
+ logging.exception('BAZARR cannot delete subtitles file: ' + subtitlesPath)
store_subtitles_movie(unicode(moviePath))
list_missing_subtitles_movies(radarrId)
@@ -1684,8 +1682,13 @@ def get_subtitle():
result = download_subtitle(episodePath, language, hi, providers_list, providers_auth, sceneName, title,
'series')
if result is not None:
- history_log(1, sonarrSeriesId, sonarrEpisodeId, result)
- send_notifications(sonarrSeriesId, sonarrEpisodeId, result)
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
+ history_log(1, sonarrSeriesId, sonarrEpisodeId, message, path, language_code, provider, score)
+ send_notifications(sonarrSeriesId, sonarrEpisodeId, message)
store_subtitles(unicode(episodePath))
list_missing_subtitles(sonarrSeriesId)
redirect(ref)
@@ -1735,8 +1738,13 @@ def manual_get_subtitle():
result = manual_download_subtitle(episodePath, language, hi, subtitle, selected_provider, providers_auth,
sceneName, title, 'series')
if result is not None:
- history_log(1, sonarrSeriesId, sonarrEpisodeId, result)
- send_notifications(sonarrSeriesId, sonarrEpisodeId, result)
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
+ history_log(1, sonarrSeriesId, sonarrEpisodeId, message, path, language_code, provider, score)
+ send_notifications(sonarrSeriesId, sonarrEpisodeId, message)
store_subtitles(unicode(episodePath))
list_missing_subtitles(sonarrSeriesId)
redirect(ref)
@@ -1764,8 +1772,13 @@ def get_subtitle_movie():
try:
result = download_subtitle(moviePath, language, hi, providers_list, providers_auth, sceneName, title, 'movie')
if result is not None:
- history_log_movie(1, radarrId, result)
- send_notifications_movie(radarrId, result)
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
+ history_log_movie(1, radarrId, message, path, language_code, provider, score)
+ send_notifications_movie(radarrId, message)
store_subtitles_movie(unicode(moviePath))
list_missing_subtitles_movies(radarrId)
redirect(ref)
@@ -1814,8 +1827,13 @@ def manual_get_subtitle_movie():
result = manual_download_subtitle(moviePath, language, hi, subtitle, selected_provider, providers_auth,
sceneName, title, 'movie')
if result is not None:
- history_log_movie(1, radarrId, result)
- send_notifications_movie(radarrId, result)
+ message = result[0]
+ path = result[1]
+ language_code = result[2]
+ provider = result[3]
+ score = result[4]
+ history_log_movie(1, radarrId, message, path, language_code, provider, score)
+ send_notifications_movie(radarrId, message)
store_subtitles_movie(unicode(moviePath))
list_missing_subtitles_movies(radarrId)
redirect(ref)
diff --git a/bazarr/update_db.py b/bazarr/update_db.py
index 98a1b55c0..1f4c30976 100644
--- a/bazarr/update_db.py
+++ b/bazarr/update_db.py
@@ -6,6 +6,7 @@ import sqlite3
from get_args import args
from scheduler import execute_now
from config import settings
+from helper import upgrade_history, upgrade_history_movies
# Check if database exist
if os.path.exists(os.path.join(args.config_dir, 'db', 'bazarr.db')):
@@ -121,5 +122,25 @@ if os.path.exists(os.path.join(args.config_dir, 'db', 'bazarr.db')):
execute_now('sync_episodes')
if settings.general.getboolean('use_radarr'):
execute_now('update_movies')
+
+ try:
+ c.execute('alter table table_history add column "video_path" "text"')
+ c.execute('alter table table_history add column "language" "text"')
+ c.execute('alter table table_history add column "provider" "text"')
+ c.execute('alter table table_history add column "score" "text"')
+
+ c.execute('alter table table_history_movie add column "video_path" "text"')
+ c.execute('alter table table_history_movie add column "language" "text"')
+ c.execute('alter table table_history_movie add column "provider" "text"')
+ c.execute('alter table table_history_movie add column "score" "text"')
+
+ db.commit()
+ except:
+ pass
+ else:
+ if settings.general.getboolean('use_sonarr'):
+ upgrade_history()
+ if settings.general.getboolean('use_radarr'):
+ upgrade_history_movies()
db.close()
diff --git a/bazarr/utils.py b/bazarr/utils.py
index 8d20bc1f6..724d7144d 100644
--- a/bazarr/utils.py
+++ b/bazarr/utils.py
@@ -7,15 +7,15 @@ import time
from get_args import args
-def history_log(action, sonarrSeriesId, sonarrEpisodeId, description):
+def history_log(action, sonarrSeriesId, sonarrEpisodeId, description, video_path=None, language=None, provider=None, score=None):
# Open database connection
db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c = db.cursor()
# Get Sonarr API URL from database config table
history = c.execute(
- '''INSERT INTO table_history(action, sonarrSeriesId, sonarrEpisodeId, timestamp, description) VALUES (?, ?, ?, ?, ?)''',
- (action, sonarrSeriesId, sonarrEpisodeId, time.time(), description))
+ '''INSERT INTO table_history(action, sonarrSeriesId, sonarrEpisodeId, timestamp, description, video_path, language, provider, score) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)''',
+ (action, sonarrSeriesId, sonarrEpisodeId, time.time(), description, video_path, language, provider, score))
# Commit changes to DB
db.commit()
@@ -24,14 +24,14 @@ def history_log(action, sonarrSeriesId, sonarrEpisodeId, description):
db.close()
-def history_log_movie(action, radarrId, description):
+def history_log_movie(action, radarrId, description, video_path=None, language=None, provider=None, score=None):
# Open database connection
db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c = db.cursor()
history = c.execute(
- '''INSERT INTO table_history_movie(action, radarrId, timestamp, description) VALUES (?, ?, ?, ?)''',
- (action, radarrId, time.time(), description))
+ '''INSERT INTO table_history_movie(action, radarrId, timestamp, description, video_path, language, provider, score) VALUES (?, ?, ?, ?, ?, ?, ?, ?)''',
+ (action, radarrId, time.time(), description, video_path, language, provider, score))
# Commit changes to DB
db.commit()