mirror of https://github.com/morpheus65535/bazarr
Merge branch 'development'
This commit is contained in:
commit
966373bd92
10
bazarr.py
10
bazarr.py
|
@ -1,4 +1,4 @@
|
||||||
bazarr_version = '0.3.6'
|
bazarr_version = '0.3.7'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
@ -394,10 +394,16 @@ def save_settings():
|
||||||
settings_general_single_language = 'False'
|
settings_general_single_language = 'False'
|
||||||
else:
|
else:
|
||||||
settings_general_single_language = 'True'
|
settings_general_single_language = 'True'
|
||||||
|
settings_general_scenename = request.forms.get('settings_general_scenename')
|
||||||
|
if settings_general_scenename is None:
|
||||||
|
settings_general_scenename = 'False'
|
||||||
|
else:
|
||||||
|
settings_general_scenename = 'True'
|
||||||
|
settings_general_minimum_score = request.forms.get('settings_general_minimum_score')
|
||||||
|
|
||||||
before = c.execute("SELECT ip, port, base_url FROM table_settings_general").fetchone()
|
before = c.execute("SELECT ip, port, base_url FROM table_settings_general").fetchone()
|
||||||
after = (unicode(settings_general_ip), int(settings_general_port), unicode(settings_general_baseurl))
|
after = (unicode(settings_general_ip), int(settings_general_port), unicode(settings_general_baseurl))
|
||||||
c.execute("UPDATE table_settings_general SET ip = ?, port = ?, base_url = ?, path_mapping = ?, log_level = ?, branch=?, auto_update=?, single_language=?", (unicode(settings_general_ip), int(settings_general_port), unicode(settings_general_baseurl), unicode(settings_general_pathmapping), unicode(settings_general_loglevel), unicode(settings_general_branch), unicode(settings_general_automatic), unicode(settings_general_single_language)))
|
c.execute("UPDATE table_settings_general SET ip = ?, port = ?, base_url = ?, path_mapping = ?, log_level = ?, branch=?, auto_update=?, single_language=?, minimum_score=?, use_scenename=?", (unicode(settings_general_ip), int(settings_general_port), unicode(settings_general_baseurl), unicode(settings_general_pathmapping), unicode(settings_general_loglevel), unicode(settings_general_branch), unicode(settings_general_automatic), unicode(settings_general_single_language), unicode(settings_general_minimum_score), unicode(settings_general_scenename) ))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
if after != before:
|
if after != before:
|
||||||
configured()
|
configured()
|
||||||
|
|
|
@ -27,8 +27,10 @@ def get_general_settings():
|
||||||
branch = general_settings[5]
|
branch = general_settings[5]
|
||||||
automatic = general_settings[6]
|
automatic = general_settings[6]
|
||||||
single_language = general_settings[9]
|
single_language = general_settings[9]
|
||||||
|
minimum_score = general_settings[10]
|
||||||
|
use_scenename = general_settings[11]
|
||||||
|
|
||||||
return [ip, port, base_url, path_mappings, log_level, branch, automatic, single_language]
|
return [ip, port, base_url, path_mappings, log_level, branch, automatic, single_language, minimum_score, use_scenename]
|
||||||
|
|
||||||
def path_replace(path):
|
def path_replace(path):
|
||||||
for path_mapping in path_mappings:
|
for path_mapping in path_mappings:
|
||||||
|
@ -61,3 +63,5 @@ log_level = result[4]
|
||||||
branch = result[5]
|
branch = result[5]
|
||||||
automatic = result[6]
|
automatic = result[6]
|
||||||
single_language = result[7]
|
single_language = result[7]
|
||||||
|
minimum_score = result[8]
|
||||||
|
use_scenename = result[9]
|
||||||
|
|
|
@ -14,31 +14,35 @@ from notifier import send_notifications
|
||||||
region.configure('dogpile.cache.memory')
|
region.configure('dogpile.cache.memory')
|
||||||
|
|
||||||
def download_subtitle(path, language, hi, providers, providers_auth, sceneName):
|
def download_subtitle(path, language, hi, providers, providers_auth, sceneName):
|
||||||
|
minimum_score = float(get_general_settings()[8]) / 100 * 360
|
||||||
|
use_scenename = get_general_settings()[9]
|
||||||
try:
|
try:
|
||||||
if sceneName is None:
|
if sceneName is None or use_scenename == "False":
|
||||||
|
used_sceneName = False
|
||||||
video = scan_video(path)
|
video = scan_video(path)
|
||||||
else:
|
else:
|
||||||
|
used_sceneName = True
|
||||||
video = Video.fromname(sceneName)
|
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, min_score=minimum_score, 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 get the best subtitles for this file: ' + path)
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
best_subtitle = best_subtitles[video][0]
|
best_subtitle = best_subtitles[video][0]
|
||||||
except:
|
except:
|
||||||
pass
|
logging.debug('No subtitles found for ' + path)
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
single = get_general_settings()[7]
|
single = get_general_settings()[7]
|
||||||
try:
|
try:
|
||||||
if sceneName is not None:
|
score = round(float(compute_score(best_subtitle, video)) / 360 * 100, 2)
|
||||||
|
if used_sceneName == True:
|
||||||
video = scan_video(path)
|
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')
|
||||||
|
@ -50,10 +54,10 @@ def download_subtitle(path, language, hi, providers, providers_auth, sceneName):
|
||||||
else:
|
else:
|
||||||
downloaded_provider = str(result[0]).strip('<>').split(' ')[0][:-8]
|
downloaded_provider = str(result[0]).strip('<>').split(' ')[0][:-8]
|
||||||
downloaded_language = pycountry.languages.lookup(str(str(result[0]).strip('<>').split(' ')[2].strip('[]'))).name
|
downloaded_language = pycountry.languages.lookup(str(str(result[0]).strip('<>').split(' ')[2].strip('[]'))).name
|
||||||
if sceneName is not None:
|
if used_sceneName == True:
|
||||||
message = downloaded_language + " subtitles downloaded from " + downloaded_provider + " using scene name from Sonarr guessing."
|
message = downloaded_language + " subtitles downloaded from " + downloaded_provider + " with a score of " + unicode(score) + "% using this scene name obtained from Sonarr: " + sceneName
|
||||||
else:
|
else:
|
||||||
message = downloaded_language + " subtitles downloaded from " + downloaded_provider + " using filename guessing."
|
message = downloaded_language + " subtitles downloaded from " + downloaded_provider + " with a score of " + unicode(score) + "% using filename guessing."
|
||||||
|
|
||||||
return message
|
return message
|
||||||
|
|
||||||
|
|
14
update_db.py
14
update_db.py
|
@ -58,6 +58,20 @@ if os.path.exists(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'))
|
||||||
from scheduler import execute_now
|
from scheduler import execute_now
|
||||||
execute_now('update_all_episodes')
|
execute_now('update_all_episodes')
|
||||||
|
|
||||||
|
try:
|
||||||
|
c.execute('alter table table_settings_general add column "minimum_score" "text"')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
c.execute('UPDATE table_settings_general SET minimum_score="0"')
|
||||||
|
|
||||||
|
try:
|
||||||
|
c.execute('alter table table_settings_general add column "use_scenename" "text"')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
c.execute('UPDATE table_settings_general SET use_scenename="True"')
|
||||||
|
|
||||||
# Commit change to db
|
# Commit change to db
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
||||||
|
|
|
@ -366,11 +366,57 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="ui bottom attached tab segment" data-tab="subliminal">
|
<div class="ui bottom attached tab segment" data-tab="subliminal">
|
||||||
<div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
|
<div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
|
||||||
<div class="ui dividing header">Subtitles providers</div>
|
<br><br><br>
|
||||||
<div class="twelve wide column">
|
<div class="ui container">
|
||||||
<div class="ui info message">
|
<div class="ui info message">
|
||||||
<p>Thanks to Diaoul for his work on <a href="https://github.com/Diaoul/subliminal" target="_blank">Subliminal</a> on which Bazarr is based.</p>
|
<p>Thanks to Diaoul for his work on <a href="https://github.com/Diaoul/subliminal" target="_blank">Subliminal</a> on which Bazarr is based.</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui dividing header">Subtitles options</div>
|
||||||
|
<div class="twelve wide column">
|
||||||
|
<div class="ui grid">
|
||||||
|
<div class="middle aligned row">
|
||||||
|
<div class="right aligned four wide column">
|
||||||
|
<label>Use Sonarr scene naming</label>
|
||||||
|
</div>
|
||||||
|
<div class="one wide column">
|
||||||
|
<div id="settings_scenename" class="ui toggle checkbox" data-scenename={{settings_general[11]}}>
|
||||||
|
<input name="settings_general_scenename" type="checkbox">
|
||||||
|
<label></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="collapsed column">
|
||||||
|
<div class="collapsed center aligned column">
|
||||||
|
<div class="ui basic icon" data-tooltip="Use the scene name from Sonarr if available to circumvent usage of episode file renaming." data-inverted="">
|
||||||
|
<i class="help circle large icon"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="middle aligned row">
|
||||||
|
<div class="right aligned four wide column">
|
||||||
|
<label>Minimum score</label>
|
||||||
|
</div>
|
||||||
|
<div class="two wide column">
|
||||||
|
<div class='field'>
|
||||||
|
<div class="ui input">
|
||||||
|
<input name="settings_general_minimum_score" type="number" min="0" max="100" step="5" onkeydown="return false" value="{{settings_general[10]}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="collapsed column">
|
||||||
|
<div class="collapsed center aligned column">
|
||||||
|
<div class="ui basic icon" data-tooltip="Minimum score for a subtitle to be downloaded (0 to 100)." data-inverted="">
|
||||||
|
<i class="help circle large icon"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui dividing header">Subtitles providers</div>
|
||||||
|
<div class="twelve wide column">
|
||||||
<div class="ui orange message">
|
<div class="ui orange message">
|
||||||
<p>Be aware that the more providers you enable, the longer it will take everytime you search for a subtitles.</p>
|
<p>Be aware that the more providers you enable, the longer it will take everytime you search for a subtitles.</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -396,7 +442,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ui dividing header">Providers authentication (optionnal)</div>
|
<div class="ui dividing header">Providers authentication (optionnal)</div>
|
||||||
<div class="twelve wide column">
|
<div class="twelve wide column">
|
||||||
<div class="ui grid">
|
<div class="ui grid">
|
||||||
|
@ -596,6 +641,12 @@
|
||||||
$("#settings_single_language").checkbox('uncheck');
|
$("#settings_single_language").checkbox('uncheck');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($('#settings_scenename').data("scenename") == "True") {
|
||||||
|
$("#settings_scenename").checkbox('check');
|
||||||
|
} else {
|
||||||
|
$("#settings_scenename").checkbox('uncheck');
|
||||||
|
}
|
||||||
|
|
||||||
$('.notifier_enabled').each(function(i, obj) {
|
$('.notifier_enabled').each(function(i, obj) {
|
||||||
if ($(this).data("enabled") == 1) {
|
if ($(this).data("enabled") == 1) {
|
||||||
$(this).checkbox('check');
|
$(this).checkbox('check');
|
||||||
|
|
Loading…
Reference in New Issue