2020-07-18 21:42:43 +01:00
|
|
|
import $ from 'jQuery';
|
|
|
|
import loading from 'loading';
|
|
|
|
import datetime from 'datetime';
|
|
|
|
import dom from 'dom';
|
|
|
|
import globalize from 'globalize';
|
|
|
|
import 'emby-input';
|
|
|
|
import 'emby-button';
|
|
|
|
import 'emby-select';
|
|
|
|
|
|
|
|
/* eslint-disable indent */
|
2018-10-23 01:05:09 +03:00
|
|
|
|
|
|
|
function fillTimeOfDay(select) {
|
2020-07-18 21:51:48 +01:00
|
|
|
const options = [];
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-07-18 21:51:48 +01:00
|
|
|
for (let i = 0; i < 86400000; i += 900000) {
|
2019-11-06 13:43:39 +03:00
|
|
|
options.push({
|
|
|
|
name: ScheduledTaskPage.getDisplayTime(i * 10000),
|
|
|
|
value: i * 10000
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
select.innerHTML = options.map(function (o) {
|
|
|
|
return '<option value="' + o.value + '">' + o.name + '</option>';
|
2020-05-04 12:44:12 +02:00
|
|
|
}).join('');
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
Array.prototype.remove = function (from, to) {
|
2020-07-18 21:51:48 +01:00
|
|
|
const rest = this.slice((to || from) + 1 || this.length);
|
2019-11-06 13:43:39 +03:00
|
|
|
this.length = from < 0 ? this.length + from : from;
|
|
|
|
return this.push.apply(this, rest);
|
2018-10-23 01:05:09 +03:00
|
|
|
};
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-07-18 21:51:48 +01:00
|
|
|
const ScheduledTaskPage = {
|
2019-11-06 13:43:39 +03:00
|
|
|
refreshScheduledTask: function (view) {
|
2018-10-23 01:05:09 +03:00
|
|
|
loading.show();
|
2020-07-18 21:51:48 +01:00
|
|
|
let id = getParameterByName('id');
|
2019-11-06 13:43:39 +03:00
|
|
|
ApiClient.getScheduledTask(id).then(function (task) {
|
|
|
|
ScheduledTaskPage.loadScheduledTask(view, task);
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
loadScheduledTask: function (view, task) {
|
2020-05-04 12:44:12 +02:00
|
|
|
$('.taskName', view).html(task.Name);
|
|
|
|
$('#pTaskDescription', view).html(task.Description);
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-07-21 13:25:50 +01:00
|
|
|
import('listViewStyle').then(() => {
|
2019-11-06 13:43:39 +03:00
|
|
|
ScheduledTaskPage.loadTaskTriggers(view, task);
|
|
|
|
});
|
|
|
|
|
|
|
|
loading.hide();
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
loadTaskTriggers: function (context, task) {
|
2020-07-18 21:51:48 +01:00
|
|
|
let html = '';
|
2018-10-23 01:05:09 +03:00
|
|
|
html += '<div class="paperList">';
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-07-18 21:51:48 +01:00
|
|
|
for (let i = 0, length = task.Triggers.length; i < length; i++) {
|
|
|
|
const trigger = task.Triggers[i];
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
html += '<div class="listItem listItem-border">';
|
2020-04-26 02:37:28 +03:00
|
|
|
html += '<span class="material-icons listItemIcon schedule"></span>';
|
2019-11-06 13:43:39 +03:00
|
|
|
if (trigger.MaxRuntimeMs) {
|
|
|
|
html += '<div class="listItemBody two-line">';
|
|
|
|
} else {
|
|
|
|
html += '<div class="listItemBody">';
|
|
|
|
}
|
2020-05-04 12:44:12 +02:00
|
|
|
html += "<div class='listItemBodyText'>" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + '</div>';
|
2019-11-06 13:43:39 +03:00
|
|
|
if (trigger.MaxRuntimeMs) {
|
2018-10-23 01:05:09 +03:00
|
|
|
html += '<div class="listItemBodyText secondary">';
|
2020-07-18 21:51:48 +01:00
|
|
|
const hours = trigger.MaxRuntimeTicks / 36e9;
|
2019-11-06 13:43:39 +03:00
|
|
|
if (hours == 1) {
|
2020-05-04 12:44:12 +02:00
|
|
|
html += globalize.translate('ValueTimeLimitSingleHour');
|
2019-11-06 13:43:39 +03:00
|
|
|
} else {
|
2020-05-04 12:44:12 +02:00
|
|
|
html += globalize.translate('ValueTimeLimitMultiHour', hours);
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
2020-05-04 12:44:12 +02:00
|
|
|
html += '</div>';
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
html += '</div>';
|
|
|
|
html += '<button class="btnDeleteTrigger" data-index="' + i + '" type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonDelete') + '"><span class="material-icons delete"></span></button>';
|
|
|
|
html += '</div>';
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
html += '</div>';
|
|
|
|
context.querySelector('.taskTriggers').innerHTML = html;
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2020-04-02 21:25:43 +02:00
|
|
|
// TODO: Replace this mess with date-fns and remove datetime completely
|
2019-11-06 13:43:39 +03:00
|
|
|
getTriggerFriendlyName: function (trigger) {
|
2020-05-04 12:44:12 +02:00
|
|
|
if ('DailyTrigger' == trigger.Type) {
|
|
|
|
return globalize.translate('DailyAt', ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
if ('WeeklyTrigger' == trigger.Type) {
|
2020-04-02 21:25:43 +02:00
|
|
|
// TODO: The day of week isn't localised as well
|
2020-05-04 12:44:12 +02:00
|
|
|
return globalize.translate('WeeklyAt', trigger.DayOfWeek, ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
if ('SystemEventTrigger' == trigger.Type && 'WakeFromSleep' == trigger.SystemEvent) {
|
|
|
|
return globalize.translate('OnWakeFromSleep');
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
if (trigger.Type == 'IntervalTrigger') {
|
2020-07-18 21:51:48 +01:00
|
|
|
const hours = trigger.IntervalTicks / 36e9;
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2019-11-23 00:29:38 +09:00
|
|
|
if (hours == 0.25) {
|
2020-05-04 12:44:12 +02:00
|
|
|
return globalize.translate('EveryXMinutes', '15');
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
2019-11-23 00:29:38 +09:00
|
|
|
if (hours == 0.5) {
|
2020-05-04 12:44:12 +02:00
|
|
|
return globalize.translate('EveryXMinutes', '30');
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
2019-11-23 00:29:38 +09:00
|
|
|
if (hours == 0.75) {
|
2020-05-04 12:44:12 +02:00
|
|
|
return globalize.translate('EveryXMinutes', '45');
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
if (hours == 1) {
|
2020-05-04 12:44:12 +02:00
|
|
|
return globalize.translate('EveryHour');
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
return globalize.translate('EveryXHours', hours);
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
if (trigger.Type == 'StartupTrigger') {
|
|
|
|
return globalize.translate('OnApplicationStartup');
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
return trigger.Type;
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
getDisplayTime: function (ticks) {
|
2020-07-18 21:51:48 +01:00
|
|
|
const ms = ticks / 1e4;
|
|
|
|
const now = new Date();
|
2019-11-06 13:43:39 +03:00
|
|
|
now.setHours(0, 0, 0, 0);
|
|
|
|
now.setTime(now.getTime() + ms);
|
|
|
|
return datetime.getDisplayTime(now);
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
showAddTriggerPopup: function (view) {
|
2020-05-04 12:44:12 +02:00
|
|
|
$('#selectTriggerType', view).val('DailyTrigger');
|
|
|
|
view.querySelector('#selectTriggerType').dispatchEvent(new CustomEvent('change', {}));
|
|
|
|
$('#popupAddTrigger', view).removeClass('hide');
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
confirmDeleteTrigger: function (view, index) {
|
2020-07-21 13:25:50 +01:00
|
|
|
import('confirm').then(({default: confirm}) => {
|
2020-06-18 22:41:43 +03:00
|
|
|
confirm.default(globalize.translate('MessageDeleteTaskTrigger'), globalize.translate('HeaderDeleteTaskTrigger')).then(function () {
|
2019-11-06 13:43:39 +03:00
|
|
|
ScheduledTaskPage.deleteTrigger(view, index);
|
|
|
|
});
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
deleteTrigger: function (view, index) {
|
2018-10-23 01:05:09 +03:00
|
|
|
loading.show();
|
2020-07-18 21:51:48 +01:00
|
|
|
let id = getParameterByName('id');
|
2019-11-06 13:43:39 +03:00
|
|
|
ApiClient.getScheduledTask(id).then(function (task) {
|
|
|
|
task.Triggers.remove(index);
|
|
|
|
ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
|
|
|
|
ScheduledTaskPage.refreshScheduledTask(view);
|
|
|
|
});
|
|
|
|
});
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
refreshTriggerFields: function (page, triggerType) {
|
2020-05-04 12:44:12 +02:00
|
|
|
if (triggerType == 'DailyTrigger') {
|
|
|
|
$('#fldTimeOfDay', page).show();
|
|
|
|
$('#fldDayOfWeek', page).hide();
|
|
|
|
$('#fldSelectSystemEvent', page).hide();
|
|
|
|
$('#fldSelectInterval', page).hide();
|
|
|
|
$('#selectTimeOfDay', page).attr('required', 'required');
|
|
|
|
} else if (triggerType == 'WeeklyTrigger') {
|
|
|
|
$('#fldTimeOfDay', page).show();
|
|
|
|
$('#fldDayOfWeek', page).show();
|
|
|
|
$('#fldSelectSystemEvent', page).hide();
|
|
|
|
$('#fldSelectInterval', page).hide();
|
|
|
|
$('#selectTimeOfDay', page).attr('required', 'required');
|
|
|
|
} else if (triggerType == 'SystemEventTrigger') {
|
|
|
|
$('#fldTimeOfDay', page).hide();
|
|
|
|
$('#fldDayOfWeek', page).hide();
|
|
|
|
$('#fldSelectSystemEvent', page).show();
|
|
|
|
$('#fldSelectInterval', page).hide();
|
|
|
|
$('#selectTimeOfDay', page).removeAttr('required');
|
|
|
|
} else if (triggerType == 'IntervalTrigger') {
|
|
|
|
$('#fldTimeOfDay', page).hide();
|
|
|
|
$('#fldDayOfWeek', page).hide();
|
|
|
|
$('#fldSelectSystemEvent', page).hide();
|
|
|
|
$('#fldSelectInterval', page).show();
|
|
|
|
$('#selectTimeOfDay', page).removeAttr('required');
|
|
|
|
} else if (triggerType == 'StartupTrigger') {
|
|
|
|
$('#fldTimeOfDay', page).hide();
|
|
|
|
$('#fldDayOfWeek', page).hide();
|
|
|
|
$('#fldSelectSystemEvent', page).hide();
|
|
|
|
$('#fldSelectInterval', page).hide();
|
|
|
|
$('#selectTimeOfDay', page).removeAttr('required');
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
2018-10-23 01:05:09 +03:00
|
|
|
},
|
2019-11-06 13:43:39 +03:00
|
|
|
getTriggerToAdd: function (page) {
|
2020-07-18 21:51:48 +01:00
|
|
|
const trigger = {
|
2020-05-04 12:44:12 +02:00
|
|
|
Type: $('#selectTriggerType', page).val()
|
2018-10-23 01:05:09 +03:00
|
|
|
};
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
if (trigger.Type == 'DailyTrigger') {
|
|
|
|
trigger.TimeOfDayTicks = $('#selectTimeOfDay', page).val();
|
|
|
|
} else if (trigger.Type == 'WeeklyTrigger') {
|
|
|
|
trigger.DayOfWeek = $('#selectDayOfWeek', page).val();
|
|
|
|
trigger.TimeOfDayTicks = $('#selectTimeOfDay', page).val();
|
|
|
|
} else if (trigger.Type == 'SystemEventTrigger') {
|
|
|
|
trigger.SystemEvent = $('#selectSystemEvent', page).val();
|
|
|
|
} else if (trigger.Type == 'IntervalTrigger') {
|
|
|
|
trigger.IntervalTicks = $('#selectInterval', page).val();
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
|
2020-07-18 21:51:48 +01:00
|
|
|
let timeLimit = $('#txtTimeLimit', page).val() || '0';
|
2019-11-06 13:43:39 +03:00
|
|
|
timeLimit = parseFloat(timeLimit) * 3600000;
|
|
|
|
|
|
|
|
trigger.MaxRuntimeMs = timeLimit || null;
|
|
|
|
|
|
|
|
return trigger;
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
|
|
|
};
|
2020-07-18 21:42:43 +01:00
|
|
|
export default function (view, params) {
|
2018-10-23 01:05:09 +03:00
|
|
|
function onSubmit(e) {
|
|
|
|
loading.show();
|
2020-07-18 21:51:48 +01:00
|
|
|
let id = getParameterByName('id');
|
2019-11-06 13:43:39 +03:00
|
|
|
ApiClient.getScheduledTask(id).then(function (task) {
|
|
|
|
task.Triggers.push(ScheduledTaskPage.getTriggerToAdd(view));
|
|
|
|
ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
|
2020-05-04 12:44:12 +02:00
|
|
|
$('#popupAddTrigger').addClass('hide');
|
2019-11-06 13:43:39 +03:00
|
|
|
ScheduledTaskPage.refreshScheduledTask(view);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
e.preventDefault();
|
2018-10-23 01:05:09 +03:00
|
|
|
}
|
2019-11-06 13:43:39 +03:00
|
|
|
|
2020-05-04 12:44:12 +02:00
|
|
|
view.querySelector('.addTriggerForm').addEventListener('submit', onSubmit);
|
|
|
|
fillTimeOfDay(view.querySelector('#selectTimeOfDay'));
|
|
|
|
$(view.querySelector('#popupAddTrigger').parentNode).trigger('create');
|
|
|
|
view.querySelector('.selectTriggerType').addEventListener('change', function () {
|
2019-11-06 13:43:39 +03:00
|
|
|
ScheduledTaskPage.refreshTriggerFields(view, this.value);
|
|
|
|
});
|
2020-05-04 12:44:12 +02:00
|
|
|
view.querySelector('.btnAddTrigger').addEventListener('click', function () {
|
2019-11-06 13:43:39 +03:00
|
|
|
ScheduledTaskPage.showAddTriggerPopup(view);
|
|
|
|
});
|
2020-05-04 12:44:12 +02:00
|
|
|
view.addEventListener('click', function (e) {
|
2020-07-18 21:51:48 +01:00
|
|
|
const btnDeleteTrigger = dom.parentWithClass(e.target, 'btnDeleteTrigger');
|
2019-11-06 13:43:39 +03:00
|
|
|
|
|
|
|
if (btnDeleteTrigger) {
|
2020-05-04 12:44:12 +02:00
|
|
|
ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute('data-index')));
|
2019-11-06 13:43:39 +03:00
|
|
|
}
|
|
|
|
});
|
2020-05-04 12:44:12 +02:00
|
|
|
view.addEventListener('viewshow', function () {
|
2019-11-06 13:43:39 +03:00
|
|
|
ScheduledTaskPage.refreshScheduledTask(view);
|
|
|
|
});
|
2020-07-18 21:42:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* eslint-enable indent */
|