2019-04-20 21:15:00 +00:00
< ! DOCTYPE html >
2018-12-09 20:23:51 +00:00
< html lang = " en " >
2018-11-26 20:18:12 +00:00
< head >
< script src = " {{ base_url}}static/jquery/jquery-latest.min.js " > < / script >
< script src = " {{ base_url}}static/semantic/semantic.min.js " > < / script >
< script src = " {{ base_url}}static/jquery/tablesort.js " > < / script >
< script src = " {{ base_url}}static/datatables/jquery.dataTables.min.js " > < / script >
< script src = " {{ base_url}}static/datatables/dataTables.semanticui.min.js " > < / script >
< link rel = " stylesheet " href = " {{ base_url}}static/semantic/semantic.css " >
< link rel = " stylesheet " type = " text/css " href = " {{ base_url}}static/datatables/datatables.min.css " / >
< link rel = " stylesheet " type = " text/css " href = " {{ base_url}}static/datatables/semanticui.min.css " / >
< link rel = " apple-touch-icon " sizes = " 120x120 " href = " {{ base_url}}static/apple-touch-icon.png " >
< link rel = " icon " type = " image/png " sizes = " 32x32 " href = " {{ base_url}}static/favicon-32x32.png " >
< link rel = " icon " type = " image/png " sizes = " 16x16 " href = " {{ base_url}}static/favicon-16x16.png " >
< link rel = " manifest " href = " {{ base_url}}static/manifest.json " >
< link rel = " mask-icon " href = " {{ base_url}}static/safari-pinned-tab.svg " color = " #5bbad5 " >
< link rel = " shortcut icon " href = " {{ base_url}}static/favicon.ico " >
< meta name = " msapplication-config " content = " {{ base_url}}static/browserconfig.xml " >
< meta name = " theme-color " content = " #ffffff " >
2019-10-26 18:52:22 +00:00
< title > { { details [ ' title ' ] } } - Bazarr < / title >
2018-11-26 20:18:12 +00:00
< style >
body {
background - color : #1b1c1d;
2019-10-26 18:52:22 +00:00
background - image : url ( " {{ base_url}}image_proxy {{ details[ ' fanart ' ]}} " ) ;
2018-11-26 20:18:12 +00:00
background - repeat : no - repeat ;
background - attachment : fixed ;
background - size : cover ;
background - position : center center ;
}
#divdetails {
background - color : rgba ( 0 , 0 , 0 , 0.9 ) ;
color : #ffffff;
margin - top : 6 em ;
margin - bottom : 3 em ;
padding : 2 em ;
border - radius : 1 px ;
2018-12-09 20:23:51 +00:00
box - shadow : 0 0 5 px 5 px #000000;
2018-11-26 20:18:12 +00:00
min - height : calc ( 250 px + 4 em ) ;
}
#fondblanc {
background - color : #ffffff;
opacity : 0.9 ;
border - radius : 1 px ;
2018-12-09 20:23:51 +00:00
box - shadow : 0 0 3 px 3 px #ffffff;
2018-11-26 20:18:12 +00:00
margin - top : 32 px ;
margin - bottom : 3 em ;
padding - top : 2 em ;
padding - left : 2 em ;
padding - right : 2 em ;
padding - bottom : 1 em ;
overflow - x : auto ;
}
. ui . basic . button : hover , . ui . basic . buttons . button : hover {
background : transparent ! important ;
}
. ui . basic . button : active , . ui . basic . buttons . button : active {
background : transparent ! important ;
}
. ui . basic . button : focus , . ui . basic . buttons . button : focus {
background : transparent ! important ;
}
. ui . basic . button : visited , . ui . basic . buttons . button : visited {
background : transparent ! important ;
}
. criteria_matched {
background - color : #e6ffe6 !important;
line - height : 0 ! important ;
}
. criteria_not_matched {
background - color : #ffcccc !important;
line - height : 0 ! important ;
}
2019-12-07 21:00:02 +00:00
. episode_history { cursor : pointer ; }
2018-11-26 20:18:12 +00:00
< / style >
< script >
2018-12-09 20:23:51 +00:00
$ ( function ( ) {
2018-11-26 20:18:12 +00:00
$ ( ' .ui.accordion ' ) . accordion ( ) ;
2018-12-09 20:23:51 +00:00
const first_season_acc_title = document . getElementsByClassName ( " title " ) [ 0 ] ;
2018-11-26 20:18:12 +00:00
first_season_acc_title . className + = " active " ;
2019-11-09 14:29:28 +00:00
const first_season_acc_content = document . getElementsByClassName ( " content season " ) [ 0 ] ;
2018-11-26 20:18:12 +00:00
first_season_acc_content . className + = " active " ;
} ) ;
< / script >
< / head >
< body >
% import ast
% from get_languages import *
2018-12-15 00:53:24 +00:00
% from config import settings
% from helper import path_replace
2018-12-27 19:19:59 +00:00
% single_language = settings . general . getboolean ( ' single_language ' )
2019-10-26 18:52:22 +00:00
< div style = " display: none; " > < img src = " {{ base_url}}image_proxy {{ details[ ' fanart ' ]}} " > < / div >
2018-11-26 20:18:12 +00:00
< div id = ' loader ' class = " ui page dimmer " >
< div id = " loader_text " class = " ui indeterminate text loader " > Loading . . . < / div >
< / div >
% include ( ' menu.tpl ' )
< div style = ' padding-left: 2em; padding-right: 2em; ' class = ' ui container ' >
< div id = " divdetails " class = " ui container " >
2019-04-20 21:15:00 +00:00
< div class = " ui stackable grid " >
< div class = " three wide column " >
2019-10-26 18:52:22 +00:00
< img class = " ui image " style = " max-height:250px; " src = " {{ base_url}}image_proxy {{ details[ ' poster ' ]}} " >
2019-04-20 21:15:00 +00:00
< / div >
< div class = " thirteen wide column " >
< div class = " ui stackable grid " >
< div class = " ui row " >
< div class = " twelve wide left aligned column " >
2019-10-26 18:52:22 +00:00
< h2 > { { details [ ' title ' ] } } < / h2 >
2019-04-20 21:15:00 +00:00
< / div >
< div class = " four wide right aligned column " >
< div class = " ui basic icon buttons " >
2019-09-17 15:46:26 +00:00
< button id = " scan_disk " class = " ui button " data - tooltip = " Scan Disk For Subtitles " > < i class = " ui inverted large compact refresh icon " > < / i > < / button >
< button id = " search_missing_subtitles " class = " ui button " data - tooltip = " Download Missing Subtitles " > < i class = " ui inverted huge compact search icon " > < / i > < / button >
2019-04-20 21:15:00 +00:00
< %
2019-10-26 18:52:22 +00:00
subs_languages = ast . literal_eval ( str ( details [ ' languages ' ] ) )
2019-04-20 21:15:00 +00:00
subs_languages_list = [ ]
if subs_languages is not None :
for subs_language in subs_languages :
subs_languages_list . append ( subs_language )
end
end
% >
2019-10-26 18:52:22 +00:00
< button id = " config " class = " ui button " data - tooltip = " Edit series " data - tvdbid = " {{ details[ ' tvdbId ' ]}} " data - title = " {{ details[ ' title ' ]}} " data - poster = " {{ details[ ' poster ' ]}} " data - audio = " {{ details[ ' audio_language ' ]}} " data - languages = " {{ !subs_languages_list}} " data - hearing - impaired = " {{ details[ ' hearing_impaired ' ]}} " data - forced = " {{ details[ ' forced ' ]}} " > < i class = " ui inverted large compact configure icon " > < / i > < / button >
2019-04-20 21:15:00 +00:00
< / div >
< / div >
< / div >
< div class = " ui row " >
2019-10-26 18:52:22 +00:00
< p > { { details [ ' overview ' ] } } < / p >
2019-04-20 21:15:00 +00:00
< / div >
< div class = " ui row " >
2019-10-26 18:52:22 +00:00
< div class = " ui tiny inverted label " style = ' background-color: #777777; ' > { { details [ ' audio_language ' ] } } < / div >
< div class = " ui tiny inverted label " style = ' background-color: #35c5f4; ' > { { details [ ' path ' ] } } < / div >
2019-04-20 21:15:00 +00:00
< div class = " ui tiny inverted label " style = ' background-color: #35c5f4; ' > { { number } } files < / div >
< / div >
2019-05-21 13:13:49 +00:00
< div class = " ui row " style = " padding-bottom: 0.5em; " >
2019-04-20 21:15:00 +00:00
% for language in subs_languages_list :
< div class = " ui tiny inverted label " style = ' background-color: #35c5f4; ' > { { language } } < / div >
% end
< / div >
2019-05-21 13:13:49 +00:00
< div class = " ui row " style = " padding-top: 0em; " >
2019-10-26 18:52:22 +00:00
< div class = " ui tiny inverted label " style = ' background-color: #777777; ' > Hearing - impaired : { { details [ ' hearing_impaired ' ] } } < / div >
< div class = " ui tiny inverted label " style = ' background-color: #777777; ' > Forced : { { details [ ' forced ' ] } } < / div >
2019-05-21 13:13:49 +00:00
< / div >
2019-04-20 21:15:00 +00:00
< / div >
< / div >
2018-11-26 20:18:12 +00:00
< / div >
< / div >
% if len ( seasons ) == 0 :
< div id = " fondblanc " class = " ui container " >
2019-09-17 15:46:26 +00:00
< h3 class = " ui header " > No episode files available for this Series or Bazarr is still synchronizing with Sonarr . Please come back later . < / h3 >
2018-11-26 20:18:12 +00:00
< / div >
% else :
% for season in seasons :
< div id = " fondblanc " class = " ui container " >
2019-07-31 10:09:08 +00:00
% missing_subs = len ( [ i for i in season if i [ ' missing_subtitles ' ] != " [] " ] )
2018-11-26 20:18:12 +00:00
% total_subs = len ( season )
% subs_label = ' '
% if subs_languages is not None :
% subs_label = ' <div class= " ui tiny '
% if missing_subs == 0 :
% subs_label = subs_label + ' green '
% else :
% subs_label = subs_label + ' yellow '
% end
% subs_label = subs_label + ' circular label " > ' + str ( total_subs - missing_subs ) + ' / ' + str ( total_subs ) + ' </div> '
% end
2019-07-31 10:09:08 +00:00
% season_number = None
% for season_temp in season :
% season_number = season_temp [ ' season ' ]
% break
% end
< h1 class = " ui header " > Season { { season_number } } { { ! subs_label } } < / h1 >
2018-11-26 20:18:12 +00:00
< div class = " ui accordion " >
< div class = " title " >
< div class = " ui one column stackable center aligned page grid " >
< div class = " column twelve wide " >
< h3 class = " ui header " > < i class = " dropdown icon " > < / i >
Show / Hide Episodes < / h3 >
< / div >
< / div >
< / div >
2019-11-09 14:29:28 +00:00
< div class = " content season " >
2018-11-26 20:18:12 +00:00
< table class = " ui very basic single line selectable table " >
< thead >
< tr >
< th class = " collapsing " > < / th >
< th class = " collapsing " > Episode < / th >
< th > Title < / th >
2019-09-17 15:46:26 +00:00
< th class = " collapsing " > Existing < br > Subtitles < / th >
< th class = " collapsing " > Missing < br > Subtitles < / th >
< th class = " collapsing " > Manual < br > Search < / th >
< th class = " collapsing " > Manual < br > Upload < / th >
2018-11-26 20:18:12 +00:00
< / tr >
< / thead >
< tbody >
% for episode in season :
< tr >
< td class = " collapsing " >
2019-07-31 10:09:08 +00:00
% if episode [ ' monitored ' ] == ' True ' :
2018-11-26 20:18:12 +00:00
< span data - tooltip = " Episode monitored in Sonarr " data - inverted = ' ' data - position = " top left " > < i class = " bookmark icon " > < / i > < / span >
% else :
< span data - tooltip = " Episode unmonitored in Sonarr " data - inverted = ' ' data - position = " top left " > < i class = " bookmark outline icon " > < / i > < / span >
% end
< / td >
2019-07-31 10:09:08 +00:00
< td > { { episode [ ' episode ' ] } } < / td >
2018-11-26 20:18:12 +00:00
< td >
2019-07-31 10:09:08 +00:00
% if episode [ ' scene_name ' ] is not None :
< span data - tooltip = " Scenename is: {{ episode[ ' scene_name ' ]}} " data - inverted = ' ' data - position = " top left " > < i class = " info circle icon " > < / i > < / span >
2018-11-26 20:18:12 +00:00
% end
2019-11-20 03:02:59 +00:00
< span data - tooltip = " Path is: {{ episode[ ' path ' ]}} " data - inverted = ' ' data - position = " top left " > < a data - series_title = " {{ details[ ' title ' ]}} " data - season = " {{ episode[ ' season ' ]}} " data - episode = " {{ episode[ ' episode ' ]}} " data - episode_title = " {{ episode[ ' title ' ]}} " data - sonarrEpisodeId = " {{ episode[ ' sonarrEpisodeId ' ]}} " class = " episode_history " > { { episode [ ' title ' ] } } < / a > < / span >
2018-11-26 20:18:12 +00:00
< / td >
< td >
2019-07-31 10:09:08 +00:00
% if episode [ ' subtitles ' ] is not None :
% actual_languages = ast . literal_eval ( episode [ ' subtitles ' ] )
2019-11-16 13:44:14 +00:00
% actual_languages . sort ( key = lambda x : x [ 0 ] )
2018-11-26 20:18:12 +00:00
% else :
% actual_languages = ' [] '
% end
% try :
% for language in actual_languages :
2019-04-06 01:31:07 +00:00
% if language [ 0 ] . endswith ( ' :forced ' ) :
% forced = True
2019-03-29 01:39:18 +00:00
% else :
% forced = False
% end
2018-11-26 20:18:12 +00:00
% if language [ 1 ] is not None :
2019-10-26 18:52:22 +00:00
< a data - episodePath = " {{ episode[ ' path ' ]}} " data - subtitlesPath = " {{ path_replace(language[1])}} " data - language = " {{ alpha3_from_alpha2(str(language[0]))}} " data - sonarrSeriesId = { { episode [ ' sonarrSeriesId ' ] } } data - sonarrEpisodeId = { { episode [ ' sonarrEpisodeId ' ] } } class = " remove_subtitles ui tiny label " >
2019-04-06 01:31:07 +00:00
{ { ! ' <span class= " ui " data-tooltip= " Forced " data-inverted= " " ><i class= " exclamation icon " ></i></span> ' if forced else ' ' } } { { language [ 0 ] . split ( ' : ' ) [ 0 ] } }
2018-11-26 20:18:12 +00:00
< i class = " delete icon " > < / i >
< / a >
% else :
< div class = " ui tiny label " >
{ { language [ 0 ] } }
< / div >
% end
% end
% except :
% pass
% end
< / td >
< td >
% try :
< %
2019-07-31 10:09:08 +00:00
if episode [ ' missing_subtitles ' ] is not None :
missing_languages = ast . literal_eval ( episode [ ' missing_subtitles ' ] )
2018-11-26 20:18:12 +00:00
missing_languages . sort ( )
end
if missing_languages is not None :
from get_subtitle import search_active
for language in missing_languages :
2019-10-27 01:16:59 +00:00
if episode [ ' failedAttempts ' ] is not None and settings . general . getboolean ( ' adaptive_searching ' ) and language in episode [ ' failedAttempts ' ] :
for lang in ast . literal_eval ( episode [ ' failedAttempts ' ] ) :
2018-11-26 20:18:12 +00:00
if language in lang :
2019-04-02 02:34:03 +00:00
if search_active ( lang [ 1 ] ) :
2018-11-26 20:18:12 +00:00
% >
2019-10-26 18:52:22 +00:00
< a data - episodePath = " {{ episode[ ' path ' ]}} " data - scenename = " {{ episode[ ' scene_name ' ]}} " data - language = " {{ alpha3_from_alpha2(str(language.split( ' : ' )[0]))}} " data - hi = " {{ details[ ' hearing_impaired ' ]}} " data - forced = " {{ " True " if len(language.split( ' : ' )) > 1 else " False " }} " data - sonarrSeriesId = " {{ episode[ ' sonarrSeriesId ' ]}} " data - sonarrEpisodeId = " {{ episode[ ' sonarrEpisodeId ' ]}} " class = " get_subtitle ui tiny label " >
2018-11-26 20:18:12 +00:00
{ { language } }
2018-12-09 20:23:51 +00:00
< i style = " margin-left:3px; margin-right:0 " class = " search icon " > < / i >
2018-11-26 20:18:12 +00:00
< / a >
% else :
2019-10-26 18:52:22 +00:00
< a data - tooltip = " Automatic searching delayed (adaptive search) " data - position = " top right " data - inverted = " " data - episodePath = " {{ episode[ ' path ' ]}} " data - scenename = " {{ episode[ ' scene_name ' ]}} " data - language = " {{ alpha3_from_alpha2(str(language.split( ' : ' )[0]))}} " data - hi = " {{ details[ ' hearing_impaired ' ]}} " data - forced = " {{ " True " if len(language.split( ' : ' )) > 1 else " False " }} " data - sonarrSeriesId = " {{ episode[ ' sonarrSeriesId ' ]}} " data - sonarrEpisodeId = " {{ episode[ ' sonarrEpisodeId ' ]}} " class = " get_subtitle ui tiny label " >
2018-11-26 20:18:12 +00:00
{ { language } }
2018-12-09 20:23:51 +00:00
< i style = " margin-left:3px; margin-right:0 " class = " search red icon " > < / i >
2018-11-26 20:18:12 +00:00
< / a >
% end
% end
% end
% else :
2019-10-27 01:16:59 +00:00
< a data - episodePath = " {{ episode[ ' path ' ]}} " data - scenename = " {{ episode[ ' scene_name ' ]}} " data - language = " {{ alpha3_from_alpha2(str(language.split( ' : ' )[0]))}} " data - hi = " {{ details[ ' hearing_impaired ' ]}} " data - forced = " {{ " True " if len(language.split( ' : ' )) > 1 else " False " }} " data - sonarrSeriesId = " {{ episode[ ' sonarrSeriesId ' ]}} " data - sonarrEpisodeId = " {{ episode[ ' sonarrEpisodeId ' ]}} " class = " get_subtitle ui tiny label " >
2018-11-26 20:18:12 +00:00
{ { language } }
2018-12-09 20:23:51 +00:00
< i style = " margin-left:3px; margin-right:0 " class = " search icon " > < / i >
2018-11-26 20:18:12 +00:00
< / a >
% end
% end
% end
% except :
% pass
% end
< / td >
< td >
% if subs_languages is not None :
2019-10-26 18:52:22 +00:00
< a data - episodePath = " {{ episode[ ' path ' ]}} " data - scenename = " {{ episode[ ' scene_name ' ]}} " data - language = " {{ subs_languages_list}} " data - hi = " {{ details[ ' hearing_impaired ' ]}} " data - forced = " {{ details[ ' forced ' ]}} " data - series_title = " {{ details[ ' title ' ]}} " data - season = " {{ episode[ ' season ' ]}} " data - episode = " {{ episode[ ' episode ' ]}} " data - episode_title = " {{ episode[ ' title ' ]}} " data - sonarrSeriesId = " {{ episode[ ' sonarrSeriesId ' ]}} " data - sonarrEpisodeId = " {{ episode[ ' sonarrEpisodeId ' ]}} " class = " manual_search ui tiny label " > < i class = " ui user icon " style = " margin-right:0px " > < / i > < / a >
2018-11-26 20:18:12 +00:00
% end
< / td >
2019-08-23 00:02:11 +00:00
< td >
% if subs_languages is not None :
2019-10-26 18:52:22 +00:00
< a data - episodePath = " {{ episode[ ' path ' ]}} " data - scenename = " {{ episode[ ' scene_name ' ]}} " data - language = " {{ subs_languages_list}} " data - hi = " {{ details[ ' hearing_impaired ' ]}} " data - series_title = " {{ details[ ' title ' ]}} " data - season = " {{ episode[ ' season ' ]}} " data - episode = " {{ episode[ ' episode ' ]}} " data - episode_title = " {{ episode[ ' title ' ]}} " data - sonarrSeriesId = " {{ episode[ ' sonarrSeriesId ' ]}} " data - sonarrEpisodeId = " {{ episode[ ' sonarrEpisodeId ' ]}} " class = " manual_upload ui tiny label " > < i class = " ui cloud upload icon " style = " margin-right:0px " > < / i > < / a >
2019-08-23 00:02:11 +00:00
% end
< / td >
2018-11-26 20:18:12 +00:00
< / tr >
% end
< / tbody >
< / table >
< / div >
< / div >
< / div >
% end
% end
< / div >
< div class = " config_dialog ui small modal " >
< i class = " close icon " > < / i >
< div class = " header " >
< div id = " series_title " > < / div >
< / div >
< div class = " content " >
< form name = " series_form " id = " series_form " action = " " method = " post " class = " ui form " >
< div class = " ui grid " >
< div class = " four wide column " >
< img id = " series_poster " class = " ui image " src = " " >
< / div >
< div class = " twelve wide column " >
< div class = " ui grid " >
< div class = " middle aligned row " >
< div class = " right aligned five wide column " >
2019-09-17 15:46:26 +00:00
< label > Audio Language < / label >
2018-11-26 20:18:12 +00:00
< / div >
< div class = " nine wide column " >
< div id = " series_audio_language " > < / div >
< / div >
< / div >
< div class = " middle aligned row " >
< div class = " right aligned five wide column " >
2019-09-17 15:46:26 +00:00
< label > Subtitles Language ( s ) < / label >
2018-11-26 20:18:12 +00:00
< / div >
< div class = " nine wide column " >
< select name = " languages " id = " series_languages " { { ! ' multiple= " " ' if single_language is False else ' ' } } class = " ui fluid selection dropdown " >
< option value = " " > Languages < / option >
% if single_language is True :
< option value = " None " > None < / option >
% end
% for language in languages :
2019-10-26 18:52:22 +00:00
< option value = " {{ language[ ' code2 ' ]}} " > { { language [ ' name ' ] } } < / option >
2018-11-26 20:18:12 +00:00
% end
< / select >
< / div >
< / div >
< div class = " middle aligned row " >
< div class = " right aligned five wide column " >
2019-09-17 15:46:26 +00:00
< label > Hearing - Impaired < / label >
2018-11-26 20:18:12 +00:00
< / div >
< div class = " nine wide column " >
< div id = " series_hearing-impaired_div " class = " ui toggle checkbox " >
< input name = " hearing_impaired " id = " series_hearing-impaired " type = " checkbox " >
< label > < / label >
< / div >
< / div >
< / div >
2019-05-22 03:33:59 +00:00
< div class = " middle aligned row " >
< div class = " right aligned five wide column " >
< label > Forced < / label >
< / div >
< div class = " nine wide column " >
< select name = " forced " id = " series_forced " class = " ui fluid selection dropdown " >
< option value = " False " > False < / option >
< option value = " True " > True < / option >
< option value = " Both " > Both < / option >
< / select >
< / div >
< / div >
2018-11-26 20:18:12 +00:00
< / div >
< / div >
< / div >
< / form >
< / div >
< div class = " actions " >
< button class = " ui cancel button " > Cancel < / button >
< button type = " submit " name = " save " value = " save " form = " series_form " class = " ui blue approve button " > Save < / button >
< / div >
< / div >
2019-11-20 03:02:59 +00:00
< div class = " episode_dialog ui modal " >
< i class = " close icon " > < / i >
< div class = " header " >
2019-12-03 00:25:16 +00:00
< span class = " series_title_span " > < / span > - < span class = " season_span " > < / span > x < span class = " episode_span " > < / span > - < span class = " episode_title_span " > < / span >
2019-11-20 03:02:59 +00:00
< / div >
< div class = " scrolling content " >
< table id = " episode_result " class = " display " style = " width:100 % " >
< thead >
< tr >
< th > < / th >
< th style = " text-align: left; " > Language . : < / th >
< th style = " text-align: left; " > Provider : < / th >
< th style = " text-align: left; " > Score : < / th >
< th style = " text-align: left; " > Date : < / th >
< / tr >
< / thead >
< / table >
< / div >
< div class = " actions " >
< button class = " ui cancel button " > Cancel < / button >
< / div >
< / div >
2018-11-26 20:18:12 +00:00
< div class = " search_dialog ui modal " >
< i class = " close icon " > < / i >
< div class = " header " >
2019-12-03 00:25:16 +00:00
< span class = " series_title_span " > < / span > - < span class = " season_span " > < / span > x < span class = " episode_span " > < / span > - < span class = " episode_title_span " > < / span >
2019-10-07 19:45:35 +00:00
< br > < h5 > Episode path is : < div class = " ui tiny inverted label " style = " background-color: #35c5f4; " > < span id = " episode_path_span " > < / span > < / div >
< br > Scenename is : < div class = " ui tiny inverted label " style = " background-color: orange; " > < span id = " episode_scenename_span " > < / span > < / div > < / h5 >
2018-11-26 20:18:12 +00:00
< / div >
< div class = " scrolling content " >
< table id = " search_result " class = " display " style = " width:100 % " >
< thead >
< tr >
< th style = " text-align: left; " > Score : < / th >
2020-03-22 09:54:54 +00:00
< th style = " text-align: left; " > < / th >
2018-11-26 20:18:12 +00:00
< th style = " text-align: left; " > Provider : < / th >
2019-10-01 03:29:08 +00:00
< th style = " text-align: left; " > Matching : < / th >
2019-10-20 12:09:43 +00:00
< th style = " text-align: left; " > Releases : < / th >
2020-03-22 09:54:54 +00:00
< th style = " text-align: left; " > Uploader : < / th >
2018-11-26 20:18:12 +00:00
< th > < / th >
< / tr >
< / thead >
< / table >
< / div >
< div class = " actions " >
< button class = " ui cancel button " > Cancel < / button >
< / div >
< / div >
2019-08-23 00:02:11 +00:00
< div class = " upload_dialog ui small modal " >
< i class = " close icon " > < / i >
< div class = " header " >
< span id = " series_title_span_u " > < / span > - < span id = " season_u " > < / span > x < span id = " episode_u " > < / span > - < span id = " episode_title_u " > < / span >
< / div >
< div class = " content " >
< form class = " ui form " name = " upload_form " id = " upload_form " action = " {{ base_url}}manual_upload_subtitle " method = " post " enctype = " multipart/form-data " >
< div class = " ui grid " >
< div class = " middle aligned row " >
< div class = " right aligned three wide column " >
< label > Language < / label >
< / div >
< div class = " thirteen wide column " >
< select class = " ui search dropdown " id = " language " name = " language " >
% for language in subs_languages_list :
< option value = " {{ language}} " > { { language_from_alpha2 ( language ) } } < / option >
% end
< / select >
< / div >
< / div >
< div class = " middle aligned row " >
< div class = " right aligned three wide column " >
< label > Forced < / label >
< / div >
< div class = " thirteen wide column " >
< div class = " ui toggle checkbox " >
< input name = " forced " type = " checkbox " value = " 1 " >
< label > < / label >
< / div >
< / div >
< / div >
< div class = " middle aligned row " >
< div class = " right aligned three wide column " >
< label > File < / label >
< / div >
< div class = " thirteen wide column " >
< input type = " file " name = " upload " >
< / div >
< / div >
< / div >
< input type = " hidden " id = " upload_episodePath " name = " episodePath " value = " " / >
< input type = " hidden " id = " upload_sceneName " name = " sceneName " value = " " / >
< input type = " hidden " id = " upload_sonarrSeriesId " name = " sonarrSeriesId " value = " " / >
< input type = " hidden " id = " upload_sonarrEpisodeId " name = " sonarrEpisodeId " value = " " / >
< input type = " hidden " id = " upload_title " name = " title " value = " " / >
< / form >
< / div >
< div class = " actions " >
< button class = " ui cancel button " > Cancel < / button >
< button type = " submit " name = " save " value = " save " form = " upload_form " class = " ui blue approve button " > Save < / button >
< / div >
< / div >
2018-11-26 20:18:12 +00:00
% include ( ' footer.tpl ' )
< / body >
< / html >
< script >
2018-12-09 20:23:51 +00:00
$ ( ' #scan_disk ' ) . on ( ' click ' , function ( ) {
2019-09-17 15:46:26 +00:00
$ ( ' #loader_text ' ) . text ( " Scanning Disk For Existing Subtitles... " ) ;
2018-11-26 20:18:12 +00:00
window . location = ' {{ base_url}}scan_disk/ {{ no}} ' ;
2018-12-09 20:23:51 +00:00
} ) ;
2018-11-26 20:18:12 +00:00
2018-12-09 20:23:51 +00:00
$ ( ' #search_missing_subtitles ' ) . on ( ' click ' , function ( ) {
2019-02-26 00:48:43 +00:00
$ ( this ) . addClass ( ' disabled ' ) ;
2019-02-25 04:05:58 +00:00
$ ( this ) . find ( ' i:first ' ) . addClass ( ' loading ' ) ;
$ . ajax ( {
url : ' {{ base_url}}search_missing_subtitles/ {{ no}} '
} )
2018-12-09 20:23:51 +00:00
} ) ;
2018-11-26 20:18:12 +00:00
2018-12-09 20:23:51 +00:00
$ ( ' .remove_subtitles ' ) . on ( ' click ' , function ( ) {
const values = {
2018-11-26 20:18:12 +00:00
episodePath : $ ( this ) . attr ( " data-episodePath " ) ,
language : $ ( this ) . attr ( " data-language " ) ,
subtitlesPath : $ ( this ) . attr ( " data-subtitlesPath " ) ,
sonarrSeriesId : $ ( this ) . attr ( " data-sonarrSeriesId " ) ,
sonarrEpisodeId : $ ( this ) . attr ( " data-sonarrEpisodeId " ) ,
tvdbid : { { tvdbid } }
} ;
$ ( ' #loader_text ' ) . text ( " Deleting subtitle from disk... " ) ;
$ . ajax ( {
url : " {{ base_url}}remove_subtitles " ,
type : " POST " ,
dataType : " json " ,
data : values
} ) ;
$ ( document ) . ajaxStart ( function ( ) {
$ ( ' #loader ' ) . addClass ( ' active ' ) ;
} ) ;
$ ( document ) . ajaxStop ( function ( ) {
window . location . reload ( ) ;
} ) ;
2018-12-09 20:23:51 +00:00
} ) ;
2018-11-26 20:18:12 +00:00
2018-12-09 20:23:51 +00:00
$ ( ' .get_subtitle ' ) . on ( ' click ' , function ( ) {
const values = {
2018-11-26 20:18:12 +00:00
episodePath : $ ( this ) . attr ( " data-episodePath " ) ,
sceneName : $ ( this ) . attr ( " data-sceneName " ) ,
language : $ ( this ) . attr ( " data-language " ) ,
hi : $ ( this ) . attr ( " data-hi " ) ,
2019-03-31 03:09:52 +00:00
forced : $ ( this ) . attr ( " data-forced " ) ,
2018-11-26 20:18:12 +00:00
sonarrSeriesId : $ ( this ) . attr ( ' data-sonarrSeriesId ' ) ,
2018-11-29 13:03:44 +00:00
sonarrEpisodeId : $ ( this ) . attr ( ' data-sonarrEpisodeId ' ) ,
2019-10-26 18:52:22 +00:00
title : " {{ !str(details[ ' title ' ]).replace( " ' " , " \\ ' " )}} "
2018-11-26 20:18:12 +00:00
} ;
2019-09-17 15:46:26 +00:00
$ ( ' #loader_text ' ) . text ( " Downloading Subtitle... " ) ;
2018-11-26 20:18:12 +00:00
$ . ajax ( {
url : " {{ base_url}}get_subtitle " ,
type : " POST " ,
dataType : " json " ,
data : values
} ) ;
$ ( document ) . ajaxStart ( function ( ) {
$ ( ' #loader ' ) . addClass ( ' active ' ) ;
} ) ;
$ ( document ) . ajaxStop ( function ( ) {
window . location . reload ( ) ;
} ) ;
2018-12-09 20:23:51 +00:00
} ) ;
2018-11-26 20:18:12 +00:00
2019-11-20 03:02:59 +00:00
$ ( ' a:not(.manual_search, .manual_upload, .episode_history), .menu .item, button:not(#config, .cancel, #search_missing_subtitles) ' ) . on ( ' click ' , function ( ) {
2018-11-26 20:18:12 +00:00
$ ( ' #loader ' ) . addClass ( ' active ' ) ;
2018-12-09 20:23:51 +00:00
} ) ;
2018-11-26 20:18:12 +00:00
2018-12-09 20:23:51 +00:00
$ ( ' #config ' ) . on ( ' click ' , function ( ) {
2018-11-26 20:18:12 +00:00
$ ( ' #series_form ' ) . attr ( ' action ' , ' {{ base_url}}edit_series/ {{ no}} ' ) ;
$ ( " #series_title " ) . html ( $ ( this ) . data ( " title " ) ) ;
$ ( " #series_poster " ) . attr ( " src " , " {{ base_url}}image_proxy " + $ ( this ) . data ( " poster " ) ) ;
$ ( " #series_audio_language " ) . html ( $ ( this ) . data ( " audio " ) ) ;
$ ( ' #series_languages ' ) . dropdown ( ' clear ' ) ;
2018-12-09 20:23:51 +00:00
const languages_array = eval ( $ ( this ) . data ( " languages " ) ) ;
2018-11-26 20:18:12 +00:00
$ ( ' #series_languages ' ) . dropdown ( ' set selected ' , languages_array ) ;
2019-05-22 03:33:59 +00:00
$ ( ' #series_forced ' ) . dropdown ( ' clear ' ) ;
$ ( ' #series_forced ' ) . dropdown ( ' set selected ' , $ ( this ) . data ( " forced " ) ) ;
2018-12-09 20:23:51 +00:00
if ( $ ( this ) . data ( " hearing-impaired " ) == = " True " ) {
2018-11-26 20:18:12 +00:00
$ ( " #series_hearing-impaired_div " ) . checkbox ( ' check ' ) ;
} else {
$ ( " #series_hearing-impaired_div " ) . checkbox ( ' uncheck ' ) ;
}
2019-08-23 00:02:11 +00:00
$ ( ' .config_dialog ' )
. modal ( {
centered : false ,
autofocus : false
} )
. modal ( ' show ' ) ;
2018-12-09 20:23:51 +00:00
} ) ;
2018-11-26 20:18:12 +00:00
2019-11-20 03:02:59 +00:00
$ ( ' .episode_history ' ) . on ( ' click ' , function ( ) {
2019-12-03 00:25:16 +00:00
$ ( " .series_title_span " ) . html ( $ ( this ) . data ( " series_title " ) ) ;
$ ( " .season_span " ) . html ( $ ( this ) . data ( " season " ) ) ;
$ ( " .episode_span " ) . html ( $ ( this ) . data ( " episode " ) ) ;
$ ( " .episode_title_span " ) . html ( $ ( this ) . data ( " episode_title " ) ) ;
2019-11-20 03:02:59 +00:00
sonarrEpisodeId = $ ( this ) . attr ( " data-sonarrEpisodeId " ) ;
$ ( ' #episode_result ' ) . DataTable ( {
destroy : true ,
language : {
loadingRecords : ' <br><div class= " ui active inverted dimmer " style= " width: 95 % ; " ><div class= " ui centered inline loader " ></div></div><br> ' ,
zeroRecords : ' No History Records Found For This Episode '
} ,
paging : true ,
lengthChange : false ,
pageLength : 5 ,
searching : true ,
ordering : true ,
processing : false ,
serverSide : false ,
ajax : {
url : ' {{ base_url}}episode_history/ ' + sonarrEpisodeId
} ,
drawCallback : function ( settings ) {
$ ( ' .inline.dropdown ' ) . dropdown ( ) ;
$ ( ' .ui.accordion ' ) . accordion ( ) ;
} ,
columns : [
{ data : ' action ' } ,
{ data : ' language ' } ,
{ data : ' provider ' } ,
{ data : ' score ' } ,
{ data : ' timestamp ' }
]
} ) ;
$ ( ' .episode_dialog ' )
. modal ( {
centered : false ,
autofocus : false
} )
. modal ( ' show ' ) ;
} ) ;
2018-12-09 20:23:51 +00:00
$ ( ' .manual_search ' ) . on ( ' click ' , function ( ) {
2019-12-03 00:25:16 +00:00
$ ( " .series_title_span " ) . html ( $ ( this ) . data ( " series_title " ) ) ;
$ ( " .season_span " ) . html ( $ ( this ) . data ( " season " ) ) ;
$ ( " .episode_span " ) . html ( $ ( this ) . data ( " episode " ) ) ;
$ ( " .episode_title_span " ) . html ( $ ( this ) . data ( " episode_title " ) ) ;
2019-10-01 03:29:08 +00:00
$ ( " #episode_path_span " ) . html ( $ ( this ) . attr ( " data-episodePath " ) ) ;
$ ( " #episode_scenename_span " ) . html ( $ ( this ) . attr ( " data-sceneName " ) ) ;
2018-11-26 20:18:12 +00:00
2018-12-09 20:23:51 +00:00
episodePath = $ ( this ) . attr ( " data-episodePath " ) ;
sceneName = $ ( this ) . attr ( " data-sceneName " ) ;
language = $ ( this ) . attr ( " data-language " ) ;
hi = $ ( this ) . attr ( " data-hi " ) ;
2019-03-31 03:09:52 +00:00
forced = $ ( this ) . attr ( " data-forced " ) ;
2018-12-09 20:23:51 +00:00
sonarrSeriesId = $ ( this ) . attr ( " data-sonarrSeriesId " ) ;
sonarrEpisodeId = $ ( this ) . attr ( " data-sonarrEpisodeId " ) ;
2019-03-20 00:16:19 +00:00
var languages = Array . from ( { { ! subs_languages_list } } ) ;
var is_pb = languages . includes ( ' pb ' ) ;
var is_pt = languages . includes ( ' pt ' ) ;
2018-11-26 20:18:12 +00:00
2018-12-09 20:23:51 +00:00
const values = {
2018-11-26 20:18:12 +00:00
episodePath : episodePath ,
sceneName : sceneName ,
language : language ,
hi : hi ,
2019-03-31 03:09:52 +00:00
forced : forced ,
2018-11-26 20:18:12 +00:00
sonarrSeriesId : sonarrSeriesId ,
2018-11-29 11:20:39 +00:00
sonarrEpisodeId : sonarrEpisodeId ,
2019-10-26 18:52:22 +00:00
title : " {{ !str(details[ ' title ' ]).replace( " ' " , " \' " )}} "
2018-11-26 20:18:12 +00:00
} ;
$ ( ' #search_result ' ) . DataTable ( {
destroy : true ,
language : {
loadingRecords : ' <br><div class= " ui active inverted dimmer " style= " width: 95 % ; " ><div class= " ui centered inline loader " ></div></div><br> ' ,
2019-09-17 15:46:26 +00:00
zeroRecords : ' No Subtitles Found For This Episode '
2018-11-26 20:18:12 +00:00
} ,
paging : true ,
2019-01-28 02:19:56 +00:00
lengthChange : false ,
pageLength : 5 ,
2018-11-26 20:18:12 +00:00
searching : false ,
ordering : false ,
processing : false ,
serverSide : false ,
2019-01-28 02:19:56 +00:00
ajax : {
2018-11-26 20:18:12 +00:00
url : ' {{ base_url}}manual_search ' ,
type : ' POST ' ,
data : values
} ,
drawCallback : function ( settings ) {
$ ( ' .inline.dropdown ' ) . dropdown ( ) ;
2019-10-01 03:29:08 +00:00
$ ( ' .ui.accordion ' ) . accordion ( ) ;
2018-11-26 20:18:12 +00:00
} ,
columns : [
{ data : ' score ' ,
render : function ( data , type , row ) {
return data + ' % ' ;
}
} ,
2019-03-20 00:16:19 +00:00
{ data : null ,
render : function ( data , type , row ) {
2020-03-22 09:54:54 +00:00
let lng = data . language ;
2019-03-20 00:16:19 +00:00
if ( data . language == = " pt " & & is_pb == = true & & is_pt == = false ) {
2020-03-22 09:54:54 +00:00
lng = ' pb '
2019-03-20 00:16:19 +00:00
}
2020-03-22 09:54:54 +00:00
let text = ' <div class= " ui tiny label " style= " margin-bottom: 2px; " > ' + lng . toUpperCase ( ) + ' </div> ' ;
if ( data . hearing_impaired == " True " ) {
text + = ' <div class= " ui tiny inverted label " style= " background-color: #313335; " >HI</div> ' ;
}
return text ;
2019-03-20 00:16:19 +00:00
}
} ,
2018-11-26 20:18:12 +00:00
{ data : null ,
render : function ( data , type , row ) {
return ' <a href= " ' + data . url + ' " target= " _blank " > ' + data . provider + ' </a> ' ;
}
} ,
{ data : null ,
render : function ( data , type , row ) {
2018-12-09 20:23:51 +00:00
const array_matches = data . matches ;
const array_dont_matches = data . dont_matches ;
let i ;
let text = ' <div class= " ui inline dropdown " ><i class= " green check icon " ></i><div class= " text " > ' ;
2018-11-26 20:18:12 +00:00
text + = array_matches . length ;
2018-12-09 20:23:51 +00:00
text + = ' </div><i class= " dropdown icon " ></i><div class= " menu " > ' ;
2018-11-26 20:18:12 +00:00
for ( i = 0 ; i < array_matches . length ; i + + ) {
text + = ' <div class= " criteria_matched disabled item " > ' + array_matches [ i ] + ' </div> ' ;
}
text + = ' </div></div> ' ;
2018-12-09 20:23:51 +00:00
text + = ' <div class= " ui inline dropdown " ><i class= " red times icon " ></i><div class= " text " > ' ;
2018-11-26 20:18:12 +00:00
text + = array_dont_matches . length ;
2018-12-09 20:23:51 +00:00
text + = ' </div><i class= " dropdown icon " ></i><div class= " menu " > ' ;
2018-11-26 20:18:12 +00:00
for ( i = 0 ; i < array_dont_matches . length ; i + + ) {
text + = ' <div class= " criteria_not_matched disabled item " > ' + array_dont_matches [ i ] + ' </div> ' ;
}
text + = ' </div></div> ' ;
return text ;
}
} ,
{ data : null ,
render : function ( data , type , row ) {
2019-10-01 03:29:08 +00:00
const array_release_info = data . release_info ;
let i ;
2019-11-09 14:29:28 +00:00
let text = ' <div class= " ui fluid accordion " ><div class= " title " ><i class= " dropdown icon " ></i>...</div><div class= " content season " > ' ;
2020-03-20 14:49:16 +00:00
if ( array_release_info . length < = 1 ) text = ' <div><div class= " content season " > ' ;
2019-10-01 03:29:08 +00:00
for ( i = 0 ; i < array_release_info . length ; i + + ) {
text + = ' <div class= " ui tiny label " style= " margin-bottom: 2px; " > ' + array_release_info [ i ] + ' </div> ' ;
}
text + = ' </div></div> ' ;
return text ;
2020-03-22 09:54:54 +00:00
}
} ,
{ data : ' uploader ' ,
render : function ( data , type , row ) {
return ' <div class= " ui tiny label " > ' + data + ' </div> ' ;
2019-10-01 03:29:08 +00:00
}
} ,
{ data : null ,
render : function ( data , type , row ) {
2018-11-26 20:18:12 +00:00
return ' <a href= " # " class= " ui tiny label " onclick= " manual_get(this, episodePath, sceneName, hi, sonarrSeriesId, sonarrEpisodeId) " data-subtitle= " ' + data . subtitle + ' " data-provider= " ' + data . provider + ' " data-language= " ' + data . language + ' " ><i class= " ui download icon " style= " margin-right:0px " ></i></a> ' ;
}
}
]
} ) ;
$ ( ' .search_dialog ' )
. modal ( {
2019-08-23 00:02:11 +00:00
centered : false ,
autofocus : false
} )
. modal ( ' show ' ) ;
} ) ;
$ ( ' .manual_upload ' ) . on ( ' click ' , function ( ) {
$ ( " #series_title_span_u " ) . html ( $ ( this ) . data ( " series_title " ) ) ;
$ ( " #season_u " ) . html ( $ ( this ) . data ( " season " ) ) ;
$ ( " #episode_u " ) . html ( $ ( this ) . data ( " episode " ) ) ;
$ ( " #episode_title_u " ) . html ( $ ( this ) . data ( " episode_title " ) ) ;
episodePath = $ ( this ) . attr ( " data-episodePath " ) ;
sceneName = $ ( this ) . attr ( " data-sceneName " ) ;
language = $ ( this ) . attr ( " data-language " ) ;
hi = $ ( this ) . attr ( " data-hi " ) ;
sonarrSeriesId = $ ( this ) . attr ( " data-sonarrSeriesId " ) ;
sonarrEpisodeId = $ ( this ) . attr ( " data-sonarrEpisodeId " ) ;
var languages = Array . from ( { { ! subs_languages_list } } ) ;
var is_pb = languages . includes ( ' pb ' ) ;
var is_pt = languages . includes ( ' pt ' ) ;
2019-10-26 18:52:22 +00:00
var title = " {{ !details[ ' title ' ].replace( " ' " , " \' " )}} " ;
2019-08-23 00:02:11 +00:00
$ ( ' #language ' ) . dropdown ( ) ;
$ ( ' #upload_episodePath ' ) . val ( episodePath ) ;
$ ( ' #upload_sceneName ' ) . val ( sceneName ) ;
$ ( ' #upload_sonarrSeriesId ' ) . val ( sonarrSeriesId ) ;
$ ( ' #upload_sonarrEpisodeId ' ) . val ( sonarrEpisodeId ) ;
$ ( ' #upload_title ' ) . val ( title ) ;
$ ( ' .upload_dialog ' )
. modal ( {
centered : false ,
autofocus : false
2018-11-26 20:18:12 +00:00
} )
2018-12-09 20:23:51 +00:00
. modal ( ' show ' ) ;
} ) ;
2018-11-26 20:18:12 +00:00
function manual_get ( button , episodePath , sceneName , hi , sonarrSeriesId , sonarrEpisodeId ) {
2018-12-09 20:23:51 +00:00
const values = {
2018-11-26 20:18:12 +00:00
subtitle : $ ( button ) . attr ( " data-subtitle " ) ,
provider : $ ( button ) . attr ( " data-provider " ) ,
episodePath : episodePath ,
sceneName : sceneName ,
language : $ ( button ) . attr ( " data-language " ) ,
hi : hi ,
sonarrSeriesId : sonarrSeriesId ,
2018-11-29 13:40:31 +00:00
sonarrEpisodeId : sonarrEpisodeId ,
2019-10-26 18:52:22 +00:00
title : " {{ !str(details[ ' title ' ]).replace( " ' " , " \\ ' " )}} "
2018-11-26 20:18:12 +00:00
} ;
2019-09-17 15:46:26 +00:00
$ ( ' #loader_text ' ) . text ( " Downloading Subtitle... " ) ;
2018-11-26 20:18:12 +00:00
$ ( ' #loader ' ) . addClass ( ' active ' ) ;
$ ( ' .search_dialog ' ) . modal ( ' hide ' ) ;
$ . ajax ( {
url : " {{ base_url}}manual_get_subtitle " ,
type : " POST " ,
dataType : " json " ,
data : values
} ) ;
$ ( document ) . ajaxStop ( function ( ) {
window . location . reload ( ) ;
} ) ;
}
< / script >