define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events) { 'use strict'; loading = loading.default || loading; function loadData(parent, program, apiClient) { if (program.IsSeries) { parent.querySelector('.recordSeriesContainer').classList.remove('hide'); } else { parent.querySelector('.recordSeriesContainer').classList.add('hide'); } if (program.SeriesTimerId) { parent.querySelector('.btnManageSeriesRecording').classList.remove('hide'); parent.querySelector('.seriesRecordingButton .recordingIcon').classList.add('recordingIcon-active'); parent.querySelector('.seriesRecordingButton .buttonText').innerHTML = globalize.translate('CancelSeries'); } else { parent.querySelector('.btnManageSeriesRecording').classList.add('hide'); parent.querySelector('.seriesRecordingButton .recordingIcon').classList.remove('recordingIcon-active'); parent.querySelector('.seriesRecordingButton .buttonText').innerHTML = globalize.translate('RecordSeries'); } if (program.TimerId && program.Status !== 'Cancelled') { parent.querySelector('.btnManageRecording').classList.remove('hide'); parent.querySelector('.singleRecordingButton .recordingIcon').classList.add('recordingIcon-active'); if (program.Status === 'InProgress') { parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('StopRecording'); } else { parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('DoNotRecord'); } } else { parent.querySelector('.btnManageRecording').classList.add('hide'); parent.querySelector('.singleRecordingButton .recordingIcon').classList.remove('recordingIcon-active'); parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('Record'); } } function fetchData(instance) { var options = instance.options; var apiClient = connectionManager.getApiClient(options.serverId); options.parent.querySelector('.recordingFields').classList.remove('hide'); return apiClient.getLiveTvProgram(options.programId, apiClient.getCurrentUserId()).then(function (program) { instance.TimerId = program.TimerId; instance.Status = program.Status; instance.SeriesTimerId = program.SeriesTimerId; loadData(options.parent, program, apiClient); }); } function onTimerChangedExternally(e, apiClient, data) { var options = this.options; var refresh = false; if (data.Id) { if (this.TimerId === data.Id) { refresh = true; } } if (data.ProgramId && options) { if (options.programId === data.ProgramId) { refresh = true; } } if (refresh) { this.refresh(); } } function onSeriesTimerChangedExternally(e, apiClient, data) { var options = this.options; var refresh = false; if (data.Id) { if (this.SeriesTimerId === data.Id) { refresh = true; } } if (data.ProgramId && options) { if (options.programId === data.ProgramId) { refresh = true; } } if (refresh) { this.refresh(); } } function RecordingEditor(options) { this.options = options; this.embed(); var timerChangedHandler = onTimerChangedExternally.bind(this); this.timerChangedHandler = timerChangedHandler; events.on(serverNotifications, 'TimerCreated', timerChangedHandler); events.on(serverNotifications, 'TimerCancelled', timerChangedHandler); var seriesTimerChangedHandler = onSeriesTimerChangedExternally.bind(this); this.seriesTimerChangedHandler = seriesTimerChangedHandler; events.on(serverNotifications, 'SeriesTimerCreated', seriesTimerChangedHandler); events.on(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); } function onManageRecordingClick(e) { var options = this.options; if (!this.TimerId || this.Status === 'Cancelled') { return; } var self = this; require(['recordingEditor'], function (recordingEditor) { recordingEditor.show(self.TimerId, options.serverId, { enableCancel: false }).then(function () { self.changed = true; }); }); } function onManageSeriesRecordingClick(e) { var options = this.options; if (!this.SeriesTimerId) { return; } var self = this; require(['seriesRecordingEditor'], function (seriesRecordingEditor) { seriesRecordingEditor.show(self.SeriesTimerId, options.serverId, { enableCancel: false }).then(function () { self.changed = true; }); }); } function onRecordChange(e) { this.changed = true; var self = this; var options = this.options; var apiClient = connectionManager.getApiClient(options.serverId); var button = dom.parentWithTag(e.target, 'BUTTON'); var isChecked = !button.querySelector('.material-icons').classList.contains('recordingIcon-active'); var hasEnabledTimer = this.TimerId && this.Status !== 'Cancelled'; if (isChecked) { if (!hasEnabledTimer) { loading.show(); recordingHelper.createRecording(apiClient, options.programId, false).then(function () { events.trigger(self, 'recordingchanged'); fetchData(self); loading.hide(); }); } } else { if (hasEnabledTimer) { loading.show(); recordingHelper.cancelTimer(apiClient, this.TimerId, true).then(function () { events.trigger(self, 'recordingchanged'); fetchData(self); loading.hide(); }); } } } function sendToast(msg) { require(['toast'], function (toast) { toast(msg); }); } function onRecordSeriesChange(e) { this.changed = true; var self = this; var options = this.options; var apiClient = connectionManager.getApiClient(options.serverId); var button = dom.parentWithTag(e.target, 'BUTTON'); var isChecked = !button.querySelector('.material-icons').classList.contains('recordingIcon-active'); if (isChecked) { options.parent.querySelector('.recordSeriesContainer').classList.remove('hide'); if (!this.SeriesTimerId) { var promise = this.TimerId ? recordingHelper.changeRecordingToSeries(apiClient, this.TimerId, options.programId) : recordingHelper.createRecording(apiClient, options.programId, true); promise.then(function () { fetchData(self); }); } } else { if (this.SeriesTimerId) { apiClient.cancelLiveTvSeriesTimer(this.SeriesTimerId).then(function () { sendToast(globalize.translate('RecordingCancelled')); fetchData(self); }); } } } RecordingEditor.prototype.embed = function () { var self = this; return new Promise(function (resolve, reject) { require(['text!./recordingfields.template.html'], function (template) { var options = self.options; var context = options.parent; context.innerHTML = globalize.translateHtml(template, 'core'); context.querySelector('.singleRecordingButton').addEventListener('click', onRecordChange.bind(self)); context.querySelector('.seriesRecordingButton').addEventListener('click', onRecordSeriesChange.bind(self)); context.querySelector('.btnManageRecording').addEventListener('click', onManageRecordingClick.bind(self)); context.querySelector('.btnManageSeriesRecording').addEventListener('click', onManageSeriesRecordingClick.bind(self)); fetchData(self).then(resolve); }); }); }; RecordingEditor.prototype.hasChanged = function () { return this.changed; }; RecordingEditor.prototype.refresh = function () { fetchData(this); }; RecordingEditor.prototype.destroy = function () { var timerChangedHandler = this.timerChangedHandler; this.timerChangedHandler = null; events.off(serverNotifications, 'TimerCreated', timerChangedHandler); events.off(serverNotifications, 'TimerCancelled', timerChangedHandler); var seriesTimerChangedHandler = this.seriesTimerChangedHandler; this.seriesTimerChangedHandler = null; events.off(serverNotifications, 'SeriesTimerCreated', seriesTimerChangedHandler); events.off(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); }; return RecordingEditor; });