mirror of
https://github.com/SickGear/SickGear.git
synced 2025-01-05 17:43:37 +00:00
Add lowercase PM to the General Config/Interface/Time style selection.
Change re-factor sbdatetime classes. Add param "markup" to sbdatetime.sbftime() and sbdatetime.sbfdatetime() that when set True will return time dimensions HTML class wrapped. Add HTML class wrapping to the dimension parser of fuzzy time. Change General Config/Interface/Trim zero padding to Trim date and time, now handles 2:00 pm > 2 pm. Fix trim zero of military time hour to not use 12 hr time.
This commit is contained in:
parent
2523d4a07e
commit
c729e6d3a8
8 changed files with 370 additions and 352 deletions
11
CHANGES.md
11
CHANGES.md
|
@ -1,10 +1,13 @@
|
|||
### 0.x.x (2014-12-xx xx:xx:xx UTC)
|
||||
|
||||
* Add network logo's for BBC Canada, Crackle, El Rey Network, SKY Atlantic, and Watch
|
||||
* Add network logos BBC Canada, Crackle, El Rey Network, SKY Atlantic, and Watch
|
||||
* Change Yahoo! screen network logo
|
||||
* Change added and updated Discovery Network's channel logo's
|
||||
* Remove unrequired duplicate network logo's
|
||||
* Add Discovery Network International/A&E Network International/Scripps Networks International missing channel logos
|
||||
* Add and update Discovery Network's channel logos
|
||||
* Add A&E Network International/Scripps Networks International channel logos
|
||||
* Remove non required duplicate network logos
|
||||
* Add lowercase PM to the General Config/Interface/Time style selection
|
||||
* Change General Config/Interface/Trim zero padding to Trim date and time, now handles 2:00 pm > 2 pm
|
||||
* Fix trim zero of military time hour to not use 12 hr time
|
||||
|
||||
[develop changelog]
|
||||
|
||||
|
|
|
@ -1375,11 +1375,6 @@ config*.tmpl
|
|||
padding: 12px 0px;
|
||||
}
|
||||
|
||||
#config div.field-pair input {
|
||||
float: left;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
#config .nocheck, #config div #customQuality, .metadataDiv {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
|
|
@ -1358,11 +1358,6 @@ config*.tmpl
|
|||
padding: 12px 0px;
|
||||
}
|
||||
|
||||
#config div.field-pair input {
|
||||
float: left;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
#config .nocheck, #config div #customQuality, .metadataDiv {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
|
|
@ -153,7 +153,7 @@ inc_top.tmpl
|
|||
/* background: url("../images/bg.png") repeat 0 0 transparent; */
|
||||
}
|
||||
|
||||
[class^="icon-"],
|
||||
[class^="icon-"],
|
||||
[class*=" icon-"] {
|
||||
background-image: url("../images/glyphicons-halflings.png");
|
||||
}
|
||||
|
@ -1591,10 +1591,13 @@ config*.tmpl
|
|||
padding: 12px 0
|
||||
}
|
||||
|
||||
.stepDiv .component-desc select,
|
||||
.stepDiv .component-desc input,
|
||||
#config div.field-pair select,
|
||||
#config div.field-pair input {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.stepDiv .component-desc select,
|
||||
.stepDiv .component-desc input {
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
|
@ -3153,6 +3156,11 @@ span.token-input-delete-token {
|
|||
z-index: 0;
|
||||
background-image: url(../images/poster-dark.jpg)
|
||||
}
|
||||
|
||||
.time-am-pm {
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
/* =======================================================================
|
||||
jquery.confirm.css
|
||||
========================================================================== */
|
||||
|
|
|
@ -103,9 +103,9 @@
|
|||
<span class="component-desc">
|
||||
<select id="indexer_default" name="indexer_default" class="form-control input-sm">
|
||||
<option value="0" #if $indexer == 0 then 'selected="selected"' else ''#>All Indexers</option>
|
||||
#for $indexer in $sickbeard.indexerApi().indexers
|
||||
#for $indexer in $sickbeard.indexerApi().indexers
|
||||
<option value="$indexer" #if $indexer == $sickbeard.INDEXER_DEFAULT then 'selected="selected"' else ''#>$sickbeard.indexerApi().indexers[$indexer]</option>
|
||||
#end for
|
||||
#end for
|
||||
</select>
|
||||
<span>as the default selection when adding new shows</span>
|
||||
</span>
|
||||
|
@ -127,7 +127,7 @@
|
|||
<span class="component-title">Show root directories</span>
|
||||
<span class="component-desc">
|
||||
<p>where the files of shows are located</p>
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_rootDirs.tmpl')
|
||||
#include $os.path.join($sickbeard.PROG_DIR, 'gui/slick/interfaces/default/inc_rootDirs.tmpl')
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -246,10 +246,10 @@
|
|||
</div>
|
||||
<div class="field-pair show_if_fuzzy_dating#if True == $sickbeard.FUZZY_DATING then '' else ' metadataDiv'#">
|
||||
<label for="trim_zero">
|
||||
<span class="component-title">Trim zero padding</span>
|
||||
<span class="component-title">Trim date and time</span>
|
||||
<span class="component-desc">
|
||||
<input type="checkbox" name="trim_zero" id="trim_zero" #if True == $sickbeard.TRIM_ZERO then 'checked="checked"' else ''#/>
|
||||
<p>remove the leading number "0" shown on hour of day, and date of month</p>
|
||||
<p>display minimalist date and time i.e. <del>02:00</del> = 2:00, <del>02:00pm</del> = 2pm, <del>03 Jan</del> = 3 Jan</p>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -259,16 +259,16 @@
|
|||
<span class="component-title">Date style:</span>
|
||||
<span class="component-desc">
|
||||
<select class="form-control input-sm #if True == $sickbeard.FUZZY_DATING then '' else ' metadataDiv'#" id="date_presets#if True == $sickbeard.FUZZY_DATING then '' else '_na'#" name="date_preset#if True == $sickbeard.FUZZY_DATING then '' else '_na'#">
|
||||
#for $cur_preset in $date_presets:
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.DATE_PRESET or ("%x" == $sickbeard.DATE_PRESET and "$cur_preset" == '%a, %b %d, %Y') then 'selected="selected"' else ''#>$datetime.datetime($datetime.datetime.now().year, 12, 31, 14, 30, 47).strftime($cur_preset)</option>
|
||||
#end for
|
||||
#for $cur_preset in $date_presets:
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.DATE_PRESET or ("%x" == $sickbeard.DATE_PRESET and "$cur_preset" == '%a, %b %d, %Y') then 'selected="selected"' else ''#>$datetime.datetime($datetime.datetime.now().year, 12, 31, 14, 30, 47).strftime($cur_preset)</option>
|
||||
#end for
|
||||
</select>
|
||||
|
||||
<select class="form-control input-sm #if True != $sickbeard.FUZZY_DATING then '' else ' metadataDiv'#" id="date_presets#if True != $sickbeard.FUZZY_DATING then '' else '_na'#" name="date_preset#if True != $sickbeard.FUZZY_DATING then '' else '_na'#">
|
||||
<option value="%x" #if "%x" == $sickbeard.DATE_PRESET then 'selected="selected"' else ''#>Use System Default</option>
|
||||
#for $cur_preset in $date_presets:
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.DATE_PRESET then 'selected="selected"' else ''#>$datetime.datetime($datetime.datetime.now().year, 12, 31, 14, 30, 47).strftime($cur_preset)</option>
|
||||
#end for
|
||||
#for $cur_preset in $date_presets:
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.DATE_PRESET then 'selected="selected"' else ''#>$datetime.datetime($datetime.datetime.now().year, 12, 31, 14, 30, 47).strftime($cur_preset)</option>
|
||||
#end for
|
||||
</select>
|
||||
</span>
|
||||
</label>
|
||||
|
@ -279,11 +279,12 @@
|
|||
<span class="component-title">Time style:</span>
|
||||
<span class="component-desc">
|
||||
<select id="time_presets" name="time_preset" class="form-control input-sm">
|
||||
#for $cur_preset in $time_presets:
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.TIME_PRESET_W_SECONDS then 'selected="selected"' else ''#>$sbdatetime.now().sbftime(show_seconds=True,t_preset=$cur_preset)</option>
|
||||
#end for
|
||||
#for $cur_preset in $time_presets:
|
||||
#set $show_seconds = not $sickbeard.FUZZY_DATING
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.TIME_PRESET_W_SECONDS then 'selected="selected"' else ''#>$sbdatetime.now().sbftime(show_seconds=$show_seconds, t_preset=$cur_preset)</option>
|
||||
#end for
|
||||
</select>
|
||||
<span><b>note:</b> seconds are only shown on the History page</span>
|
||||
<span id="trim_info_seconds"><b>note:</b> seconds are only shown on the History page</span>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -450,9 +451,9 @@
|
|||
<span class="component-title">Branch version:</span>
|
||||
<span class="component-desc">
|
||||
<select id="branchVersion" class="form-control form-control-inline input-sm pull-left">
|
||||
#for $cur_branch in $sickbeard.versionCheckScheduler.action.list_remote_branches():
|
||||
#for $cur_branch in $sickbeard.versionCheckScheduler.action.list_remote_branches():
|
||||
<option value="$cur_branch" #if $cur_branch == $sickbeard.BRANCH then 'selected="selected"' else ''#>$cur_branch</option>
|
||||
#end for
|
||||
#end for
|
||||
</select>
|
||||
<input class="btn btn-inline" style="margin-left: 6px;" type="button" id="branchCheckout" value="Checkout Branch">
|
||||
<div class="clear-left"><p>select branch to use (restart required)</p></div>
|
||||
|
@ -485,9 +486,9 @@
|
|||
<span class="component-title">CPU throttling:</span>
|
||||
<span class="component-desc">
|
||||
<select id="cpu_presets" name="cpu_preset" class="form-control input-sm">
|
||||
#for $cur_preset in $cpu_presets:
|
||||
#for $cur_preset in $cpu_presets:
|
||||
<option value="$cur_preset" #if $cur_preset == $sickbeard.CPU_PRESET then 'selected="selected"' else ''#>$cur_preset.capitalize()</option>
|
||||
#end for
|
||||
#end for
|
||||
</select>
|
||||
<span>Normal (default). High is lower and Low is higher CPU use</span>
|
||||
</span>
|
||||
|
|
|
@ -1,85 +1,126 @@
|
|||
$(document).ready(function(){
|
||||
$('.enabler').each(function(){
|
||||
if (!$(this).prop('checked'))
|
||||
$('#content_' + $(this).attr('id')).hide();
|
||||
});
|
||||
var enabler = $('.enabler'),
|
||||
viewIf = $('.viewIf');
|
||||
|
||||
$('.enabler').click(function(){
|
||||
if ($(this).prop('checked'))
|
||||
$('#content_' + $(this).attr('id')).fadeIn('fast', 'linear');
|
||||
else
|
||||
$('#content_' + $(this).attr('id')).fadeOut('fast', 'linear');
|
||||
});
|
||||
enabler.each(function(){
|
||||
if (!$(this).prop('checked'))
|
||||
$('#content_' + $(this).attr('id')).hide();
|
||||
});
|
||||
|
||||
$('.viewIf').click(function(){
|
||||
if ($(this).prop('checked')) {
|
||||
$('.hide_if_' + $(this).attr('id')).css('display','none');
|
||||
$('.show_if_' + $(this).attr('id')).fadeIn('fast', 'linear');
|
||||
} else {
|
||||
$('.show_if_' + $(this).attr('id')).css('display','none');
|
||||
$('.hide_if_' + $(this).attr('id')).fadeIn('fast', 'linear');
|
||||
}
|
||||
});
|
||||
enabler.click(function(){
|
||||
var content_id = $('#content_' + $(this).attr('id'));
|
||||
if ($(this).prop('checked'))
|
||||
content_id.fadeIn('fast', 'linear');
|
||||
else
|
||||
content_id.fadeOut('fast', 'linear');
|
||||
});
|
||||
|
||||
$('.datePresets').click(function(){
|
||||
var def = $('#date_presets').val()
|
||||
if ($(this).prop('checked') && '%x' == def) {
|
||||
def = '%a, %b %d, %Y'
|
||||
$('#date_use_system_default').html('1')
|
||||
} else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html())
|
||||
def = '%x'
|
||||
viewIf.each(function(){
|
||||
$(($(this).prop('checked') ? '.hide_if_' : '.show_if_') + $(this).attr('id')).hide();
|
||||
});
|
||||
|
||||
$('#date_presets').attr('name', 'date_preset_old')
|
||||
$('#date_presets').attr('id', 'date_presets_old')
|
||||
viewIf.click(function(){
|
||||
var if_id = '_if_' + $(this).attr('id');
|
||||
if ($(this).prop('checked')) {
|
||||
$('.hide' + if_id).fadeOut('fast', 'linear');
|
||||
$('.show' + if_id).fadeIn('fast', 'linear');
|
||||
} else {
|
||||
$('.show' + if_id).fadeOut('fast', 'linear');
|
||||
$('.hide' + if_id).fadeIn('fast', 'linear');
|
||||
}
|
||||
});
|
||||
|
||||
$('#date_presets_na').attr('name', 'date_preset')
|
||||
$('#date_presets_na').attr('id', 'date_presets')
|
||||
var ui_update_trim_zero = (function() {
|
||||
var secs = ('00' + new Date().getSeconds().toString()).slice(-2),
|
||||
elSecs = $('#trim_info_seconds'),
|
||||
elTrimZero = $('#trim_zero');
|
||||
elTrimZero.each(function() {
|
||||
var checked = $(this).prop('checked') && $('#fuzzy_dating').prop('checked');
|
||||
|
||||
$('#date_presets_old').attr('name', 'date_preset_na')
|
||||
$('#date_presets_old').attr('id', 'date_presets_na')
|
||||
$('#time_presets').find('option').each(function() {
|
||||
var text = ($(this).text());
|
||||
$(this).text(checked
|
||||
? text.replace(/(\b\d+:\d\d):\d+/mg, '$1')
|
||||
: text.replace(/(\b\d+:\d\d)(?:.\d+)?/mg, '$1:' + secs));
|
||||
});
|
||||
});
|
||||
|
||||
if (def)
|
||||
$('#date_presets').val(def)
|
||||
});
|
||||
if ($('#fuzzy_dating').prop('checked'))
|
||||
if (elTrimZero.prop('checked'))
|
||||
elSecs.fadeOut('fast', 'linear');
|
||||
else
|
||||
elSecs.fadeIn('fast', 'linear');
|
||||
else
|
||||
elSecs.fadeIn('fast', 'linear');
|
||||
});
|
||||
|
||||
// bind 'myForm' and provide a simple callback function
|
||||
$('#configForm').ajaxForm({
|
||||
beforeSubmit: function(){
|
||||
$('.config_submitter').each(function(){
|
||||
$(this).attr('disabled', 'disabled');
|
||||
$(this).after('<span><img src="' + sbRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
|
||||
$(this).hide();
|
||||
});
|
||||
},
|
||||
success: function(){
|
||||
setTimeout('config_success()', 2000)
|
||||
}
|
||||
});
|
||||
$('#trim_zero, #fuzzy_dating').click(function() {
|
||||
ui_update_trim_zero();
|
||||
});
|
||||
|
||||
$('#api_key').click(function(){ $('#api_key').select() });
|
||||
$("#generate_new_apikey").click(function(){
|
||||
$.get(sbRoot + '/config/general/generateKey',
|
||||
function(data){
|
||||
if (data.error != undefined) {
|
||||
alert(data.error);
|
||||
return;
|
||||
}
|
||||
$('#api_key').val(data);
|
||||
});
|
||||
});
|
||||
ui_update_trim_zero();
|
||||
|
||||
$('#branchCheckout').click(function(){
|
||||
url = sbRoot + '/home/branchCheckout?branch=' + $('#branchVersion').val();
|
||||
window.location.href = url;
|
||||
});
|
||||
$('.datePresets').click(function(){
|
||||
var elDatePresets = $('#date_presets'),
|
||||
defaultPreset = elDatePresets.val();
|
||||
if ($(this).prop('checked') && '%x' == defaultPreset) {
|
||||
defaultPreset = '%a, %b %d, %Y';
|
||||
$('#date_use_system_default').html('1')
|
||||
} else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html())
|
||||
defaultPreset = '%x';
|
||||
|
||||
elDatePresets.attr('name', 'date_preset_old');
|
||||
elDatePresets.attr('id', 'date_presets_old');
|
||||
|
||||
var elDatePresets_na = $('#date_presets_na');
|
||||
elDatePresets_na.attr('name', 'date_preset');
|
||||
elDatePresets_na.attr('id', 'date_presets');
|
||||
|
||||
var elDatePresets_old = $('#date_presets_old');
|
||||
elDatePresets_old.attr('name', 'date_preset_na');
|
||||
elDatePresets_old.attr('id', 'date_presets_na');
|
||||
|
||||
if (defaultPreset)
|
||||
elDatePresets.val(defaultPreset)
|
||||
});
|
||||
|
||||
// bind 'myForm' and provide a simple callback function
|
||||
$('#configForm').ajaxForm({
|
||||
beforeSubmit: function(){
|
||||
$('.config_submitter').each(function(){
|
||||
$(this).attr('disabled', 'disabled');
|
||||
$(this).after('<span><img src="' + sbRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
|
||||
$(this).hide();
|
||||
});
|
||||
},
|
||||
success: function(){
|
||||
setTimeout('config_success()', 2000)
|
||||
}
|
||||
});
|
||||
|
||||
$('#api_key').click(function(){ $('#api_key').select() });
|
||||
$("#generate_new_apikey").click(function(){
|
||||
$.get(sbRoot + '/config/general/generateKey',
|
||||
function(data){
|
||||
if (data.error != undefined) {
|
||||
alert(data.error);
|
||||
return;
|
||||
}
|
||||
$('#api_key').val(data);
|
||||
});
|
||||
});
|
||||
|
||||
$('#branchCheckout').click(function(){
|
||||
window.location.href = sbRoot + '/home/branchCheckout?branch=' + $('#branchVersion').val();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function config_success(){
|
||||
$('.config_submitter').each(function(){
|
||||
$(this).removeAttr('disabled');
|
||||
$(this).next().remove();
|
||||
$(this).show();
|
||||
});
|
||||
$('#email_show').trigger('notify');
|
||||
$('.config_submitter').each(function(){
|
||||
$(this).removeAttr('disabled');
|
||||
$(this).next().remove();
|
||||
$(this).show();
|
||||
});
|
||||
$('#email_show').trigger('notify');
|
||||
}
|
||||
|
|
|
@ -11,152 +11,170 @@
|
|||
*/
|
||||
function fuzzyMoment(fmConfig) {
|
||||
|
||||
var containerClass = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.containerClass)) ? '.fuzzydate' : fmConfig.containerClass),
|
||||
dateWithTime = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dateHasTime)) ? false : !!fmConfig.dateHasTime),
|
||||
dateFormat = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dateFormat)) ? '' : fmConfig.dateFormat),
|
||||
timeFormat = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.timeFormat)) ? '' : fmConfig.timeFormat),
|
||||
trimZero = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.trimZero)) ? false : !!fmConfig.trimZero),
|
||||
dtGlue = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dtGlue)) ? '<br />' : fmConfig.dtGlue),
|
||||
dtInline = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dtInline)) ? false : fmConfig.dtInline),
|
||||
var containerClass = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.containerClass)) ? '.fuzzydate' : fmConfig.containerClass),
|
||||
dateWithTime = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dateHasTime)) ? false : !!fmConfig.dateHasTime),
|
||||
dateFormat = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dateFormat)) ? '' : fmConfig.dateFormat),
|
||||
timeFormat = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.timeFormat)) ? '' : fmConfig.timeFormat),
|
||||
trimZero = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.trimZero)) ? false : !!fmConfig.trimZero),
|
||||
dtGlue = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dtGlue)) ? '<br />' : fmConfig.dtGlue),
|
||||
dtInline = (/undefined/i.test(typeof(fmConfig)) || /undefined/i.test(typeof(fmConfig.dtInline)) ? false : fmConfig.dtInline),
|
||||
|
||||
jd = (function (str) {
|
||||
var token_map = ['a', 'ddd', 'A', 'dddd', 'b', 'MMM', 'B', 'MMMM', 'd', 'DD', 'm', 'MM', 'y', 'YY', 'Y', 'YYYY', 'x', 'L',
|
||||
'H', 'HH', 'I', 'hh', 'M', 'mm', 'S', 'ss', 'p', 'A'],
|
||||
result = '';
|
||||
jd = (function (str) {
|
||||
var token_map = ['a', 'ddd', 'A', 'dddd', 'b', 'MMM', 'B', 'MMMM', 'd', 'DD', 'm', 'MM', 'y', 'YY', 'Y', 'YYYY', 'x', 'L',
|
||||
'H', 'HH', 'I', 'hh', 'M', 'mm', 'S', 'ss', 'p', 'A', 'P', 'a'],
|
||||
result = '';
|
||||
|
||||
for (var i = 0; i < str.length; i++)
|
||||
if (/[aAbBdmyYxHIMSp]/.test(str[i])) {
|
||||
for (var t = 0; t < token_map.length; t = t + 2)
|
||||
if (str[i] == token_map[t]) {
|
||||
result += token_map[t + 1];
|
||||
break;
|
||||
}
|
||||
} else if ('%' != str[i])
|
||||
result += str[i];
|
||||
for (var i = 0; i < str.length; i++)
|
||||
if (/[aAbBdmyYxHIMSpP]/.test(str[i])) {
|
||||
for (var t = 0; t < token_map.length; t = t + 2)
|
||||
if (str[i] == token_map[t]) {
|
||||
result += token_map[t + 1];
|
||||
break;
|
||||
}
|
||||
} else if ('%' != str[i])
|
||||
result += str[i];
|
||||
|
||||
return result;
|
||||
}),
|
||||
dateToken = jd(dateFormat),
|
||||
timeToken = jd(timeFormat),
|
||||
return result;
|
||||
}),
|
||||
dateTemplate = jd(dateFormat),
|
||||
timeTemplate = jd(timeFormat),
|
||||
|
||||
addQTip = (function() {
|
||||
$(this).css('cursor', 'help');
|
||||
$(this).qtip({
|
||||
show: {
|
||||
solo: true
|
||||
},
|
||||
position: {
|
||||
viewport: $(window),
|
||||
my: 'left center',
|
||||
adjust: {
|
||||
y: -10,
|
||||
x: 2
|
||||
}
|
||||
},
|
||||
style: {
|
||||
classes: 'qtip-dark qtip-rounded qtip-shadow'
|
||||
}
|
||||
});
|
||||
});
|
||||
addQTip = (function() {
|
||||
$(this).css('cursor', 'help');
|
||||
$(this).qtip({
|
||||
show: {
|
||||
solo: true
|
||||
},
|
||||
position: {
|
||||
viewport: $(window),
|
||||
my: 'left center',
|
||||
adjust: {
|
||||
y: -10,
|
||||
x: 2
|
||||
}
|
||||
},
|
||||
style: {
|
||||
classes: 'qtip-dark qtip-rounded qtip-shadow'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (trimZero) {
|
||||
timeToken = timeToken.replace(/hh/ig, 'h');
|
||||
dateToken = dateToken.replace(/\bDD\b/g, 'D');
|
||||
}
|
||||
if (trimZero) {
|
||||
timeTemplate = timeTemplate.replace(/hh/g, 'h');
|
||||
timeTemplate = timeTemplate.replace(/HH/g, 'H');
|
||||
dateTemplate = dateTemplate.replace(/\bDD\b/g, 'D');
|
||||
}
|
||||
|
||||
$(containerClass).each(function() {
|
||||
var input = $(this).text(),
|
||||
dateA = '[<span class="fd">',
|
||||
dtSeparator = ' ',
|
||||
timeA = '</span>]', timeB = '[' + timeA;
|
||||
$(containerClass).each(function() {
|
||||
var input = $(this).text(),
|
||||
dateA = '[<span class="fd">',
|
||||
dtSeparator = ' ',
|
||||
timeA = '</span>]', timeB = '[' + timeA,
|
||||
timeToken = timeTemplate;
|
||||
|
||||
if (dateWithTime) {
|
||||
var timeMeta = input.match(/^.{6,}?([,\s]+)(\d{1,2}).(?:\d{2,2})(?:.(\d{2,2}))?(?:\s([ap]m))?$/im);
|
||||
if (null != timeMeta) {
|
||||
dtSeparator = (! /undefined/i.test(typeof(timeMeta[1])) ? timeMeta[1] : dtSeparator);
|
||||
// adjust timeToken to num digits of input hours
|
||||
timeToken = (! /undefined/i.test(typeof(timeMeta[2])) && 1 == timeMeta[2].length ? timeToken.replace(/hh/ig, 'h') : timeToken);
|
||||
// adjust timeToken to use seconds if input has them
|
||||
timeToken = (! /undefined/i.test(typeof(timeMeta[3])) && 2 == timeMeta[3].length ? timeToken : timeToken.replace(/.ss/, ''));
|
||||
// adjust timeToken to am/pm or AM/PM if input has it
|
||||
timeToken = (! /undefined/i.test(typeof(timeMeta[4])) && 2 == timeMeta[4].length ? timeToken.replace(/A$/, (/[ap]m/.test(timeMeta[4]) ? 'a' : 'A')) : timeToken);
|
||||
}
|
||||
timeA = '</span>' + dtGlue + '<span class="ft">]' + timeToken + '[' + timeA;
|
||||
timeB = '[</span>' + dtGlue + '<span class="ft">]' + timeToken + timeB;
|
||||
}
|
||||
if (dateWithTime) {
|
||||
var timeMeta = input.match(/([,\s]+)(\d{1,2})(?:(.)(\d\d)(?:(.)(\d\d))?)?(?:\s?([ap]m))?$/im);
|
||||
if (null != timeMeta) {
|
||||
dtSeparator = (! /undefined/i.test(typeof(timeMeta[1])) ? timeMeta[1] : dtSeparator);
|
||||
// adjust timeToken to num digits of input hours
|
||||
timeToken = (! /undefined/i.test(typeof(timeMeta[2])) && 1 == timeMeta[2].length ? timeToken.replace(/hh/ig, 'h') : timeToken);
|
||||
// adjust timeToken to remove min if input has one and there is a pm
|
||||
timeToken = (trimZero && ! /undefined/i.test(typeof(timeMeta[7]))
|
||||
&& (/undefined/i.test(typeof(timeMeta[4]))
|
||||
|| '00' == timeMeta[4]) ? timeToken.replace(/.mm/ig, '') : timeToken);
|
||||
// adjust timeToken to use seconds if input has them
|
||||
timeToken = (! /undefined/i.test(typeof(timeMeta[5])) && 2 == timeMeta[5].length ? timeToken : timeToken.replace(/.ss/, ''));
|
||||
// adjust timeToken to am/pm or AM/PM if input has it
|
||||
timeToken = (! /undefined/i.test(typeof(timeMeta[7])) && 2 == timeMeta[7].length ? timeToken.replace(/A$/, (/[ap]m/.test(timeMeta[7]) ? 'a' : 'A')) : timeToken);
|
||||
}
|
||||
|
||||
var inputTokens = dateToken + dtSeparator + (dateWithTime ? timeToken : 'HH:mm:ss');
|
||||
var token_build = (/h+/i.test(timeToken) ? timeToken.replace(/^(h+).*/i, '[<span class="time-hr">]$1[</span>]') : '');
|
||||
if (/m+/i.test(timeToken)) {
|
||||
token_build += (! /undefined/i.test(typeof(timeMeta[3])) ? '[<span class="time-hr-min">]' + timeMeta[3] + '[</span>]' : '')
|
||||
+ (! /undefined/i.test(typeof(timeMeta[4])) ? timeToken.replace(/.*?(m+).*/i, '[<span class="time-min">]$1[</span>]') : '');
|
||||
if (/s+/i.test(timeToken)) {
|
||||
token_build += (! /undefined/i.test(typeof(timeMeta[5])) ? '[<span class="time-min-sec">]' + timeMeta[5] + '[</span>]' : '')
|
||||
+ (! /undefined/i.test(typeof(timeMeta[6])) ? timeToken.replace(/.*?(s+).*/i, '[<span class="time-sec">]$1[</span>]') : '');
|
||||
}
|
||||
}
|
||||
timeToken = token_build + (! /undefined/i.test(typeof(timeMeta[7])) ? timeToken.replace(/.*?[\s0-9](a).*/i, '[<span class="time-am-pm">]$1[</span>]') : '');
|
||||
|
||||
if (! moment(input + (dateWithTime ? '' : dtSeparator + '00:00:00'), inputTokens).isValid())
|
||||
return;
|
||||
timeA = '</span>' + dtGlue + '<span class="ft">]' + timeToken + '[' + timeA;
|
||||
timeB = '[</span>' + dtGlue + '<span class="ft">]' + timeToken + timeB;
|
||||
}
|
||||
|
||||
moment.lang('en', {
|
||||
calendar: {
|
||||
lastDay:dateA + 'Yesterday' + timeA, sameDay:dateA + 'Today' + timeA, nextDay:dateA + 'Tomorrow' + timeA,
|
||||
lastWeek:dateA + 'last] ddd' + timeB, nextWeek:dateA + 'on] ddd' + timeB,
|
||||
sameElse:dateA + ']ddd, MMM D YYYY[' + timeA
|
||||
},
|
||||
relativeTime: {
|
||||
future:'in %s', past:'%s ago', s:'seconds', m:'a minute', mm:'%d minutes', h:'an hour', hh:'%d hours',
|
||||
d:'a day', dd:'%d days', M:'a month', MM:'%d months', y:'a year', yy:'%d years'
|
||||
}
|
||||
});
|
||||
var inputTokens = dateTemplate + dtSeparator + (dateWithTime ? timeToken : 'HH:mm:ss');
|
||||
|
||||
var airdatetime = moment(input + (dateWithTime ? '' : dtSeparator + '00:00:00'), inputTokens),
|
||||
airdate = airdatetime.clone().hour(0).minute(0).second(0).millisecond(0),
|
||||
today = moment({}),
|
||||
day = Math.abs(airdate.diff(today, 'days')),
|
||||
week = Math.abs(weekdiff = airdate.diff(today, 'week')), isPast = weekdiff < 0,
|
||||
titleThis = false, qTipTime = false,
|
||||
result = (0 == week ? airdatetime.calendar() : '');
|
||||
if (! moment(input + (dateWithTime ? '' : dtSeparator + '00:00:00'), inputTokens).isValid())
|
||||
return;
|
||||
|
||||
if (/\bOn\b/i.test(result)) {
|
||||
var fuzzer = false, weekday = today.day();
|
||||
if (3 == weekday)
|
||||
fuzzer = (5 <= day);
|
||||
else if (4 == weekday || 5 == weekday)
|
||||
fuzzer = (4 <= day);
|
||||
else
|
||||
fuzzer = (6 == day);
|
||||
if (fuzzer)
|
||||
result = result.replace(/\bOn\b/i, 'Next');
|
||||
moment.lang('en', {
|
||||
calendar: {
|
||||
lastDay:dateA + 'Yesterday' + timeA, sameDay:dateA + 'Today' + timeA, nextDay:dateA + 'Tomorrow' + timeA,
|
||||
lastWeek:dateA + 'last] ddd' + timeB, nextWeek:dateA + 'on] ddd' + timeB,
|
||||
sameElse:dateA + ']ddd, MMM D YYYY[' + timeA
|
||||
},
|
||||
relativeTime: {
|
||||
future:'in %s', past:'%s ago', s:'seconds', m:'a minute', mm:'%d minutes', h:'an hour', hh:'%d hours',
|
||||
d:'a day', dd:'%d days', M:'a month', MM:'%d months', y:'a year', yy:'%d years'
|
||||
}
|
||||
});
|
||||
|
||||
} else if (! /\b((yester|to)day\b|tomo|last\b)/i.test(result)) {
|
||||
if (14 > day)
|
||||
result = airdate.from(today) + (dateWithTime ? dtGlue + airdatetime.format(timeToken) : '');
|
||||
else if (4 > week) {
|
||||
result = (isPast ? '' : 'in ') + (1 == week ? 'a' : week) + ' week' + (1 == week ? '' : 's') + (isPast ? ' ago' : '');
|
||||
qTipTime = true;
|
||||
} else {
|
||||
result = airdate.from(today);
|
||||
qTipTime = true;
|
||||
var month = airdate.diff(today, 'month');
|
||||
if (1 == parseInt(airdate.year() - today.year()))
|
||||
result += (dtInline ? ' ' : '<br />') + '(Next Year)';
|
||||
}
|
||||
titleThis = true;
|
||||
}
|
||||
var airdatetime = moment(input + (dateWithTime ? '' : dtSeparator + '00:00:00'), inputTokens),
|
||||
airdate = airdatetime.clone().hour(0).minute(0).second(0).millisecond(0),
|
||||
today = moment({}),
|
||||
day = Math.abs(airdate.diff(today, 'days')),
|
||||
week = Math.abs(weekdiff = airdate.diff(today, 'week')), isPast = weekdiff < 0,
|
||||
titleThis = false, qTipTime = false,
|
||||
result = (0 == week ? airdatetime.calendar() : '');
|
||||
|
||||
var n = false; // disable for prod
|
||||
$(this).html(result);
|
||||
if (dateWithTime && /(yester|to)day/i.test(result))
|
||||
$(this).find('.fd').attr('title',(n?'1) ':'') + moment.duration(airdatetime.diff(moment(),'seconds'),'seconds').humanize(true)).each(addQTip);
|
||||
else if (dateWithTime)
|
||||
$(this).find('.fd').attr('title',(n?'2) ':'') + airdate.from(today)).each(addQTip);
|
||||
else if (! /today/i.test(result))
|
||||
$(this).find('.fd').attr('title',(n?'3) ':'') + airdate.from(today)).each(addQTip);
|
||||
else
|
||||
titleThis = false;
|
||||
if (/\bOn\b/i.test(result)) {
|
||||
var fuzzer = false, weekday = today.day();
|
||||
if (3 == weekday)
|
||||
fuzzer = (5 <= day);
|
||||
else if (4 == weekday || 5 == weekday)
|
||||
fuzzer = (4 <= day);
|
||||
else
|
||||
fuzzer = (6 == day);
|
||||
if (fuzzer)
|
||||
result = result.replace(/\bOn\b/i, 'Next');
|
||||
|
||||
if (titleThis)
|
||||
if (dateWithTime && qTipTime)
|
||||
$(this).attr('title',(n?'4) ':'') + airdatetime.format(inputTokens)).each(addQTip);
|
||||
else
|
||||
$(this).attr('title',(n?'5) ':'') + airdate.format(dateToken)).each(addQTip);
|
||||
else
|
||||
if (dateWithTime && qTipTime)
|
||||
$(this).find('.ft').attr('title',(n?'6) ':'') + airdatetime.format(inputTokens)).each(addQTip);
|
||||
else
|
||||
$(this).find('.ft').attr('title',(n?'7) ':'') + airdate.format(dateToken)).each(addQTip);
|
||||
});
|
||||
} else if (! /\b((yester|to)day\b|tomo|last\b)/i.test(result)) {
|
||||
if (14 > day)
|
||||
result = airdate.from(today) + (dateWithTime ? dtGlue + airdatetime.format(timeToken) : '');
|
||||
else if (4 > week) {
|
||||
result = (isPast ? '' : 'in ') + (1 == week ? 'a' : week) + ' week' + (1 == week ? '' : 's') + (isPast ? ' ago' : '');
|
||||
qTipTime = true;
|
||||
} else {
|
||||
result = airdate.from(today);
|
||||
qTipTime = true;
|
||||
var month = airdate.diff(today, 'month');
|
||||
if (1 == parseInt(airdate.year() - today.year()))
|
||||
result += (dtInline ? ' ' : '<br />') + '(Next Year)';
|
||||
}
|
||||
titleThis = true;
|
||||
}
|
||||
|
||||
var n = false; // disable for prod
|
||||
$(this).html(result);
|
||||
if (dateWithTime && /(yester|to)day/i.test(result))
|
||||
$(this).find('.fd').attr('title',(n?'1) ':'') + moment.duration(airdatetime.diff(moment(),'seconds'),'seconds').humanize(true)).each(addQTip);
|
||||
else if (dateWithTime)
|
||||
$(this).find('.fd').attr('title',(n?'2) ':'') + airdate.from(today)).each(addQTip);
|
||||
else if (! /today/i.test(result))
|
||||
$(this).find('.fd').attr('title',(n?'3) ':'') + airdate.from(today)).each(addQTip);
|
||||
else
|
||||
titleThis = false;
|
||||
|
||||
if (titleThis)
|
||||
if (dateWithTime && qTipTime)
|
||||
$(this).attr('title',(n?'4) ':'') + airdatetime.format(inputTokens)).each(addQTip);
|
||||
else
|
||||
$(this).attr('title',(n?'5) ':'') + airdate.format(dateTemplate)).each(addQTip);
|
||||
else
|
||||
if (dateWithTime && qTipTime)
|
||||
$(this).find('.ft').attr('title',(n?'6) ':'') + airdatetime.format(inputTokens)).each(addQTip);
|
||||
else
|
||||
$(this).find('.ft').attr('title',(n?'7) ':'') + airdate.format(dateTemplate)).each(addQTip);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
import datetime
|
||||
import locale
|
||||
import functools
|
||||
import re
|
||||
|
||||
import sickbeard
|
||||
from sickbeard.network_timezones import sb_timezone
|
||||
|
@ -82,12 +83,12 @@ date_presets = ('%Y-%m-%d',
|
|||
'%A, %b %d, %Y',
|
||||
'%B %d, %Y',
|
||||
'%a, %B %d, %Y',
|
||||
'%A, %B %d, %Y'
|
||||
)
|
||||
'%A, %B %d, %Y')
|
||||
|
||||
time_presets = ('%I:%M:%S %p',
|
||||
'%H:%M:%S'
|
||||
)
|
||||
'%I:%M:%S %P',
|
||||
'%H:%M:%S')
|
||||
|
||||
|
||||
# helper class
|
||||
class static_or_instance(object):
|
||||
|
@ -104,142 +105,98 @@ class sbdatetime(datetime.datetime):
|
|||
|
||||
@static_or_instance
|
||||
def convert_to_setting(self, dt=None):
|
||||
obj = (dt, self)[self is not None]
|
||||
try:
|
||||
if sickbeard.TIMEZONE_DISPLAY == 'local':
|
||||
if self is None:
|
||||
return dt.astimezone(sb_timezone)
|
||||
else:
|
||||
return self.astimezone(sb_timezone)
|
||||
else:
|
||||
if self is None:
|
||||
return dt
|
||||
else:
|
||||
return self
|
||||
if 'local' == sickbeard.TIMEZONE_DISPLAY:
|
||||
return obj.astimezone(sb_timezone)
|
||||
except:
|
||||
if self is None:
|
||||
return dt
|
||||
else:
|
||||
return self
|
||||
pass
|
||||
|
||||
return obj
|
||||
|
||||
@static_or_instance
|
||||
def setlocale(self, setlocale=True, use_has_locale=None, locale_str=''):
|
||||
if setlocale:
|
||||
try:
|
||||
if None is use_has_locale or use_has_locale:
|
||||
locale.setlocale(locale.LC_TIME, locale_str)
|
||||
except:
|
||||
if None is not use_has_locale:
|
||||
sbdatetime.has_locale = False
|
||||
pass
|
||||
|
||||
# display Time in SickGear Format
|
||||
@static_or_instance
|
||||
def sbftime(self, dt=None, show_seconds=False, t_preset=None):
|
||||
def sbftime(self, dt=None, show_seconds=False, t_preset=None, setlocale=True, markup=False):
|
||||
|
||||
try:locale.setlocale(locale.LC_TIME, '')
|
||||
except:pass
|
||||
|
||||
try:
|
||||
if sbdatetime.has_locale:
|
||||
locale.setlocale(locale.LC_TIME, 'us_US')
|
||||
except:
|
||||
sbdatetime.has_locale = False
|
||||
sbdatetime.setlocale(setlocale=setlocale, use_has_locale=sbdatetime.has_locale, locale_str='us_US')
|
||||
|
||||
strt = ''
|
||||
try:
|
||||
if self is None:
|
||||
if dt is not None:
|
||||
if t_preset is not None:
|
||||
strt = dt.strftime(t_preset)
|
||||
elif show_seconds:
|
||||
strt = dt.strftime(sickbeard.TIME_PRESET_W_SECONDS)
|
||||
else:
|
||||
strt = dt.strftime(sickbeard.TIME_PRESET)
|
||||
else:
|
||||
if t_preset is not None:
|
||||
strt = self.strftime(t_preset)
|
||||
elif show_seconds:
|
||||
strt = self.strftime(sickbeard.TIME_PRESET_W_SECONDS)
|
||||
else:
|
||||
strt = self.strftime(sickbeard.TIME_PRESET)
|
||||
finally:
|
||||
try:
|
||||
if sbdatetime.has_locale:
|
||||
locale.setlocale(locale.LC_TIME, '')
|
||||
except:
|
||||
sbdatetime.has_locale = False
|
||||
obj = (dt, self)[self is not None]
|
||||
if None is not obj:
|
||||
tmpl = (((sickbeard.TIME_PRESET, sickbeard.TIME_PRESET_W_SECONDS)[show_seconds]),
|
||||
t_preset)[None is not t_preset]
|
||||
tmpl = (tmpl.replace(':%S', ''), tmpl)[show_seconds]
|
||||
|
||||
strt = obj.strftime(tmpl.replace('%P', '%p'))
|
||||
|
||||
if sickbeard.TRIM_ZERO:
|
||||
strt = re.sub(r'^0(\d:\d\d)', r'\1', strt)
|
||||
|
||||
if re.search(r'(?im)%p$', tmpl):
|
||||
if '%p' in tmpl:
|
||||
strt = strt.upper()
|
||||
elif '%P' in tmpl:
|
||||
strt = strt.lower()
|
||||
|
||||
if sickbeard.TRIM_ZERO:
|
||||
strt = re.sub(r'(?im)^(\d+)(?::00)?(\s?[ap]m)', r'\1\2', strt)
|
||||
|
||||
if markup:
|
||||
match = re.search(r'(?im)(\d{1,2})(?:(.)(\d\d)(?:(.)(\d\d))?)?(?:\s?([ap]m))?$', strt)
|
||||
if match:
|
||||
strt = ('%s%s%s%s%s%s' % (
|
||||
('<span class="time-hr">%s</span>' % match.group(1), '')[None is match.group(1)],
|
||||
('<span class="time-hr-min">%s</span>' % match.group(2), '')[None is match.group(2)],
|
||||
('<span class="time-min">%s</span>' % match.group(3), '')[None is match.group(3)],
|
||||
('<span class="time-min-sec">%s</span>' % match.group(4), '')[None is match.group(4)],
|
||||
('<span class="time-sec">%s</span>' % match.group(5), '')[None is match.group(5)],
|
||||
('<span class="time-am-pm">%s</span>' % match.group(6), '')[None is match.group(6)]))
|
||||
|
||||
finally:
|
||||
sbdatetime.setlocale(setlocale=setlocale, use_has_locale=sbdatetime.has_locale)
|
||||
return strt
|
||||
|
||||
# display Date in SickGear Format
|
||||
@static_or_instance
|
||||
def sbfdate(self, dt=None, d_preset=None):
|
||||
def sbfdate(self, dt=None, d_preset=None, setlocale=True):
|
||||
|
||||
try:
|
||||
locale.setlocale(locale.LC_TIME, '')
|
||||
except:
|
||||
pass
|
||||
sbdatetime.setlocale(setlocale=setlocale)
|
||||
|
||||
strd = ''
|
||||
try:
|
||||
if self is None:
|
||||
if dt is not None:
|
||||
if d_preset is not None:
|
||||
strd = dt.strftime(d_preset)
|
||||
else:
|
||||
strd = dt.strftime(sickbeard.DATE_PRESET)
|
||||
else:
|
||||
if d_preset is not None:
|
||||
strd = self.strftime(d_preset)
|
||||
else:
|
||||
strd = self.strftime(sickbeard.DATE_PRESET)
|
||||
obj = (dt, self)[self is not None]
|
||||
if None is not obj:
|
||||
strd = obj.strftime((sickbeard.DATE_PRESET, d_preset)[None is not d_preset])
|
||||
|
||||
finally:
|
||||
|
||||
try:
|
||||
locale.setlocale(locale.LC_TIME, '')
|
||||
except:
|
||||
pass
|
||||
|
||||
sbdatetime.setlocale(setlocale=setlocale)
|
||||
return strd
|
||||
|
||||
# display Datetime in SickGear Format
|
||||
@static_or_instance
|
||||
def sbfdatetime(self, dt=None, show_seconds=False, d_preset=None, t_preset=None):
|
||||
def sbfdatetime(self, dt=None, show_seconds=False, d_preset=None, t_preset=None, markup=False):
|
||||
|
||||
try:
|
||||
locale.setlocale(locale.LC_TIME, '')
|
||||
except:
|
||||
pass
|
||||
sbdatetime.setlocale()
|
||||
|
||||
strd = ''
|
||||
obj = (dt, self)[self is not None]
|
||||
try:
|
||||
if self is None:
|
||||
if dt is not None:
|
||||
if d_preset is not None:
|
||||
strd = dt.strftime(d_preset)
|
||||
else:
|
||||
strd = dt.strftime(sickbeard.DATE_PRESET)
|
||||
try:
|
||||
if sbdatetime.has_locale:
|
||||
locale.setlocale(locale.LC_TIME, 'us_US')
|
||||
except:
|
||||
sbdatetime.has_locale = False
|
||||
if t_preset is not None:
|
||||
strd += u', ' + dt.strftime(t_preset)
|
||||
elif show_seconds:
|
||||
strd += u', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS)
|
||||
else:
|
||||
strd += u', ' + dt.strftime(sickbeard.TIME_PRESET)
|
||||
else:
|
||||
if d_preset is not None:
|
||||
strd = self.strftime(d_preset)
|
||||
else:
|
||||
strd = self.strftime(sickbeard.DATE_PRESET)
|
||||
try:
|
||||
if sbdatetime.has_locale:
|
||||
locale.setlocale(locale.LC_TIME, 'us_US')
|
||||
except:
|
||||
sbdatetime.has_locale = False
|
||||
if t_preset is not None:
|
||||
strd += u', ' + self.strftime(t_preset)
|
||||
elif show_seconds:
|
||||
strd += u', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS)
|
||||
else:
|
||||
strd += u', ' + self.strftime(sickbeard.TIME_PRESET)
|
||||
finally:
|
||||
try:
|
||||
if sbdatetime.has_locale:
|
||||
locale.setlocale(locale.LC_TIME, '')
|
||||
except:
|
||||
sbdatetime.has_locale = False
|
||||
if None is not obj:
|
||||
strd = u'%s, %s' % (obj.strftime((sickbeard.DATE_PRESET, d_preset)[None is not d_preset]),
|
||||
sbdatetime.sbftime(dt, show_seconds, t_preset, False, markup))
|
||||
|
||||
finally:
|
||||
sbdatetime.setlocale(use_has_locale=sbdatetime.has_locale)
|
||||
return strd
|
||||
|
|
Loading…
Reference in a new issue