Continuing development.

pull/543/head
Louis Vézina 6 years ago
parent 998a9ed5eb
commit 3566fddb50

@ -1,18 +1,22 @@
# coding=utf-8 # coding=utf-8
import sqlite3
import gc import gc
import os import os
import babelfish import babelfish
import logging import logging
import sqlite3
import ast import ast
import langdetect import langdetect
import subliminal import subliminal
import subliminal_patch import subliminal_patch
import operator
from subliminal import core from subliminal import core
from subliminal_patch import search_external_subtitles from subliminal_patch import search_external_subtitles
from bs4 import UnicodeDammit from bs4 import UnicodeDammit
from itertools import islice from itertools import islice
from database import TableShows, TableEpisodes, TableMovies
from peewee import fn, JOIN
from get_args import args from get_args import args
from get_languages import alpha2_from_alpha3, get_language_set from get_languages import alpha2_from_alpha3, get_language_set
@ -100,14 +104,14 @@ def store_subtitles(file):
actual_subtitles.append([str(detected_language), path_replace_reverse( actual_subtitles.append([str(detected_language), path_replace_reverse(
os.path.join(os.path.dirname(file), subtitle))]) os.path.join(os.path.dirname(file), subtitle))])
conn_db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c_db = conn_db.cursor()
logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles)) logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles))
c_db.execute("UPDATE table_episodes SET subtitles = ? WHERE path = ?", TableEpisodes.update(
(str(actual_subtitles), path_replace_reverse(file))) {
conn_db.commit() TableEpisodes.subtitles: str(actual_subtitles)
}
c_db.close() ).where(
TableEpisodes.path == path_replace_reverse(file)
).execute()
else: else:
logging.debug("BAZARR this file doesn't seems to exist or isn't accessible.") logging.debug("BAZARR this file doesn't seems to exist or isn't accessible.")
@ -192,14 +196,14 @@ def store_subtitles_movie(file):
actual_subtitles.append([str(detected_language), path_replace_reverse_movie( actual_subtitles.append([str(detected_language), path_replace_reverse_movie(
os.path.join(os.path.dirname(file), dest_folder, subtitle))]) os.path.join(os.path.dirname(file), dest_folder, subtitle))])
conn_db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c_db = conn_db.cursor()
logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles)) logging.debug("BAZARR storing those languages to DB: " + str(actual_subtitles))
c_db.execute("UPDATE table_movies SET subtitles = ? WHERE path = ?", TableMovies.update(
(str(actual_subtitles), path_replace_reverse_movie(file))) {
conn_db.commit() TableMovies.subtitles: str(actual_subtitles)
}
c_db.close() ).where(
TableMovies.path == file
).execute()
else: else:
logging.debug("BAZARR this file doesn't seems to exist or isn't accessible.") logging.debug("BAZARR this file doesn't seems to exist or isn't accessible.")
@ -209,16 +213,20 @@ def store_subtitles_movie(file):
def list_missing_subtitles(*no): def list_missing_subtitles(*no):
query_string = '' episodes_subtitles_clause = {TableShows.sonarr_series_id.is_null(False)}
try: if 'no' in locals():
query_string = " WHERE table_shows.sonarrSeriesId = " + str(no[0]) episodes_subtitles_clause = {TableShows.sonarr_series_id == no[0]}
except:
pass episodes_subtitles = TableEpisodes.select(
conn_db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30) TableEpisodes.sonarr_episode_id,
c_db = conn_db.cursor() TableEpisodes.subtitles,
episodes_subtitles = c_db.execute( TableShows.languages,
"SELECT table_episodes.sonarrEpisodeId, table_episodes.subtitles, table_shows.languages, table_shows.forced FROM table_episodes INNER JOIN table_shows on table_episodes.sonarrSeriesId = table_shows.sonarrSeriesId" + query_string).fetchall() TableShows.forced
c_db.close() ).join_from(
TableEpisodes, TableShows, JOIN.LEFT_OUTER
).where(
episodes_subtitles_clause
).objects()
missing_subtitles_global = [] missing_subtitles_global = []
use_embedded_subs = settings.general.getboolean('use_embedded_subs') use_embedded_subs = settings.general.getboolean('use_embedded_subs')
@ -228,27 +236,27 @@ def list_missing_subtitles(*no):
actual_subtitles = [] actual_subtitles = []
desired_subtitles = [] desired_subtitles = []
missing_subtitles = [] missing_subtitles = []
if episode_subtitles[1] is not None: if episode_subtitles.sonarr_episode_id is not None:
if use_embedded_subs: if use_embedded_subs:
actual_subtitles = ast.literal_eval(episode_subtitles[1]) actual_subtitles = ast.literal_eval(episode_subtitles.subtitles)
else: else:
actual_subtitles_temp = ast.literal_eval(episode_subtitles[1]) actual_subtitles_temp = ast.literal_eval(episode_subtitles.subtitles)
for subtitle in actual_subtitles_temp: for subtitle in actual_subtitles_temp:
if subtitle[1] is not None: if subtitle[1] is not None:
actual_subtitles.append(subtitle) actual_subtitles.append(subtitle)
if episode_subtitles[2] is not None: if episode_subtitles.languages is not None:
desired_subtitles = ast.literal_eval(episode_subtitles[2]) desired_subtitles = ast.literal_eval(episode_subtitles.languages)
if episode_subtitles[3] == "True" and desired_subtitles is not None: if episode_subtitles.forced == "True" and desired_subtitles is not None:
for i, desired_subtitle in enumerate(desired_subtitles): for i, desired_subtitle in enumerate(desired_subtitles):
desired_subtitles[i] = desired_subtitle + ":forced" desired_subtitles[i] = desired_subtitle + ":forced"
elif episode_subtitles[3] == "Both" and desired_subtitles is not None: elif episode_subtitles.forced == "Both" and desired_subtitles is not None:
for desired_subtitle in desired_subtitles: for desired_subtitle in desired_subtitles:
desired_subtitles_temp.append(desired_subtitle) desired_subtitles_temp.append(desired_subtitle)
desired_subtitles_temp.append(desired_subtitle + ":forced") desired_subtitles_temp.append(desired_subtitle + ":forced")
desired_subtitles = desired_subtitles_temp desired_subtitles = desired_subtitles_temp
actual_subtitles_list = [] actual_subtitles_list = []
if desired_subtitles is None: if desired_subtitles is None:
missing_subtitles_global.append(tuple(['[]', episode_subtitles[0]])) missing_subtitles_global.append(tuple(['[]', episode_subtitles.sonarr_episode_id]))
else: else:
for item in actual_subtitles: for item in actual_subtitles:
if item[0] == "pt-BR": if item[0] == "pt-BR":
@ -258,14 +266,16 @@ def list_missing_subtitles(*no):
else: else:
actual_subtitles_list.append(item[0]) actual_subtitles_list.append(item[0])
missing_subtitles = list(set(desired_subtitles) - set(actual_subtitles_list)) missing_subtitles = list(set(desired_subtitles) - set(actual_subtitles_list))
missing_subtitles_global.append(tuple([str(missing_subtitles), episode_subtitles[0]])) missing_subtitles_global.append(tuple([str(missing_subtitles), episode_subtitles.sonarr_episode_id]))
conn_db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30) for missing_subtitles_item in missing_subtitles_global:
c_db = conn_db.cursor() TableEpisodes.update(
c_db.executemany("UPDATE table_episodes SET missing_subtitles = ? WHERE sonarrEpisodeId = ?", {
(missing_subtitles_global)) TableEpisodes.missing_subtitles: missing_subtitles_item[0]
conn_db.commit() }
c_db.close() ).where(
TableEpisodes.sonarr_episode_id == missing_subtitles_item[1]
).execute()
def list_missing_subtitles_movies(*no): def list_missing_subtitles_movies(*no):

Loading…
Cancel
Save