diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index b18bf2bd01..53ae8b770c 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.3.65", - "_release": "1.3.65", + "version": "1.3.70", + "_release": "1.3.70", "_resolution": { "type": "version", - "tag": "1.3.65", - "commit": "8a512f0acee81e973007eb43566b7d3aebb7a613" + "tag": "1.3.70", + "commit": "5430fc4c71fcc8e5929ee2e12120e2dc7e8c9011" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js b/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js index fa63a886f1..5a939d6712 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js @@ -89,7 +89,7 @@ dialogHelper.close(dlg); require(['toast'], function (toast) { - toast(globalize.translate('MessageItemsAdded')); + toast(globalize.translate('sharedcomponents#MessageItemsAdded')); }); }); } @@ -118,7 +118,7 @@ var html = ''; - html += ''; + html += ''; html += result.Items.map(function (i) { @@ -201,7 +201,7 @@ } }); - content.querySelector('.btnSubmit').addEventListener('submit', function () { + content.querySelector('.btnSubmit').addEventListener('click', function () { // Do a fake form submit this the button isn't a real submit button var fakeSubmit = document.createElement('input'); fakeSubmit.setAttribute('type', 'submit'); @@ -216,7 +216,7 @@ }, 500); }); - content.querySelector('.newCollectionForm').addEventListener('submit', onSubmit); + content.querySelector('form').addEventListener('submit', onSubmit); content.querySelector('.fldSelectedItemIds', content).value = items.join(','); diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js index 06270feae6..e03b51d86d 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js @@ -3,15 +3,12 @@ var globalOnOpenCallback; function enableAnimation() { + if (browser.animate) { return true; } - if (browser.mobile || browser.tv) { - return false; - } - - return true; + return false; } function dialogHashHandler(dlg, hash, resolve) { diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-select/emby-select.css b/dashboard-ui/bower_components/emby-webcomponents/emby-select/emby-select.css index 483579441a..867b08e8a2 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-select/emby-select.css +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-select/emby-select.css @@ -16,7 +16,7 @@ font-family: inherit; font-weight: inherit; color: inherit; - padding: .6em .8em .3em 0; + padding: .35em .8em .3em 0; cursor: pointer; outline: none !important; width: 100%; diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js index 7913209747..911078e397 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js @@ -1,4 +1,4 @@ -define(['apphost', 'globalize', 'connectionManager'], function (appHost, globalize, connectionManager) { +define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (appHost, globalize, connectionManager, itemHelper) { function getCommands(options) { @@ -11,10 +11,19 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali var commands = []; - commands.push({ - name: globalize.translate('sharedcomponents#AddToCollection'), - id: 'addtocollection' - }); + if (itemHelper.supportsAddingToCollection(item)) { + commands.push({ + name: globalize.translate('sharedcomponents#AddToCollection'), + id: 'addtocollection' + }); + } + + if (itemHelper.supportsAddingToPlaylist(item)) { + commands.push({ + name: globalize.translate('sharedcomponents#AddToPlaylist'), + id: 'addtoplaylist' + }); + } if (item.CanDelete) { commands.push({ @@ -71,6 +80,18 @@ define(['apphost', 'globalize', 'connectionManager'], function (appHost, globali }); break; } + case 'addtoplaylist': + { + require(['playlistEditor'], function (playlistEditor) { + + new playlistEditor().show({ + items: [itemId], + serverId: serverId + + }).then(reject, reject); + }); + break; + } case 'download': { require(['fileDownloader'], function (fileDownloader) { diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js b/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js index 6bb706adbd..b7f0a6448a 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js @@ -48,7 +48,25 @@ define([], function () { return name; } + function supportsAddingToCollection(item) { + var invalidTypes = ['Person', 'Genre', 'MusicGenre', 'Studio', 'GameGenre', 'BoxSet', 'Playlist', 'UserView', 'CollectionFolder', 'Audio', 'Episode', 'TvChannel', 'Program', 'MusicAlbum', 'Timer']; + + return !item.CollectionType && invalidTypes.indexOf(item.Type) == -1 && item.MediaType != 'Photo'; + } + + function supportsAddingToPlaylist(item) { + if (item.Type == 'Program') { + return false; + } + if (item.Type == 'Timer') { + return false; + } + return item.RunTimeTicks || item.IsFolder || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "MusicArtist"; + } + return { - getDisplayName: getDisplayName + getDisplayName: getDisplayName, + supportsAddingToCollection: supportsAddingToCollection, + supportsAddingToPlaylist: supportsAddingToPlaylist }; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js b/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js new file mode 100644 index 0000000000..a423a07ce9 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js @@ -0,0 +1,279 @@ +define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager', 'scrollHelper', 'embyRouter', 'globalize', 'paper-checkbox', 'paper-input', 'paper-icon-button-light', 'emby-select', 'html!./../icons/nav.html', 'css!./../formdialog'], function (shell, dialogHelper, loading, layoutManager, connectionManager, scrollHelper, embyRouter, globalize) { + + var lastPlaylistId = ''; + var currentServerId; + + function parentWithClass(elem, className) { + + while (!elem.classList || !elem.classList.contains(className)) { + elem = elem.parentNode; + + if (!elem) { + return null; + } + } + + return elem; + } + + function onSubmit(e) { + + loading.show(); + + var panel = parentWithClass(this, 'dialog'); + + var playlistId = panel.querySelector('#selectPlaylistToAddTo').value; + var apiClient = connectionManager.getApiClient(currentServerId); + + if (playlistId) { + lastPlaylistId = playlistId; + addToPlaylist(apiClient, panel, playlistId); + } else { + createPlaylist(apiClient, panel); + } + + e.preventDefault(); + return false; + } + + function createPlaylist(apiClient, dlg) { + + var url = apiClient.getUrl("Playlists", { + + Name: dlg.querySelector('#txtNewPlaylistName').value, + Ids: dlg.querySelector('.fldSelectedItemIds').value || '', + userId: apiClient.getCurrentUserId() + + }); + + apiClient.ajax({ + type: "POST", + url: url, + dataType: "json" + + }).then(function (result) { + + loading.hide(); + + var id = result.Id; + + dialogHelper.close(dlg); + redirectToPlaylist(apiClient, id); + }); + } + + function redirectToPlaylist(apiClient, id) { + + apiClient.getItem(apiClient.getCurrentUserId(), id).then(function (item) { + + embyRouter.showItem(item); + }); + } + + function addToPlaylist(apiClient, dlg, id) { + + var url = apiClient.getUrl("Playlists/" + id + "/Items", { + + Ids: dlg.querySelector('.fldSelectedItemIds').value || '', + userId: apiClient.getCurrentUserId() + }); + + apiClient.ajax({ + type: "POST", + url: url + + }).then(function () { + + loading.hide(); + + dialogHelper.close(dlg); + + require(['toast'], function (toast) { + toast(globalize.translate('sharedcomponents#MessageItemsAdded')); + }); + }); + } + + function triggerChange(select) { + select.dispatchEvent(new CustomEvent('change', {})); + } + + function populatePlaylists(panel) { + + var select = panel.querySelector('#selectPlaylistToAddTo'); + + loading.hide(); + + panel.querySelector('.newPlaylistInfo').classList.add('hide'); + + var options = { + + Recursive: true, + IncludeItemTypes: "Playlist", + SortBy: 'SortName' + }; + + var apiClient = connectionManager.getApiClient(currentServerId); + apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) { + + var html = ''; + + html += ''; + + html += result.Items.map(function (i) { + + return ''; + }); + + select.innerHTML = html; + select.value = lastPlaylistId || ''; + triggerChange(select); + + loading.hide(); + }); + } + + function getEditorHtml() { + + var html = ''; + + html += '
'; + html += '
'; + html += '
'; + + html += '
'; + html += ''; + html += '
'; + + html += '
'; + + html += '
'; + html += ''; + html += '
'; + + html += '
'; + + // newPlaylistInfo + html += '
'; + + html += '
'; + html += '
'; + html += '' + globalize.translate('sharedcomponents#ButtonOk') + ''; + html += '
'; + + html += ''; + + html += '
'; + html += '
'; + html += '
'; + + return html; + } + + function initEditor(content, items) { + + content.querySelector('#selectPlaylistToAddTo').addEventListener('change', function () { + if (this.value) { + content.querySelector('.newPlaylistInfo').classList.add('hide'); + content.querySelector('#txtNewPlaylistName').removeAttribute('required'); + } else { + content.querySelector('.newPlaylistInfo').classList.remove('hide'); + content.querySelector('#txtNewPlaylistName').setAttribute('required', 'required'); + } + }); + + populatePlaylists(content); + + content.querySelector('.btnSubmit').addEventListener('click', function () { + // Do a fake form submit this the button isn't a real submit button + var fakeSubmit = document.createElement('input'); + fakeSubmit.setAttribute('type', 'submit'); + fakeSubmit.style.display = 'none'; + var form = content.querySelector('form'); + form.appendChild(fakeSubmit); + fakeSubmit.click(); + + // Seeing issues in smart tv browsers where the form does not get submitted if the button is removed prior to the submission actually happening + setTimeout(function () { + form.removeChild(fakeSubmit); + }, 500); + }); + + content.querySelector('form').addEventListener('submit', onSubmit); + + content.querySelector('.fldSelectedItemIds', content).value = items.join(','); + + if (items.length) { + content.querySelector('.fldSelectPlaylist').classList.remove('hide'); + populatePlaylists(content); + } else { + content.querySelector('.fldSelectPlaylist').classList.add('hide'); + + var selectPlaylistToAddTo = content.querySelector('#selectPlaylistToAddTo'); + selectPlaylistToAddTo.innerHTML = ''; + selectPlaylistToAddTo.value = ''; + triggerChange(selectPlaylistToAddTo); + } + } + + function playlisteditor() { + + var self = this; + + self.show = function (options) { + + var items = options.items || {}; + currentServerId = options.serverId; + + var dialogOptions = { + removeOnClose: true, + scrollY: false + }; + + if (layoutManager.tv) { + dialogOptions.size = 'fullscreen'; + } else { + dialogOptions.size = 'small'; + } + + var dlg = dialogHelper.createDialog(dialogOptions); + + dlg.classList.add('formDialog'); + + var html = ''; + var title = globalize.translate('sharedcomponents#AddToPlaylist'); + + html += '
'; + html += ''; + html += '
'; + html += title; + html += '
'; + + html += '
'; + + html += getEditorHtml(); + + dlg.innerHTML = html; + document.body.appendChild(dlg); + + initEditor(dlg, items); + + dlg.querySelector('.btnCancel').addEventListener('click', function () { + + dialogHelper.close(dlg); + }); + + if (layoutManager.tv) { + scrollHelper.centerFocus.on(dlg.querySelector('.dialogContent'), false); + } + + return new Promise(function (resolve, reject) { + + dlg.addEventListener('close', resolve); + dialogHelper.open(dlg); + }); + }; + } + + return playlisteditor; +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json index 5f8d5214ed..df48e73a80 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json @@ -62,5 +62,9 @@ "NewCollectionHelp": "Collections allow you to create personalized groupings of movies and other library content.", "SearchForCollectionInternetMetadata": "Search the internet for artwork and metadata", "LabelName": "Name:", - "NewCollectionNameExample": "Example: Star Wars Collection" + "NewCollectionNameExample": "Example: Star Wars Collection", + "MessageItemsAdded": "Items added.", + "OptionNew": "New...", + "LabelPlaylist": "Playlist:", + "AddToPlaylist": "Add to Playlist" } \ No newline at end of file diff --git a/dashboard-ui/components/playlisteditor/playlisteditor.js b/dashboard-ui/components/playlisteditor/playlisteditor.js deleted file mode 100644 index 8f90e9a03e..0000000000 --- a/dashboard-ui/components/playlisteditor/playlisteditor.js +++ /dev/null @@ -1,236 +0,0 @@ -define(['dialogHelper', 'jQuery', 'paper-input', 'paper-icon-button-light'], function (dialogHelper, $) { - - var lastPlaylistId = ''; - - function redirectToPlaylist(id) { - - var context = getParameterByName('context'); - - ApiClient.getItem(Dashboard.getCurrentUserId(), id).then(function (item) { - - Dashboard.navigate(LibraryBrowser.getHref(item, context)); - - }); - } - - function onAddToPlaylistFormSubmit() { - - Dashboard.showLoadingMsg(); - - var panel = $(this).parents('.dialog')[0]; - - var playlistId = $('#selectPlaylistToAddTo', panel).val(); - - if (playlistId) { - lastPlaylistId = playlistId; - addToPlaylist(panel, playlistId); - } else { - createPlaylist(panel); - } - - return false; - } - - function createPlaylist(dlg) { - - var url = ApiClient.getUrl("Playlists", { - - Name: $('#txtNewPlaylistName', dlg).val(), - Ids: $('.fldSelectedItemIds', dlg).val() || '', - userId: Dashboard.getCurrentUserId() - - }); - - ApiClient.ajax({ - type: "POST", - url: url, - dataType: "json" - - }).then(function (result) { - - Dashboard.hideLoadingMsg(); - - var id = result.Id; - - dialogHelper.close(dlg); - redirectToPlaylist(id); - }); - } - - function addToPlaylist(dlg, id) { - - var url = ApiClient.getUrl("Playlists/" + id + "/Items", { - - Ids: $('.fldSelectedItemIds', dlg).val() || '', - userId: Dashboard.getCurrentUserId() - }); - - ApiClient.ajax({ - type: "POST", - url: url - - }).then(function () { - - Dashboard.hideLoadingMsg(); - - dialogHelper.close(dlg); - require(['toast'], function (toast) { - toast(Globalize.translate('MessageAddedToPlaylistSuccess')); - }); - - }); - } - - function onDialogClosed() { - - $(this).remove(); - Dashboard.hideLoadingMsg(); - } - - function populatePlaylists(panel) { - - var select = $('#selectPlaylistToAddTo', panel); - - if (!select.length) { - - $('#txtNewPlaylistName', panel).val('').focus(); - return; - } - - Dashboard.showLoadingMsg(); - - $('.newPlaylistInfo', panel).hide(); - - var options = { - - Recursive: true, - IncludeItemTypes: "Playlist", - SortBy: 'SortName' - }; - - ApiClient.getItems(Dashboard.getCurrentUserId(), options).then(function (result) { - - var html = ''; - - html += ''; - - html += result.Items.map(function (i) { - - return ''; - }); - - select.html(html).val(lastPlaylistId || '').trigger('change'); - - Dashboard.hideLoadingMsg(); - }); - } - - function getEditorHtml() { - - var html = ''; - - html += '
'; - - html += '
'; - html += ''; - html += ''; - html += '
'; - - html += '
'; - - html += '
'; - html += ''; - html += '
'; - - html += '
'; - - // newPlaylistInfo - html += '
'; - - html += '
'; - html += '
'; - html += ''; - html += '
'; - - html += ''; - - html += '
'; - - return html; - } - - function initEditor(content, items) { - - $('#selectPlaylistToAddTo', content).on('change', function () { - - if (this.value) { - $('.newPlaylistInfo', content).hide(); - $('input', content).removeAttr('required'); - } else { - $('.newPlaylistInfo', content).show(); - $('input', content).attr('required', 'required'); - } - - }).trigger('change'); - - populatePlaylists(content); - - $('form', content).on('submit', onAddToPlaylistFormSubmit); - - $('.fldSelectedItemIds', content).val(items.join(',')); - - if (items.length) { - $('.fldSelectPlaylist', content).show(); - populatePlaylists(content); - } else { - $('.fldSelectPlaylist', content).hide(); - $('#selectPlaylistToAddTo', content).html('').val('').trigger('change'); - } - } - - function playlisteditor() { - - var self = this; - - self.show = function (items) { - - items = items || []; - - var dlg = dialogHelper.createDialog({ - size: 'small' - }); - - dlg.classList.add('ui-body-b'); - dlg.classList.add('background-theme-b'); - - var html = ''; - - var title = Globalize.translate('HeaderAddToPlaylist'); - - html += '
'; - html += ''; - html += '
'; - html += title; - html += '
'; - html += '
'; - - html += getEditorHtml(); - - dlg.innerHTML = html; - document.body.appendChild(dlg); - - initEditor(dlg, items); - - $(dlg).on('close', onDialogClosed); - - dialogHelper.open(dlg); - - $('.btnCancel', dlg).on('click', function () { - - dialogHelper.close(dlg); - }); - }; - } - - return playlisteditor; -}); \ No newline at end of file diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 21fffed159..b359ead742 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -1,4 +1,4 @@ -define(['playlistManager', 'scrollHelper', 'appSettings', 'appStorage', 'apphost', 'datetime', 'jQuery', 'itemHelper', 'mediaInfo', 'scrollStyles'], function (playlistManager, scrollHelper, appSettings, appStorage, appHost, datetime, $, itemHelper, mediaInfo) { +define(['scrollHelper', 'appSettings', 'appStorage', 'apphost', 'datetime', 'jQuery', 'itemHelper', 'mediaInfo', 'scrollStyles'], function (scrollHelper, appSettings, appStorage, appHost, datetime, $, itemHelper, mediaInfo) { function parentWithClass(elem, className) { @@ -670,11 +670,11 @@ var commands = []; - if (LibraryBrowser.supportsAddingToCollection(item)) { + if (itemHelper.supportsAddingToCollection(item)) { commands.push('addtocollection'); } - if (playlistManager.supportsPlaylists(item)) { + if (itemHelper.supportsAddingToPlaylist(item)) { commands.push('playlist'); } @@ -938,9 +938,11 @@ }); break; case 'playlist': - require(['playlistManager'], function (playlistManager) { - - playlistManager.showPanel([itemId]); + require(['playlistEditor'], function (playlistEditor) { + new playlistEditor().show({ + items: items, + serverId: serverId + }); }); break; case 'delete': @@ -1561,13 +1563,6 @@ return html; }, - supportsAddingToCollection: function (item) { - - var invalidTypes = ['Person', 'Genre', 'MusicGenre', 'Studio', 'GameGenre', 'BoxSet', 'Playlist', 'UserView', 'CollectionFolder', 'Audio', 'Episode', 'TvChannel', 'Program', 'MusicAlbum', 'Timer']; - - return !item.CollectionType && invalidTypes.indexOf(item.Type) == -1 && item.MediaType != 'Photo'; - }, - enableSync: function (item, user) { if (AppInfo.isNativeApp && !Dashboard.capabilities().SupportsSync) { return false; @@ -1604,7 +1599,7 @@ itemCommands.push('shuffle'); } - if (playlistManager.supportsPlaylists(item)) { + if (itemHelper.supportsAddingToPlaylist(item)) { if (options.showRemoveFromPlaylist) { itemCommands.push('removefromplaylist'); @@ -1614,7 +1609,7 @@ } if (options.showAddToCollection !== false) { - if (LibraryBrowser.supportsAddingToCollection(item)) { + if (itemHelper.supportsAddingToCollection(item)) { itemCommands.push('addtocollection'); } } diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 88d6865d52..12a6441fa6 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -503,9 +503,11 @@ }); break; case 'playlist': - require(['playlistManager'], function (playlistManager) { - - playlistManager.showPanel([itemId]); + require(['playlistEditor'], function (playlistEditor) { + new playlistEditor().show({ + items: [itemId], + serverId: serverId + }); }); break; case 'delete': @@ -1244,11 +1246,13 @@ hideSelections(); break; case 'playlist': - require(['playlistManager'], function (playlistManager) { - - playlistManager.showPanel(items); - hideSelections(); + require(['playlistEditor'], function (playlistEditor) { + new playlistEditor().show({ + items: items, + serverId: serverId + }); }); + hideSelections(); break; case 'delete': LibraryBrowser.deleteItems(items).then(function () { diff --git a/dashboard-ui/scripts/playlistmanager.js b/dashboard-ui/scripts/playlistmanager.js deleted file mode 100644 index a97624832e..0000000000 --- a/dashboard-ui/scripts/playlistmanager.js +++ /dev/null @@ -1,23 +0,0 @@ -define([], function () { - - return { - - showPanel: function (items) { - - require(['playlisteditor'], function (playlisteditor) { - new playlisteditor().show(items); - }); - }, - - supportsPlaylists: function (item) { - - if (item.Type == 'Program') { - return false; - } - if (item.Type == 'Timer') { - return false; - } - return item.RunTimeTicks || item.IsFolder || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "MusicArtist"; - } - }; -}); \ No newline at end of file diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 364098912e..7e140ea28d 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1769,6 +1769,7 @@ var AppInfo = {}; define("emby-select", [embyWebComponentsBowerPath + "/emby-select/emby-select"], returnFirstDependency); define("collectionEditor", [embyWebComponentsBowerPath + "/collectioneditor/collectioneditor"], returnFirstDependency); + define("playlistEditor", [embyWebComponentsBowerPath + "/playlisteditor/playlisteditor"], returnFirstDependency); define("recordingCreator", [embyWebComponentsBowerPath + "/recordingcreator/recordingcreator"], returnFirstDependency); define("recordingEditor", [embyWebComponentsBowerPath + "/recordingcreator/recordingeditor"], returnFirstDependency); define("mediaInfo", [embyWebComponentsBowerPath + "/mediainfo/mediainfo"], returnFirstDependency); @@ -1804,7 +1805,6 @@ var AppInfo = {}; paths.appStorage = apiClientBowerPath + "/appstorage"; } - paths.playlistManager = "scripts/playlistmanager"; paths.syncDialog = "scripts/sync"; var sha1Path = bowerPath + "/cryptojslib/components/sha1-min";