Add "Status of removed episodes" to apply (or not) a preferred status to episodes whose files are detected as removed.

"Archived" can now be set so that removed episodes still count toward download completion statistics. See setting on page config/Post Processing/File Handling.
Remove redundant "Skip remove detection" from the config/Post Processing/File Handling page
Change combos on this page to be all consistent.
Improve vertical alignment of the label text before drop down combos.
Change to highlight the current selected item in combos.
Fix some inconsistent CSS line spacing.
This commit is contained in:
JackDandy 2015-03-17 13:59:03 +00:00
parent f491ae8492
commit 09f5e0622d
8 changed files with 86 additions and 35 deletions

View file

@ -51,6 +51,11 @@
* Add automatic compression of old log files * Add automatic compression of old log files
* Remove whitespace and semi-colon redundancy from CSS shedding 4.5kb * Remove whitespace and semi-colon redundancy from CSS shedding 4.5kb
* Change overhaul menu and button icons * Change overhaul menu and button icons
* Add "Status of removed episodes" to apply (or not) a preferred status to episodes whose files are detected as removed.
"Archived" can now be set so that removed episodes still count toward download completion stats. See setting on page
config/Post Processing/File Handling
* Remove redundant "Skip remove detection" from the config/Post Processing/File Handling page
* Change to highlight the current selected item in combos on page config/Post Processing
[develop changelog] [develop changelog]
* Fix traceback error when using the menu item Manage/Update Kodi * Fix traceback error when using the menu item Manage/Update Kodi

View file

@ -1201,6 +1201,7 @@ browser.css
/* ======================================================================= /* =======================================================================
formWizard formWizard
========================================================================== */ ========================================================================== */
.step, .step,
legend.legendStep{ legend.legendStep{
color:#fff color:#fff

View file

@ -127,6 +127,7 @@ inc_top.tmpl
color:#140F06; color:#140F06;
text-decoration:none text-decoration:none
} }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{
color:#222; color:#222;
text-decoration:none text-decoration:none
@ -1150,6 +1151,7 @@ browser.css
/* ======================================================================= /* =======================================================================
formWizard formWizard
========================================================================== */ ========================================================================== */
.step, .step,
legend.legendStep{ legend.legendStep{
color:#57442b color:#57442b

View file

@ -276,6 +276,7 @@ inc_top.tmpl
color:#140F06; color:#140F06;
text-decoration:none text-decoration:none
} }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{
color:#222; color:#222;
text-decoration:none text-decoration:none
@ -510,14 +511,17 @@ inc_bottom.tmpl
/* ======================================================================= /* =======================================================================
inc_rootDirs.tmpl inc_rootDirs.tmpl
========================================================================== */ ========================================================================== */
.rootdir-selectbox, .rootdir-selectbox,
.rootdir-selectbox #rootDirs, .rootdir-selectbox #rootDirs,
.rootdir-controls{ .rootdir-controls{
width:430px width:430px
} }
.rootdir-selectbox{ .rootdir-selectbox{
padding:0 0 5px padding:0 0 5px
} }
.rootdir-controls{ .rootdir-controls{
text-align:center text-align:center
} }
@ -549,12 +553,12 @@ home.tmpl
} }
#HomeLayout{margin-top:-35px} #HomeLayout{margin-top:-35px}
#HomeLayout.not-poster{height:75px } #HomeLayout.not-poster{height:75px}
#HomeLayout div.not-poster{position:relative;top:38px} #HomeLayout div.not-poster{position:relative;top:38px}
#HomeLayout span.not-poster{margin-top:-30px } #HomeLayout span.not-poster{margin-top:-30px}
#HomeLayout.poster{margin-top:-35px} #HomeLayout.poster{margin-top:-35px}
#HomeLayout span.poster{margin-bottom:10px } #HomeLayout span.poster{margin-bottom:10px}
#search_show_name{margin-top:0 } #search_show_name{margin-top:0}
.ui-progressbar{ .ui-progressbar{
height:20px; height:20px;
@ -666,12 +670,15 @@ home.tmpl
border-left:0; border-left:0;
border-right:0 border-right:0
} }
.ui-progressbar .ui-progressbar-value{ .ui-progressbar .ui-progressbar-value{
height:20px height:20px
} }
.ui-progressbar .progress-20{ .ui-progressbar .progress-20{
border:none border:none
} }
.show .progress-20, .show .progress-20,
.show .progress-40, .show .progress-40,
.show .progress-60, .show .progress-60,
@ -816,7 +823,7 @@ home_addShows.tmpl
margin-left:auto margin-left:auto
} }
#addShowPortal a{ #addShowPortal a{
padding:0 20px; padding:0 20px;
width:360px; width:360px;
float:left; float:left;
@ -872,6 +879,7 @@ div.buttontext p{
/* ======================================================================= /* =======================================================================
home_newShow.tmpl home_newShow.tmpl
========================================================================== */ ========================================================================== */
#addShowForm, #addShowForm,
#newShowPortal, #newShowPortal,
fieldset.sectionwrap, fieldset.sectionwrap,
@ -1221,21 +1229,27 @@ ul.tags li a{
background-color:#eae2c8; background-color:#eae2c8;
color:#666 color:#666
} }
.unaired{ .unaired{
background-color:#f5f1e4 background-color:#f5f1e4
} }
.skipped{ .skipped{
background-color:#bedeed background-color:#bedeed
} }
.good{ .good{
background-color:#c3e3c8 background-color:#c3e3c8
} }
.qual{ .qual{
background-color:#ffda8a background-color:#ffda8a
} }
.wanted{ .wanted{
background-color:#ffb0b0 background-color:#ffb0b0
} }
.snatched{ .snatched{
background-color:#ebc1ea background-color:#ebc1ea
} }
@ -1300,6 +1314,7 @@ span.snatched b{
empty-cells:show; empty-cells:show;
color:#000 color:#000
} }
.sickbeardTable.display_show{ .sickbeardTable.display_show{
clear:both clear:both
} }
@ -1400,12 +1415,14 @@ td.col-search{
width:150px; width:150px;
vertical-align:top vertical-align:top
} }
.options-on-right{ .options-on-right{
width:180px; width:180px;
float:right; float:right;
vertical-align:middle; vertical-align:middle;
height:100% height:100%
} }
.options-on-right .showLegendRight{ .options-on-right .showLegendRight{
padding-right:6px; padding-right:6px;
padding-bottom:1px padding-bottom:1px
@ -1666,12 +1683,15 @@ h2.day, h2.network{
.day-of-week .text .episode .number{ .day-of-week .text .episode .number{
font-weight:900 font-weight:900
} }
.day-of-week .text .episode .season{ .day-of-week .text .episode .season{
margin-right:2px margin-right:2px
} }
.day-of-week .text .episode .number{ .day-of-week .text .episode .number{
margin-left:2px margin-left:2px
} }
.day-of-week .episode-blank{ .day-of-week .episode-blank{
width:250px; width:250px;
height:32px; height:32px;
@ -1719,11 +1739,13 @@ h2.day, h2.network{
.on-air1{ .on-air1{
text-align:right text-align:right
} }
.on-air0{ .on-air0{
background-color:#dfd !important; background-color:#dfd !important;
filter:alpha(opacity=75); filter:alpha(opacity=75);
opacity:.75 opacity:.75
} }
.on-air1{ .on-air1{
color:#295730 !important; color:#295730 !important;
border-left:1px solid #295730 !important; border-left:1px solid #295730 !important;
@ -1775,9 +1797,11 @@ h2.day, h2.network{
.carousel-control .glyphicon-chevron-left{ .carousel-control .glyphicon-chevron-left{
margin-left:-10px margin-left:-10px
} }
.carousel-control .glyphicon-chevron-right{ .carousel-control .glyphicon-chevron-right{
margin-right:-10px margin-right:-10px
} }
.carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right{ .carousel-control .glyphicon-chevron-right{
width:20px; width:20px;
@ -1883,6 +1907,10 @@ config*.tmpl
padding-left:20px padding-left:20px
} }
#config span.component-title.input{
line-height:24px
}
.stepDiv span.component-title.input{ .stepDiv span.component-title.input{
line-height:30px line-height:30px
} }
@ -1912,6 +1940,7 @@ config*.tmpl
#config label.space-right{ #config label.space-right{
margin-right:20px margin-right:20px
} }
#config .metadataDiv{ #config .metadataDiv{
display:none display:none
} }
@ -1922,7 +1951,12 @@ config*.tmpl
} }
select .selected{ select .selected{
font-weight:700 font-weight:700;
color:#888
}
select .selected:before{
content:"> "
} }
.jumbo{ .jumbo{
@ -1935,6 +1969,7 @@ select .selected{
font-size:13px !important; font-size:13px !important;
margin-bottom:10px margin-bottom:10px
} }
#editShow .field-pair #customQuality h4{ #editShow .field-pair #customQuality h4{
margin-bottom:1px margin-bottom:1px
} }
@ -2044,15 +2079,19 @@ select .selected{
.icon16-github{ .icon16-github{
background-position:0 0 background-position:0 0
} }
.icon16-mirc{ .icon16-mirc{
background-position:-26px 0 background-position:-26px 0
} }
.icon16-sg{ .icon16-sg{
background-position:-52px 0 background-position:-52px 0
} }
.icon16-web{ .icon16-web{
background-position:-78px 0 background-position:-78px 0
} }
.icon16-win{ .icon16-win{
background-position:-104px 0 background-position:-104px 0
} }
@ -3180,6 +3219,7 @@ div.formpaginate .prev, div.formpaginate .next{
.stepDiv{ .stepDiv{
padding:15px padding:15px
} }
.stepDiv.parent-folder{ .stepDiv.parent-folder{
padding:15px 0 0; padding:15px 0 0;
width:430px; width:430px;
@ -3277,6 +3317,7 @@ thead.tablesorter-stickyHeader{
.tablesorter .filtered{ .tablesorter .filtered{
display:none display:none
} }
.tablesorter input.tablesorter-filter{ .tablesorter input.tablesorter-filter{
width:98%; width:98%;
height:auto; height:auto;
@ -3332,7 +3373,7 @@ ul.token-input-list{
padding:0 0 1px 0; padding:0 0 1px 0;
background-color:#fff; background-color:#fff;
list-style-type:none; list-style-type:none;
/* clear:left;*/ /* clear:left; */
border-top-left-radius:3px; border-top-left-radius:3px;
border-top-right-radius:3px; border-top-right-radius:3px;
border-bottom-left-radius:3px; border-bottom-left-radius:3px;
@ -3347,7 +3388,7 @@ ul.token-input-list li input{
border:0; border:0;
padding:3px 4px; padding:3px 4px;
background-color:white background-color:white
/* -webkit-appearance:caret;*/ /* -webkit-appearance:caret; */
} }
li.token-input-token{ li.token-input-token{

View file

@ -24,7 +24,7 @@
<h1 class="title">$title</h1> <h1 class="title">$title</h1>
#end if #end if
#set $checked = 'checked="checked"' #set $checked = 'checked="checked"'
#set $selected = 'selected="selected"' #set $selected = 'selected="selected" class="selected"'
<div id="config" class="pp"> <div id="config" class="pp">
<div id="config-content"> <div id="config-content">
@ -64,16 +64,12 @@
<div class="field-pair"> <div class="field-pair">
<label for="process_method"> <label for="process_method">
<span class="component-title">Process episode method</span> <span class="component-title input">Process episode method</span>
<span class="component-desc"> <span class="component-desc">
<select name="process_method" id="process_method" class="form-control input-sm"> <select name="process_method" id="process_method" class="form-control input-sm">
#set $process_method_text = {'copy': "Copy", 'move': "Move", 'hardlink': "Hard Link", 'symlink' : "Symbolic Link"} #set $process_method_text = {'copy': 'Copy', 'move': 'Move', 'hardlink': 'Hard Link', 'symlink' : 'Symbolic Link'}
#for $curAction in ('copy', 'move', 'hardlink', 'symlink'): #for $curAction in ('copy', 'move', 'hardlink', 'symlink'):
#if $sickbeard.PROCESS_METHOD == $curAction: #set $process_method = ('', $selected)[$sickbeard.PROCESS_METHOD == $curAction]
#set $process_method = $selected
#else
#set $process_method = ''
#end if
<option value="$curAction" $process_method>$process_method_text[$curAction]</option> <option value="$curAction" $process_method>$process_method_text[$curAction]</option>
#end for #end for
</select> </select>
@ -182,11 +178,17 @@
<div class="field-pair"> <div class="field-pair">
<label for="skip_removed_files"> <label for="skip_removed_files">
<span class="component-title">Skip remove detection</span> <span class="component-title input">Status of removed episodes</span>
<span class="component-desc"> <span class="component-desc">
<input type="checkbox" name="skip_removed_files" id="skip_removed_files" #if $sickbeard.SKIP_REMOVED_FILES == True then $checked else ''#> <select name="skip_removed_files" id="skip_removed_files" class="form-control form-control-inline input-sm">
<p>skip detection of removed files so the episode is not set to ignored<br />
<b>note:</b> this may mean SickGear misses renames as well</p> #set $opt_selected = ($sickbeard.SKIP_REMOVED_FILES, $IGNORED)[not $sickbeard.SKIP_REMOVED_FILES]
#for $cur_status in [1, $SKIPPED, $ARCHIVED, $IGNORED]:
#set $opt_text = ('Will Be Untouched', 'Set ' + $statusStrings[$cur_status] + ('', ' (default)')[$IGNORED == $cur_status])[1 != $cur_status]
<option value="$cur_status"#echo ('', ' ' + $selected)[$cur_status == $opt_selected]#>$opt_text</option>
#end for
</select>
<span><strong><em>untouched</em></strong> may mean SickGear also misses renames</span>
</span> </span>
</label> </label>
</div> </div>
@ -307,7 +309,7 @@
<div class="field-pair"> <div class="field-pair">
<label for="name_presets"> <label for="name_presets">
<span class="component-title">Name pattern</span> <span class="component-title input">Name pattern</span>
<span class="component-desc"> <span class="component-desc">
<select id="name_presets" class="form-control input-sm"> <select id="name_presets" class="form-control input-sm">
#set is_custom = True #set is_custom = True
@ -458,11 +460,11 @@
<div class="field-pair"> <div class="field-pair">
<label for="naming_multi_ep"> <label for="naming_multi_ep">
<span class="component-title">Multi episode style</span> <span class="component-title input">Multi episode style</span>
<span class="component-desc"> <span class="component-desc">
<select id="naming_multi_ep" name="naming_multi_ep" class="form-control input-sm"> <select id="naming_multi_ep" name="naming_multi_ep" class="form-control input-sm">
#for $cur_multi_ep in sorted($multiEpStrings.items(), key=lambda x: x[1]): #for $cur_multi_ep in sorted($multiEpStrings.items(), key=lambda x: x[1]):
<option value="$cur_multi_ep[0]" #if $sickbeard.NAMING_MULTI_EP == $cur_multi_ep[0] then 'selected="selected" class="selected"' else ''#>$cur_multi_ep[1]</option> <option value="$cur_multi_ep[0]" #if $sickbeard.NAMING_MULTI_EP == $cur_multi_ep[0] then $selected else ''#>$cur_multi_ep[1]</option>
#end for #end for
</select> </select>
</span> </span>
@ -528,7 +530,7 @@
<fieldset class="component-group-list"> <fieldset class="component-group-list">
<div class="field-pair right"> <div class="field-pair right">
<label for="name_abd_presets"> <label for="name_abd_presets">
<span class="component-title">Air-by-date name pattern</span> <span class="component-title input">Air-by-date name pattern</span>
<span class="component-desc"> <span class="component-desc">
<select id="name_abd_presets" class="form-control input-sm"> <select id="name_abd_presets" class="form-control input-sm">
#set is_abd_custom = True #set is_abd_custom = True
@ -726,7 +728,7 @@
<fieldset class="component-group-list"> <fieldset class="component-group-list">
<div class="field-pair right"> <div class="field-pair right">
<label for="name_sports_presets"> <label for="name_sports_presets">
<span class="component-title">Sports name pattern</span> <span class="component-title input">Sports name pattern</span>
<span class="component-desc"> <span class="component-desc">
<select id="name_sports_presets" class="form-control input-sm"> <select id="name_sports_presets" class="form-control input-sm">
#set is_sports_custom = True #set is_sports_custom = True
@ -929,7 +931,7 @@
<fieldset class="component-group-list"> <fieldset class="component-group-list">
<div class="field-pair right"> <div class="field-pair right">
<label for="name_anime_presets"> <label for="name_anime_presets">
<span class="component-title">Anime name pattern</span> <span class="component-title input">Anime name pattern</span>
<span class="component-desc"> <span class="component-desc">
<select id="name_anime_presets" class="form-control input-sm"> <select id="name_anime_presets" class="form-control input-sm">
#set is_anime_custom = True #set is_anime_custom = True
@ -1079,11 +1081,11 @@
<div class="field-pair"> <div class="field-pair">
<label for="naming_anime_multi_ep"> <label for="naming_anime_multi_ep">
<span class="component-title">Multi episode style</span> <span class="component-title input">Multi episode style</span>
<span class="component-desc"> <span class="component-desc">
<select id="naming_anime_multi_ep" name="naming_anime_multi_ep" class="form-control input-sm"> <select id="naming_anime_multi_ep" name="naming_anime_multi_ep" class="form-control input-sm">
#for $cur_multi_ep in sorted($multiEpStrings.items(), key=lambda x: x[1]): #for $cur_multi_ep in sorted($multiEpStrings.items(), key=lambda x: x[1]):
<option value="$cur_multi_ep[0]" #if $sickbeard.NAMING_ANIME_MULTI_EP == $cur_multi_ep[0] then 'selected="selected" class="selected"' else ''#>$cur_multi_ep[1]</option> <option value="$cur_multi_ep[0]" #if $sickbeard.NAMING_ANIME_MULTI_EP == $cur_multi_ep[0] then $selected else ''#>$cur_multi_ep[1]</option>
#end for #end for
</select> </select>
</span> </span>
@ -1179,7 +1181,7 @@
<fieldset class="component-group-list"> <fieldset class="component-group-list">
<div class="field-pair"> <div class="field-pair">
<label> <label>
<span class="component-title">Metadata target</span> <span class="component-title input">Metadata target</span>
<span class="component-desc"> <span class="component-desc">
#set $m_dict = $metadata.get_metadata_generator_dict() #set $m_dict = $metadata.get_metadata_generator_dict()
<select id="metadataType" class="form-control input-sm"> <select id="metadataType" class="form-control input-sm">

View file

@ -704,7 +704,7 @@ def initialize(consoleLogging=True):
RECENTSEARCH_STARTUP = bool(check_setting_int(CFG, 'General', 'recentsearch_startup', 0)) RECENTSEARCH_STARTUP = bool(check_setting_int(CFG, 'General', 'recentsearch_startup', 0))
BACKLOG_STARTUP = bool(check_setting_int(CFG, 'General', 'backlog_startup', 0)) BACKLOG_STARTUP = bool(check_setting_int(CFG, 'General', 'backlog_startup', 0))
SKIP_REMOVED_FILES = bool(check_setting_int(CFG, 'General', 'skip_removed_files', 0)) SKIP_REMOVED_FILES = check_setting_int(CFG, 'General', 'skip_removed_files', 0)
USENET_RETENTION = check_setting_int(CFG, 'General', 'usenet_retention', 500) USENET_RETENTION = check_setting_int(CFG, 'General', 'usenet_retention', 500)

View file

@ -1101,14 +1101,14 @@ class TVShow(object):
os.path.normpath(self.location)): os.path.normpath(self.location)):
# check if downloaded files still exist, update our data if this has changed # check if downloaded files still exist, update our data if this has changed
if not sickbeard.SKIP_REMOVED_FILES: if 1 != sickbeard.SKIP_REMOVED_FILES:
with curEp.lock: with curEp.lock:
# if it used to have a file associated with it and it doesn't anymore then set it to IGNORED # if it used to have a file associated with it and it doesn't anymore then set it to IGNORED
if curEp.location and curEp.status in Quality.DOWNLOADED: if curEp.location and curEp.status in Quality.DOWNLOADED:
logger.log(str(self.indexerid) + u": Location for " + str(season) + "x" + str( curEp.status = (sickbeard.SKIP_REMOVED_FILES, IGNORED)[not sickbeard.SKIP_REMOVED_FILES]
episode) + " doesn't exist, removing it and changing our status to IGNORED", logger.log(u'%s: File no longer at location for s%02de%02d, episode removed and status changed to %s'
% (str(self.indexerid), season, episode, statusStrings[curEp.status]),
logger.DEBUG) logger.DEBUG)
curEp.status = IGNORED
curEp.subtitles = list() curEp.subtitles = list()
curEp.subtitles_searchcount = 0 curEp.subtitles_searchcount = 0
curEp.subtitles_lastsearch = str(datetime.datetime.min) curEp.subtitles_lastsearch = str(datetime.datetime.min)

View file

@ -3623,7 +3623,7 @@ class ConfigPostProcessing(Config):
sickbeard.NAMING_STRIP_YEAR = config.checkbox_to_value(naming_strip_year) sickbeard.NAMING_STRIP_YEAR = config.checkbox_to_value(naming_strip_year)
sickbeard.USE_FAILED_DOWNLOADS = config.checkbox_to_value(use_failed_downloads) sickbeard.USE_FAILED_DOWNLOADS = config.checkbox_to_value(use_failed_downloads)
sickbeard.DELETE_FAILED = config.checkbox_to_value(delete_failed) sickbeard.DELETE_FAILED = config.checkbox_to_value(delete_failed)
sickbeard.SKIP_REMOVED_FILES = config.checkbox_to_value(skip_removed_files) sickbeard.SKIP_REMOVED_FILES = config.minimax(skip_removed_files, IGNORED, 1, IGNORED)
sickbeard.NFO_RENAME = config.checkbox_to_value(nfo_rename) sickbeard.NFO_RENAME = config.checkbox_to_value(nfo_rename)
sickbeard.METADATA_XBMC = xbmc_data sickbeard.METADATA_XBMC = xbmc_data