1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge pull request #1750 from Camc314/migrate-to-ES6-60

Migration of recordingbutton and recordingcreator to ES6 modules
This commit is contained in:
Bond-009 2020-08-09 14:05:14 +02:00 committed by GitHub
commit 2e08dd7d0f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 242 additions and 223 deletions

View file

@ -157,6 +157,8 @@
"src/components/playlisteditor/playlisteditor.js", "src/components/playlisteditor/playlisteditor.js",
"src/components/playmenu.js", "src/components/playmenu.js",
"src/components/prompt/prompt.js", "src/components/prompt/prompt.js",
"src/components/recordingcreator/recordingbutton.js",
"src/components/recordingcreator/recordingcreator.js",
"src/components/recordingcreator/seriesrecordingeditor.js", "src/components/recordingcreator/seriesrecordingeditor.js",
"src/components/recordingcreator/recordinghelper.js", "src/components/recordingcreator/recordinghelper.js",
"src/components/refreshdialog/refreshdialog.js", "src/components/refreshdialog/refreshdialog.js",

View file

@ -1,37 +1,40 @@
define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields'], function (globalize, connectionManager, require, loading, appHost, dom, recordingHelper, events) { import connectionManager from 'connectionManager';
'use strict'; import dom from 'dom';
import recordingHelper from 'recordingHelper';
import 'paper-icon-button-light';
import 'emby-button';
import 'css!./recordingfields';
recordingHelper = recordingHelper.default || recordingHelper; function onRecordingButtonClick(e) {
const item = this.item;
function onRecordingButtonClick(e) { if (item) {
var item = this.item; const serverId = item.ServerId;
const programId = item.Id;
const timerId = item.TimerId;
const timerStatus = item.Status;
const seriesTimerId = item.SeriesTimerId;
if (item) { const instance = this;
var serverId = item.ServerId;
var programId = item.Id;
var timerId = item.TimerId;
var timerStatus = item.Status;
var seriesTimerId = item.SeriesTimerId;
var instance = this; recordingHelper.toggleRecording(serverId, programId, timerId, timerStatus, seriesTimerId).then(function () {
instance.refresh(serverId, programId);
recordingHelper.toggleRecording(serverId, programId, timerId, timerStatus, seriesTimerId).then(function () { });
instance.refresh(serverId, programId);
});
}
} }
}
function setButtonIcon(button, icon) { function setButtonIcon(button, icon) {
var inner = button.querySelector('.material-icons'); const inner = button.querySelector('.material-icons');
inner.classList.remove('fiber_smart_record'); inner.classList.remove('fiber_smart_record');
inner.classList.remove('fiber_manual_record'); inner.classList.remove('fiber_manual_record');
inner.classList.add(icon); inner.classList.add(icon);
} }
function RecordingButton(options) { class RecordingButton {
constructor(options) {
this.options = options; this.options = options;
var button = options.button; const button = options.button;
setButtonIcon(button, 'fiber_manual_record'); setButtonIcon(button, 'fiber_manual_record');
@ -41,7 +44,7 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
this.refresh(options.itemId, options.serverId); this.refresh(options.itemId, options.serverId);
} }
var clickFn = onRecordingButtonClick.bind(this); const clickFn = onRecordingButtonClick.bind(this);
this.clickFn = clickFn; this.clickFn = clickFn;
dom.addEventListener(button, 'click', clickFn, { dom.addEventListener(button, 'click', clickFn, {
@ -49,39 +52,17 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
}); });
} }
function getIndicatorIcon(item) { refresh(serverId, itemId) {
var status; const apiClient = connectionManager.getApiClient(serverId);
const self = this;
if (item.Type === 'SeriesTimer') {
return 'fiber_smart_record';
} else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled';
} else if (item.Type === 'Timer') {
status = item.Status;
} else {
return 'fiber_manual_record';
}
if (item.SeriesTimerId) {
if (status !== 'Cancelled') {
return 'fiber_smart_record';
}
}
return 'fiber_manual_record';
}
RecordingButton.prototype.refresh = function (serverId, itemId) {
var apiClient = connectionManager.getApiClient(serverId);
var self = this;
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) { apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) {
self.refreshItem(item); self.refreshItem(item);
}); });
}; }
RecordingButton.prototype.refreshItem = function (item) { refreshItem(item) {
var options = this.options; const options = this.options;
var button = options.button; const button = options.button;
this.item = item; this.item = item;
setButtonIcon(button, getIndicatorIcon(item)); setButtonIcon(button, getIndicatorIcon(item));
@ -90,15 +71,15 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
} else { } else {
button.classList.remove('recordingIcon-active'); button.classList.remove('recordingIcon-active');
} }
}; }
RecordingButton.prototype.destroy = function () { destroy() {
var options = this.options; const options = this.options;
if (options) { if (options) {
var button = options.button; const button = options.button;
var clickFn = this.clickFn; const clickFn = this.clickFn;
if (clickFn) { if (clickFn) {
dom.removeEventListener(button, 'click', clickFn, { dom.removeEventListener(button, 'click', clickFn, {
@ -109,7 +90,29 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
this.options = null; this.options = null;
this.item = null; this.item = null;
}; }
}
return RecordingButton; function getIndicatorIcon(item) {
}); let status;
if (item.Type === 'SeriesTimer') {
return 'fiber_smart_record';
} else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled';
} else if (item.Type === 'Timer') {
status = item.Status;
} else {
return 'fiber_manual_record';
}
if (item.SeriesTimerId) {
if (status !== 'Cancelled') {
return 'fiber_smart_record';
}
}
return 'fiber_manual_record';
}
export default RecordingButton;

View file

@ -1,190 +1,204 @@
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'datetime', 'imageLoader', 'recordingFields', 'events', 'emby-checkbox', 'emby-button', 'emby-collapse', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper, datetime, imageLoader, recordingFields, events) { import dialogHelper from 'dialogHelper';
'use strict'; import globalize from 'globalize';
import layoutManager from 'layoutManager';
import mediaInfo from 'mediaInfo';
import connectionManager from 'connectionManager';
import require from 'require';
import loading from 'loading';
import scrollHelper from 'scrollHelper';
import datetime from 'datetime';
import imageLoader from 'imageLoader';
import recordingFields from 'recordingFields';
import events from 'events';
import 'emby-checkbox';
import 'emby-button';
import 'emby-collapse';
import 'emby-input';
import 'paper-icon-button-light';
import 'css!./../formdialog';
import 'css!./recordingcreator';
import 'material-icons';
layoutManager = layoutManager.default || layoutManager; let currentDialog;
scrollHelper = scrollHelper.default || scrollHelper; let closeAction;
let currentRecordingFields;
var currentDialog; function closeDialog() {
var closeAction; dialogHelper.close(currentDialog);
var currentRecordingFields; }
function closeDialog() { function init(context) {
dialogHelper.close(currentDialog); context.querySelector('.btnPlay').addEventListener('click', function () {
closeAction = 'play';
closeDialog();
});
context.querySelector('.btnCancel').addEventListener('click', function () {
closeAction = null;
closeDialog();
});
}
function getImageUrl(item, apiClient, imageHeight) {
const imageTags = item.ImageTags || {};
if (item.PrimaryImageTag) {
imageTags.Primary = item.PrimaryImageTag;
} }
function init(context) { if (imageTags.Primary) {
context.querySelector('.btnPlay').addEventListener('click', function () { return apiClient.getScaledImageUrl(item.Id, {
closeAction = 'play'; type: 'Primary',
closeDialog(); maxHeight: imageHeight,
tag: item.ImageTags.Primary
}); });
} else if (imageTags.Thumb) {
context.querySelector('.btnCancel').addEventListener('click', function () { return apiClient.getScaledImageUrl(item.Id, {
closeAction = null; type: 'Thumb',
closeDialog(); maxHeight: imageHeight,
tag: item.ImageTags.Thumb
}); });
} }
function getImageUrl(item, apiClient, imageHeight) { return null;
var imageTags = item.ImageTags || {}; }
if (item.PrimaryImageTag) { function renderRecording(context, defaultTimer, program, apiClient, refreshRecordingStateOnly) {
imageTags.Primary = item.PrimaryImageTag; if (!refreshRecordingStateOnly) {
const imgUrl = getImageUrl(program, apiClient, 200);
const imageContainer = context.querySelector('.recordingDialog-imageContainer');
if (imgUrl) {
imageContainer.innerHTML = '<img src="' + require.toUrl('.').split('?')[0] + '/empty.png" data-src="' + imgUrl + '" class="recordingDialog-img lazy" />';
imageContainer.classList.remove('hide');
imageLoader.lazyChildren(imageContainer);
} else {
imageContainer.innerHTML = '';
imageContainer.classList.add('hide');
} }
if (imageTags.Primary) { context.querySelector('.recordingDialog-itemName').innerHTML = program.Name;
return apiClient.getScaledImageUrl(item.Id, { context.querySelector('.formDialogHeaderTitle').innerHTML = program.Name;
type: 'Primary', context.querySelector('.itemGenres').innerHTML = (program.Genres || []).join(' / ');
maxHeight: imageHeight, context.querySelector('.itemOverview').innerHTML = program.Overview || '';
tag: item.ImageTags.Primary
}); const formDialogFooter = context.querySelector('.formDialogFooter');
} else if (imageTags.Thumb) { const now = new Date();
return apiClient.getScaledImageUrl(item.Id, { if (now >= datetime.parseISO8601Date(program.StartDate, true) && now < datetime.parseISO8601Date(program.EndDate, true)) {
type: 'Thumb', formDialogFooter.classList.remove('hide');
maxHeight: imageHeight, } else {
tag: item.ImageTags.Thumb formDialogFooter.classList.add('hide');
});
} }
return null; context.querySelector('.itemMiscInfoPrimary').innerHTML = mediaInfo.getPrimaryMediaInfoHtml(program);
} }
function renderRecording(context, defaultTimer, program, apiClient, refreshRecordingStateOnly) { context.querySelector('.itemMiscInfoSecondary').innerHTML = mediaInfo.getSecondaryMediaInfoHtml(program, {
if (!refreshRecordingStateOnly) { });
var imgUrl = getImageUrl(program, apiClient, 200);
var imageContainer = context.querySelector('.recordingDialog-imageContainer');
if (imgUrl) { loading.hide();
imageContainer.innerHTML = '<img src="' + require.toUrl('.').split('?')[0] + '/empty.png" data-src="' + imgUrl + '" class="recordingDialog-img lazy" />'; }
imageContainer.classList.remove('hide');
imageLoader.lazyChildren(imageContainer); function reload(context, programId, serverId, refreshRecordingStateOnly) {
} else { loading.show();
imageContainer.innerHTML = '';
imageContainer.classList.add('hide');
}
context.querySelector('.recordingDialog-itemName').innerHTML = program.Name; const apiClient = connectionManager.getApiClient(serverId);
context.querySelector('.formDialogHeaderTitle').innerHTML = program.Name;
context.querySelector('.itemGenres').innerHTML = (program.Genres || []).join(' / ');
context.querySelector('.itemOverview').innerHTML = program.Overview || '';
var formDialogFooter = context.querySelector('.formDialogFooter'); const promise1 = apiClient.getNewLiveTvTimerDefaults({ programId: programId });
var now = new Date(); const promise2 = apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId());
if (now >= datetime.parseISO8601Date(program.StartDate, true) && now < datetime.parseISO8601Date(program.EndDate, true)) {
formDialogFooter.classList.remove('hide');
} else {
formDialogFooter.classList.add('hide');
}
context.querySelector('.itemMiscInfoPrimary').innerHTML = mediaInfo.getPrimaryMediaInfoHtml(program); Promise.all([promise1, promise2]).then(function (responses) {
} const defaults = responses[0];
const program = responses[1];
context.querySelector('.itemMiscInfoSecondary').innerHTML = mediaInfo.getSecondaryMediaInfoHtml(program, { renderRecording(context, defaults, program, apiClient, refreshRecordingStateOnly);
}); });
}
loading.hide(); function executeCloseAction(action, programId, serverId) {
} if (action === 'play') {
import('playbackManager').then(({default: playbackManager}) => {
const apiClient = connectionManager.getApiClient(serverId);
function reload(context, programId, serverId, refreshRecordingStateOnly) { apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) {
loading.show(); playbackManager.play({
ids: [item.ChannelId],
var apiClient = connectionManager.getApiClient(serverId);
var promise1 = apiClient.getNewLiveTvTimerDefaults({ programId: programId });
var promise2 = apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId());
Promise.all([promise1, promise2]).then(function (responses) {
var defaults = responses[0];
var program = responses[1];
renderRecording(context, defaults, program, apiClient, refreshRecordingStateOnly);
});
}
function executeCloseAction(action, programId, serverId) {
if (action === 'play') {
require(['playbackManager'], function (playbackManager) {
var apiClient = connectionManager.getApiClient(serverId);
apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) {
playbackManager.default.play({
ids: [item.ChannelId],
serverId: serverId
});
});
});
return;
}
}
function showEditor(itemId, serverId) {
return new Promise(function (resolve, reject) {
closeAction = null;
loading.show();
require(['text!./recordingcreator.template.html'], function (template) {
var dialogOptions = {
removeOnClose: true,
scrollY: false
};
if (layoutManager.tv) {
dialogOptions.size = 'fullscreen';
} else {
dialogOptions.size = 'small';
}
var dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add('formDialog');
dlg.classList.add('recordingDialog');
var html = '';
html += globalize.translateHtml(template, 'core');
dlg.innerHTML = html;
currentDialog = dlg;
function onRecordingChanged() {
reload(dlg, itemId, serverId, true);
}
dlg.addEventListener('close', function () {
events.off(currentRecordingFields, 'recordingchanged', onRecordingChanged);
executeCloseAction(closeAction, itemId, serverId);
if (currentRecordingFields && currentRecordingFields.hasChanged()) {
resolve();
} else {
reject();
}
});
if (layoutManager.tv) {
scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false);
}
init(dlg);
reload(dlg, itemId, serverId);
currentRecordingFields = new recordingFields({
parent: dlg.querySelector('.recordingFields'),
programId: itemId,
serverId: serverId serverId: serverId
}); });
events.on(currentRecordingFields, 'recordingchanged', onRecordingChanged);
dialogHelper.open(dlg);
}); });
}); });
return;
} }
}
return { function showEditor(itemId, serverId) {
show: showEditor return new Promise(function (resolve, reject) {
}; closeAction = null;
});
loading.show();
import('text!./recordingcreator.template.html').then(({default: template}) => {
const dialogOptions = {
removeOnClose: true,
scrollY: false
};
if (layoutManager.tv) {
dialogOptions.size = 'fullscreen';
} else {
dialogOptions.size = 'small';
}
const dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add('formDialog');
dlg.classList.add('recordingDialog');
let html = '';
html += globalize.translateHtml(template, 'core');
dlg.innerHTML = html;
currentDialog = dlg;
function onRecordingChanged() {
reload(dlg, itemId, serverId, true);
}
dlg.addEventListener('close', function () {
events.off(currentRecordingFields, 'recordingchanged', onRecordingChanged);
executeCloseAction(closeAction, itemId, serverId);
if (currentRecordingFields && currentRecordingFields.hasChanged()) {
resolve();
} else {
reject();
}
});
if (layoutManager.tv) {
scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false);
}
init(dlg);
reload(dlg, itemId, serverId);
currentRecordingFields = new recordingFields({
parent: dlg.querySelector('.recordingFields'),
programId: itemId,
serverId: serverId
});
events.on(currentRecordingFields, 'recordingchanged', onRecordingChanged);
dialogHelper.open(dlg);
});
});
}
export default {
show: showEditor
};