";
- html += '
';
- html += '
';
- html += '
';
- return html;
- }
-
- function renderPlugins(page, plugins) {
- ApiClient.getJSON(ApiClient.getUrl('web/configurationpages') + '?pageType=PluginConfiguration').then(function (configPages) {
- populateList(page, plugins, configPages);
- });
- }
-
- function populateList(page, plugins, pluginConfigurationPages) {
- plugins = plugins.sort(function (plugin1, plugin2) {
- if (plugin1.Name > plugin2.Name) {
- return 1;
- }
-
- return -1;
- });
-
- var html = plugins.map(function (p) {
- return getPluginCardHtml(p, pluginConfigurationPages);
- }).join('');
-
- var installedPluginsElement = page.querySelector('.installedPlugins');
- installedPluginsElement.removeEventListener('click', onInstalledPluginsClick);
- installedPluginsElement.addEventListener('click', onInstalledPluginsClick);
-
- if (plugins.length) {
- installedPluginsElement.classList.add('itemsContainer');
- installedPluginsElement.classList.add('vertical-wrap');
- } else {
- html += '
';
- }
-
- installedPluginsElement.innerHTML = html;
- loading.hide();
- }
-
- function showPluginMenu(page, elem) {
- var card = dom.parentWithClass(elem, 'card');
- var id = card.getAttribute('data-id');
- var name = card.getAttribute('data-name');
- var removable = card.getAttribute('data-removable');
- var configHref = card.querySelector('.cardContent').getAttribute('href');
- var menuItems = [];
-
- if (configHref) {
- menuItems.push({
- name: globalize.translate('ButtonSettings'),
- id: 'open',
- icon: 'mode_edit'
- });
- }
-
- if (removable === 'true') {
- menuItems.push({
- name: globalize.translate('ButtonUninstall'),
- id: 'delete',
- icon: 'delete'
- });
- }
-
- require(['actionsheet'], function (actionsheet) {
- actionsheet.show({
- items: menuItems,
- positionTo: elem,
- callback: function (resultId) {
- switch (resultId) {
- case 'open':
- Dashboard.navigate(configHref);
- break;
- case 'delete':
- deletePlugin(page, id, name);
- break;
- }
- }
- });
- });
- }
-
- function reloadList(page) {
- loading.show();
- ApiClient.getInstalledPlugins().then(function (plugins) {
- renderPlugins(page, plugins);
- });
- }
-
- function getTabs() {
- return [{
- href: 'installedplugins.html',
- name: globalize.translate('TabMyPlugins')
- }, {
- href: 'availableplugins.html',
- name: globalize.translate('TabCatalog')
- }, {
- href: 'repositories.html',
- name: globalize.translate('TabRepositories')
- }];
- }
-
- function onInstalledPluginsClick(e) {
- if (dom.parentWithClass(e.target, 'noConfigPluginCard')) {
- showNoConfigurationMessage();
- } else if (dom.parentWithClass(e.target, 'connectModePluginCard')) {
- showConnectMessage();
- } else {
- var btnCardMenu = dom.parentWithClass(e.target, 'btnCardMenu');
- if (btnCardMenu) {
- showPluginMenu(dom.parentWithClass(btnCardMenu, 'page'), btnCardMenu);
- }
- }
- }
-
- pageIdOn('pageshow', 'pluginsPage', function () {
- libraryMenu.setTabs('plugins', 0, getTabs);
- reloadList(this);
+ return -1;
});
- window.PluginsPage = {
- renderPlugins: renderPlugins
- };
+ let html = plugins.map(function (p) {
+ return getPluginCardHtml(p, pluginConfigurationPages);
+ }).join('');
+
+ const installedPluginsElement = page.querySelector('.installedPlugins');
+ installedPluginsElement.removeEventListener('click', onInstalledPluginsClick);
+ installedPluginsElement.addEventListener('click', onInstalledPluginsClick);
+
+ if (plugins.length) {
+ installedPluginsElement.classList.add('itemsContainer');
+ installedPluginsElement.classList.add('vertical-wrap');
+ } else {
+ html += '
';
+ }
+
+ installedPluginsElement.innerHTML = html;
+ loading.hide();
+}
+
+function showPluginMenu(page, elem) {
+ const card = dom.parentWithClass(elem, 'card');
+ const id = card.getAttribute('data-id');
+ const name = card.getAttribute('data-name');
+ const removable = card.getAttribute('data-removable');
+ const configHref = card.querySelector('.cardContent').getAttribute('href');
+ const menuItems = [];
+
+ if (configHref) {
+ menuItems.push({
+ name: globalize.translate('ButtonSettings'),
+ id: 'open',
+ icon: 'mode_edit'
+ });
+ }
+
+ if (removable === 'true') {
+ menuItems.push({
+ name: globalize.translate('ButtonUninstall'),
+ id: 'delete',
+ icon: 'delete'
+ });
+ }
+
+ import('actionsheet').then(({default: actionsheet}) => {
+ actionsheet.show({
+ items: menuItems,
+ positionTo: elem,
+ callback: function (resultId) {
+ switch (resultId) {
+ case 'open':
+ Dashboard.navigate(configHref);
+ break;
+ case 'delete':
+ deletePlugin(page, id, name);
+ break;
+ }
+ }
+ });
+ });
+}
+
+function reloadList(page) {
+ loading.show();
+ ApiClient.getInstalledPlugins().then(function (plugins) {
+ renderPlugins(page, plugins);
+ });
+}
+
+function getTabs() {
+ return [{
+ href: 'installedplugins.html',
+ name: globalize.translate('TabMyPlugins')
+ }, {
+ href: 'availableplugins.html',
+ name: globalize.translate('TabCatalog')
+ }, {
+ href: 'repositories.html',
+ name: globalize.translate('TabRepositories')
+ }];
+}
+
+function onInstalledPluginsClick(e) {
+ if (dom.parentWithClass(e.target, 'noConfigPluginCard')) {
+ showNoConfigurationMessage();
+ } else if (dom.parentWithClass(e.target, 'connectModePluginCard')) {
+ showConnectMessage();
+ } else {
+ const btnCardMenu = dom.parentWithClass(e.target, 'btnCardMenu');
+ if (btnCardMenu) {
+ showPluginMenu(dom.parentWithClass(btnCardMenu, 'page'), btnCardMenu);
+ }
+ }
+}
+
+pageIdOn('pageshow', 'pluginsPage', function () {
+ libraryMenu.setTabs('plugins', 0, getTabs);
+ reloadList(this);
});
+
+window.PluginsPage = {
+ renderPlugins: renderPlugins
+};
diff --git a/src/scheduledtask.html b/src/controllers/dashboard/scheduledtasks/scheduledtask.html
similarity index 100%
rename from src/scheduledtask.html
rename to src/controllers/dashboard/scheduledtasks/scheduledtask.html
diff --git a/src/scheduledtasks.html b/src/controllers/dashboard/scheduledtasks/scheduledtasks.html
similarity index 100%
rename from src/scheduledtasks.html
rename to src/controllers/dashboard/scheduledtasks/scheduledtasks.html
diff --git a/src/serveractivity.html b/src/controllers/dashboard/serveractivity.html
similarity index 100%
rename from src/serveractivity.html
rename to src/controllers/dashboard/serveractivity.html
diff --git a/src/streamingsettings.html b/src/controllers/dashboard/streaming.html
similarity index 100%
rename from src/streamingsettings.html
rename to src/controllers/dashboard/streaming.html
diff --git a/src/useredit.html b/src/controllers/dashboard/users/useredit.html
similarity index 100%
rename from src/useredit.html
rename to src/controllers/dashboard/users/useredit.html
diff --git a/src/userlibraryaccess.html b/src/controllers/dashboard/users/userlibraryaccess.html
similarity index 100%
rename from src/userlibraryaccess.html
rename to src/controllers/dashboard/users/userlibraryaccess.html
diff --git a/src/usernew.html b/src/controllers/dashboard/users/usernew.html
similarity index 100%
rename from src/usernew.html
rename to src/controllers/dashboard/users/usernew.html
diff --git a/src/userparentalcontrol.html b/src/controllers/dashboard/users/userparentalcontrol.html
similarity index 100%
rename from src/userparentalcontrol.html
rename to src/controllers/dashboard/users/userparentalcontrol.html
diff --git a/src/userpassword.html b/src/controllers/dashboard/users/userpassword.html
similarity index 100%
rename from src/userpassword.html
rename to src/controllers/dashboard/users/userpassword.html
diff --git a/src/userprofiles.html b/src/controllers/dashboard/users/userprofiles.html
similarity index 100%
rename from src/userprofiles.html
rename to src/controllers/dashboard/users/userprofiles.html
diff --git a/src/edititemmetadata.html b/src/controllers/edititemmetadata.html
similarity index 100%
rename from src/edititemmetadata.html
rename to src/controllers/edititemmetadata.html
diff --git a/src/home.html b/src/controllers/home.html
similarity index 100%
rename from src/home.html
rename to src/controllers/home.html
diff --git a/src/controllers/home.js b/src/controllers/home.js
index b615b3609d..72e326e46b 100644
--- a/src/controllers/home.js
+++ b/src/controllers/home.js
@@ -1,7 +1,33 @@
-define(['tabbedView', 'globalize', 'require', 'emby-tabs', 'emby-button', 'emby-scroller'], function (TabbedView, globalize, require) {
- 'use strict';
+import TabbedView from 'tabbedView';
+import globalize from 'globalize';
+import 'emby-tabs';
+import 'emby-button';
+import 'emby-scroller';
- function getTabs() {
+class HomeView extends TabbedView {
+ constructor(view, params) {
+ super(view, params);
+ }
+
+ setTitle() {
+ Emby.Page.setTitle(null);
+ }
+
+ onPause() {
+ super.onPause(this);
+ document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
+ }
+
+ onResume(options) {
+ super.onResume(this, options);
+ document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
+ }
+
+ getDefaultTabIndex() {
+ return 0;
+ }
+
+ getTabs() {
return [{
name: globalize.translate('Home')
}, {
@@ -9,67 +35,34 @@ define(['tabbedView', 'globalize', 'require', 'emby-tabs', 'emby-button', 'emby-
}];
}
- function getDefaultTabIndex() {
- return 0;
- }
-
- function getRequirePromise(deps) {
- return new Promise(function (resolve, reject) {
- require(deps, resolve);
- });
- }
-
- function getTabController(index) {
+ getTabController(index) {
if (index == null) {
throw new Error('index cannot be null');
}
- var depends = [];
+ let depends = '';
switch (index) {
case 0:
- depends.push('controllers/hometab');
+ depends = 'controllers/hometab';
break;
case 1:
- depends.push('controllers/favorites');
+ depends = 'controllers/favorites';
}
- var instance = this;
- return getRequirePromise(depends).then(function (controllerFactory) {
- var controller = instance.tabControllers[index];
+ const instance = this;
+ return import(depends).then(({ default: controllerFactory }) => {
+ let controller = instance.tabControllers[index];
if (!controller) {
- controller = new controllerFactory.default(instance.view.querySelector(".tabContent[data-index='" + index + "']"), instance.params);
+ controller = new controllerFactory(instance.view.querySelector(".tabContent[data-index='" + index + "']"), instance.params);
instance.tabControllers[index] = controller;
}
return controller;
});
}
+}
- function HomeView(view, params) {
- TabbedView.call(this, view, params);
- }
-
- Object.assign(HomeView.prototype, TabbedView.prototype);
- HomeView.prototype.getTabs = getTabs;
- HomeView.prototype.getDefaultTabIndex = getDefaultTabIndex;
- HomeView.prototype.getTabController = getTabController;
-
- HomeView.prototype.setTitle = function () {
- Emby.Page.setTitle(null);
- };
-
- HomeView.prototype.onPause = function () {
- TabbedView.prototype.onPause.call(this);
- document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
- };
-
- HomeView.prototype.onResume = function (options) {
- TabbedView.prototype.onResume.call(this, options);
- document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
- };
-
- return HomeView;
-});
+export default HomeView;
diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js
index df2855d69a..b2cdc63234 100644
--- a/src/controllers/itemDetails/index.js
+++ b/src/controllers/itemDetails/index.js
@@ -1,3 +1,4 @@
+import appHost from 'apphost';
import loading from 'loading';
import appRouter from 'appRouter';
import layoutManager from 'layoutManager';
@@ -657,7 +658,7 @@ import 'emby-select';
setPeopleHeader(page, item);
loading.hide();
- if (item.Type === 'Book') {
+ if (item.Type === 'Book' && item.CanDownload && appHost.supports('filedownload')) {
hideAll(page, 'btnDownload', true);
}
diff --git a/src/list.html b/src/controllers/list.html
similarity index 100%
rename from src/list.html
rename to src/controllers/list.html
diff --git a/src/controllers/list.js b/src/controllers/list.js
index 14c6768757..0027c576f1 100644
--- a/src/controllers/list.js
+++ b/src/controllers/list.js
@@ -1,12 +1,21 @@
-define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager', 'cardBuilder', 'loading', 'connectionManager', 'alphaNumericShortcuts', 'playbackManager', 'alphaPicker', 'emby-itemscontainer', 'emby-scroller'], function (globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, playbackManager, AlphaPicker) {
- 'use strict';
+import globalize from 'globalize';
+import listView from 'listView';
+import layoutManager from 'layoutManager';
+import * as userSettings from 'userSettings';
+import focusManager from 'focusManager';
+import cardBuilder from 'cardBuilder';
+import loading from 'loading';
+import connectionManager from 'connectionManager';
+import AlphaNumericShortcuts from 'alphaNumericShortcuts';
+import playbackManager from 'playbackManager';
+import AlphaPicker from 'alphaPicker';
+import 'emby-itemscontainer';
+import 'emby-scroller';
- playbackManager = playbackManager.default || playbackManager;
- loading = loading.default || loading;
- focusManager = focusManager.default || focusManager;
+/* eslint-disable indent */
function getInitialLiveTvQuery(instance, params) {
- var query = {
+ const query = {
UserId: connectionManager.getApiClient(params.serverId).getCurrentUserId(),
StartIndex: 0,
Fields: 'ChannelInfo,PrimaryImageAspectRatio',
@@ -63,7 +72,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function modifyQueryWithFilters(instance, query) {
- var sortValues = instance.getSortValues();
+ const sortValues = instance.getSortValues();
if (!query.SortBy) {
query.SortBy = sortValues.sortBy;
@@ -72,9 +81,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
query.Fields = query.Fields ? query.Fields + ',PrimaryImageAspectRatio' : 'PrimaryImageAspectRatio';
query.ImageTypeLimit = 1;
- var hasFilters;
- var queryFilters = [];
- var filters = instance.getFilters();
+ let hasFilters;
+ const queryFilters = [];
+ const filters = instance.getFilters();
if (filters.IsPlayed) {
queryFilters.push('IsPlayed');
@@ -168,21 +177,21 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function updateSortText(instance) {
- var btnSortText = instance.btnSortText;
+ const btnSortText = instance.btnSortText;
if (btnSortText) {
- var options = instance.getSortMenuOptions();
- var values = instance.getSortValues();
- var sortBy = values.sortBy;
+ const options = instance.getSortMenuOptions();
+ const values = instance.getSortValues();
+ const sortBy = values.sortBy;
- for (var i = 0, length = options.length; i < length; i++) {
- if (sortBy === options[i].value) {
- btnSortText.innerHTML = globalize.translate('SortByValue', options[i].name);
+ for (const option of options) {
+ if (sortBy === option.value) {
+ btnSortText.innerHTML = globalize.translate('SortByValue', option.name);
break;
}
}
- var btnSortIcon = instance.btnSortIcon;
+ const btnSortIcon = instance.btnSortIcon;
if (btnSortIcon) {
setSortButtonIcon(btnSortIcon, values.sortOrder === 'Descending' ? 'arrow_downward' : 'arrow_upward');
@@ -202,10 +211,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
function updateAlphaPickerState(instance, numItems) {
if (instance.alphaPicker) {
- var alphaPicker = instance.alphaPickerElement;
+ const alphaPicker = instance.alphaPickerElement;
if (alphaPicker) {
- var values = instance.getSortValues();
+ const values = instance.getSortValues();
if (numItems == null) {
numItems = 100;
@@ -223,7 +232,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function getItems(instance, params, item, sortBy, startIndex, limit) {
- var apiClient = connectionManager.getApiClient(params.serverId);
+ const apiClient = connectionManager.getApiClient(params.serverId);
instance.queryRecursive = false;
if (params.type === 'Recordings') {
@@ -252,7 +261,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
if (!item) {
instance.queryRecursive = true;
- var method = 'getItems';
+ let method = 'getItems';
if (params.type === 'MusicArtist') {
method = 'getArtists';
@@ -275,7 +284,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
if (item.Type === 'Genre' || item.Type === 'MusicGenre' || item.Type === 'Studio' || item.Type === 'Person') {
instance.queryRecursive = true;
- var query = {
+ const query = {
StartIndex: startIndex,
Limit: limit,
Fields: 'PrimaryImageAspectRatio,SortName',
@@ -324,8 +333,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
return Promise.resolve(null);
}
- var apiClient = connectionManager.getApiClient(params.serverId);
- var itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId;
+ const apiClient = connectionManager.getApiClient(params.serverId);
+ const itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId;
if (itemId) {
return apiClient.getItem(apiClient.getCurrentUserId(), itemId);
@@ -335,9 +344,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function showViewSettingsMenu() {
- var instance = this;
+ const instance = this;
- require(['viewSettings'], function (ViewSettings) {
+ import('viewSettings').then(({default: ViewSettings}) => {
new ViewSettings().show({
settingsKey: instance.getSettingsKey(),
settings: instance.getViewSettings(),
@@ -350,9 +359,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function showFilterMenu() {
- var instance = this;
+ const instance = this;
- require(['filterMenu'], function (FilterMenu) {
+ import('filterMenu').then(({default: FilterMenu}) => {
new FilterMenu().show({
settingsKey: instance.getSettingsKey(),
settings: instance.getFilters(),
@@ -369,9 +378,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function showSortMenu() {
- var instance = this;
+ const instance = this;
- require(['sortMenu'], function (SortMenu) {
+ import('sortMenu').then(({default: SortMenu}) => {
new SortMenu().show({
settingsKey: instance.getSettingsKey(),
settings: instance.getSortValues(),
@@ -387,10 +396,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function onNewItemClick() {
- var instance = this;
+ const instance = this;
- require(['playlistEditor'], function (playlistEditor) {
- new playlistEditor.showEditor({
+ import('playlistEditor').then(({default: playlistEditor}) => {
+ new playlistEditor({
items: [],
serverId: instance.params.serverId
});
@@ -398,22 +407,23 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function hideOrShowAll(elems, hide) {
- for (var i = 0, length = elems.length; i < length; i++) {
+ for (const elem of elems) {
if (hide) {
- elems[i].classList.add('hide');
+ elem.classList.add('hide');
} else {
- elems[i].classList.remove('hide');
+ elem.classList.remove('hide');
}
}
}
function bindAll(elems, eventName, fn) {
- for (var i = 0, length = elems.length; i < length; i++) {
- elems[i].addEventListener(eventName, fn);
+ for (const elem of elems) {
+ elem.addEventListener(eventName, fn);
}
}
- function ItemsView(view, params) {
+class ItemsView {
+ constructor(view, params) {
function fetchData() {
return getItems(self, params, self.currentItem).then(function (result) {
if (self.totalItemCount == null) {
@@ -426,7 +436,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function getItemsHtml(items) {
- var settings = self.getViewSettings();
+ const settings = self.getViewSettings();
if (settings.imageType === 'list') {
return listView.getListViewHtml({
@@ -434,13 +444,13 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
});
}
- var shape;
- var preferThumb;
- var preferDisc;
- var preferLogo;
- var defaultShape;
- var item = self.currentItem;
- var lines = settings.showTitle ? 2 : 0;
+ let shape;
+ let preferThumb;
+ let preferDisc;
+ let preferLogo;
+ let defaultShape;
+ const item = self.currentItem;
+ let lines = settings.showTitle ? 2 : 0;
if (settings.imageType === 'banner') {
shape = 'banner';
@@ -464,7 +474,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
shape = 'autoVertical';
}
- var posterOptions = {
+ let posterOptions = {
shape: shape,
showTitle: settings.showTitle,
showYear: settings.showTitle,
@@ -497,19 +507,19 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
lines = 1;
} else if (params.type === 'Programs') {
lines = settings.showTitle ? 1 : 0;
- var showParentTitle = settings.showTitle && params.IsMovie !== 'true';
+ const showParentTitle = settings.showTitle && params.IsMovie !== 'true';
if (showParentTitle) {
lines++;
}
- var showAirTime = settings.showTitle && params.type !== 'Recordings';
+ const showAirTime = settings.showTitle && params.type !== 'Recordings';
if (showAirTime) {
lines++;
}
- var showYear = settings.showTitle && params.IsMovie === 'true' && params.type === 'Recordings';
+ const showYear = settings.showTitle && params.IsMovie === 'true' && params.type === 'Recordings';
if (showYear) {
lines++;
@@ -542,13 +552,13 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
function initAlphaPicker() {
self.scroller = view.querySelector('.scrollFrameY');
- var alphaPickerElement = self.alphaPickerElement;
+ const alphaPickerElement = self.alphaPickerElement;
alphaPickerElement.classList.add('alphaPicker-fixed-right');
alphaPickerElement.classList.add('focuscontainer-right');
self.itemsContainer.parentNode.classList.add('padded-right-withalphapicker');
- self.alphaPicker = new AlphaPicker.default({
+ self.alphaPicker = new AlphaPicker({
element: alphaPickerElement,
itemsContainer: layoutManager.tv ? self.itemsContainer : null,
itemClass: 'card',
@@ -653,7 +663,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function play() {
- var currentItem = self.currentItem;
+ const currentItem = self.currentItem;
if (currentItem && !self.hasFilters) {
playbackManager.play({
@@ -669,7 +679,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function queue() {
- var currentItem = self.currentItem;
+ const currentItem = self.currentItem;
if (currentItem && !self.hasFilters) {
playbackManager.queue({
@@ -685,7 +695,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
function shuffle() {
- var currentItem = self.currentItem;
+ const currentItem = self.currentItem;
if (currentItem && !self.hasFilters) {
playbackManager.shuffle(currentItem);
@@ -698,7 +708,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
}
- var self = this;
+ const self = this;
self.params = params;
this.itemsContainer = view.querySelector('.itemsContainer');
@@ -712,20 +722,17 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
this.itemsContainer.setAttribute('data-refreshinterval', '300000');
}
- var i;
- var length;
- var btnViewSettings = view.querySelectorAll('.btnViewSettings');
+ const btnViewSettings = view.querySelectorAll('.btnViewSettings');
- for (i = 0, length = btnViewSettings.length; i < length; i++) {
- btnViewSettings[i].addEventListener('click', showViewSettingsMenu.bind(this));
+ for (const btnViewSetting of btnViewSettings) {
+ btnViewSetting.addEventListener('click', showViewSettingsMenu.bind(this));
}
- var filterButtons = view.querySelectorAll('.btnFilter');
+ const filterButtons = view.querySelectorAll('.btnFilter');
this.filterButtons = filterButtons;
- var hasVisibleFilters = this.getVisibleFilters().length;
+ const hasVisibleFilters = this.getVisibleFilters().length;
- for (i = 0, length = filterButtons.length; i < length; i++) {
- var btnFilter = filterButtons[i];
+ for (const btnFilter of filterButtons) {
btnFilter.addEventListener('click', showFilterMenu.bind(this));
if (hasVisibleFilters) {
@@ -735,10 +742,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
}
- var sortButtons = view.querySelectorAll('.btnSort');
+ const sortButtons = view.querySelectorAll('.btnSort');
- for (this.sortButtons = sortButtons, i = 0, length = sortButtons.length; i < length; i++) {
- var sortButton = sortButtons[i];
+ this.sortButtons = sortButtons;
+ for (const sortButton of sortButtons) {
sortButton.addEventListener('click', showSortMenu.bind(this));
if (params.type !== 'nextup') {
@@ -753,7 +760,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
self.itemsContainer.fetchData = fetchData;
self.itemsContainer.getItemsHtml = getItemsHtml;
view.addEventListener('viewshow', function (e) {
- var isRestored = e.detail.isRestored;
+ const isRestored = e.detail.isRestored;
if (!isRestored) {
loading.show();
@@ -765,7 +772,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
getItem(params).then(function (item) {
setTitle(item);
self.currentItem = item;
- var refresh = !isRestored;
+ const refresh = !isRestored;
self.itemsContainer.resume({
refresh: refresh
}).then(function () {
@@ -780,7 +787,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
initAlphaPicker();
}
- var itemType = item ? item.Type : null;
+ const itemType = item ? item.Type : null;
if (itemType === 'MusicGenre' || params.type !== 'Programs' && itemType !== 'Channel') {
hideOrShowAll(view.querySelectorAll('.btnPlay'), false);
@@ -807,18 +814,18 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
bindAll(view.querySelectorAll('.btnShuffle'), 'click', shuffle);
}
- self.alphaNumericShortcuts = new AlphaNumericShortcuts.default({
+ self.alphaNumericShortcuts = new AlphaNumericShortcuts({
itemsContainer: self.itemsContainer
});
});
view.addEventListener('viewhide', function (e) {
- var itemsContainer = self.itemsContainer;
+ const itemsContainer = self.itemsContainer;
if (itemsContainer) {
itemsContainer.pause();
}
- var alphaNumericShortcuts = self.alphaNumericShortcuts;
+ const alphaNumericShortcuts = self.alphaNumericShortcuts;
if (alphaNumericShortcuts) {
alphaNumericShortcuts.destroy();
@@ -846,8 +853,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
});
}
- ItemsView.prototype.getFilters = function () {
- var basekey = this.getSettingsKey();
+ getFilters() {
+ const basekey = this.getSettingsKey();
return {
IsPlayed: userSettings.getFilter(basekey + '-filter-IsPlayed') === 'true',
IsUnplayed: userSettings.getFilter(basekey + '-filter-IsUnplayed') === 'true',
@@ -866,39 +873,37 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
HasThemeVideo: userSettings.getFilter(basekey + '-filter-HasThemeVideo'),
GenreIds: userSettings.getFilter(basekey + '-filter-GenreIds')
};
- };
+ }
- ItemsView.prototype.getSortValues = function () {
- var basekey = this.getSettingsKey();
+ getSortValues() {
+ const basekey = this.getSettingsKey();
return {
sortBy: userSettings.getFilter(basekey + '-sortby') || this.getDefaultSortBy(),
sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending'
};
- };
+ }
- ItemsView.prototype.getDefaultSortBy = function () {
- var params = this.params;
- var sortNameOption = this.getNameSortOption(params);
+ getDefaultSortBy() {
+ const sortNameOption = this.getNameSortOption(this.params);
- if (params.type) {
+ if (this.params.type) {
return sortNameOption.value;
}
return 'IsFolder,' + sortNameOption.value;
- };
+ }
- ItemsView.prototype.getSortMenuOptions = function () {
- var sortBy = [];
- var params = this.params;
+ getSortMenuOptions() {
+ const sortBy = [];
- if (params.type === 'Programs') {
+ if (this.params.type === 'Programs') {
sortBy.push({
name: globalize.translate('AirDate'),
value: 'StartDate,SortName'
});
}
- var option = this.getNameSortOption(params);
+ let option = this.getNameSortOption(this.params);
if (option) {
sortBy.push(option);
@@ -916,7 +921,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
sortBy.push(option);
}
- if (params.type !== 'Programs') {
+ if (this.params.type !== 'Programs') {
sortBy.push({
name: globalize.translate('DateAdded'),
value: 'DateCreated,SortName'
@@ -929,8 +934,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
sortBy.push(option);
}
- if (!params.type) {
- option = this.getNameSortOption(params);
+ if (!this.params.type) {
+ option = this.getNameSortOption(this.params);
sortBy.push({
name: globalize.translate('Folders'),
value: 'IsFolder,' + option.value
@@ -956,9 +961,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
value: 'Runtime,SortName'
});
return sortBy;
- };
+ }
- ItemsView.prototype.getNameSortOption = function (params) {
+ getNameSortOption(params) {
if (params.type === 'Episode') {
return {
name: globalize.translate('Name'),
@@ -970,9 +975,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
name: globalize.translate('Name'),
value: 'SortName'
};
- };
+ }
- ItemsView.prototype.getPlayCountSortOption = function () {
+ getPlayCountSortOption() {
if (this.params.type === 'Programs') {
return null;
}
@@ -981,9 +986,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
name: globalize.translate('PlayCount'),
value: 'PlayCount,SortName'
};
- };
+ }
- ItemsView.prototype.getDatePlayedSortOption = function () {
+ getDatePlayedSortOption() {
if (this.params.type === 'Programs') {
return null;
}
@@ -992,9 +997,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
name: globalize.translate('DatePlayed'),
value: 'DatePlayed,SortName'
};
- };
+ }
- ItemsView.prototype.getCriticRatingSortOption = function () {
+ getCriticRatingSortOption() {
if (this.params.type === 'Programs') {
return null;
}
@@ -1003,18 +1008,18 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
name: globalize.translate('CriticRating'),
value: 'CriticRating,SortName'
};
- };
+ }
- ItemsView.prototype.getCommunityRatingSortOption = function () {
+ getCommunityRatingSortOption() {
return {
name: globalize.translate('CommunityRating'),
value: 'CommunityRating,SortName'
};
- };
+ }
- ItemsView.prototype.getVisibleFilters = function () {
- var filters = [];
- var params = this.params;
+ getVisibleFilters() {
+ const filters = [];
+ const params = this.params;
if (!(params.type === 'nextup')) {
if (params.type === 'Programs') {
@@ -1038,16 +1043,15 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
return filters;
- };
+ }
- ItemsView.prototype.setFilterStatus = function (hasFilters) {
+ setFilterStatus(hasFilters) {
this.hasFilters = hasFilters;
- var filterButtons = this.filterButtons;
+ const filterButtons = this.filterButtons;
if (filterButtons.length) {
- for (var i = 0, length = filterButtons.length; i < length; i++) {
- var btnFilter = filterButtons[i];
- var bubble = btnFilter.querySelector('.filterButtonBubble');
+ for (const btnFilter of filterButtons) {
+ let bubble = btnFilter.querySelector('.filterButtonBubble');
if (!bubble) {
if (!hasFilters) {
@@ -1066,10 +1070,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
}
}
- };
+ }
- ItemsView.prototype.getFilterMenuOptions = function () {
- var params = this.params;
+ getFilterMenuOptions() {
+ const params = this.params;
return {
IsAiring: params.IsAiring,
IsMovie: params.IsMovie,
@@ -1079,11 +1083,11 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
IsSeries: params.IsSeries,
Recursive: this.queryRecursive
};
- };
+ }
- ItemsView.prototype.getVisibleViewSettings = function () {
- var item = (this.params, this.currentItem);
- var fields = ['showTitle'];
+ getVisibleViewSettings() {
+ const item = (this.params, this.currentItem);
+ const fields = ['showTitle'];
if (!item || item.Type !== 'PhotoAlbum' && item.Type !== 'ChannelFolderItem') {
fields.push('imageType');
@@ -1091,13 +1095,13 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
fields.push('viewType');
return fields;
- };
+ }
- ItemsView.prototype.getViewSettings = function () {
- var basekey = this.getSettingsKey();
- var params = this.params;
- var item = this.currentItem;
- var showTitle = userSettings.get(basekey + '-showTitle');
+ getViewSettings() {
+ const basekey = this.getSettingsKey();
+ const params = this.params;
+ const item = this.currentItem;
+ let showTitle = userSettings.get(basekey + '-showTitle');
if (showTitle === 'true') {
showTitle = true;
@@ -1109,7 +1113,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
showTitle = true;
}
- var imageType = userSettings.get(basekey + '-imageType');
+ let imageType = userSettings.get(basekey + '-imageType');
if (!imageType && params.type === 'nextup') {
imageType = 'thumb';
@@ -1121,10 +1125,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
imageType: imageType || 'primary',
viewType: userSettings.get(basekey + '-viewType') || 'images'
};
- };
+ }
- ItemsView.prototype.getItemTypes = function () {
- var params = this.params;
+ getItemTypes() {
+ const params = this.params;
if (params.type === 'nextup') {
return ['Episode'];
@@ -1135,12 +1139,12 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
return [];
- };
+ }
- ItemsView.prototype.getSettingsKey = function () {
- var values = [];
+ getSettingsKey() {
+ const values = [];
values.push('items');
- var params = this.params;
+ const params = this.params;
if (params.type) {
values.push(params.type);
@@ -1197,7 +1201,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager'
}
return values.join('-');
- };
+ }
+}
- return ItemsView;
-});
+export default ItemsView;
+
+/* eslint-enable indent */
diff --git a/src/livetv.html b/src/controllers/livetv.html
similarity index 100%
rename from src/livetv.html
rename to src/controllers/livetv.html
diff --git a/src/controllers/livetv/livetvsuggested.js b/src/controllers/livetv/livetvsuggested.js
index 05e852fd0b..6e560bcd89 100644
--- a/src/controllers/livetv/livetvsuggested.js
+++ b/src/controllers/livetv/livetvsuggested.js
@@ -2,6 +2,7 @@ define(['layoutManager', 'userSettings', 'inputManager', 'loading', 'globalize',
'use strict';
loading = loading.default || loading;
+ layoutManager = layoutManager.default || layoutManager;
function enableScrollX() {
return !layoutManager.desktop;
diff --git a/src/livetvguideprovider.html b/src/controllers/livetvguideprovider.html
similarity index 100%
rename from src/livetvguideprovider.html
rename to src/controllers/livetvguideprovider.html
diff --git a/src/livetvsettings.html b/src/controllers/livetvsettings.html
similarity index 100%
rename from src/livetvsettings.html
rename to src/controllers/livetvsettings.html
diff --git a/src/livetvstatus.html b/src/controllers/livetvstatus.html
similarity index 100%
rename from src/livetvstatus.html
rename to src/controllers/livetvstatus.html
diff --git a/src/livetvtuner.html b/src/controllers/livetvtuner.html
similarity index 100%
rename from src/livetvtuner.html
rename to src/controllers/livetvtuner.html
diff --git a/src/movies.html b/src/controllers/movies/movies.html
similarity index 100%
rename from src/movies.html
rename to src/controllers/movies/movies.html
diff --git a/src/music.html b/src/controllers/music/music.html
similarity index 100%
rename from src/music.html
rename to src/controllers/music/music.html
diff --git a/src/search.html b/src/controllers/search.html
similarity index 100%
rename from src/search.html
rename to src/controllers/search.html
diff --git a/src/tv.html b/src/controllers/shows/tvrecommended.html
similarity index 100%
rename from src/tv.html
rename to src/controllers/shows/tvrecommended.html
diff --git a/src/wizardlibrary.html b/src/controllers/wizard/library.html
similarity index 100%
rename from src/wizardlibrary.html
rename to src/controllers/wizard/library.html
diff --git a/src/index.html b/src/index.html
index 797fce8a94..c689a42f30 100644
--- a/src/index.html
+++ b/src/index.html
@@ -137,8 +137,7 @@
}
@media screen
- and (min-device-width: 992px)
- and (-webkit-min-device-pixel-ratio: 1) {
+ and (min-device-width: 992px) {
.splashLogo {
background-image: url(assets/img/banner-light.png);
}
diff --git a/src/libraries/screensavermanager.js b/src/libraries/screensavermanager.js
index 557b31e0f4..5c24ec63d0 100644
--- a/src/libraries/screensavermanager.js
+++ b/src/libraries/screensavermanager.js
@@ -1,134 +1,128 @@
-define(["events", "playbackManager", "pluginManager", "inputManager", "connectionManager", "userSettings"], function (events, playbackManager, pluginManager, inputManager, connectionManager, userSettings) {
- "use strict";
+import events from 'events';
+import playbackManager from 'playbackManager';
+import pluginManager from 'pluginManager';
+import inputManager from 'inputManager';
+import connectionManager from 'connectionManager';
+import * as userSettings from 'userSettings';
- playbackManager = playbackManager.default || playbackManager;
+function getMinIdleTime() {
+ // Returns the minimum amount of idle time required before the screen saver can be displayed
+ //time units used Millisecond
+ return 180000;
+}
- function getMinIdleTime() {
- // Returns the minimum amount of idle time required before the screen saver can be displayed
- //time units used Millisecond
- return 180000;
+let lastFunctionalEvent = 0;
+
+function getFunctionalEventIdleTime() {
+ return new Date().getTime() - lastFunctionalEvent;
+}
+
+events.on(playbackManager, 'playbackstop', function (e, stopInfo) {
+ const state = stopInfo.state;
+ if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
+ lastFunctionalEvent = new Date().getTime();
}
-
- var lastFunctionalEvent = 0;
-
- function getFunctionalEventIdleTime() {
- return new Date().getTime() - lastFunctionalEvent;
- }
-
- events.on(playbackManager, "playbackstop", function (e, stopInfo) {
- var state = stopInfo.state;
- if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
- lastFunctionalEvent = new Date().getTime();
- }
- });
-
- function getScreensaverPlugin(isLoggedIn) {
-
- var option;
- try {
- option = userSettings.get("screensaver", false);
- } catch (err) {
- option = isLoggedIn ? "backdropscreensaver" : "logoscreensaver";
- }
-
- var plugins = pluginManager.ofType("screensaver");
-
- for (var i = 0, length = plugins.length; i < length; i++) {
- var plugin = plugins[i];
-
- if (plugin.id === option) {
- return plugin;
- }
- }
-
- return null;
- }
-
- function ScreenSaverManager() {
-
- var self = this;
- var activeScreenSaver;
-
- function showScreenSaver(screensaver) {
-
- if (activeScreenSaver) {
- throw new Error("An existing screensaver is already active.");
- }
-
- console.debug("Showing screensaver " + screensaver.name);
-
- screensaver.show();
- activeScreenSaver = screensaver;
-
- if (screensaver.hideOnClick !== false) {
- window.addEventListener("click", hide, true);
- }
- if (screensaver.hideOnMouse !== false) {
- window.addEventListener("mousemove", hide, true);
- }
- if (screensaver.hideOnKey !== false) {
- window.addEventListener("keydown", hide, true);
- }
- }
-
- function hide() {
- if (activeScreenSaver) {
- console.debug("Hiding screensaver");
- activeScreenSaver.hide();
- activeScreenSaver = null;
- }
-
- window.removeEventListener("click", hide, true);
- window.removeEventListener("mousemove", hide, true);
- window.removeEventListener("keydown", hide, true);
- }
-
- self.isShowing = function () {
- return activeScreenSaver != null;
- };
-
- self.show = function () {
- var isLoggedIn;
- var apiClient = connectionManager.currentApiClient();
-
- if (apiClient && apiClient.isLoggedIn()) {
- isLoggedIn = true;
- }
-
- var screensaver = getScreensaverPlugin(isLoggedIn);
-
- if (screensaver) {
- showScreenSaver(screensaver);
- }
- };
-
- self.hide = function () {
- hide();
- };
-
- function onInterval() {
-
- if (self.isShowing()) {
- return;
- }
-
- if (inputManager.idleTime() < getMinIdleTime()) {
- return;
- }
-
- if (getFunctionalEventIdleTime < getMinIdleTime()) {
- return;
- }
-
- if (playbackManager.isPlayingVideo()) {
- return;
- }
-
- self.show();
- }
-
- setInterval(onInterval, 10000);
- }
-
- return new ScreenSaverManager();
});
+
+function getScreensaverPlugin(isLoggedIn) {
+ let option;
+ try {
+ option = userSettings.get('screensaver', false);
+ } catch (err) {
+ option = isLoggedIn ? 'backdropscreensaver' : 'logoscreensaver';
+ }
+
+ const plugins = pluginManager.ofType('screensaver');
+
+ for (const plugin of plugins) {
+ if (plugin.id === option) {
+ return plugin;
+ }
+ }
+
+ return null;
+}
+
+function ScreenSaverManager() {
+ let activeScreenSaver;
+
+ function showScreenSaver(screensaver) {
+ if (activeScreenSaver) {
+ throw new Error('An existing screensaver is already active.');
+ }
+
+ console.debug('Showing screensaver ' + screensaver.name);
+
+ screensaver.show();
+ activeScreenSaver = screensaver;
+
+ if (screensaver.hideOnClick !== false) {
+ window.addEventListener('click', hide, true);
+ }
+ if (screensaver.hideOnMouse !== false) {
+ window.addEventListener('mousemove', hide, true);
+ }
+ if (screensaver.hideOnKey !== false) {
+ window.addEventListener('keydown', hide, true);
+ }
+ }
+
+ function hide() {
+ if (activeScreenSaver) {
+ console.debug('Hiding screensaver');
+ activeScreenSaver.hide();
+ activeScreenSaver = null;
+ }
+
+ window.removeEventListener('click', hide, true);
+ window.removeEventListener('mousemove', hide, true);
+ window.removeEventListener('keydown', hide, true);
+ }
+
+ this.isShowing = () => {
+ return activeScreenSaver != null;
+ };
+
+ this.show = function () {
+ let isLoggedIn;
+ const apiClient = connectionManager.currentApiClient();
+
+ if (apiClient && apiClient.isLoggedIn()) {
+ isLoggedIn = true;
+ }
+
+ const screensaver = getScreensaverPlugin(isLoggedIn);
+
+ if (screensaver) {
+ showScreenSaver(screensaver);
+ }
+ };
+
+ this.hide = function () {
+ hide();
+ };
+
+ const onInterval = () => {
+ if (this.isShowing()) {
+ return;
+ }
+
+ if (inputManager.idleTime() < getMinIdleTime()) {
+ return;
+ }
+
+ if (getFunctionalEventIdleTime < getMinIdleTime()) {
+ return;
+ }
+
+ if (playbackManager.isPlayingVideo()) {
+ return;
+ }
+
+ this.show();
+ };
+
+ setInterval(onInterval, 10000);
+}
+
+export default new ScreenSaverManager;
diff --git a/src/plugins/chromecastPlayer/plugin.js b/src/plugins/chromecastPlayer/plugin.js
index 22b49d6faf..f38f9b04ff 100644
--- a/src/plugins/chromecastPlayer/plugin.js
+++ b/src/plugins/chromecastPlayer/plugin.js
@@ -1,66 +1,71 @@
-define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', 'globalize', 'events', 'require', 'castSenderApiLoader'], function (appSettings, userSettings, playbackManager, connectionManager, globalize, events, require, castSenderApiLoader) {
- 'use strict';
+import appSettings from 'appSettings';
+import * as userSettings from 'userSettings';
+import playbackManager from 'playbackManager';
+import connectionManager from 'connectionManager';
+import globalize from 'globalize';
+import events from 'events';
+import castSenderApiLoader from 'castSenderApiLoader';
- playbackManager = playbackManager.default || playbackManager;
+// Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js
- // Based on https://github.com/googlecast/CastVideos-chrome/blob/master/CastVideos.js
- var currentResolve;
- var currentReject;
+let currentResolve;
+let currentReject;
- var PlayerName = 'Google Cast';
+const PlayerName = 'Google Cast';
- function sendConnectionResult(isOk) {
- var resolve = currentResolve;
- var reject = currentReject;
+function sendConnectionResult(isOk) {
+ const resolve = currentResolve;
+ const reject = currentReject;
- currentResolve = null;
- currentReject = null;
+ currentResolve = null;
+ currentReject = null;
- if (isOk) {
- if (resolve) {
- resolve();
- }
+ if (isOk) {
+ if (resolve) {
+ resolve();
+ }
+ } else {
+ if (reject) {
+ reject();
} else {
- if (reject) {
- reject();
- } else {
- playbackManager.removeActivePlayer(PlayerName);
- }
+ playbackManager.removeActivePlayer(PlayerName);
}
}
+}
- /**
- * Constants of states for Chromecast device
- **/
- var DEVICE_STATE = {
- 'IDLE': 0,
- 'ACTIVE': 1,
- 'WARNING': 2,
- 'ERROR': 3
- };
+/**
+ * Constants of states for Chromecast device
+ **/
+const DEVICE_STATE = {
+ 'IDLE': 0,
+ 'ACTIVE': 1,
+ 'WARNING': 2,
+ 'ERROR': 3
+};
- /**
- * Constants of states for CastPlayer
- **/
- var PLAYER_STATE = {
- 'IDLE': 'IDLE',
- 'LOADING': 'LOADING',
- 'LOADED': 'LOADED',
- 'PLAYING': 'PLAYING',
- 'PAUSED': 'PAUSED',
- 'STOPPED': 'STOPPED',
- 'SEEKING': 'SEEKING',
- 'ERROR': 'ERROR'
- };
+/**
+ * Constants of states for CastPlayer
+ **/
+const PLAYER_STATE = {
+ 'IDLE': 'IDLE',
+ 'LOADING': 'LOADING',
+ 'LOADED': 'LOADED',
+ 'PLAYING': 'PLAYING',
+ 'PAUSED': 'PAUSED',
+ 'STOPPED': 'STOPPED',
+ 'SEEKING': 'SEEKING',
+ 'ERROR': 'ERROR'
+};
- // production version registered with google
- // replace this value if you want to test changes on another instance
- var applicationStable = 'F007D354';
- var applicationUnstable = '6F511C87';
+// production version registered with google
+// replace this value if you want to test changes on another instance
+const applicationStable = 'F007D354';
+const applicationUnstable = '6F511C87';
- var messageNamespace = 'urn:x-cast:com.connectsdk';
+const messageNamespace = 'urn:x-cast:com.connectsdk';
- var CastPlayer = function () {
+class CastPlayer {
+ constructor() {
/* device variables */
// @type {DEVICE_STATE} A state for device
this.deviceState = DEVICE_STATE.IDLE;
@@ -81,7 +86,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
this.mediaStatusUpdateHandler = this.onMediaStatusUpdate.bind(this);
this.initializeCastPlayer();
- };
+ }
/**
* Initialize Cast media player
@@ -89,8 +94,8 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
* invoked once the API has finished initialization. The sessionListener and
* receiverListener may be invoked at any time afterwards, and possibly more than once.
*/
- CastPlayer.prototype.initializeCastPlayer = function () {
- var chrome = window.chrome;
+ initializeCastPlayer() {
+ const chrome = window.chrome;
if (!chrome) {
return;
}
@@ -100,35 +105,35 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
return;
}
- var applicationID = applicationStable;
+ let applicationID = applicationStable;
if (userSettings.chromecastVersion() === 'unstable') {
applicationID = applicationUnstable;
}
// request session
- var sessionRequest = new chrome.cast.SessionRequest(applicationID);
- var apiConfig = new chrome.cast.ApiConfig(sessionRequest,
+ const sessionRequest = new chrome.cast.SessionRequest(applicationID);
+ const apiConfig = new chrome.cast.ApiConfig(sessionRequest,
this.sessionListener.bind(this),
this.receiverListener.bind(this));
console.debug('chromecast.initialize');
chrome.cast.initialize(apiConfig, this.onInitSuccess.bind(this), this.errorHandler);
- };
+ }
/**
* Callback function for init success
*/
- CastPlayer.prototype.onInitSuccess = function () {
+ onInitSuccess() {
this.isInitialized = true;
console.debug('chromecast init success');
- };
+ }
/**
* Generic error callback function
*/
- CastPlayer.prototype.onError = function () {
+ onError() {
console.debug('chromecast error');
- };
+ }
/**
* @param {!Object} e A new session
@@ -137,7 +142,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
* join existing session and occur in Cast mode and media
* status gets synced up with current media of the session
*/
- CastPlayer.prototype.sessionListener = function (e) {
+ sessionListener(e) {
this.session = e;
if (this.session) {
if (this.session.media[0]) {
@@ -146,24 +151,15 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
this.onSessionConnected(e);
}
- };
-
- function alertText(text, title) {
- require(['alert'], function (alert) {
- alert.default({
- text: text,
- title: title
- });
- });
}
- CastPlayer.prototype.messageListener = function (namespace, message) {
+ messageListener(namespace, message) {
if (typeof (message) === 'string') {
message = JSON.parse(message);
}
if (message.type === 'playbackerror') {
- var errorCode = message.data;
+ const errorCode = message.data;
setTimeout(function () {
alertText(globalize.translate('MessagePlaybackError' + errorCode), globalize.translate('HeaderPlaybackError'));
}, 300);
@@ -174,14 +170,14 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
} else if (message.type) {
events.trigger(this, message.type, [message.data]);
}
- };
+ }
/**
* @param {string} e Receiver availability
* This indicates availability of receivers but
* does not provide a list of device IDs
*/
- CastPlayer.prototype.receiverListener = function (e) {
+ receiverListener(e) {
if (e === 'available') {
console.debug('chromecast receiver found');
this.hasReceivers = true;
@@ -189,12 +185,12 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
console.debug('chromecast receiver list empty');
this.hasReceivers = false;
}
- };
+ }
/**
* session update listener
*/
- CastPlayer.prototype.sessionUpdateListener = function (isAlive) {
+ sessionUpdateListener(isAlive) {
if (isAlive) {
console.debug('sessionUpdateListener: already alive');
} else {
@@ -209,28 +205,28 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
sendConnectionResult(false);
}
- };
+ }
/**
* Requests that a receiver application session be created or joined. By default, the SessionRequest
* passed to the API at initialization time is used; this may be overridden by passing a different
* session request in opt_sessionRequest.
*/
- CastPlayer.prototype.launchApp = function () {
+ launchApp() {
console.debug('chromecast launching app...');
chrome.cast.requestSession(this.onRequestSessionSuccess.bind(this), this.onLaunchError.bind(this));
- };
+ }
/**
* Callback function for request session success
* @param {Object} e A chrome.cast.Session object
*/
- CastPlayer.prototype.onRequestSessionSuccess = function (e) {
+ onRequestSessionSuccess(e) {
console.debug('chromecast session success: ' + e.sessionId);
this.onSessionConnected(e);
- };
+ }
- CastPlayer.prototype.onSessionConnected = function (session) {
+ onSessionConnected(session) {
this.session = session;
this.deviceState = DEVICE_STATE.ACTIVE;
@@ -246,46 +242,38 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
options: {},
command: 'Identify'
});
- };
-
- function onVolumeUpKeyDown() {
- playbackManager.volumeUp();
- }
-
- function onVolumeDownKeyDown() {
- playbackManager.volumeDown();
}
/**
* session update listener
*/
- CastPlayer.prototype.sessionMediaListener = function (e) {
+ sessionMediaListener(e) {
this.currentMediaSession = e;
this.currentMediaSession.addUpdateListener(this.mediaStatusUpdateHandler);
- };
+ }
/**
* Callback function for launch error
*/
- CastPlayer.prototype.onLaunchError = function () {
+ onLaunchError() {
console.debug('chromecast launch error');
this.deviceState = DEVICE_STATE.ERROR;
sendConnectionResult(false);
- };
+ }
/**
* Stops the running receiver application associated with the session.
*/
- CastPlayer.prototype.stopApp = function () {
+ stopApp() {
if (this.session) {
this.session.stop(this.onStopAppSuccess.bind(this, 'Session stopped'), this.errorHandler);
}
- };
+ }
/**
* Callback function for stop app success
*/
- CastPlayer.prototype.onStopAppSuccess = function (message) {
+ onStopAppSuccess(message) {
console.debug(message);
this.deviceState = DEVICE_STATE.IDLE;
@@ -294,13 +282,13 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
document.removeEventListener('volumedownbutton', onVolumeDownKeyDown, false);
this.currentMediaSession = null;
- };
+ }
/**
* Loads media into a running receiver application
* @param {Number} mediaIndex An index number to indicate current media content
*/
- CastPlayer.prototype.loadMedia = function (options, command) {
+ loadMedia(options, command) {
if (!this.session) {
console.debug('no session');
return Promise.reject();
@@ -322,20 +310,20 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
options: options,
command: command
});
- };
+ }
- CastPlayer.prototype.sendMessage = function (message) {
- var player = this;
+ sendMessage(message) {
+ const player = this;
- var receiverName = null;
+ let receiverName = null;
- var session = player.session;
+ const session = player.session;
if (session && session.receiver && session.receiver.friendlyName) {
receiverName = session.receiver.friendlyName;
}
- var apiClient;
+ let apiClient;
if (message.options && message.options.ServerId) {
apiClient = connectionManager.getApiClient(message.options.ServerId);
} else if (message.options && message.options.items && message.options.items.length) {
@@ -354,7 +342,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
receiverName: receiverName
});
- var bitrateSetting = appSettings.maxChromecastBitrate();
+ const bitrateSetting = appSettings.maxChromecastBitrate();
if (bitrateSetting) {
message.maxBitrate = bitrateSetting;
}
@@ -365,31 +353,31 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
}
return new Promise(function (resolve, reject) {
- require(['./chromecastHelper'], function (chromecastHelper) {
+ import('./chromecastHelper').then(({ default: chromecastHelper }) => {
chromecastHelper.getServerAddress(apiClient).then(function (serverAddress) {
message.serverAddress = serverAddress;
player.sendMessageInternal(message).then(resolve, reject);
}, reject);
});
});
- };
+ }
- CastPlayer.prototype.sendMessageInternal = function (message) {
+ sendMessageInternal(message) {
message = JSON.stringify(message);
this.session.sendMessage(messageNamespace, message, this.onPlayCommandSuccess.bind(this), this.errorHandler);
return Promise.resolve();
- };
+ }
- CastPlayer.prototype.onPlayCommandSuccess = function () {
+ onPlayCommandSuccess() {
console.debug('Message was sent to receiver ok.');
- };
+ }
/**
* Callback function for loadMedia success
* @param {Object} mediaSession A new media object.
*/
- CastPlayer.prototype.onMediaDiscovered = function (how, mediaSession) {
+ onMediaDiscovered(how, mediaSession) {
console.debug('chromecast new media session ID:' + mediaSession.mediaSessionId + ' (' + how + ')');
this.currentMediaSession = mediaSession;
@@ -402,24 +390,24 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
}
this.currentMediaSession.addUpdateListener(this.mediaStatusUpdateHandler);
- };
+ }
/**
* Callback function for media status update from receiver
* @param {!Boolean} e true/false
*/
- CastPlayer.prototype.onMediaStatusUpdate = function (e) {
+ onMediaStatusUpdate(e) {
console.debug('chromecast updating media: ' + e);
if (e === false) {
this.castPlayerState = PLAYER_STATE.IDLE;
}
- };
+ }
/**
* Set media volume in Cast mode
* @param {Boolean} mute A boolean
*/
- CastPlayer.prototype.setReceiverVolume = function (mute, vol) {
+ setReceiverVolume(mute, vol) {
if (!this.currentMediaSession) {
console.debug('this.currentMediaSession is null');
return;
@@ -434,142 +422,161 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
this.mediaCommandSuccessCallback.bind(this),
this.errorHandler);
}
- };
+ }
/**
* Mute CC
*/
- CastPlayer.prototype.mute = function () {
+ mute() {
this.setReceiverVolume(true);
- };
+ }
/**
* Callback function for media command success
*/
- CastPlayer.prototype.mediaCommandSuccessCallback = function (info, e) {
+ mediaCommandSuccessCallback(info, e) {
console.debug(info);
- };
+ }
+}
- function normalizeImages(state) {
- if (state && state.NowPlayingItem) {
- var item = state.NowPlayingItem;
+function alertText(text, title) {
+ import('alert').then(({default: alert}) => {
+ alert({
+ text: text,
+ title: title
+ });
+ });
+}
- if (!item.ImageTags || !item.ImageTags.Primary) {
- if (item.PrimaryImageTag) {
- item.ImageTags = item.ImageTags || {};
- item.ImageTags.Primary = item.PrimaryImageTag;
- }
- }
- if (item.BackdropImageTag && item.BackdropItemId === item.Id) {
- item.BackdropImageTags = [item.BackdropImageTag];
- }
- if (item.BackdropImageTag && item.BackdropItemId !== item.Id) {
- item.ParentBackdropImageTags = [item.BackdropImageTag];
- item.ParentBackdropItemId = item.BackdropItemId;
+function onVolumeUpKeyDown() {
+ playbackManager.volumeUp();
+}
+
+function onVolumeDownKeyDown() {
+ playbackManager.volumeDown();
+}
+
+function normalizeImages(state) {
+ if (state && state.NowPlayingItem) {
+ const item = state.NowPlayingItem;
+
+ if (!item.ImageTags || !item.ImageTags.Primary) {
+ if (item.PrimaryImageTag) {
+ item.ImageTags = item.ImageTags || {};
+ item.ImageTags.Primary = item.PrimaryImageTag;
}
}
+ if (item.BackdropImageTag && item.BackdropItemId === item.Id) {
+ item.BackdropImageTags = [item.BackdropImageTag];
+ }
+ if (item.BackdropImageTag && item.BackdropItemId !== item.Id) {
+ item.ParentBackdropImageTags = [item.BackdropImageTag];
+ item.ParentBackdropItemId = item.BackdropItemId;
+ }
}
+}
- function getItemsForPlayback(apiClient, query) {
- var userId = apiClient.getCurrentUserId();
+function getItemsForPlayback(apiClient, query) {
+ const userId = apiClient.getCurrentUserId();
- if (query.Ids && query.Ids.split(',').length === 1) {
- return apiClient.getItem(userId, query.Ids.split(',')).then(function (item) {
- return {
- Items: [item],
- TotalRecordCount: 1
- };
- });
+ if (query.Ids && query.Ids.split(',').length === 1) {
+ return apiClient.getItem(userId, query.Ids.split(',')).then(function (item) {
+ return {
+ Items: [item],
+ TotalRecordCount: 1
+ };
+ });
+ } else {
+ query.Limit = query.Limit || 100;
+ query.ExcludeLocationTypes = 'Virtual';
+ query.EnableTotalRecordCount = false;
+
+ return apiClient.getItems(userId, query);
+ }
+}
+
+function bindEventForRelay(instance, eventName) {
+ events.on(instance._castPlayer, eventName, function (e, data) {
+ console.debug('cc: ' + eventName);
+ const state = instance.getPlayerStateInternal(data);
+
+ events.trigger(instance, eventName, [state]);
+ });
+}
+
+function initializeChromecast() {
+ const instance = this;
+ instance._castPlayer = new CastPlayer();
+
+ // To allow the native android app to override
+ document.dispatchEvent(new CustomEvent('chromecastloaded', {
+ detail: {
+ player: instance
+ }
+ }));
+
+ events.on(instance._castPlayer, 'connect', function (e) {
+ if (currentResolve) {
+ sendConnectionResult(true);
} else {
- query.Limit = query.Limit || 100;
- query.ExcludeLocationTypes = 'Virtual';
- query.EnableTotalRecordCount = false;
-
- return apiClient.getItems(userId, query);
+ playbackManager.setActivePlayer(PlayerName, instance.getCurrentTargetInfo());
}
- }
- function bindEventForRelay(instance, eventName) {
- events.on(instance._castPlayer, eventName, function (e, data) {
- console.debug('cc: ' + eventName);
- var state = instance.getPlayerStateInternal(data);
+ console.debug('cc: connect');
+ // Reset this so that statechange will fire
+ instance.lastPlayerData = null;
+ });
- events.trigger(instance, eventName, [state]);
- });
- }
+ events.on(instance._castPlayer, 'playbackstart', function (e, data) {
+ console.debug('cc: playbackstart');
- function initializeChromecast() {
- var instance = this;
- instance._castPlayer = new CastPlayer();
+ instance._castPlayer.initializeCastPlayer();
- // To allow the native android app to override
- document.dispatchEvent(new CustomEvent('chromecastloaded', {
- detail: {
- player: instance
- }
- }));
+ const state = instance.getPlayerStateInternal(data);
+ events.trigger(instance, 'playbackstart', [state]);
+ });
- events.on(instance._castPlayer, 'connect', function (e) {
- if (currentResolve) {
- sendConnectionResult(true);
- } else {
- playbackManager.setActivePlayer(PlayerName, instance.getCurrentTargetInfo());
- }
+ events.on(instance._castPlayer, 'playbackstop', function (e, data) {
+ console.debug('cc: playbackstop');
+ let state = instance.getPlayerStateInternal(data);
- console.debug('cc: connect');
- // Reset this so that statechange will fire
- instance.lastPlayerData = null;
- });
+ events.trigger(instance, 'playbackstop', [state]);
- events.on(instance._castPlayer, 'playbackstart', function (e, data) {
- console.debug('cc: playbackstart');
+ state = instance.lastPlayerData.PlayState || {};
+ const volume = state.VolumeLevel || 0.5;
+ const mute = state.IsMuted || false;
- instance._castPlayer.initializeCastPlayer();
+ // Reset this so the next query doesn't make it appear like content is playing.
+ instance.lastPlayerData = {};
+ instance.lastPlayerData.PlayState = {};
+ instance.lastPlayerData.PlayState.VolumeLevel = volume;
+ instance.lastPlayerData.PlayState.IsMuted = mute;
+ });
- var state = instance.getPlayerStateInternal(data);
- events.trigger(instance, 'playbackstart', [state]);
- });
+ events.on(instance._castPlayer, 'playbackprogress', function (e, data) {
+ console.debug('cc: positionchange');
+ const state = instance.getPlayerStateInternal(data);
- events.on(instance._castPlayer, 'playbackstop', function (e, data) {
- console.debug('cc: playbackstop');
- var state = instance.getPlayerStateInternal(data);
+ events.trigger(instance, 'timeupdate', [state]);
+ });
- events.trigger(instance, 'playbackstop', [state]);
+ bindEventForRelay(instance, 'timeupdate');
+ bindEventForRelay(instance, 'pause');
+ bindEventForRelay(instance, 'unpause');
+ bindEventForRelay(instance, 'volumechange');
+ bindEventForRelay(instance, 'repeatmodechange');
+ bindEventForRelay(instance, 'shufflequeuemodechange');
- state = instance.lastPlayerData.PlayState || {};
- var volume = state.VolumeLevel || 0.5;
- var mute = state.IsMuted || false;
+ events.on(instance._castPlayer, 'playstatechange', function (e, data) {
+ console.debug('cc: playstatechange');
+ const state = instance.getPlayerStateInternal(data);
- // Reset this so the next query doesn't make it appear like content is playing.
- instance.lastPlayerData = {};
- instance.lastPlayerData.PlayState = {};
- instance.lastPlayerData.PlayState.VolumeLevel = volume;
- instance.lastPlayerData.PlayState.IsMuted = mute;
- });
+ events.trigger(instance, 'pause', [state]);
+ });
+}
- events.on(instance._castPlayer, 'playbackprogress', function (e, data) {
- console.debug('cc: positionchange');
- var state = instance.getPlayerStateInternal(data);
-
- events.trigger(instance, 'timeupdate', [state]);
- });
-
- bindEventForRelay(instance, 'timeupdate');
- bindEventForRelay(instance, 'pause');
- bindEventForRelay(instance, 'unpause');
- bindEventForRelay(instance, 'volumechange');
- bindEventForRelay(instance, 'repeatmodechange');
- bindEventForRelay(instance, 'shufflequeuemodechange');
-
- events.on(instance._castPlayer, 'playstatechange', function (e, data) {
- console.debug('cc: playstatechange');
- var state = instance.getPlayerStateInternal(data);
-
- events.trigger(instance, 'pause', [state]);
- });
- }
-
- function ChromecastPlayer() {
+class ChromecastPlayer {
+ constructor() {
// playbackManager needs this
this.name = PlayerName;
this.type = 'mediaplayer';
@@ -580,8 +587,8 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
new castSenderApiLoader.default().load().then(initializeChromecast.bind(this));
}
- ChromecastPlayer.prototype.tryPair = function (target) {
- var castPlayer = this._castPlayer;
+ tryPair(target) {
+ const castPlayer = this._castPlayer;
if (castPlayer.deviceState !== DEVICE_STATE.ACTIVE && castPlayer.isInitialized) {
return new Promise(function (resolve, reject) {
@@ -595,23 +602,23 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
return Promise.reject();
}
- };
+ }
- ChromecastPlayer.prototype.getTargets = function () {
- var targets = [];
+ getTargets() {
+ const targets = [];
if (this._castPlayer && this._castPlayer.hasReceivers) {
targets.push(this.getCurrentTargetInfo());
}
return Promise.resolve(targets);
- };
+ }
// This is a privately used method
- ChromecastPlayer.prototype.getCurrentTargetInfo = function () {
- var appName = null;
+ getCurrentTargetInfo() {
+ let appName = null;
- var castPlayer = this._castPlayer;
+ const castPlayer = this._castPlayer;
if (castPlayer.session && castPlayer.session.receiver && castPlayer.session.receiver.friendlyName) {
appName = castPlayer.session.receiver.friendlyName;
@@ -642,10 +649,10 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
'PlayTrailers'
]
};
- };
+ }
- ChromecastPlayer.prototype.getPlayerStateInternal = function (data) {
- var triggerStateChange = false;
+ getPlayerStateInternal(data) {
+ let triggerStateChange = false;
if (data && !this.lastPlayerData) {
triggerStateChange = true;
}
@@ -662,12 +669,12 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
}
return data;
- };
+ }
- ChromecastPlayer.prototype.playWithCommand = function (options, command) {
+ playWithCommand(options, command) {
if (!options.items) {
- var apiClient = connectionManager.getApiClient(options.serverId);
- var instance = this;
+ const apiClient = connectionManager.getApiClient(options.serverId);
+ const instance = this;
return apiClient.getItem(apiClient.getCurrentUserId(), options.ids[0]).then(function (item) {
options.items = [item];
@@ -683,9 +690,9 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
}
return this._castPlayer.loadMedia(options, command);
- };
+ }
- ChromecastPlayer.prototype.seek = function (position) {
+ seek(position) {
position = parseInt(position);
position = position / 10000000;
@@ -696,55 +703,55 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
},
command: 'Seek'
});
- };
+ }
- ChromecastPlayer.prototype.setAudioStreamIndex = function (index) {
+ setAudioStreamIndex(index) {
this._castPlayer.sendMessage({
options: {
index: index
},
command: 'SetAudioStreamIndex'
});
- };
+ }
- ChromecastPlayer.prototype.setSubtitleStreamIndex = function (index) {
+ setSubtitleStreamIndex(index) {
this._castPlayer.sendMessage({
options: {
index: index
},
command: 'SetSubtitleStreamIndex'
});
- };
+ }
- ChromecastPlayer.prototype.setMaxStreamingBitrate = function (options) {
+ setMaxStreamingBitrate(options) {
this._castPlayer.sendMessage({
options: options,
command: 'SetMaxStreamingBitrate'
});
- };
+ }
- ChromecastPlayer.prototype.isFullscreen = function () {
- var state = this.lastPlayerData || {};
+ isFullscreen() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.IsFullscreen;
- };
+ }
- ChromecastPlayer.prototype.nextTrack = function () {
+ nextTrack() {
this._castPlayer.sendMessage({
options: {},
command: 'NextTrack'
});
- };
+ }
- ChromecastPlayer.prototype.previousTrack = function () {
+ previousTrack() {
this._castPlayer.sendMessage({
options: {},
command: 'PreviousTrack'
});
- };
+ }
- ChromecastPlayer.prototype.volumeDown = function () {
- var vol = this._castPlayer.session.receiver.volume.level;
+ volumeDown() {
+ let vol = this._castPlayer.session.receiver.volume.level;
if (vol == null) {
vol = 0.5;
}
@@ -752,20 +759,20 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
vol = Math.max(vol, 0);
this._castPlayer.session.setReceiverVolumeLevel(vol);
- };
+ }
- ChromecastPlayer.prototype.endSession = function () {
- var instance = this;
+ endSession() {
+ const instance = this;
this.stop().then(function () {
setTimeout(function () {
instance._castPlayer.stopApp();
}, 1000);
});
- };
+ }
- ChromecastPlayer.prototype.volumeUp = function () {
- var vol = this._castPlayer.session.receiver.volume.level;
+ volumeUp() {
+ let vol = this._castPlayer.session.receiver.volume.level;
if (vol == null) {
vol = 0.5;
}
@@ -773,53 +780,53 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
vol = Math.min(vol, 1);
this._castPlayer.session.setReceiverVolumeLevel(vol);
- };
+ }
- ChromecastPlayer.prototype.setVolume = function (vol) {
+ setVolume(vol) {
vol = Math.min(vol, 100);
vol = Math.max(vol, 0);
vol = vol / 100;
this._castPlayer.session.setReceiverVolumeLevel(vol);
- };
+ }
- ChromecastPlayer.prototype.unpause = function () {
+ unpause() {
this._castPlayer.sendMessage({
options: {},
command: 'Unpause'
});
- };
+ }
- ChromecastPlayer.prototype.playPause = function () {
+ playPause() {
this._castPlayer.sendMessage({
options: {},
command: 'PlayPause'
});
- };
+ }
- ChromecastPlayer.prototype.pause = function () {
+ pause() {
this._castPlayer.sendMessage({
options: {},
command: 'Pause'
});
- };
+ }
- ChromecastPlayer.prototype.stop = function () {
+ stop() {
return this._castPlayer.sendMessage({
options: {},
command: 'Stop'
});
- };
+ }
- ChromecastPlayer.prototype.displayContent = function (options) {
+ displayContent(options) {
this._castPlayer.sendMessage({
options: options,
command: 'DisplayContent'
});
- };
+ }
- ChromecastPlayer.prototype.setMute = function (isMuted) {
- var castPlayer = this._castPlayer;
+ setMute(isMuted) {
+ const castPlayer = this._castPlayer;
if (isMuted) {
castPlayer.sendMessage({
@@ -832,21 +839,21 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
command: 'Unmute'
});
}
- };
+ }
- ChromecastPlayer.prototype.getRepeatMode = function () {
- var state = this.lastPlayerData || {};
+ getRepeatMode() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.RepeatMode;
- };
+ }
- ChromecastPlayer.prototype.getQueueShuffleMode = function () {
- var state = this.lastPlayerData || {};
+ getQueueShuffleMode() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.ShuffleMode;
- };
+ }
- ChromecastPlayer.prototype.playTrailers = function (item) {
+ playTrailers(item) {
this._castPlayer.sendMessage({
options: {
ItemId: item.Id,
@@ -854,177 +861,173 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
},
command: 'PlayTrailers'
});
- };
+ }
- ChromecastPlayer.prototype.setRepeatMode = function (mode) {
+ setRepeatMode(mode) {
this._castPlayer.sendMessage({
options: {
RepeatMode: mode
},
command: 'SetRepeatMode'
});
- };
+ }
- ChromecastPlayer.prototype.setQueueShuffleMode = function (value) {
+ setQueueShuffleMode(value) {
this._castPlayer.sendMessage({
options: {
ShuffleMode: value
},
command: 'SetShuffleQueue'
});
- };
+ }
- ChromecastPlayer.prototype.toggleMute = function () {
+ toggleMute() {
this._castPlayer.sendMessage({
options: {},
command: 'ToggleMute'
});
- };
+ }
- ChromecastPlayer.prototype.audioTracks = function () {
- var state = this.lastPlayerData || {};
+ audioTracks() {
+ let state = this.lastPlayerData || {};
state = state.NowPlayingItem || {};
- var streams = state.MediaStreams || [];
+ const streams = state.MediaStreams || [];
return streams.filter(function (s) {
return s.Type === 'Audio';
});
- };
+ }
- ChromecastPlayer.prototype.getAudioStreamIndex = function () {
- var state = this.lastPlayerData || {};
+ getAudioStreamIndex() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.AudioStreamIndex;
- };
+ }
- ChromecastPlayer.prototype.subtitleTracks = function () {
- var state = this.lastPlayerData || {};
+ subtitleTracks() {
+ let state = this.lastPlayerData || {};
state = state.NowPlayingItem || {};
- var streams = state.MediaStreams || [];
+ const streams = state.MediaStreams || [];
return streams.filter(function (s) {
return s.Type === 'Subtitle';
});
- };
+ }
- ChromecastPlayer.prototype.getSubtitleStreamIndex = function () {
- var state = this.lastPlayerData || {};
+ getSubtitleStreamIndex() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.SubtitleStreamIndex;
- };
+ }
- ChromecastPlayer.prototype.getMaxStreamingBitrate = function () {
- var state = this.lastPlayerData || {};
+ getMaxStreamingBitrate() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.MaxStreamingBitrate;
- };
+ }
- ChromecastPlayer.prototype.getVolume = function () {
- var state = this.lastPlayerData || {};
+ getVolume() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.VolumeLevel == null ? 100 : state.VolumeLevel;
- };
+ }
- ChromecastPlayer.prototype.isPlaying = function () {
- var state = this.lastPlayerData || {};
+ isPlaying() {
+ const state = this.lastPlayerData || {};
return state.NowPlayingItem != null;
- };
+ }
- ChromecastPlayer.prototype.isPlayingVideo = function () {
- var state = this.lastPlayerData || {};
+ isPlayingVideo() {
+ let state = this.lastPlayerData || {};
state = state.NowPlayingItem || {};
return state.MediaType === 'Video';
- };
+ }
- ChromecastPlayer.prototype.isPlayingAudio = function () {
- var state = this.lastPlayerData || {};
+ isPlayingAudio() {
+ let state = this.lastPlayerData || {};
state = state.NowPlayingItem || {};
return state.MediaType === 'Audio';
- };
+ }
- ChromecastPlayer.prototype.currentTime = function (val) {
+ currentTime(val) {
if (val != null) {
return this.seek(val);
}
- var state = this.lastPlayerData || {};
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.PositionTicks;
- };
+ }
- ChromecastPlayer.prototype.duration = function () {
- var state = this.lastPlayerData || {};
+ duration() {
+ let state = this.lastPlayerData || {};
state = state.NowPlayingItem || {};
return state.RunTimeTicks;
- };
+ }
- ChromecastPlayer.prototype.getBufferedRanges = function () {
- var state = this.lastPlayerData || {};
+ getBufferedRanges() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.BufferedRanges || [];
- };
+ }
- ChromecastPlayer.prototype.paused = function () {
- var state = this.lastPlayerData || {};
+ paused() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.IsPaused;
- };
+ }
- ChromecastPlayer.prototype.isMuted = function () {
- var state = this.lastPlayerData || {};
+ isMuted() {
+ let state = this.lastPlayerData || {};
state = state.PlayState || {};
return state.IsMuted;
- };
+ }
- ChromecastPlayer.prototype.shuffle = function (item) {
- var apiClient = connectionManager.getApiClient(item.ServerId);
- var userId = apiClient.getCurrentUserId();
+ shuffle(item) {
+ const apiClient = connectionManager.getApiClient(item.ServerId);
+ const userId = apiClient.getCurrentUserId();
- var instance = this;
+ const instance = this;
apiClient.getItem(userId, item.Id).then(function (item) {
instance.playWithCommand({
-
items: [item]
-
}, 'Shuffle');
});
- };
+ }
- ChromecastPlayer.prototype.instantMix = function (item) {
- var apiClient = connectionManager.getApiClient(item.ServerId);
- var userId = apiClient.getCurrentUserId();
+ instantMix(item) {
+ const apiClient = connectionManager.getApiClient(item.ServerId);
+ const userId = apiClient.getCurrentUserId();
- var instance = this;
+ const instance = this;
apiClient.getItem(userId, item.Id).then(function (item) {
instance.playWithCommand({
-
items: [item]
-
}, 'InstantMix');
});
- };
+ }
- ChromecastPlayer.prototype.canPlayMediaType = function (mediaType) {
+ canPlayMediaType(mediaType) {
mediaType = (mediaType || '').toLowerCase();
return mediaType === 'audio' || mediaType === 'video';
- };
+ }
- ChromecastPlayer.prototype.canQueueMediaType = function (mediaType) {
+ canQueueMediaType(mediaType) {
return this.canPlayMediaType(mediaType);
- };
+ }
- ChromecastPlayer.prototype.queue = function (options) {
+ queue(options) {
this.playWithCommand(options, 'PlayLast');
- };
+ }
- ChromecastPlayer.prototype.queueNext = function (options) {
+ queueNext(options) {
this.playWithCommand(options, 'PlayNext');
- };
+ }
- ChromecastPlayer.prototype.play = function (options) {
+ play(options) {
if (options.items) {
return this.playWithCommand(options, 'PlayNow');
} else {
@@ -1032,50 +1035,48 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
throw new Error('serverId required!');
}
- var instance = this;
- var apiClient = connectionManager.getApiClient(options.serverId);
+ const instance = this;
+ const apiClient = connectionManager.getApiClient(options.serverId);
return getItemsForPlayback(apiClient, {
-
Ids: options.ids.join(',')
-
}).then(function (result) {
options.items = result.Items;
return instance.playWithCommand(options, 'PlayNow');
});
}
- };
+ }
- ChromecastPlayer.prototype.toggleFullscreen = function () {
+ toggleFullscreen() {
// not supported
- };
+ }
- ChromecastPlayer.prototype.beginPlayerUpdates = function () {
+ beginPlayerUpdates() {
// Setup polling here
- };
+ }
- ChromecastPlayer.prototype.endPlayerUpdates = function () {
+ endPlayerUpdates() {
// Stop polling here
- };
+ }
- ChromecastPlayer.prototype.getPlaylist = function () {
+ getPlaylist() {
return Promise.resolve([]);
- };
+ }
- ChromecastPlayer.prototype.getCurrentPlaylistItemId = function () {
- };
+ getCurrentPlaylistItemId() {
+ }
- ChromecastPlayer.prototype.setCurrentPlaylistItem = function (playlistItemId) {
+ setCurrentPlaylistItem(playlistItemId) {
return Promise.resolve();
- };
+ }
- ChromecastPlayer.prototype.removeFromPlaylist = function (playlistItemIds) {
+ removeFromPlaylist(playlistItemIds) {
return Promise.resolve();
- };
+ }
- ChromecastPlayer.prototype.getPlayerState = function () {
+ getPlayerState() {
return this.getPlayerStateInternal() || {};
- };
+ }
+}
- return ChromecastPlayer;
-});
+export default ChromecastPlayer;
diff --git a/src/plugins/logoScreensaver/plugin.js b/src/plugins/logoScreensaver/plugin.js
index bdd1d34e79..61b8f8a6d6 100644
--- a/src/plugins/logoScreensaver/plugin.js
+++ b/src/plugins/logoScreensaver/plugin.js
@@ -1,165 +1,165 @@
-define(['pluginManager'], function (pluginManager) {
- return function () {
- var self = this;
+import pluginManager from 'pluginManager';
- self.name = 'Logo ScreenSaver';
- self.type = 'screensaver';
- self.id = 'logoscreensaver';
- self.supportsAnonymous = true;
+export default function () {
+ const self = this;
- var interval;
+ self.name = 'Logo ScreenSaver';
+ self.type = 'screensaver';
+ self.id = 'logoscreensaver';
+ self.supportsAnonymous = true;
- function animate() {
- var animations = [
+ let interval;
- bounceInLeft,
- bounceInRight,
- swing,
- tada,
- wobble,
- rotateIn,
- rotateOut
- ];
+ function animate() {
+ const animations = [
- var elem = document.querySelector('.logoScreenSaverImage');
+ bounceInLeft,
+ bounceInRight,
+ swing,
+ tada,
+ wobble,
+ rotateIn,
+ rotateOut
+ ];
- if (elem && elem.animate) {
- var random = getRandomInt(0, animations.length - 1);
+ const elem = document.querySelector('.logoScreenSaverImage');
- animations[random](elem, 1);
+ if (elem && elem.animate) {
+ const random = getRandomInt(0, animations.length - 1);
+
+ animations[random](elem, 1);
+ }
+ }
+
+ function getRandomInt(min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+ }
+
+ function bounceInLeft(elem, iterations) {
+ const keyframes = [
+ { transform: 'translate3d(-3000px, 0, 0)', opacity: '0', offset: 0 },
+ { transform: 'translate3d(25px, 0, 0)', opacity: '1', offset: 0.6 },
+ { transform: 'translate3d(-100px, 0, 0)', offset: 0.75 },
+ { transform: 'translate3d(5px, 0, 0)', offset: 0.9 },
+ { transform: 'none', opacity: '1', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations, easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' };
+ return elem.animate(keyframes, timing);
+ }
+
+ function bounceInRight(elem, iterations) {
+ const keyframes = [
+ { transform: 'translate3d(3000px, 0, 0)', opacity: '0', offset: 0 },
+ { transform: 'translate3d(-25px, 0, 0)', opacity: '1', offset: 0.6 },
+ { transform: 'translate3d(100px, 0, 0)', offset: 0.75 },
+ { transform: 'translate3d(-5px, 0, 0)', offset: 0.9 },
+ { transform: 'none', opacity: '1', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations, easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' };
+ return elem.animate(keyframes, timing);
+ }
+
+ function swing(elem, iterations) {
+ const keyframes = [
+ { transform: 'translate(0%)', offset: 0 },
+ { transform: 'rotate3d(0, 0, 1, 15deg)', offset: 0.2 },
+ { transform: 'rotate3d(0, 0, 1, -10deg)', offset: 0.4 },
+ { transform: 'rotate3d(0, 0, 1, 5deg)', offset: 0.6 },
+ { transform: 'rotate3d(0, 0, 1, -5deg)', offset: 0.8 },
+ { transform: 'rotate3d(0, 0, 1, 0deg)', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations };
+ return elem.animate(keyframes, timing);
+ }
+
+ function tada(elem, iterations) {
+ const keyframes = [
+ { transform: 'scale3d(1, 1, 1)', offset: 0 },
+ { transform: 'scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)', offset: 0.1 },
+ { transform: 'scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)', offset: 0.2 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.3 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.4 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.5 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.6 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.7 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.8 },
+ { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.9 },
+ { transform: 'scale3d(1, 1, 1)', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations };
+ return elem.animate(keyframes, timing);
+ }
+
+ function wobble(elem, iterations) {
+ const keyframes = [
+ { transform: 'translate(0%)', offset: 0 },
+ { transform: 'translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)', offset: 0.15 },
+ { transform: 'translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)', offset: 0.45 },
+ { transform: 'translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)', offset: 0.6 },
+ { transform: 'translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)', offset: 0.75 },
+ { transform: 'translateX(0%)', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations };
+ return elem.animate(keyframes, timing);
+ }
+
+ function rotateIn(elem, iterations) {
+ const keyframes = [{ transform: 'rotate3d(0, 0, 1, -200deg)', opacity: '0', transformOrigin: 'center', offset: 0 },
+ { transform: 'none', opacity: '1', transformOrigin: 'center', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations };
+ return elem.animate(keyframes, timing);
+ }
+
+ function rotateOut(elem, iterations) {
+ const keyframes = [{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 0 },
+ { transform: 'rotate3d(0, 0, 1, 200deg)', opacity: '0', transformOrigin: 'center', offset: 1 }];
+ const timing = { duration: 900, iterations: iterations };
+ return elem.animate(keyframes, timing);
+ }
+
+ function fadeOut(elem, iterations) {
+ const keyframes = [
+ { opacity: '1', offset: 0 },
+ { opacity: '0', offset: 1 }];
+ const timing = { duration: 400, iterations: iterations };
+ return elem.animate(keyframes, timing);
+ }
+
+ function stopInterval() {
+ if (interval) {
+ clearInterval(interval);
+ interval = null;
+ }
+ }
+
+ self.show = function () {
+ import('css!' + pluginManager.mapPath(self, 'style.css')).then(() => {
+ let elem = document.querySelector('.logoScreenSaver');
+
+ if (!elem) {
+ elem = document.createElement('div');
+ elem.classList.add('logoScreenSaver');
+ document.body.appendChild(elem);
+
+ elem.innerHTML = '

';
}
- }
- function getRandomInt(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- }
-
- function bounceInLeft(elem, iterations) {
- var keyframes = [
- { transform: 'translate3d(-3000px, 0, 0)', opacity: '0', offset: 0 },
- { transform: 'translate3d(25px, 0, 0)', opacity: '1', offset: 0.6 },
- { transform: 'translate3d(-100px, 0, 0)', offset: 0.75 },
- { transform: 'translate3d(5px, 0, 0)', offset: 0.9 },
- { transform: 'none', opacity: '1', offset: 1 }];
- var timing = { duration: 900, iterations: iterations, easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' };
- return elem.animate(keyframes, timing);
- }
-
- function bounceInRight(elem, iterations) {
- var keyframes = [
- { transform: 'translate3d(3000px, 0, 0)', opacity: '0', offset: 0 },
- { transform: 'translate3d(-25px, 0, 0)', opacity: '1', offset: 0.6 },
- { transform: 'translate3d(100px, 0, 0)', offset: 0.75 },
- { transform: 'translate3d(-5px, 0, 0)', offset: 0.9 },
- { transform: 'none', opacity: '1', offset: 1 }];
- var timing = { duration: 900, iterations: iterations, easing: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)' };
- return elem.animate(keyframes, timing);
- }
-
- function swing(elem, iterations) {
- var keyframes = [
- { transform: 'translate(0%)', offset: 0 },
- { transform: 'rotate3d(0, 0, 1, 15deg)', offset: 0.2 },
- { transform: 'rotate3d(0, 0, 1, -10deg)', offset: 0.4 },
- { transform: 'rotate3d(0, 0, 1, 5deg)', offset: 0.6 },
- { transform: 'rotate3d(0, 0, 1, -5deg)', offset: 0.8 },
- { transform: 'rotate3d(0, 0, 1, 0deg)', offset: 1 }];
- var timing = { duration: 900, iterations: iterations };
- return elem.animate(keyframes, timing);
- }
-
- function tada(elem, iterations) {
- var keyframes = [
- { transform: 'scale3d(1, 1, 1)', offset: 0 },
- { transform: 'scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)', offset: 0.1 },
- { transform: 'scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)', offset: 0.2 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.3 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.4 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.5 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.6 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.7 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)', offset: 0.8 },
- { transform: 'scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)', offset: 0.9 },
- { transform: 'scale3d(1, 1, 1)', offset: 1 }];
- var timing = { duration: 900, iterations: iterations };
- return elem.animate(keyframes, timing);
- }
-
- function wobble(elem, iterations) {
- var keyframes = [
- { transform: 'translate(0%)', offset: 0 },
- { transform: 'translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)', offset: 0.15 },
- { transform: 'translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)', offset: 0.45 },
- { transform: 'translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)', offset: 0.6 },
- { transform: 'translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)', offset: 0.75 },
- { transform: 'translateX(0%)', offset: 1 }];
- var timing = { duration: 900, iterations: iterations };
- return elem.animate(keyframes, timing);
- }
-
- function rotateIn(elem, iterations) {
- var keyframes = [{ transform: 'rotate3d(0, 0, 1, -200deg)', opacity: '0', transformOrigin: 'center', offset: 0 },
- { transform: 'none', opacity: '1', transformOrigin: 'center', offset: 1 }];
- var timing = { duration: 900, iterations: iterations };
- return elem.animate(keyframes, timing);
- }
-
- function rotateOut(elem, iterations) {
- var keyframes = [{ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 0 },
- { transform: 'rotate3d(0, 0, 1, 200deg)', opacity: '0', transformOrigin: 'center', offset: 1 }];
- var timing = { duration: 900, iterations: iterations };
- return elem.animate(keyframes, timing);
- }
-
- function fadeOut(elem, iterations) {
- var keyframes = [
- { opacity: '1', offset: 0 },
- { opacity: '0', offset: 1 }];
- var timing = { duration: 400, iterations: iterations };
- return elem.animate(keyframes, timing);
- }
-
- function stopInterval() {
- if (interval) {
- clearInterval(interval);
- interval = null;
- }
- }
-
- self.show = function () {
- require(['css!' + pluginManager.mapPath(self, 'style.css')], function () {
- var elem = document.querySelector('.logoScreenSaver');
-
- if (!elem) {
- elem = document.createElement('div');
- elem.classList.add('logoScreenSaver');
- document.body.appendChild(elem);
-
- elem.innerHTML = '

';
- }
-
- stopInterval();
- interval = setInterval(animate, 3000);
- });
- };
-
- self.hide = function () {
stopInterval();
-
- var elem = document.querySelector('.logoScreenSaver');
-
- if (elem) {
- var onAnimationFinish = function () {
- elem.parentNode.removeChild(elem);
- };
-
- if (elem.animate) {
- var animation = fadeOut(elem, 1);
- animation.onfinish = onAnimationFinish;
- } else {
- onAnimationFinish();
- }
- }
- };
+ interval = setInterval(animate, 3000);
+ });
};
-});
+
+ self.hide = function () {
+ stopInterval();
+
+ const elem = document.querySelector('.logoScreenSaver');
+
+ if (elem) {
+ const onAnimationFinish = function () {
+ elem.parentNode.removeChild(elem);
+ };
+
+ if (elem.animate) {
+ const animation = fadeOut(elem, 1);
+ animation.onfinish = onAnimationFinish;
+ } else {
+ onAnimationFinish();
+ }
+ }
+ };
+}
diff --git a/src/plugins/playAccessValidation/plugin.js b/src/plugins/playAccessValidation/plugin.js
index 5148d2b821..a9fbeda9a9 100644
--- a/src/plugins/playAccessValidation/plugin.js
+++ b/src/plugins/playAccessValidation/plugin.js
@@ -1,33 +1,26 @@
-define(['connectionManager', 'globalize'], function (connectionManager, globalize) {
- 'use strict';
+import connectionManager from 'connectionManager';
+import globalize from 'globalize';
- function getRequirePromise(deps) {
- return new Promise(function (resolve, reject) {
- require(deps, resolve);
- });
- }
+function showErrorMessage() {
+ return import('alert').then(({default: alert}) => {
+ return alert(globalize.translate('MessagePlayAccessRestricted'));
+ });
+}
- function showErrorMessage() {
- return getRequirePromise(['alert']).then(function (alert) {
- return alert(globalize.translate('MessagePlayAccessRestricted')).then(function () {
- return Promise.reject();
- });
- });
- }
-
- function PlayAccessValidation() {
+class PlayAccessValidation {
+ constructor() {
this.name = 'Playback validation';
this.type = 'preplayintercept';
this.id = 'playaccessvalidation';
this.order = -2;
}
- PlayAccessValidation.prototype.intercept = function (options) {
- var item = options.item;
+ intercept(options) {
+ const item = options.item;
if (!item) {
return Promise.resolve();
}
- var serverId = item.ServerId;
+ const serverId = item.ServerId;
if (!serverId) {
return Promise.resolve();
}
@@ -44,7 +37,7 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz
return showErrorMessage();
});
- };
+ }
+}
- return PlayAccessValidation;
-});
+export default PlayAccessValidation;
diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js
index 46cda51e55..83d683a690 100644
--- a/src/scripts/libraryBrowser.js
+++ b/src/scripts/libraryBrowser.js
@@ -119,7 +119,10 @@ export function getQueryPagingHtml (options) {
}
export function showSortMenu (options) {
- require(['dialogHelper', 'emby-radio'], function (dialogHelper) {
+ Promise.all([
+ import('dialogHelper'),
+ import('emby-radio')
+ ]).then(([{default: dialogHelper}]) => {
function onSortByChange() {
var newValue = this.value;
diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js
index 376b19f70d..0780916a7c 100644
--- a/src/scripts/libraryMenu.js
+++ b/src/scripts/libraryMenu.js
@@ -1,12 +1,26 @@
-define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', 'viewManager', 'libraryBrowser', 'appRouter', 'apphost', 'playbackManager', 'syncPlayManager', 'groupSelectionMenu', 'browser', 'globalize', 'scripts/imagehelper', 'paper-icon-button-light', 'material-icons', 'scrollStyles', 'flexStyles'], function (dom, layoutManager, inputManager, connectionManager, events, viewManager, libraryBrowser, appRouter, appHost, playbackManager, syncPlayManager, groupSelectionMenu, browser, globalize, imageHelper) {
- 'use strict';
+import dom from 'dom';
+import layoutManager from 'layoutManager';
+import inputManager from 'inputManager';
+import connectionManager from 'connectionManager';
+import events from 'events';
+import viewManager from 'viewManager';
+import appRouter from 'appRouter';
+import appHost from 'apphost';
+import playbackManager from 'playbackManager';
+import syncPlayManager from 'syncPlayManager';
+import groupSelectionMenu from 'groupSelectionMenu';
+import browser from 'browser';
+import globalize from 'globalize';
+import imageHelper from 'scripts/imagehelper';
+import 'paper-icon-button-light';
+import 'material-icons';
+import 'scrollStyles';
+import 'flexStyles';
- viewManager = viewManager.default || viewManager;
- playbackManager = playbackManager.default || playbackManager;
- browser = browser.default || browser;
+/* eslint-disable indent */
function renderHeader() {
- var html = '';
+ let html = '';
html += '