From 9d462263b9523f34d454a3e02ac04819c24638c7 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 11 Mar 2019 21:31:33 -0700 Subject: [PATCH 01/11] add web path as config option --- src/dashboard.html | 8 +++++++- src/dashboard/dashboardgeneral.js | 17 +++++++++++++++++ src/dashboardgeneral.html | 10 ++++++++++ src/scripts/dashboardpage.js | 5 +++-- src/strings/en-us.json | 3 +++ 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/dashboard.html b/src/dashboard.html index d2de21f166..6c751740c3 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -109,7 +109,13 @@
${LabelTranscodingTemporaryFiles}
-
+
+
+
+
+
+
${LabelWeb}
+
diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index c0ff217ffe..6ef1c4d221 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -109,6 +109,23 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb }) }); + $("#btnSelectWebPath", view).on("click.selectDirectory", function() { + require(["directorybrowser"], function(directoryBrowser) { + var picker = new directoryBrowser; + picker.show({ + callback: function(path) { + if (path) { + view.querySelector("#txtWebPath").value = path; + } + picker.close(); + }, + validateWriteable: true, + header: Globalize.translate("LabelWebPath"), + instruction: Globalize.translate("LabelWebPathHelp") + }) + }) + }); + $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit); view.addEventListener("viewshow", function() { var promiseConfig = ApiClient.getServerConfiguration(); diff --git a/src/dashboardgeneral.html b/src/dashboardgeneral.html index f95246708f..8cc1177167 100644 --- a/src/dashboardgeneral.html +++ b/src/dashboardgeneral.html @@ -55,6 +55,16 @@
${LabelMetadataPathHelp}
+ +
+
+
+ +
+ +
+
${LabelWebPathHelp}
+
diff --git a/src/scripts/dashboardpage.js b/src/scripts/dashboardpage.js index f7bbc86866..0dc1f4e6fa 100644 --- a/src/scripts/dashboardpage.js +++ b/src/scripts/dashboardpage.js @@ -383,7 +383,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa for (var i = 0, length = tasks.length; i < length; i++) { var task = tasks[i]; - + html += "

"; html += task.Name + "
"; if (task.State === "Running") { @@ -407,8 +407,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa renderPaths: function (page, systemInfo) { page.querySelector("#cachePath").innerHTML = systemInfo.CachePath; page.querySelector("#logPath").innerHTML = systemInfo.LogPath; - page.querySelector("#transcodingTemporaryPath").innerHTML = systemInfo.TranscodingTempPath; + page.querySelector("#transcodePath").innerHTML = systemInfo.TranscodingTempPath; page.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath; + page.querySelector("#webPath").innerHTML = systemInfo.WebPath; }, startInterval: function (apiClient) { apiClient.sendMessage("SessionsStart", "0,1500"); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5ac13f0aad..6fe64cdf4a 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1122,6 +1122,8 @@ "LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataPath": "Metadata path:", "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata.", + "LabelWebPath": "Web path:", + "LabelWebPathHelp": "The path where the web client source is located.", "LabelMetadataReaders": "Metadata readers:", "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataSavers": "Metadata savers:", @@ -1329,6 +1331,7 @@ "LabelVideoCodec": "Video: {0}", "LabelVideoType": "Video Type:", "LabelView": "View:", + "LabelWeb": "Web", "LabelWebsite": "Website:", "LabelWindowBackgroundColor": "Text background color:", "LabelXDlnaCap": "X-Dlna cap:", From ca9e5d83bfb71c8eb77cfc1e3faaed31e645b66d Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 14 Mar 2019 00:05:45 -0700 Subject: [PATCH 02/11] remove write check and add warning to the description --- src/dashboard/dashboardgeneral.js | 1 - src/strings/en-us.json | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index 6ef1c4d221..7ecd7cb1c9 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -119,7 +119,6 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb } picker.close(); }, - validateWriteable: true, header: Globalize.translate("LabelWebPath"), instruction: Globalize.translate("LabelWebPathHelp") }) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 6fe64cdf4a..dca0c0797e 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1123,7 +1123,7 @@ "LabelMetadataPath": "Metadata path:", "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata.", "LabelWebPath": "Web path:", - "LabelWebPathHelp": "The path where the web client source is located.", + "LabelWebPathHelp": "The path where the web client source is located. Do not change this unless you plan on moving the web files, or the web interface will break.", "LabelMetadataReaders": "Metadata readers:", "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataSavers": "Metadata savers:", @@ -2268,4 +2268,4 @@ "XmlTvSportsCategoriesHelp": "Programs with these categories will be displayed as sports programs. Separate multiple with '|'.", "Yes": "Yes", "Yesterday": "Yesterday" -} \ No newline at end of file +} From e29b0be9fd7a622fe24b0517a5e337aa32372630 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 17 Mar 2019 22:13:56 +0100 Subject: [PATCH 03/11] Remove no to nb --- src/strings/{no.json => nb.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/strings/{no.json => nb.json} (100%) diff --git a/src/strings/no.json b/src/strings/nb.json similarity index 100% rename from src/strings/no.json rename to src/strings/nb.json From 447ec2c3abd15aeac05e1acdc4b4e70c8fa39520 Mon Sep 17 00:00:00 2001 From: Claus Vium Date: Sun, 17 Mar 2019 22:24:49 +0100 Subject: [PATCH 04/11] Return inner promise in init require --- src/scripts/site.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index e1d91ee99c..c9b1e7fee8 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -275,7 +275,7 @@ var AppInfo = {}; var credentialProviderInstance = new credentialProvider(); var promises = [apphost.getSyncProfile(), apphost.init()]; - Promise.all(promises).then(function (responses) { + return Promise.all(promises).then(function (responses) { var deviceProfile = responses[0]; var capabilities = Dashboard.capabilities(apphost); @@ -293,7 +293,7 @@ var AppInfo = {}; console.log("creating ApiClient singleton"); var apiClient = new apiClientFactory(Dashboard.serverAddress(), apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), window.devicePixelRatio); - + apiClient.enableAutomaticNetworking = false; apiClient.manualAddressOnly = true; From ae7b8d59f2991de39e05db64737fe90c197b8a61 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 18 Mar 2019 22:58:48 -0700 Subject: [PATCH 05/11] remove web path modify option --- src/dashboard/dashboardgeneral.js | 18 +----------------- src/dashboardgeneral.html | 10 ---------- src/strings/en-us.json | 2 -- 3 files changed, 1 insertion(+), 29 deletions(-) diff --git a/src/dashboard/dashboardgeneral.js b/src/dashboard/dashboardgeneral.js index 7ecd7cb1c9..ed3b000b12 100644 --- a/src/dashboard/dashboardgeneral.js +++ b/src/dashboard/dashboardgeneral.js @@ -97,7 +97,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb $("#txtMetadataPath", view).val(path); } if (networkPath) { - $("#txtMetadataNetworkPath", view).val(networkPath)); + $("#txtMetadataNetworkPath", view).val(networkPath); } picker.close(); }, @@ -109,22 +109,6 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb }) }); - $("#btnSelectWebPath", view).on("click.selectDirectory", function() { - require(["directorybrowser"], function(directoryBrowser) { - var picker = new directoryBrowser; - picker.show({ - callback: function(path) { - if (path) { - view.querySelector("#txtWebPath").value = path; - } - picker.close(); - }, - header: Globalize.translate("LabelWebPath"), - instruction: Globalize.translate("LabelWebPathHelp") - }) - }) - }); - $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit); view.addEventListener("viewshow", function() { var promiseConfig = ApiClient.getServerConfiguration(); diff --git a/src/dashboardgeneral.html b/src/dashboardgeneral.html index 8cc1177167..f95246708f 100644 --- a/src/dashboardgeneral.html +++ b/src/dashboardgeneral.html @@ -55,16 +55,6 @@

${LabelMetadataPathHelp}
- -
-
-
- -
- -
-
${LabelWebPathHelp}
-
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index dca0c0797e..f29c5ac6ff 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1122,8 +1122,6 @@ "LabelMetadataDownloadersHelp": "Enable and rank your preferred metadata downloaders in order of priority. Lower priority downloaders will only be used to fill in missing information.", "LabelMetadataPath": "Metadata path:", "LabelMetadataPathHelp": "Specify a custom location for downloaded artwork and metadata.", - "LabelWebPath": "Web path:", - "LabelWebPathHelp": "The path where the web client source is located. Do not change this unless you plan on moving the web files, or the web interface will break.", "LabelMetadataReaders": "Metadata readers:", "LabelMetadataReadersHelp": "Rank your preferred local metadata sources in order of priority. The first file found will be read.", "LabelMetadataSavers": "Metadata savers:", From 886dec11742a3fc692d3818e28919cf15cb94100 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 18 Mar 2019 22:22:48 -0700 Subject: [PATCH 06/11] remove all sync and convert buttons --- src/components/categorysyncbuttons.js | 31 - src/components/itemcontextmenu.js | 96 +-- src/components/multiselect/multiselect.js | 40 - src/components/serviceworker/notifications.js | 8 - src/components/serviceworker/sync.js | 6 - src/components/sync/emby-downloadbutton.js | 188 ----- src/components/sync/sync.js | 736 ------------------ src/itemdetails.html | 12 - src/livetv.html | 4 - src/movies.html | 3 - src/scripts/itemdetailpage.js | 64 +- src/scripts/livetvrecordings.js | 3 +- src/scripts/moviesrecommended.js | 4 +- src/scripts/site.js | 2 - src/scripts/tvlatest.js | 3 +- src/scripts/tvrecommended.js | 4 +- src/serviceworker.js | 2 +- src/tv.html | 6 - 18 files changed, 62 insertions(+), 1150 deletions(-) delete mode 100644 src/components/categorysyncbuttons.js delete mode 100644 src/components/serviceworker/sync.js delete mode 100644 src/components/sync/emby-downloadbutton.js delete mode 100644 src/components/sync/sync.js diff --git a/src/components/categorysyncbuttons.js b/src/components/categorysyncbuttons.js deleted file mode 100644 index 5a6075b196..0000000000 --- a/src/components/categorysyncbuttons.js +++ /dev/null @@ -1,31 +0,0 @@ -define(["itemHelper", "libraryMenu", "apphost"], function(itemHelper, libraryMenu, appHost) { - "use strict"; - - function initSyncButtons(view) { - var apiClient = window.ApiClient; - apiClient && apiClient.getCurrentUserId() && apiClient.getCurrentUser().then(function(user) { - for (var item = { - SupportsSync: !0 - }, categorySyncButtons = view.querySelectorAll(".categorySyncButton"), i = 0, length = categorySyncButtons.length; i < length; i++) categorySyncButtons[i].addEventListener("click", onCategorySyncButtonClick), itemHelper.canSync(user, item) ? categorySyncButtons[i].classList.remove("hide") : categorySyncButtons[i].classList.add("hide") - }) - } - - function onCategorySyncButtonClick(e) { - var button = this, - category = button.getAttribute("data-category"), - parentId = libraryMenu.getTopParentId(); - require(["syncDialog"], function(syncDialog) { - syncDialog.showMenu({ - ParentId: parentId, - Category: category, - serverId: ApiClient.serverId(), - mode: appHost.supports("sync") ? "download" : "sync" - }) - }) - } - return { - init: function(view) { - initSyncButtons(view) - } - } -}); \ No newline at end of file diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index 270345d3b7..6bc81f62b2 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -118,13 +118,6 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', }); } - if (itemHelper.canConvert(item, user, connectionManager.getApiClient(item))) { - commands.push({ - name: globalize.translate('Convert'), - id: 'convert' - }); - } - if (item.CanDelete && options.deleteItem !== false) { if (item.Type === 'Playlist' || item.Type === 'BoxSet') { @@ -147,15 +140,6 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', }); } - if (appHost.supports('sync') && options.syncLocal !== false) { - if (itemHelper.canSync(user, item)) { - commands.push({ - name: globalize.translate('Download'), - id: 'synclocal' - }); - } - } - var canEdit = itemHelper.canEdit(user, item); if (canEdit) { @@ -328,17 +312,13 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', { require(['fileDownloader'], function (fileDownloader) { var downloadHref = apiClient.getItemDownloadUrl(itemId); - - fileDownloader.download([ - { - url: downloadHref, - itemId: itemId, - serverId: serverId - }]); - + fileDownloader.download([{ + url: downloadHref, + itemId: itemId, + serverId: serverId + }]); getResolveFunction(getResolveFunction(resolve, id), id)(); }); - break; } case 'editsubtitles': @@ -433,102 +413,48 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'appRouter', break; } case 'share': - { navigator.share({ title: item.Name, text: item.Overview, url: "https://github.com/jellyfin/jellyfin" }); break; - } case 'album': - { - appRouter.showItem(item.AlbumId, item.ServerId); - getResolveFunction(resolve, id)(); - break; - } + appRouter.showItem(item.AlbumId, item.ServerId); + getResolveFunction(resolve, id)(); + break; case 'artist': - { - appRouter.showItem(item.ArtistItems[0].Id, item.ServerId); - getResolveFunction(resolve, id)(); + appRouter.showItem(item.ArtistItems[0].Id, item.ServerId); + getResolveFunction(resolve, id)(); break; - } case 'playallfromhere': - { - getResolveFunction(resolve, id)(); + getResolveFunction(resolve, id)(); break; - } case 'queueallfromhere': { getResolveFunction(resolve, id)(); break; } - case 'convert': - { - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: [item], - serverId: serverId, - mode: 'convert' - }); - }); - getResolveFunction(resolve, id)(); - break; - } - case 'sync': - { - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: [item], - serverId: serverId, - mode: 'sync' - }); - }); - getResolveFunction(resolve, id)(); - break; - } - case 'synclocal': - { - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: [item], - serverId: serverId, - mode: 'download' - }); - }); - getResolveFunction(resolve, id)(); - break; - } case 'removefromplaylist': - apiClient.ajax({ - url: apiClient.getUrl('Playlists/' + options.playlistId + '/Items', { EntryIds: [item.PlaylistItemId].join(',') }), - type: 'DELETE' - }).then(function () { - getResolveFunction(resolve, id, true)(); }); - break; case 'removefromcollection': - apiClient.ajax({ type: "DELETE", url: apiClient.getUrl("Collections/" + options.collectionId + "/Items", { Ids: [item.Id].join(',') }) - }).then(function () { - getResolveFunction(resolve, id, true)(); }); - break; case 'canceltimer': deleteTimer(apiClient, item, resolve, id); diff --git a/src/components/multiselect/multiselect.js b/src/components/multiselect/multiselect.js index 32e3ab9f82..6eace46c7c 100644 --- a/src/components/multiselect/multiselect.js +++ b/src/components/multiselect/multiselect.js @@ -218,13 +218,6 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo }); } - if (user.Policy.EnableContentDownloading && appHost.supports('sync')) { - menuItems.push({ - name: globalize.translate('Download'), - id: 'synclocal' - }); - } - menuItems.push({ name: globalize.translate('GroupVersions'), id: 'groupvideos', @@ -254,20 +247,16 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo } require(['actionsheet'], function (actionsheet) { - actionsheet.show({ items: menuItems, positionTo: e.target, callback: function (id) { - var items = selectedItems.slice(0); var serverId = apiClient.serverInfo().Id; switch (id) { - case 'addtocollection': require(['collectionEditor'], function (collectionEditor) { - new collectionEditor().show({ items: items, serverId: serverId @@ -318,35 +307,6 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo hideSelections(); dispatchNeedsRefresh(); break; - case 'sync': - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: items.map(function (i) { - return { - Id: i - }; - }), - serverId: serverId - }); - }); - hideSelections(); - dispatchNeedsRefresh(); - break; - case 'synclocal': - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: items.map(function (i) { - return { - Id: i - }; - }), - isLocalSync: true, - serverId: serverId - }); - }); - hideSelections(); - dispatchNeedsRefresh(); - break; default: break; } diff --git a/src/components/serviceworker/notifications.js b/src/components/serviceworker/notifications.js index c566715bb7..9c5be840bf 100644 --- a/src/components/serviceworker/notifications.js +++ b/src/components/serviceworker/notifications.js @@ -4,20 +4,14 @@ var connectionManager; function getApiClient(serverId) { - if (connectionManager) { return Promise.resolve(connectionManager.getApiClient(serverId)); } - - //importScripts('serviceworker-cache-polyfill.js'); - return Promise.reject(); } function executeAction(action, data, serverId) { - return getApiClient(serverId).then(function (apiClient) { - switch (action) { case 'cancel-install': var id = data.id; @@ -32,7 +26,6 @@ } self.addEventListener('notificationclick', function (event) { - var notification = event.notification; notification.close(); @@ -47,6 +40,5 @@ } event.waitUntil(executeAction(action, data, serverId)); - }, false); })(); \ No newline at end of file diff --git a/src/components/serviceworker/sync.js b/src/components/serviceworker/sync.js deleted file mode 100644 index 3dcff8f363..0000000000 --- a/src/components/serviceworker/sync.js +++ /dev/null @@ -1,6 +0,0 @@ -self.addEventListener('sync', function (event) { - 'use strict'; - - if (event.tag === 'emby-sync') { - } -}); \ No newline at end of file diff --git a/src/components/sync/emby-downloadbutton.js b/src/components/sync/emby-downloadbutton.js deleted file mode 100644 index 74a9f6b3bb..0000000000 --- a/src/components/sync/emby-downloadbutton.js +++ /dev/null @@ -1,188 +0,0 @@ -define(['connectionManager', 'serverNotifications', 'events', 'globalize', 'emby-button'], function (connectionManager, serverNotifications, events, globalize, EmbyButtonPrototype) { - 'use strict'; - - function onClick(e) { - - var button = this; - var id = button.getAttribute('data-id'); - var serverId = button.getAttribute('data-serverid'); - var apiClient = connectionManager.getApiClient(serverId); - - if (!button.classList.contains('downloadbutton-on')) { - - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - - items: [id], - mode: 'download', - serverId: serverId - - }).then(function () { - - button.dispatchEvent(new CustomEvent('download', { - cancelable: false - })); - - }); - }); - - } else { - - require(['confirm'], function (confirm) { - - confirm({ - - text: globalize.translate('ConfirmRemoveDownload'), - confirmText: globalize.translate('RemoveDownload'), - cancelText: globalize.translate('KeepDownload'), - primary: 'cancel' - - }).then(function () { - apiClient.cancelSyncItems([id]); - - button.dispatchEvent(new CustomEvent('download-cancel', { - cancelable: false - })); - }); - }); - } - } - - function updateSyncStatus(button, syncPercent) { - - var icon = button.iconElement; - if (!icon) { - button.iconElement = button.querySelector('i'); - icon = button.iconElement; - } - - if (syncPercent != null) { - button.classList.add('downloadbutton-on'); - - if (icon) { - icon.classList.add('downloadbutton-icon-on'); - } - - } else { - button.classList.remove('downloadbutton-on'); - - if (icon) { - icon.classList.remove('downloadbutton-icon-on'); - } - } - - if ((syncPercent || 0) >= 100) { - button.classList.add('downloadbutton-complete'); - - if (icon) { - icon.classList.add('downloadbutton-icon-complete'); - } - } else { - button.classList.remove('downloadbutton-complete'); - - if (icon) { - icon.classList.remove('downloadbutton-icon-complete'); - } - } - - var text; - if ((syncPercent || 0) >= 100) { - text = globalize.translate('Downloaded'); - } else if (syncPercent != null) { - text = globalize.translate('Downloading'); - } else { - text = globalize.translate('Download'); - } - - var textElement = button.querySelector('.emby-downloadbutton-downloadtext'); - if (textElement) { - textElement.innerHTML = text; - } - - button.title = text; - } - - function clearEvents(button) { - - button.removeEventListener('click', onClick); - } - - function bindEvents(button) { - - clearEvents(button); - - button.addEventListener('click', onClick); - } - - var EmbyDownloadButtonPrototype = Object.create(EmbyButtonPrototype); - - EmbyDownloadButtonPrototype.createdCallback = function () { - - // base method - if (EmbyButtonPrototype.createdCallback) { - EmbyButtonPrototype.createdCallback.call(this); - } - }; - - EmbyDownloadButtonPrototype.attachedCallback = function () { - - // base method - if (EmbyButtonPrototype.attachedCallback) { - EmbyButtonPrototype.attachedCallback.call(this); - } - - var itemId = this.getAttribute('data-id'); - var serverId = this.getAttribute('data-serverid'); - if (itemId && serverId) { - - bindEvents(this); - } - }; - - EmbyDownloadButtonPrototype.detachedCallback = function () { - - // base method - if (EmbyButtonPrototype.detachedCallback) { - EmbyButtonPrototype.detachedCallback.call(this); - } - - clearEvents(this); - - this.iconElement = null; - }; - - function fetchAndUpdate(button, item) { - - connectionManager.getApiClient(item.ServerId).getSyncStatus(item.Id).then(function (result) { - - updateSyncStatus(button, result.Progress); - - }, function () { - - }); - } - - EmbyDownloadButtonPrototype.setItem = function (item) { - - if (item) { - - this.setAttribute('data-id', item.Id); - this.setAttribute('data-serverid', item.ServerId); - - fetchAndUpdate(this, item); - - bindEvents(this); - - } else { - - this.removeAttribute('data-id'); - this.removeAttribute('data-serverid'); - clearEvents(this); - } - }; - - document.registerElement('emby-downloadbutton', { - prototype: EmbyDownloadButtonPrototype, - extends: 'button' - }); -}); \ No newline at end of file diff --git a/src/components/sync/sync.js b/src/components/sync/sync.js deleted file mode 100644 index e7c51e3dc5..0000000000 --- a/src/components/sync/sync.js +++ /dev/null @@ -1,736 +0,0 @@ -define(['apphost', 'globalize', 'connectionManager', 'layoutManager', 'focusManager', 'scrollHelper', 'appSettings', 'registrationServices', 'dialogHelper', 'paper-icon-button-light', 'formDialogStyle'], function (appHost, globalize, connectionManager, layoutManager, focusManager, scrollHelper, appSettings, registrationServices, dialogHelper) { - 'use strict'; - - var currentDialogOptions; - - function submitJob(dlg, apiClient, userId, syncOptions, form) { - - if (!userId) { - throw new Error('userId cannot be null'); - } - - if (!syncOptions) { - throw new Error('syncOptions cannot be null'); - } - - if (!form) { - throw new Error('form cannot be null'); - } - - var selectSyncTarget = form.querySelector('#selectSyncTarget'); - var target = selectSyncTarget ? selectSyncTarget.value : null; - - if (!target) { - - require(['toast'], function (toast) { - toast(globalize.translate('PleaseSelectDeviceToSyncTo')); - }); - return false; - } - - var options = { - - userId: userId, - TargetId: target, - - ParentId: syncOptions.ParentId, - Category: syncOptions.Category - }; - - setJobValues(options, form); - - if (syncOptions.items && syncOptions.items.length) { - options.ItemIds = (syncOptions.items || []).map(function (i) { - return i.Id || i; - }).join(','); - } - - apiClient.ajax({ - - type: "POST", - url: apiClient.getUrl("Sync/Jobs"), - data: JSON.stringify(options), - contentType: "application/json", - dataType: 'json' - - }).then(function () { - - dialogHelper.close(dlg); - require(['toast'], function (toast) { - - showSubmissionToast(target, apiClient); - - if (syncOptions.mode === 'download') { - syncNow(); - } - }); - }); - - return true; - } - - - function showSubmissionToast(targetId, apiClient) { - - require(['toast'], function (toast) { - - var msg = targetId === apiClient.deviceId() ? - globalize.translate('DownloadingDots') : - globalize.translate('SyncingDots'); - - toast(msg); - }); - } - - function syncNow() { - require(['localsync'], function (localSync) { - localSync.sync(); - }); - } - - function submitQuickSyncJob(apiClient, userId, targetId, syncOptions) { - - if (!userId) { - throw new Error('userId cannot be null'); - } - - if (!syncOptions) { - throw new Error('syncOptions cannot be null'); - } - - if (!targetId) { - throw new Error('targetId cannot be null'); - } - - var options = { - - userId: userId, - TargetId: targetId, - - ParentId: syncOptions.ParentId, - Category: syncOptions.Category, - Quality: syncOptions.Quality, - Bitrate: syncOptions.Bitrate - }; - - if (syncOptions.items && syncOptions.items.length) { - options.ItemIds = (syncOptions.items || []).map(function (i) { - return i.Id || i; - }).join(','); - } - - return apiClient.ajax({ - - type: "POST", - url: apiClient.getUrl("Sync/Jobs"), - data: JSON.stringify(options), - contentType: "application/json", - dataType: 'json' - - }).then(function () { - - require(['toast'], function (toast) { - - showSubmissionToast(targetId, apiClient); - - if (syncOptions.mode === 'download') { - syncNow(); - } - }); - }); - } - - function setJobValues(job, form) { - - var txtBitrate = form.querySelector('#txtBitrate'); - var bitrate = txtBitrate ? txtBitrate.value : null; - - if (bitrate) { - bitrate = parseFloat(bitrate) * 1000000; - } - job.Bitrate = bitrate; - - var selectQuality = form.querySelector('#selectQuality'); - if (selectQuality) { - job.Quality = selectQuality.value; - - appSettings.set('sync-lastquality', job.Quality || ''); - } - - var selectProfile = form.querySelector('#selectProfile'); - if (selectProfile) { - job.Profile = selectProfile.value; - } - - var txtItemLimit = form.querySelector('#txtItemLimit'); - if (txtItemLimit) { - job.ItemLimit = txtItemLimit.value || null; - } - - var chkSyncNewContent = form.querySelector('#chkSyncNewContent'); - if (chkSyncNewContent) { - job.SyncNewContent = chkSyncNewContent.checked; - } - - var chkUnwatchedOnly = form.querySelector('#chkUnwatchedOnly'); - if (chkUnwatchedOnly) { - job.UnwatchedOnly = chkUnwatchedOnly.checked; - } - } - - function renderForm(options) { - - return new Promise(function (resolve, reject) { - - require(['emby-checkbox', 'emby-input', 'emby-select'], function () { - - renderFormInternal(options, connectionManager.deviceId(), resolve); - }); - }); - } - - function renderFormInternal(options, defaultTargetId, resolve) { - - var elem = options.elem; - var dialogOptions = options.dialogOptions; - - var targets = dialogOptions.Targets; - - var html = ''; - - var mode = options.mode; - var targetContainerClass = mode === 'download' ? ' hide' : ''; - - var syncTargetLabel = mode === 'convert' ? globalize.translate('LabelConvertTo') : globalize.translate('LabelSyncTo'); - - if (options.readOnlySyncTarget) { - html += '
'; - html += ''; - html += '
'; - } else { - html += '
'; - html += ''; - if (!targets.length) { - html += '
' + globalize.translate('LabelSyncNoTargetsHelp') + '
'; - } - - if (appHost.supports('externallinks')) { - html += ''; - } - html += '
'; - } - - html += '
'; - html += ''; - html += '
'; - html += '
'; - - html += '
'; - html += ''; - html += '
'; - html += '
'; - - html += '
'; - html += ''; - html += '
'; - - if (dialogOptions.Options.indexOf('UnwatchedOnly') !== -1) { - html += '
'; - html += ''; - - if (mode === 'convert') { - html += '
' + globalize.translate('ConvertUnwatchedVideosOnlyHelp') + '
'; - } else { - html += '
' + globalize.translate('SyncUnwatchedVideosOnlyHelp') + '
'; - } - - html += '
'; - } - - if (dialogOptions.Options.indexOf('SyncNewContent') !== -1) { - html += '
'; - html += ''; - - if (mode === 'convert') { - html += '
' + globalize.translate('AutomaticallyConvertNewContentHelp') + '
'; - } else { - html += '
' + globalize.translate('AutomaticallySyncNewContentHelp') + '
'; - } - html += '
'; - } - - if (dialogOptions.Options.indexOf('ItemLimit') !== -1) { - html += '
'; - html += ''; - - if (mode === 'convert') { - html += '
' + globalize.translate('ConvertItemLimitHelp') + '
'; - } else { - html += '
' + globalize.translate('DownloadItemLimitHelp') + '
'; - } - - html += '
'; - } - - //html += '
'; - //html += ''; - - elem.innerHTML = html; - - var selectSyncTarget = elem.querySelector('#selectSyncTarget'); - if (selectSyncTarget) { - selectSyncTarget.addEventListener('change', function () { - loadQualityOptions(elem, this.value, options.dialogOptionsFn).then(resolve); - }); - selectSyncTarget.dispatchEvent(new CustomEvent('change', { - bubbles: true - })); - } - - var selectProfile = elem.querySelector('#selectProfile'); - if (selectProfile) { - selectProfile.addEventListener('change', function () { - onProfileChange(elem, this.value); - }); - - if (dialogOptions.ProfileOptions.length) { - selectProfile.dispatchEvent(new CustomEvent('change', { - bubbles: true - })); - } - } - - var selectQuality = elem.querySelector('#selectQuality'); - if (selectQuality) { - selectQuality.addEventListener('change', function () { - onQualityChange(elem, this.value); - }); - selectQuality.dispatchEvent(new CustomEvent('change', { - bubbles: true - })); - } - - // This isn't ideal, but allow time for the change handlers above to run - setTimeout(function () { - focusManager.autoFocus(elem); - }, 100); - } - - function showWifiMessage() { - - require(['dialog', 'appRouter'], function (dialog, appRouter) { - - var options = { - - title: globalize.translate('HeaderWaitingForWifi'), - text: globalize.translate('WifiRequiredToDownload') - }; - - var items = []; - - items.push({ - name: options.confirmText || globalize.translate('ButtonOk'), - id: 'ok', - type: 'submit' - }); - - items.push({ - name: options.cancelText || globalize.translate('HeaderDownloadSettings'), - id: 'downloadsettings', - type: 'cancel' - }); - - options.buttons = items; - - dialog(options).then(function (result) { - - if (result === 'ok') { - return Promise.resolve(); - } - if (result === 'downloadsettings') { - appRouter.show(appRouter.getRouteUrl('downloadsettings')); - return Promise.resolve(); - } - - return Promise.reject(); - }); - }); - } - - function validateNetwork() { - - var network = navigator.connection ? navigator.connection.type : null; - - switch (network) { - - case 'cellular': - case 'bluetooth': - showWifiMessage(); - return false; - default: - return true; - } - } - - function showSyncMenu(options) { - - if (options.mode === 'download' && appSettings.syncOnlyOnWifi() && !validateNetwork()) { - return Promise.reject(); - } - - return registrationServices.validateFeature('sync').then(function () { - return showSyncMenuInternal(options); - }); - } - - function enableAutoSync(options) { - - if (options.mode !== 'download') { - return false; - } - - var firstItem = (options.items || [])[0] || {}; - - if (firstItem.Type === 'Audio') { - return true; - } - if (firstItem.Type === 'MusicAlbum') { - return true; - } - if (firstItem.Type === 'MusicArtist') { - return true; - } - if (firstItem.Type === 'MusicGenre') { - return true; - } - if (firstItem.Type === 'Playlist' && firstItem.MediaType === 'Audio') { - return true; - } - - return false; - } - - function showSyncMenuInternal(options) { - - var apiClient = connectionManager.getApiClient(options.serverId); - var userId = apiClient.getCurrentUserId(); - - if (enableAutoSync(options)) { - - return submitQuickSyncJob(apiClient, userId, apiClient.deviceId(), { - items: options.items, - Quality: 'custom', - Bitrate: appSettings.maxStaticMusicBitrate() - }); - } - - var dialogOptionsFn = getTargetDialogOptionsFn(apiClient, { - UserId: userId, - ItemIds: (options.items || []).map(function (i) { - return i.Id || i; - }).join(','), - - ParentId: options.ParentId, - Category: options.Category, - IncludeProviders: options.mode === 'convert' ? 'ConvertSyncProvider' : null, - ExcludeProviders: options.mode === 'convert' ? null : 'ConvertSyncProvider' - }); - - return dialogOptionsFn().then(function (dialogOptions) { - - currentDialogOptions = dialogOptions; - - var dlgElementOptions = { - removeOnClose: true, - scrollY: false, - autoFocus: false - }; - - if (layoutManager.tv) { - dlgElementOptions.size = 'fullscreen'; - } else { - dlgElementOptions.size = 'small'; - } - - var dlg = dialogHelper.createDialog(dlgElementOptions); - - dlg.classList.add('formDialog'); - - var html = ''; - html += '
'; - html += ''; - html += '

'; - - var syncButtonLabel = options.mode === 'download' ? - globalize.translate('Download') : - (options.mode === 'convert' ? globalize.translate('Convert') : globalize.translate('Sync')); - - html += syncButtonLabel; - html += '

'; - - if (appHost.supports('externallinks')) { - html += 'info' + globalize.translate('Help') + ''; - } - - html += '
'; - - html += '
'; - html += '
'; - - html += '
'; - - html += '
'; - - html += '
'; - - html += ''; - html += '
'; - - html += '
'; - - html += '
'; - html += '
'; - - dlg.innerHTML = html; - - var submitted = false; - - dlg.querySelector('form').addEventListener('submit', function (e) { - - submitted = submitJob(dlg, apiClient, userId, options, this); - - e.preventDefault(); - return false; - }); - - dlg.querySelector('.btnCancel').addEventListener('click', function () { - dialogHelper.close(dlg); - }); - - if (layoutManager.tv) { - scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false); - } - - var promise = dialogHelper.open(dlg); - - renderForm({ - elem: dlg.querySelector('.formFields'), - dialogOptions: dialogOptions, - dialogOptionsFn: dialogOptionsFn, - mode: options.mode - }); - - return promise.then(function () { - if (layoutManager.tv) { - scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); - } - - if (submitted) { - return Promise.resolve(); - } - return Promise.reject(); - }); - }); - } - - function getTargetDialogOptionsFn(apiClient, query) { - - return function (targetId) { - - query.TargetId = targetId; - return apiClient.getJSON(apiClient.getUrl('Sync/Options', query)); - }; - } - - function setQualityFieldVisible(form, visible) { - - var fldQuality = form.querySelector('.fldQuality'); - var selectQuality = form.querySelector('#selectQuality'); - - if (visible) { - if (fldQuality) { - fldQuality.classList.remove('hide'); - } - if (selectQuality) { - //selectQuality.setAttribute('required', 'required'); - - // This is a hack due to what appears to be a edge bug but it shoudln't matter as the list always has selectable items - selectQuality.removeAttribute('required'); - } - } else { - if (fldQuality) { - fldQuality.classList.add('hide'); - } - if (selectQuality) { - selectQuality.removeAttribute('required'); - } - } - } - - function onProfileChange(form, profileId) { - - var options = currentDialogOptions || {}; - - var profileOptions = options.ProfileOptions || []; - - if (!profileOptions.length) { - return; - } - - var option = profileOptions.filter(function (o) { - return o.Id === profileId; - })[0]; - - var qualityOptions = options.QualityOptions || []; - - if (option) { - form.querySelector('.profileDescription').innerHTML = option.Description || ''; - setQualityFieldVisible(form, qualityOptions.length > 0 && option.EnableQualityOptions && options.Options.indexOf('Quality') !== -1); - } else { - form.querySelector('.profileDescription').innerHTML = ''; - setQualityFieldVisible(form, qualityOptions.length > 0 && options.Options.indexOf('Quality') !== -1); - } - } - - function onQualityChange(form, qualityId) { - - var options = currentDialogOptions || {}; - var option = (options.QualityOptions || []).filter(function (o) { - return o.Id === qualityId; - })[0]; - - var qualityDescription = form.querySelector('.qualityDescription'); - - if (option) { - qualityDescription.innerHTML = option.Description || ''; - } else { - qualityDescription.innerHTML = ''; - } - - var fldBitrate = form.querySelector('.fldBitrate'); - var txtBitrate = form.querySelector('#txtBitrate'); - - if (qualityId === 'custom') { - - if (fldBitrate) { - fldBitrate.classList.remove('hide'); - } - if (txtBitrate) { - txtBitrate.setAttribute('required', 'required'); - } - } else { - if (fldBitrate) { - fldBitrate.classList.add('hide'); - } - if (txtBitrate) { - txtBitrate.removeAttribute('required'); - } - } - } - - function renderTargetDialogOptions(form, options) { - - currentDialogOptions = options; - - var fldProfile = form.querySelector('.fldProfile'); - var selectProfile = form.querySelector('#selectProfile'); - - if (options.ProfileOptions.length && options.Options.indexOf('Profile') !== -1) { - if (fldProfile) { - fldProfile.classList.remove('hide'); - } - if (selectProfile) { - selectProfile.setAttribute('required', 'required'); - } - } else { - if (fldProfile) { - fldProfile.classList.add('hide'); - } - if (selectProfile) { - selectProfile.removeAttribute('required'); - } - } - - setQualityFieldVisible(form, options.QualityOptions.length > 0); - - if (selectProfile) { - selectProfile.innerHTML = options.ProfileOptions.map(function (o) { - - var selectedAttribute = o.IsDefault ? ' selected="selected"' : ''; - return ''; - - }).join(''); - - selectProfile.dispatchEvent(new CustomEvent('change', { - bubbles: true - })); - } - - var selectQuality = form.querySelector('#selectQuality'); - if (selectQuality) { - selectQuality.innerHTML = options.QualityOptions.map(function (o) { - - var selectedAttribute = o.IsDefault ? ' selected="selected"' : ''; - return ''; - - }).join(''); - - var lastQuality = appSettings.get('sync-lastquality'); - if (lastQuality && options.QualityOptions.filter(function (i) { - - return i.Id === lastQuality; - - }).length) { - selectQuality.value = lastQuality; - } - - selectQuality.dispatchEvent(new CustomEvent('change', { - bubbles: true - })); - } - } - - function loadQualityOptions(form, targetId, dialogOptionsFn) { - - return dialogOptionsFn(targetId).then(function (options) { - - return renderTargetDialogOptions(form, options); - }); - } - - return { - - showMenu: showSyncMenu, - renderForm: renderForm, - setJobValues: setJobValues - }; -}); \ No newline at end of file diff --git a/src/itemdetails.html b/src/itemdetails.html index cf9433583b..30d6171f43 100644 --- a/src/itemdetails.html +++ b/src/itemdetails.html @@ -104,18 +104,6 @@ ${ButtonShuffle} - - - - - -
diff --git a/src/movies.html b/src/movies.html index 4830d6408a..c211d9686a 100644 --- a/src/movies.html +++ b/src/movies.html @@ -30,9 +30,6 @@

${HeaderLatestMovies}

-
diff --git a/src/scripts/itemdetailpage.js b/src/scripts/itemdetailpage.js index d8d952cba0..ba1bac9e24 100644 --- a/src/scripts/itemdetailpage.js +++ b/src/scripts/itemdetailpage.js @@ -1,4 +1,4 @@ -define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-linkbutton", "emby-playstatebutton", "emby-ratingbutton", "emby-downloadbutton", "emby-scroller", "emby-select"], function(loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) { +define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-linkbutton", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function(loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) { "use strict"; function getPromise(apiClient, params) { @@ -33,12 +33,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild user: user, share: !0 }; - return appHost.supports("sync") && (options.syncLocal = !1), options - } - - function renderSyncLocalContainer(page, params, user, item) { - if (appHost.supports("sync")) - for (var canSync = itemHelper.canSync(user, item), buttons = page.querySelectorAll(".btnSyncDownload"), i = 0, length = buttons.length; i < length; i++) buttons[i].setItem(item), canSync ? buttons[i].classList.remove("hide") : buttons[i].classList.add("hide") + return options; } function getProgramScheduleHtml(items, options) { @@ -286,7 +281,11 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild var apiClient = connectionManager.getApiClient(item.ServerId); renderSeriesTimerEditor(page, item, apiClient, user), renderTimerEditor(page, item, apiClient, user), renderImage(page, item, apiClient, user), renderLogo(page, item, apiClient), setTitle(item, apiClient), setInitialCollapsibleState(page, item, apiClient, context, user), renderDetails(page, item, apiClient, context), renderTrackSelections(page, instance, item), dom.getWindowSize().innerWidth >= 1e3 ? backdrop.setBackdrops([item]) : backdrop.clear(), renderDetailPageBackdrop(page, item, apiClient); var canPlay = reloadPlayButtons(page, item); - (item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers") ? hideAll(page, "btnPlayTrailer", !0) : hideAll(page, "btnPlayTrailer"), setTrailerButtonVisibility(page, item), item.CanDelete && !item.IsFolder ? hideAll(page, "btnDeleteItem", !0) : hideAll(page, "btnDeleteItem"), renderSyncLocalContainer(page, params, user, item), "Program" !== item.Type || canPlay ? hideAll(page, "mainDetailButtons", !0) : hideAll(page, "mainDetailButtons"), showRecordingFields(instance, page, item, user); + (item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers") ? hideAll(page, "btnPlayTrailer", !0) : hideAll(page, "btnPlayTrailer"); + setTrailerButtonVisibility(page, item); + item.CanDelete && !item.IsFolder ? hideAll(page, "btnDeleteItem", !0) : hideAll(page, "btnDeleteItem"); + "Program" !== item.Type || canPlay ? hideAll(page, "mainDetailButtons", !0) : hideAll(page, "mainDetailButtons"); + showRecordingFields(instance, page, item, user); var groupedVersions = (item.MediaSources || []).filter(function(g) { return "Grouping" == g.Type }); @@ -1166,30 +1165,55 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild })) } } - var currentItem, self = this, - apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; + + var currentItem; + var self = this; + var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient; view.querySelectorAll(".btnPlay"); - bindAll(view, ".btnPlay", "click", onPlayClick), bindAll(view, ".btnResume", "click", onPlayClick), bindAll(view, ".btnInstantMix", "click", onInstantMixClick), bindAll(view, ".btnShuffle", "click", onShuffleClick), bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick), bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick), bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick), bindAll(view, ".btnDeleteItem", "click", onDeleteClick), bindAll(view, ".btnSyncDownload", "download", onDownloadChange), bindAll(view, ".btnSyncDownload", "download-cancel", onDownloadChange), view.querySelector(".btnMoreCommands i").innerHTML = "", view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit), view.querySelector(".btnSplitVersions").addEventListener("click", function() { + bindAll(view, ".btnPlay", "click", onPlayClick); + bindAll(view, ".btnResume", "click", onPlayClick); + bindAll(view, ".btnInstantMix", "click", onInstantMixClick); + bindAll(view, ".btnShuffle", "click", onShuffleClick); + bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick); + bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick); + bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick); + bindAll(view, ".btnDeleteItem", "click", onDeleteClick); + view.querySelector(".btnMoreCommands i").innerHTML = ""; + view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit); + view.querySelector(".btnSplitVersions").addEventListener("click", function() { splitVersions(self, view, apiClient, params) - }), bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick), view.querySelector(".selectSource").addEventListener("change", function() { - renderVideoSelections(view, self._currentPlaybackMediaSources), renderAudioSelections(view, self._currentPlaybackMediaSources), renderSubtitleSelections(view, self._currentPlaybackMediaSources) - }), view.addEventListener("click", function(e) { + }); + bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick); + view.querySelector(".selectSource").addEventListener("change", function() { + renderVideoSelections(view, self._currentPlaybackMediaSources); + renderAudioSelections(view, self._currentPlaybackMediaSources); + renderSubtitleSelections(view, self._currentPlaybackMediaSources); + }); + view.addEventListener("click", function(e) { dom.parentWithClass(e.target, "moreScenes") ? apiClient.getCurrentUser().then(function(user) { renderScenes(view, currentItem) }) : dom.parentWithClass(e.target, "morePeople") ? renderCast(view, currentItem, params.context) : dom.parentWithClass(e.target, "moreSpecials") && apiClient.getCurrentUser().then(function(user) { renderSpecials(view, currentItem, user) }) - }), view.querySelector(".detailImageContainer").addEventListener("click", function(e) { + }); + view.querySelector(".detailImageContainer").addEventListener("click", function(e) { dom.parentWithClass(e.target, "itemDetailGalleryLink") && editImages().then(function() { reload(self, view, params) }) - }), view.addEventListener("viewshow", function(e) { + }); + view.addEventListener("viewshow", function(e) { var page = this; libraryMenu.setTransparentMenu(!0), e.detail.isRestored ? currentItem && (setTitle(currentItem, connectionManager.getApiClient(currentItem.ServerId)), renderTrackSelections(page, self, currentItem, !0)) : reload(self, page, params), events.on(apiClient, "message", onWebSocketMessage), events.on(playbackManager, "playerchange", onPlayerChange) - }), view.addEventListener("viewbeforehide", function() { - events.off(apiClient, "message", onWebSocketMessage), events.off(playbackManager, "playerchange", onPlayerChange), libraryMenu.setTransparentMenu(!1) - }), view.addEventListener("viewdestroy", function() { - currentItem = null, self._currentPlaybackMediaSources = null, self.currentRecordingFields = null + }); + view.addEventListener("viewbeforehide", function() { + events.off(apiClient, "message", onWebSocketMessage); + events.off(playbackManager, "playerchange", onPlayerChange); + libraryMenu.setTransparentMenu(!1); + }); + view.addEventListener("viewdestroy", function() { + currentItem = null; + self._currentPlaybackMediaSources = null; + self.currentRecordingFields = null; }) } }); diff --git a/src/scripts/livetvrecordings.js b/src/scripts/livetvrecordings.js index 6c0ee4e515..c56956314d 100644 --- a/src/scripts/livetvrecordings.js +++ b/src/scripts/livetvrecordings.js @@ -1,4 +1,4 @@ -define(["layoutManager", "loading", "components/categorysyncbuttons", "cardBuilder", "apphost", "imageLoader", "scripts/livetvcomponents", "listViewStyle", "emby-itemscontainer"], function(layoutManager, loading, categorysyncbuttons, cardBuilder, appHost, imageLoader) { +define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "scripts/livetvcomponents", "listViewStyle", "emby-itemscontainer"], function(layoutManager, loading, cardBuilder, appHost, imageLoader) { "use strict"; function renderRecordings(elem, recordings, cardOptions, scrollX) { @@ -54,7 +54,6 @@ define(["layoutManager", "loading", "components/categorysyncbuttons", "cardBuild } var foldersPromise, latestPromise, self = this, lastFullRender = 0; - categorysyncbuttons.init(tabContent); for (var moreButtons = tabContent.querySelectorAll(".more"), i = 0, length = moreButtons.length; i < length; i++) moreButtons[i].addEventListener("click", onMoreClick); self.preRender = function() { enableFullRender() && (latestPromise = ApiClient.getLiveTvRecordings({ diff --git a/src/scripts/moviesrecommended.js b/src/scripts/moviesrecommended.js index 31c9bfba47..9f0379861f 100644 --- a/src/scripts/moviesrecommended.js +++ b/src/scripts/moviesrecommended.js @@ -1,4 +1,4 @@ -define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "components/categorysyncbuttons", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-itemscontainer", "emby-tabs", "emby-button"], function(events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, categorysyncbuttons, cardBuilder, dom, imageLoader, playbackManager) { +define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-itemscontainer", "emby-tabs", "emby-button"], function(events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager) { "use strict"; function enableScrollX() { @@ -250,7 +250,7 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu" suggestionsTabIndex = 1; self.initTab = function() { var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']"); - categorysyncbuttons.init(tabContent), initSuggestedTab(view, tabContent) + initSuggestedTab(view, tabContent); }, self.renderTab = function() { var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']"); loadSuggestionsTab(view, params, tabContent) diff --git a/src/scripts/site.js b/src/scripts/site.js index c9b1e7fee8..7eef9f3809 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -1431,7 +1431,6 @@ var AppInfo = {}; define("programStyles", ["css!" + componentsPath + "/guide/programs"], returnFirstDependency); define("guide-settings-dialog", [componentsPath + "/guide/guide-settings"], returnFirstDependency); define("loadingDialog", [componentsPath + "/loadingdialog/loadingdialog"], returnFirstDependency); - define("syncDialog", [componentsPath + "/sync/sync"], returnFirstDependency); define("viewManager", [componentsPath + "/viewmanager/viewmanager"], function (viewManager) { window.ViewManager = viewManager; viewManager.dispatchPageEvents(true); @@ -1470,7 +1469,6 @@ var AppInfo = {}; define("userdataButtons", [componentsPath + "/userdatabuttons/userdatabuttons"], returnFirstDependency); define("emby-playstatebutton", [componentsPath + "/userdatabuttons/emby-playstatebutton"], returnFirstDependency); define("emby-ratingbutton", [componentsPath + "/userdatabuttons/emby-ratingbutton"], returnFirstDependency); - define("emby-downloadbutton", [componentsPath + "/sync/emby-downloadbutton"], returnFirstDependency); define("listView", [componentsPath + "/listview/listview"], returnFirstDependency); define("listViewStyle", ["css!" + componentsPath + "/listview/listview"], returnFirstDependency); define("formDialogStyle", ["css!" + componentsPath + "/formdialog"], returnFirstDependency); diff --git a/src/scripts/tvlatest.js b/src/scripts/tvlatest.js index a3cebdd8ee..2f0c4a51aa 100644 --- a/src/scripts/tvlatest.js +++ b/src/scripts/tvlatest.js @@ -1,4 +1,4 @@ -define(["loading", "components/categorysyncbuttons", "components/groupedcards", "cardBuilder", "apphost", "imageLoader"], function(loading, categorysyncbuttons, groupedcards, cardBuilder, appHost, imageLoader) { +define(["loading", "components/groupedcards", "cardBuilder", "apphost", "imageLoader"], function(loading, groupedcards, cardBuilder, appHost, imageLoader) { "use strict"; function getLatestPromise(context, params) { @@ -43,7 +43,6 @@ define(["loading", "components/categorysyncbuttons", "components/groupedcards", } return function(view, params, tabContent) { var self = this; - categorysyncbuttons.init(tabContent); var latestPromise; self.preRender = function() { latestPromise = getLatestPromise(view, params) diff --git a/src/scripts/tvrecommended.js b/src/scripts/tvrecommended.js index 12fbd9081b..c575232831 100644 --- a/src/scripts/tvrecommended.js +++ b/src/scripts/tvrecommended.js @@ -1,4 +1,4 @@ -define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "components/categorysyncbuttons", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function(events, inputManager, libraryMenu, layoutManager, loading, dom, categorysyncbuttons, userSettings, cardBuilder, playbackManager, mainTabsManager) { +define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function(events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager) { "use strict"; function getTabs() { @@ -204,7 +204,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do initialTabIndex = currentTabIndex; self.initTab = function() { var tabContent = self.tabContent; - setScrollClasses(tabContent.querySelector("#resumableItems"), enableScrollX()), categorysyncbuttons.init(tabContent) + setScrollClasses(tabContent.querySelector("#resumableItems"), enableScrollX()) }, self.renderTab = function() { reload() }; diff --git a/src/serviceworker.js b/src/serviceworker.js index 01cf8d63ef..4d9e12ee6a 100644 --- a/src/serviceworker.js +++ b/src/serviceworker.js @@ -1 +1 @@ -importScripts("components/serviceworker/notifications.js", "components/serviceworker/sync.js"); \ No newline at end of file +importScripts("components/serviceworker/notifications.js"); \ No newline at end of file diff --git a/src/tv.html b/src/tv.html index fe95338af3..2a8c3ade26 100644 --- a/src/tv.html +++ b/src/tv.html @@ -30,9 +30,6 @@

${HeaderNextUp}

-
@@ -43,9 +40,6 @@

${HeaderLatestEpisodes}

-
From 65fafe9c58dcd6d6785d325fbf78d4117c2d608e Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 19 Mar 2019 17:03:11 -0700 Subject: [PATCH 07/11] remove registration services --- src/components/emby-button/emby-button.js | 16 +-- src/components/homesections/homesections.js | 91 +--------------- .../playback/playaccessvalidation.js | 6 - src/components/playback/playbackvalidation.js | 80 -------------- .../recordingcreator/recordingbutton.js | 2 +- .../recordingcreator/recordingfields.js | 103 +----------------- .../recordingfields.template.html | 12 -- .../recordingcreator/recordinghelper.js | 43 +++----- .../registrationservices.js | 16 --- src/components/skinmanager.js | 52 +-------- src/scripts/site.js | 2 - 11 files changed, 30 insertions(+), 393 deletions(-) delete mode 100644 src/components/playback/playbackvalidation.js delete mode 100644 src/components/registrationservices/registrationservices.js diff --git a/src/components/emby-button/emby-button.js b/src/components/emby-button/emby-button.js index 99a6aea925..d80b224d03 100644 --- a/src/components/emby-button/emby-button.js +++ b/src/components/emby-button/emby-button.js @@ -4,25 +4,11 @@ define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); var EmbyLinkButtonPrototype = Object.create(HTMLAnchorElement.prototype); - function openPremiumInfo() { - - require(['registrationServices'], function (registrationServices) { - registrationServices.showPremiereInfo(); - }); - } - function onAnchorClick(e) { - var href = this.getAttribute('href') || ''; - if (href !== '#') { - if (this.getAttribute('target')) { - if (href.indexOf('emby.media/premiere') !== -1 && !appHost.supports('externalpremium')) { - e.preventDefault(); - openPremiumInfo(); - } - else if (!appHost.supports('targetblank')) { + if (!appHost.supports('targetblank')) { e.preventDefault(); shell.openUrl(href); } diff --git a/src/components/homesections/homesections.js b/src/components/homesections/homesections.js index 82f6041c3e..9c2ec05aac 100644 --- a/src/components/homesections/homesections.js +++ b/src/components/homesections/homesections.js @@ -1,4 +1,4 @@ -define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings', 'dom', 'apphost', 'layoutManager', 'imageLoader', 'globalize', 'itemShortcuts', 'itemHelper', 'appRouter', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer', 'emby-scroller', 'emby-linkbutton', 'css!./homesections'], function (connectionManager, cardBuilder, registrationServices, appSettings, dom, appHost, layoutManager, imageLoader, globalize, itemShortcuts, itemHelper, appRouter) { +define(['connectionManager', 'cardBuilder', 'appSettings', 'dom', 'apphost', 'layoutManager', 'imageLoader', 'globalize', 'itemShortcuts', 'itemHelper', 'appRouter', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer', 'emby-scroller', 'emby-linkbutton', 'css!./homesections'], function (connectionManager, cardBuilder, appSettings, dom, appHost, layoutManager, imageLoader, globalize, itemShortcuts, itemHelper, appRouter) { 'use strict'; function getDefaultSection(index) { @@ -662,34 +662,10 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings itemsContainer.parentContainer = elem; } - function bindUnlockClick(elem) { - - var btnUnlock = elem.querySelector('.btnUnlock'); - if (btnUnlock) { - btnUnlock.addEventListener('click', function (e) { - - registrationServices.validateFeature('livetv', { - - viewOnly: true - - }).then(function () { - - dom.parentWithClass(elem, 'homeSectionsContainer').dispatchEvent(new CustomEvent('settingschange', { - cancelable: false - })); - }); - }); - } - } - function getOnNowFetchFn(serverId) { - return function () { - var apiClient = connectionManager.getApiClient(serverId); - return apiClient.getLiveTvRecommendedPrograms({ - userId: apiClient.getCurrentUserId(), IsAiring: true, limit: 24, @@ -697,15 +673,12 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings EnableImageTypes: "Primary,Thumb,Backdrop", EnableTotalRecordCount: false, Fields: "ChannelInfo,PrimaryImageAspectRatio" - }); }; } function getOnNowItemsHtml(items) { - var cardLayout = false; - return cardBuilder.getCardsHtml({ items: items, preferThumb: 'auto', @@ -728,27 +701,12 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings } function loadOnNow(elem, apiClient, user) { - if (!user.Policy.EnableLiveTvAccess) { return Promise.resolve(); } - var promises = []; - - promises.push(registrationServices.validateFeature('livetv', - { - viewOnly: true, - showDialog: false - }).then(function () { - return true; - }, function () { - return false; - })); - var userId = user.Id; - - promises.push(apiClient.getLiveTvRecommendedPrograms({ - + apiClient.getLiveTvRecommendedPrograms({ userId: apiClient.getCurrentUserId(), IsAiring: true, limit: 1, @@ -756,17 +714,9 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings EnableImageTypes: "Primary,Thumb,Backdrop", EnableTotalRecordCount: false, Fields: "ChannelInfo,PrimaryImageAspectRatio" - - })); - - return Promise.all(promises).then(function (responses) { - - var registered = responses[0]; - var result = responses[1]; + }).then(function (result) { var html = ''; - - if (result.Items.length && registered) { - + if (result.Items.length) { elem.classList.remove('padded-left'); elem.classList.remove('padded-right'); elem.classList.remove('padded-bottom'); @@ -774,51 +724,38 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings html += '
'; html += '
'; - html += '

' + globalize.translate('LiveTV') + '

'; - html += '
'; if (enableScrollX()) { html += '
'; html += '
'; - } - else { + } else { html += ''; - if (enableScrollX()) { html += '
'; } - html += '
'; html += '
'; @@ -826,12 +763,9 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings html += '
'; if (!layoutManager.tv) { - html += ''; html += '

'; html += globalize.translate('HeaderOnNow'); @@ -863,22 +797,7 @@ define(['connectionManager', 'cardBuilder', 'registrationServices', 'appSettings itemsContainer.parentContainer = elem; itemsContainer.fetchData = getOnNowFetchFn(apiClient.serverId()); itemsContainer.getItemsHtml = getOnNowItemsHtml; - - } else if (result.Items.length && !registered) { - - elem.classList.add('padded-left'); - elem.classList.add('padded-right'); - elem.classList.add('padded-bottom'); - - html += '

' + globalize.translate('LiveTvRequiresUnlock') + '

'; - html += ''; - - elem.innerHTML = html; } - - bindUnlockClick(elem); }); } diff --git a/src/components/playback/playaccessvalidation.js b/src/components/playback/playaccessvalidation.js index bb0b8db3e0..35d8314fc1 100644 --- a/src/components/playback/playaccessvalidation.js +++ b/src/components/playback/playaccessvalidation.js @@ -2,16 +2,13 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz "use strict"; function getRequirePromise(deps) { - return new Promise(function (resolve, reject) { - require(deps, resolve); }); } function showErrorMessage() { return getRequirePromise(['alert']).then(function (alert) { - return alert(globalize.translate('MessagePlayAccessRestricted')).then(function () { return Promise.reject(); }); @@ -19,7 +16,6 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz } function PlayAccessValidation() { - this.name = 'Playback validation'; this.type = 'preplayintercept'; this.id = 'playaccessvalidation'; @@ -27,7 +23,6 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz } PlayAccessValidation.prototype.intercept = function (options) { - var item = options.item; if (!item) { return Promise.resolve(); @@ -38,7 +33,6 @@ define(['connectionManager', 'globalize'], function (connectionManager, globaliz } return connectionManager.getApiClient(serverId).getCurrentUser().then(function (user) { - if (user.Policy.EnableMediaPlayback) { return Promise.resolve(); } diff --git a/src/components/playback/playbackvalidation.js b/src/components/playback/playbackvalidation.js deleted file mode 100644 index c36d5c1b5a..0000000000 --- a/src/components/playback/playbackvalidation.js +++ /dev/null @@ -1,80 +0,0 @@ -define(['playbackManager', 'itemHelper'], function (playbackManager, itemHelper) { - "use strict"; - - function getRequirePromise(deps) { - - return new Promise(function (resolve, reject) { - - require(deps, resolve); - }); - } - - function validatePlayback(options) { - - var feature = 'playback'; - if (options.item && (options.item.Type === 'TvChannel' || options.item.Type === 'Recording')) { - feature = 'livetv'; - } - - if (feature === 'playback') { - var player = playbackManager.getCurrentPlayer(); - if (player && !player.isLocalPlayer) { - return Promise.resolve(); - } - } - - return getRequirePromise(["registrationServices"]).then(function (registrationServices) { - - return registrationServices.validateFeature(feature, options).then(function (result) { - - if (result && result.enableTimeLimit) { - startAutoStopTimer(); - } - }); - }); - } - - var autoStopTimeout; - function startAutoStopTimer() { - stopAutoStopTimer(); - autoStopTimeout = setTimeout(onAutoStopTimeout, 63000); - } - - function onAutoStopTimeout() { - stopAutoStopTimer(); - playbackManager.stop(); - } - - function stopAutoStopTimer() { - - var timeout = autoStopTimeout; - if (timeout) { - clearTimeout(timeout); - autoStopTimeout = null; - } - } - - function PlaybackValidation() { - - this.name = 'Playback validation'; - this.type = 'preplayintercept'; - this.id = 'playbackvalidation'; - this.order = -1; - } - - PlaybackValidation.prototype.intercept = function (options) { - - // Don't care about video backdrops, or theme music or any kind of non-fullscreen playback - if (!options.fullscreen) { - return Promise.resolve(); - } - - if (options.item && itemHelper.isLocalItem(options.item)) { - return Promise.resolve(); - } - - return validatePlayback(options); - }; - - return PlaybackValidation; -}); \ No newline at end of file diff --git a/src/components/recordingcreator/recordingbutton.js b/src/components/recordingcreator/recordingbutton.js index ef4645e6bb..0a76d3914c 100644 --- a/src/components/recordingcreator/recordingbutton.js +++ b/src/components/recordingcreator/recordingbutton.js @@ -1,4 +1,4 @@ -define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'registrationServices', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields'], function (globalize, connectionManager, require, loading, appHost, dom, recordingHelper, events, registrationServices) { +define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields'], function (globalize, connectionManager, require, loading, appHost, dom, recordingHelper, events) { 'use strict'; function onRecordingButtonClick(e) { diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index ac21784eb9..cb0229d873 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -1,75 +1,16 @@ -define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'registrationServices', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events, registrationServices) { +define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loading', 'apphost', 'dom', 'recordingHelper', 'events', 'paper-icon-button-light', 'emby-button', 'css!./recordingfields', 'flexStyles'], function (globalize, connectionManager, serverNotifications, require, loading, appHost, dom, recordingHelper, events) { 'use strict'; - function getRegistration(apiClient, feature) { - - return registrationServices.validateFeature(feature, { - showDialog: false, - viewOnly: true - }); - } - - function showConvertRecordingsUnlockMessage(context, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - }, function () { - context.querySelector('.convertRecordingsContainer').classList.remove('hide'); - }); - } - function showSeriesRecordingFields(context, programId, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.supporterContainer').classList.add('hide'); - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - context.querySelector('.recordSeriesContainer').classList.remove('hide'); - - }, function () { - - context.querySelector('.supporterContainerText').innerHTML = globalize.translate('MessageActiveSubscriptionRequiredSeriesRecordings'); - context.querySelector('.supporterContainer').classList.remove('hide'); - context.querySelector('.recordSeriesContainer').classList.add('hide'); - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - }); - } - - function getDvrFeatureCode() { - - return 'dvr'; + context.querySelector('.convertRecordingsContainer').classList.add('hide'); + context.querySelector('.recordSeriesContainer').classList.remove('hide'); } function showSingleRecordingFields(context, programId, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.supporterContainer').classList.add('hide'); - showConvertRecordingsUnlockMessage(context, apiClient); - - }, function () { - - context.querySelector('.supporterContainerText').innerHTML = globalize.translate('DvrSubscriptionRequired'); - context.querySelector('.supporterContainer').classList.remove('hide'); - context.querySelector('.convertRecordingsContainer').classList.add('hide'); - }); - } - - function showRecordingFieldsContainer(context, programId, apiClient) { - - getRegistration(apiClient, getDvrFeatureCode()).then(function () { - - context.querySelector('.recordingFields').classList.remove('hide'); - - }, function () { - - context.querySelector('.recordingFields').classList.add('hide'); - }); + context.querySelector('.convertRecordingsContainer').classList.add('hide'); } function loadData(parent, program, apiClient) { - if (program.IsSeries) { parent.querySelector('.recordSeriesContainer').classList.remove('hide'); showSeriesRecordingFields(parent, program.Id, apiClient); @@ -91,13 +32,11 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa if (program.TimerId && program.Status !== 'Cancelled') { parent.querySelector('.btnManageRecording').classList.remove('hide'); parent.querySelector('.singleRecordingButton .recordingIcon').classList.add('recordingIcon-active'); - if (program.Status === 'InProgress') { parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('StopRecording'); } else { parent.querySelector('.singleRecordingButton .buttonText').innerHTML = globalize.translate('DoNotRecord'); } - } else { parent.querySelector('.btnManageRecording').classList.add('hide'); parent.querySelector('.singleRecordingButton .recordingIcon').classList.remove('recordingIcon-active'); @@ -110,20 +49,16 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa var options = instance.options; var apiClient = connectionManager.getApiClient(options.serverId); - showRecordingFieldsContainer(options.parent, options.programId, apiClient); - + instance.querySelector('.recordingFields').classList.remove('hide'); return apiClient.getLiveTvProgram(options.programId, apiClient.getCurrentUserId()).then(function (program) { - instance.TimerId = program.TimerId; instance.Status = program.Status; instance.SeriesTimerId = program.SeriesTimerId; - loadData(options.parent, program, apiClient); }); } function onTimerChangedExternally(e, apiClient, data) { - var options = this.options; var refresh = false; @@ -144,7 +79,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa } function onSeriesTimerChangedExternally(e, apiClient, data) { - var options = this.options; var refresh = false; @@ -181,26 +115,16 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa events.on(serverNotifications, 'SeriesTimerCancelled', seriesTimerChangedHandler); } - function onSupporterButtonClick() { - registrationServices.showPremiereInfo(); - } - function onManageRecordingClick(e) { - var options = this.options; - if (!this.TimerId || this.Status === 'Cancelled') { return; } var self = this; - require(['recordingEditor'], function (recordingEditor) { - recordingEditor.show(self.TimerId, options.serverId, { - enableCancel: false - }).then(function () { self.changed = true; }); @@ -282,21 +206,16 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa if (isChecked) { showSeriesRecordingFields(options.parent, options.programId, apiClient); - if (!this.SeriesTimerId) { - var promise = this.TimerId ? recordingHelper.changeRecordingToSeries(apiClient, this.TimerId, options.programId) : recordingHelper.createRecording(apiClient, options.programId, true); - promise.then(function () { fetchData(self); }); } } else { - showSingleRecordingFields(options.parent, options.programId, apiClient); - if (this.SeriesTimerId) { apiClient.cancelLiveTvSeriesTimer(this.SeriesTimerId).then(function () { sendToast(globalize.translate('RecordingCancelled')); @@ -307,22 +226,13 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa } RecordingEditor.prototype.embed = function () { - var self = this; - return new Promise(function (resolve, reject) { - require(['text!./recordingfields.template.html'], function (template) { - var options = self.options; var context = options.parent; context.innerHTML = globalize.translateDocument(template, 'core'); - var supporterButtons = context.querySelectorAll('.btnSupporter'); - for (var i = 0, length = supporterButtons.length; i < length; i++) { - supporterButtons[i].addEventListener('click', onSupporterButtonClick); - } - context.querySelector('.singleRecordingButton').addEventListener('click', onRecordChange.bind(self)); context.querySelector('.seriesRecordingButton').addEventListener('click', onRecordSeriesChange.bind(self)); context.querySelector('.btnManageRecording').addEventListener('click', onManageRecordingClick.bind(self)); @@ -334,17 +244,14 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa }; RecordingEditor.prototype.hasChanged = function () { - return this.changed; }; RecordingEditor.prototype.refresh = function () { - fetchData(this); }; RecordingEditor.prototype.destroy = function () { - var timerChangedHandler = this.timerChangedHandler; this.timerChangedHandler = null; diff --git a/src/components/recordingcreator/recordingfields.template.html b/src/components/recordingcreator/recordingfields.template.html index 4e4fb4878b..895e533400 100644 --- a/src/components/recordingcreator/recordingfields.template.html +++ b/src/components/recordingcreator/recordingfields.template.html @@ -1,20 +1,8 @@

${HeaderConvertYourRecordings}

${PromoConvertRecordingsToStreamingFormat}
-
- -
-
-
-
-
-