From e5b6336256226aaec8fa419e04808e26b821e482 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 15 Aug 2016 20:22:59 -0400 Subject: [PATCH 1/5] fix folder caching --- dashboard-ui/devices/android/android.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dashboard-ui/devices/android/android.css b/dashboard-ui/devices/android/android.css index 3f1643b96d..a723091cf8 100644 --- a/dashboard-ui/devices/android/android.css +++ b/dashboard-ui/devices/android/android.css @@ -1,11 +1,11 @@ @media all and (min-width: 300px) { - .libraryViewNav, .libraryViewNav > .contentScrollSlider { + .libraryViewNav, .emby-tabs-slider { display: flex; flex-grow: 1; } - .libraryViewNav .emby-tab-button { - flex-grow: 1; - } + .emby-tab-button { + flex-grow: 1; + } } From a11c82ac9dfa10fec1d7a50a93832e89efca5e00 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 15 Aug 2016 22:40:29 -0400 Subject: [PATCH 2/5] use shared headroom --- .../headroom.js/dist/headroom.js | 100 ++++++++---------- dashboard-ui/channels.html | 2 +- .../components/appfooter/appfooter.css | 9 +- .../components/appfooter/appfooter.js | 28 ++--- dashboard-ui/scripts/channels.js | 29 +++-- dashboard-ui/scripts/indexpage.js | 23 +++- dashboard-ui/scripts/librarymenu.js | 28 +---- dashboard-ui/scripts/livetvsuggested.js | 16 ++- dashboard-ui/scripts/moviesrecommended.js | 30 ++++-- dashboard-ui/scripts/musicrecommended.js | 18 +++- dashboard-ui/scripts/site.js | 24 ++++- dashboard-ui/scripts/tvrecommended.js | 26 +++-- 12 files changed, 177 insertions(+), 156 deletions(-) diff --git a/dashboard-ui/bower_components/headroom.js/dist/headroom.js b/dashboard-ui/bower_components/headroom.js/dist/headroom.js index 0d35c10186..21f4ab3091 100644 --- a/dashboard-ui/bower_components/headroom.js/dist/headroom.js +++ b/dashboard-ui/bower_components/headroom.js/dist/headroom.js @@ -130,11 +130,11 @@ * @param {DOMElement} elem the header element * @param {Object} options options for the widget */ - function Headroom(elem, options) { + function Headroom(elems, options) { options = extend(options, Headroom.options); this.lastKnownScrollY = 0; - this.elem = elem; + this.elems = elems; this.debouncer = new Debouncer(this.update.bind(this)); this.tolerance = normalizeTolerance(options.tolerance); this.classes = options.classes; @@ -143,8 +143,6 @@ this.initialised = false; this.onPin = options.onPin; this.onUnpin = options.onUnpin; - this.onTop = options.onTop; - this.onNotTop = options.onNotTop; } Headroom.prototype = { constructor: Headroom, @@ -154,13 +152,30 @@ */ init: function () { - this.elem.classList.add(this.classes.initial); + for (var i = 0, length = this.elems.length; i < length; i++) { + this.elems[i].classList.add(this.classes.initial); + } this.attachEvent(); return this; }, + add: function (elem) { + elem.classList.add(this.classes.initial); + this.elems.push(elem); + }, + + remove: function (elem) { + + var classes = this.classes; + elem.classList.remove(classes.unpinned, classes.pinned, classes.initial); + var i = this.elems.indexOf(elem); + if (i != -1) { + this.elems.splice(i, 1); + } + }, + /** * Unattaches events and removes any classes that were added */ @@ -168,7 +183,11 @@ var classes = this.classes; this.initialised = false; - this.elem.classList.remove(classes.unpinned, classes.pinned, classes.top, classes.initial); + + for (var i = 0, length = this.elems.length; i < length; i++) { + this.elems[i].classList.remove(classes.unpinned, classes.pinned, classes.initial); + } + removeEventListenerWithOptions(this.scroller, 'scroll', this.debouncer, { capture: false, passive: true @@ -196,13 +215,17 @@ * Unpins the header if it's currently pinned */ unpin: function () { - var classList = this.elem.classList, - classes = this.classes; - if (classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) { - classList.add(classes.unpinned); - classList.remove(classes.pinned); - this.onUnpin && this.onUnpin.call(this); + var classes = this.classes; + + for (var i = 0, length = this.elems.length; i < length; i++) { + var classList = this.elems[i].classList; + + if (classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) { + classList.add(classes.unpinned); + classList.remove(classes.pinned); + this.onUnpin && this.onUnpin.call(this); + } } }, @@ -210,42 +233,19 @@ * Pins the header if it's currently unpinned */ pin: function () { - var classList = this.elem.classList, - classes = this.classes; - if (classList.contains(classes.unpinned)) { - classList.remove(classes.unpinned); - classList.add(classes.pinned); - this.onPin && this.onPin.call(this); + var classes = this.classes; + + for (var i = 0, length = this.elems.length; i < length; i++) { + var classList = this.elems[i].classList; + + if (classList.contains(classes.unpinned)) { + classList.remove(classes.unpinned); + classList.add(classes.pinned); + this.onPin && this.onPin.call(this); + } } - }, - /** - * Handles the top states - */ - top: function () { - var classList = this.elem.classList, - classes = this.classes; - - if (!classList.contains(classes.top)) { - classList.add(classes.top); - classList.remove(classes.notTop); - this.onTop && this.onTop.call(this); - } - }, - - /** - * Handles the not top state - */ - notTop: function () { - var classList = this.elem.classList, - classes = this.classes; - - if (!classList.contains(classes.notTop)) { - classList.add(classes.notTop); - classList.remove(classes.top); - this.onNotTop && this.onNotTop.call(this); - } }, /** @@ -315,14 +315,6 @@ return; } - if (this.enableTopClasses) { - if (currentScrollY <= this.offset) { - this.top(); - } else { - this.notTop(); - } - } - if (this.shouldUnpin(currentScrollY, toleranceExceeded)) { this.unpin(); } @@ -347,8 +339,6 @@ classes: { pinned: 'headroom--pinned', unpinned: 'headroom--unpinned', - top: 'headroom--top', - notTop: 'headroom--not-top', initial: 'headroom' } }; diff --git a/dashboard-ui/channels.html b/dashboard-ui/channels.html index 4e442131fe..4063a3e060 100644 --- a/dashboard-ui/channels.html +++ b/dashboard-ui/channels.html @@ -1,4 +1,4 @@ -
+
diff --git a/dashboard-ui/components/appfooter/appfooter.css b/dashboard-ui/components/appfooter/appfooter.css index 145d588342..b7013c80ac 100644 --- a/dashboard-ui/components/appfooter/appfooter.css +++ b/dashboard-ui/components/appfooter/appfooter.css @@ -5,16 +5,9 @@ right: 0; z-index: 1; bottom: 0; -} - -.appfooter-headroom { transition: transform 180ms linear; } -.appfooter--pinned { - transform: none; -} - -.appfooter--unpinned { +.appfooter.headroom--unpinned { transform: translateY(100%); } \ No newline at end of file diff --git a/dashboard-ui/components/appfooter/appfooter.js b/dashboard-ui/components/appfooter/appfooter.js index c2bdbd5d8b..4c21e5cb44 100644 --- a/dashboard-ui/components/appfooter/appfooter.js +++ b/dashboard-ui/components/appfooter/appfooter.js @@ -13,27 +13,10 @@ function initHeadRoom(instance, elem) { - require(["headroom"], function () { + require(["headroom-window"], function (headroom) { - // construct an instance of Headroom, passing the element - var headroom = new Headroom(elem, { - // or scroll tolerance per direction - tolerance: { - down: 20, - up: 0 - }, - classes: { - pinned: 'appfooter--pinned', - unpinned: 'appfooter--unpinned', - top: 'appfooter--top', - notTop: 'appfooter--not-top', - initial: 'appfooter-headroom' - } - }); - // initialise - headroom.init(); - - instance.headroom = headroom; + self.headroom = headroom; + headroom.add(elem); }); } @@ -62,10 +45,11 @@ var self = this; if (self.headroom) { - self.headroom.destroy(); + self.headroom.remove(self.element); + self.headroom = null; } - self.Element = null; + self.element = null; }; return dockedTabs; diff --git a/dashboard-ui/scripts/channels.js b/dashboard-ui/scripts/channels.js index d5e2934679..c06a1faa28 100644 --- a/dashboard-ui/scripts/channels.js +++ b/dashboard-ui/scripts/channels.js @@ -1,4 +1,4 @@ -define(['libraryBrowser', 'cardBuilder', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (libraryBrowser, cardBuilder) { +define(['libraryBrowser', 'cardBuilder', 'emby-itemscontainer', 'emby-tabs', 'emby-button', 'scripts/channelslatest', 'scripts/sections'], function (libraryBrowser, cardBuilder) { // The base query options var query = { @@ -70,18 +70,29 @@ } } - pageIdOn('pageinit', "channelsPage", function () { + return function (view, params) { - var page = this; + var self = this; + var viewTabs = view.querySelector('.libraryViewNav'); - var mdlTabs = page.querySelector('.libraryViewNav'); + libraryBrowser.configurePaperLibraryTabs(view, viewTabs, view.querySelectorAll('.pageTabContent'), [0, 1]); - libraryBrowser.configurePaperLibraryTabs(page, mdlTabs, page.querySelectorAll('.pageTabContent'), [0, 1]); - - mdlTabs.addEventListener('tabchange', function (e) { - loadTab(page, parseInt(e.detail.selectedTabIndex)); + viewTabs.addEventListener('tabchange', function (e) { + loadTab(view, parseInt(e.detail.selectedTabIndex)); }); - }); + if (AppInfo.enableHeadRoom) { + require(["headroom-window"], function (headroom) { + headroom.add(viewTabs); + self.headroom = headroom; + }); + } + view.addEventListener('viewdestroy', function (e) { + + if (self.headroom) { + self.headroom.remove(viewTabs); + } + }); + }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js index bd11cf8f53..e03031bd2f 100644 --- a/dashboard-ui/scripts/indexpage.js +++ b/dashboard-ui/scripts/indexpage.js @@ -248,9 +248,9 @@ loadHomeTab(view, tabContent); }; - var mdlTabs = view.querySelector('.libraryViewNav'); + var viewTabs = view.querySelector('.libraryViewNav'); - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 3]); + libraryBrowser.configurePaperLibraryTabs(view, viewTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 3]); var tabControllers = []; var renderedTabs = []; @@ -319,11 +319,11 @@ }); } - mdlTabs.addEventListener('beforetabchange', function (e) { + viewTabs.addEventListener('beforetabchange', function (e) { preLoadTab(view, parseInt(e.detail.selectedTabIndex)); }); - mdlTabs.addEventListener('tabchange', function (e) { + viewTabs.addEventListener('tabchange', function (e) { loadTab(view, parseInt(e.detail.selectedTabIndex)); }); @@ -343,7 +343,7 @@ if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { - mdlTabs.triggerTabChange(); + viewTabs.triggerTabChange(); } } @@ -370,5 +370,18 @@ Events.off(MediaController, 'playbackstop', onPlaybackStop); Events.off(ApiClient, "websocketmessage", onWebSocketMessage); }); + + if (AppInfo.enableHeadRoom) { + require(["headroom-window"], function (headroom) { + headroom.add(viewTabs); + self.headroom = headroom; + }); + } + + view.addEventListener('viewdestroy', function (e) { + if (self.headroom) { + self.headroom.remove(viewTabs); + } + }); }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 720591519b..158df228d6 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -879,21 +879,6 @@ } } - pageClassOn('pageinit', 'page', function () { - - var page = this; - - var isLibraryPage = page.classList.contains('libraryPage'); - - if (isLibraryPage) { - - var navs = page.querySelectorAll('.libraryViewNav'); - for (var i = 0, length = navs.length; i < length; i++) { - initHeadRoom(navs[i]); - } - } - }); - pageClassOn('pagebeforeshow', 'page', function (e) { var page = this; @@ -999,18 +984,9 @@ return; } - require(["headroom"], function () { + require(["headroom-window"], function (headroom) { - // construct an instance of Headroom, passing the element - var headroom = new Headroom(elem, { - // or scroll tolerance per direction - tolerance: { - down: 40, - up: 0 - } - }); - // initialise - headroom.init(); + headroom.add(elem); }); } diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index 56fadd3220..d492dc7601 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -198,11 +198,11 @@ }); } - var mdlTabs = view.querySelector('.libraryViewNav'); + var viewTabs = view.querySelector('.libraryViewNav'); - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 2, 3, 4]); + libraryBrowser.configurePaperLibraryTabs(view, viewTabs, view.querySelectorAll('.pageTabContent'), [0, 2, 3, 4]); - mdlTabs.addEventListener('tabchange', function (e) { + viewTabs.addEventListener('tabchange', function (e) { loadTab(view, parseInt(e.detail.selectedTabIndex)); }); @@ -211,8 +211,18 @@ document.body.classList.remove('autoScrollY'); }); + if (AppInfo.enableHeadRoom) { + require(["headroom-window"], function (headroom) { + headroom.add(viewTabs); + self.headroom = headroom; + }); + } + view.addEventListener('viewdestroy', function (e) { + if (self.headroom) { + self.headroom.remove(viewTabs); + } tabControllers.forEach(function (t) { if (t.destroy) { t.destroy(); diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js index 02723d9b2d..7fc7419574 100644 --- a/dashboard-ui/scripts/moviesrecommended.js +++ b/dashboard-ui/scripts/moviesrecommended.js @@ -208,15 +208,9 @@ loadSuggestionsTab(view, params, tabContent); }; - var mdlTabs = view.querySelector('.libraryViewNav'); + var viewTabs = view.querySelector('.libraryViewNav'); - var baseUrl = 'movies.html'; - var topParentId = params.topParentId; - if (topParentId) { - baseUrl += '?topParentId=' + topParentId; - } - - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 3, 4, 5]); + libraryBrowser.configurePaperLibraryTabs(view, viewTabs, view.querySelectorAll('.pageTabContent'), [0, 3, 4, 5]); var tabControllers = []; var renderedTabs = []; @@ -290,14 +284,15 @@ }); } - mdlTabs.addEventListener('beforetabchange', function (e) { + viewTabs.addEventListener('beforetabchange', function (e) { preLoadTab(view, parseInt(e.detail.selectedTabIndex)); }); - mdlTabs.addEventListener('tabchange', function (e) { + viewTabs.addEventListener('tabchange', function (e) { loadTab(view, parseInt(e.detail.selectedTabIndex)); }); view.addEventListener('viewbeforeshow', function (e) { + if (!view.getAttribute('data-title')) { var parentId = params.topParentId; @@ -323,7 +318,7 @@ if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { renderedTabs = []; - mdlTabs.triggerTabChange(); + viewTabs.triggerTabChange(); } } @@ -334,6 +329,19 @@ view.addEventListener('viewbeforehide', function (e) { Events.off(MediaController, 'playbackstop', onPlaybackStop); }); + + if (AppInfo.enableHeadRoom) { + require(["headroom-window"], function (headroom) { + headroom.add(viewTabs); + self.headroom = headroom; + }); + } + + view.addEventListener('viewdestroy', function (e) { + if (self.headroom) { + self.headroom.remove(viewTabs); + } + }); }; }); \ No newline at end of file diff --git a/dashboard-ui/scripts/musicrecommended.js b/dashboard-ui/scripts/musicrecommended.js index 70bbc97c91..346f38359a 100644 --- a/dashboard-ui/scripts/musicrecommended.js +++ b/dashboard-ui/scripts/musicrecommended.js @@ -349,19 +349,29 @@ }); } - var mdlTabs = view.querySelector('.libraryViewNav'); + var viewTabs = view.querySelector('.libraryViewNav'); - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 4, 5, 6]); + libraryBrowser.configurePaperLibraryTabs(view, viewTabs, view.querySelectorAll('.pageTabContent'), [0, 4, 5, 6]); - mdlTabs.addEventListener('beforetabchange', function (e) { + viewTabs.addEventListener('beforetabchange', function (e) { preLoadTab(view, parseInt(e.detail.selectedTabIndex)); }); - mdlTabs.addEventListener('tabchange', function (e) { + viewTabs.addEventListener('tabchange', function (e) { loadTab(view, parseInt(e.detail.selectedTabIndex)); }); + if (AppInfo.enableHeadRoom) { + require(["headroom-window"], function (headroom) { + headroom.add(viewTabs); + self.headroom = headroom; + }); + } + view.addEventListener('viewdestroy', function (e) { + if (self.headroom) { + self.headroom.remove(viewTabs); + } tabControllers.forEach(function (t) { if (t.destroy) { t.destroy(); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 1d4f3c3ded..fe8fce0dcb 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1185,6 +1185,25 @@ var AppInfo = {}; } } + function createWindowHeadroom() { + // construct an instance of Headroom, passing the element + var headroom = new Headroom([], { + // or scroll tolerance per direction + tolerance: { + down: 20, + up: 0 + }, + classes: { + //pinned: 'appfooter--pinned', + //unpinned: 'appfooter--unpinned', + //initial: 'appfooter-headroom' + } + }); + // initialise + headroom.init(); + return headroom; + } + function initRequire() { var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate()); @@ -1491,6 +1510,8 @@ var AppInfo = {}; return Emby.Page; }); + define("headroom-window", ['headroom'], createWindowHeadroom); + // mock this for now. not used in this app define("playbackManager", [], function () { return { @@ -1892,7 +1913,8 @@ var AppInfo = {}; path: '/channels.html', dependencies: [], autoFocus: false, - transition: 'fade' + transition: 'fade', + controller: 'scripts/channels' }); defineRoute({ diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index c493353940..6750485b9e 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -202,34 +202,28 @@ }); } - var mdlTabs = view.querySelector('.libraryViewNav'); + var viewTabs = view.querySelector('.libraryViewNav'); function onPlaybackStop(e, state) { if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { renderedTabs = []; - mdlTabs.triggerTabChange(); + viewTabs.triggerTabChange(); } } - var baseUrl = 'tv.html'; - var topParentId = params.topParentId; - if (topParentId) { - baseUrl += '?topParentId=' + topParentId; - } - if (enableScrollX()) { view.querySelector('#resumableItems').classList.add('hiddenScrollX'); } else { view.querySelector('#resumableItems').classList.remove('hiddenScrollX'); } - libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 4, 5, 6]); + libraryBrowser.configurePaperLibraryTabs(view, viewTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 4, 5, 6]); - mdlTabs.addEventListener('beforetabchange', function (e) { + viewTabs.addEventListener('beforetabchange', function (e) { preLoadTab(view, parseInt(e.detail.selectedTabIndex)); }); - mdlTabs.addEventListener('tabchange', function (e) { + viewTabs.addEventListener('tabchange', function (e) { loadTab(view, parseInt(e.detail.selectedTabIndex)); }); @@ -278,8 +272,18 @@ Events.off(ApiClient, "websocketmessage", onWebSocketMessage); }); + if (AppInfo.enableHeadRoom) { + require(["headroom-window"], function (headroom) { + headroom.add(viewTabs); + self.headroom = headroom; + }); + } + view.addEventListener('viewdestroy', function (e) { + if (self.headroom) { + self.headroom.remove(viewTabs); + } tabControllers.forEach(function (t) { if (t.destroy) { t.destroy(); From d0aee5580a44e08d31836855a4df9fe7c6a0baff Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 16 Aug 2016 00:12:12 -0400 Subject: [PATCH 3/5] update local sync --- .../emby-apiclient/apiclient.js | 23 +++++++++ .../components/navdrawer/navdrawer.js | 5 +- dashboard-ui/itemdetails.html | 4 +- dashboard-ui/scripts/itemdetailpage.js | 35 ++++++++----- dashboard-ui/scripts/librarybrowser.js | 51 +++++++++++-------- dashboard-ui/scripts/librarymenu.js | 3 +- dashboard-ui/scripts/site.js | 7 +++ dashboard-ui/strings/en-US.json | 4 +- 8 files changed, 93 insertions(+), 39 deletions(-) diff --git a/dashboard-ui/bower_components/emby-apiclient/apiclient.js b/dashboard-ui/bower_components/emby-apiclient/apiclient.js index b428d4a274..cdea1c7daa 100644 --- a/dashboard-ui/bower_components/emby-apiclient/apiclient.js +++ b/dashboard-ui/bower_components/emby-apiclient/apiclient.js @@ -3361,6 +3361,29 @@ }); }; + self.cancelSyncItems = function (itemIds, targetId) { + + if (!userId) { + throw new Error("null userId"); + } + + if (!itemId) { + throw new Error("null itemId"); + } + + var url = self.getUrl("Sync/Items/Cancel"); + + return self.ajax({ + type: "POST", + data: JSON.stringify({ + TargetId: targetId || self.deviceId(), + ItemIds: itemIds + }), + contentType: "application/json", + url: url + }); + }; + /** * Reports a user has stopped playing an item * @param {String} userId diff --git a/dashboard-ui/components/navdrawer/navdrawer.js b/dashboard-ui/components/navdrawer/navdrawer.js index b300768d6c..54fc6136a9 100644 --- a/dashboard-ui/components/navdrawer/navdrawer.js +++ b/dashboard-ui/components/navdrawer/navdrawer.js @@ -97,7 +97,10 @@ return; } - var edgeHammer = new Hammer(options.edgeSwipeElement, null); + require(['hammer-main'], initEdgeSwipeInternal); + } + + function initEdgeSwipeInternal(edgeHammer) { var isPeeking = false; edgeHammer.on('panstart panmove', function (ev) { diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html index 4688e5f5ee..2befbdee9d 100644 --- a/dashboard-ui/itemdetails.html +++ b/dashboard-ui/itemdetails.html @@ -38,7 +38,7 @@
@@ -62,7 +62,7 @@
diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index be5a1304f4..1451cb7bbd 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -2054,21 +2054,30 @@ }); } - function onSyncLocalClick() { - - if (this.checked) { - require(['syncDialog'], function (syncDialog) { - syncDialog.showMenu({ - items: [currentItem] - }); - }); - } else { - - } - } - return function (view, params) { + function onSyncLocalClick() { + + if (this.checked) { + require(['syncDialog'], function (syncDialog) { + syncDialog.showMenu({ + items: [currentItem] + }); + }); + } else { + + require(['confirm'], function (confirm) { + + confirm(Globalize.translate('ConfirmRemoveDownload')).then(function () { + ApiClient.cancelSyncItems([currentItem.Id]); + }, function () { + + updateSyncStatus(view, currentItem); + }); + }); + } + } + function onPlayTrailerClick() { playTrailer(view); } diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 0035909842..04ba851466 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -116,32 +116,43 @@ configureSwipeTabs: function (ownerpage, tabs) { if (!browser.touch) { - return; + //return; } + //require(['hammer'], function (Hammer) { + + // var hammertime = new Hammer(ownerpage); + // hammertime.get('swipe').set({ direction: Hammer.DIRECTION_HORIZONTAL }); + + //}); + var pageCount = ownerpage.querySelectorAll('.pageTabContent').length; - - require(['hammer'], function (Hammer) { - - var hammertime = new Hammer(ownerpage); - hammertime.get('swipe').set({ direction: Hammer.DIRECTION_HORIZONTAL }); - - hammertime.on('swipeleft', function (e) { - if (LibraryBrowser.allowSwipe(e.target)) { - var selected = parseInt(tabs.selectedIndex() || '0'); - if (selected < (pageCount - 1)) { - tabs.selectedIndex(selected + 1); - } + var onSwipeLeft = function (e) { + if (LibraryBrowser.allowSwipe(e.target) && ownerpage.contains(e.target)) { + var selected = parseInt(tabs.selectedIndex() || '0'); + if (selected < (pageCount - 1)) { + tabs.selectedIndex(selected + 1); } - }); + } + }; - hammertime.on('swiperight', function (e) { - if (LibraryBrowser.allowSwipe(e.target)) { - var selected = parseInt(tabs.selectedIndex() || '0'); - if (selected > 0) { - tabs.selectedIndex(selected - 1); - } + var onSwipeRight = function (e) { + if (LibraryBrowser.allowSwipe(e.target) && ownerpage.contains(e.target)) { + var selected = parseInt(tabs.selectedIndex() || '0'); + if (selected > 0) { + tabs.selectedIndex(selected - 1); } + } + }; + + require(['hammer-main'], function (hammertime) { + + hammertime.on('swipeleft', onSwipeLeft); + hammertime.on('swiperight', onSwipeRight); + + ownerpage.addEventListener('viewdestroy', function () { + hammertime.off('swipeleft', onSwipeLeft); + hammertime.off('swiperight', onSwipeRight); }); }); }, diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 158df228d6..7ba088f6db 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -1055,8 +1055,7 @@ target: navDrawerElement, onChange: onMainDrawerSelect, width: drawerWidth, - disableEdgeSwipe: disableEdgeSwipe, - edgeSwipeElement: document.querySelector('.mainDrawerPanelContent') + disableEdgeSwipe: disableEdgeSwipe }; } diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index fe8fce0dcb..190e395501 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1204,6 +1204,12 @@ var AppInfo = {}; return headroom; } + function createMainContentHammer(Hammer) { + + var hammer = new Hammer(document.querySelector('.mainDrawerPanelContent'), null); + return hammer; + } + function initRequire() { var urlArgs = "v=" + (window.dashboardVersion || new Date().getDate()); @@ -1511,6 +1517,7 @@ var AppInfo = {}; }); define("headroom-window", ['headroom'], createWindowHeadroom); + define("hammer-main", ['hammer'], createMainContentHammer); // mock this for now. not used in this app define("playbackManager", [], function () { diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index 98b3ca3356..36715f32da 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -2312,5 +2312,7 @@ "MoreFromValue": "More from {0}", "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", "EnablePhotos": "Enable photos", - "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files." + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } From 0e2b46b686937e3301bf55f8ac59ac227cc231c5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 16 Aug 2016 01:34:36 -0400 Subject: [PATCH 4/5] update sync --- .../emby-apiclient/apiclient.js | 19 +-- .../components/navdrawer/navdrawer.css | 2 +- dashboard-ui/css/dashboard.css | 2 +- dashboard-ui/scripts/itemdetailpage.js | 20 ++- dashboard-ui/scripts/librarymenu.js | 4 +- dashboard-ui/scripts/sync.js | 153 +++++++++--------- dashboard-ui/strings/ar.json | 6 +- dashboard-ui/strings/be-BY.json | 6 +- dashboard-ui/strings/bg-BG.json | 6 +- dashboard-ui/strings/ca.json | 6 +- dashboard-ui/strings/cs.json | 6 +- dashboard-ui/strings/da.json | 6 +- dashboard-ui/strings/de.json | 6 +- dashboard-ui/strings/el.json | 6 +- dashboard-ui/strings/en-GB.json | 6 +- dashboard-ui/strings/es-AR.json | 6 +- dashboard-ui/strings/es-MX.json | 6 +- dashboard-ui/strings/es.json | 6 +- dashboard-ui/strings/fi.json | 6 +- dashboard-ui/strings/fr-CA.json | 6 +- dashboard-ui/strings/fr-FR.json | 6 +- dashboard-ui/strings/fr.json | 6 +- dashboard-ui/strings/gsw.json | 6 +- dashboard-ui/strings/he.json | 6 +- dashboard-ui/strings/hr.json | 6 +- dashboard-ui/strings/hu.json | 6 +- dashboard-ui/strings/id.json | 6 +- dashboard-ui/strings/it.json | 6 +- dashboard-ui/strings/kk.json | 10 +- dashboard-ui/strings/ko.json | 6 +- dashboard-ui/strings/ms.json | 6 +- dashboard-ui/strings/nb.json | 6 +- dashboard-ui/strings/nl.json | 6 +- dashboard-ui/strings/pl.json | 6 +- dashboard-ui/strings/pt-BR.json | 6 +- dashboard-ui/strings/pt-PT.json | 6 +- dashboard-ui/strings/ro.json | 6 +- dashboard-ui/strings/ru.json | 10 +- dashboard-ui/strings/sk.json | 6 +- dashboard-ui/strings/sl-SI.json | 6 +- dashboard-ui/strings/sv.json | 6 +- dashboard-ui/strings/tr.json | 6 +- dashboard-ui/strings/uk.json | 6 +- dashboard-ui/strings/vi.json | 6 +- dashboard-ui/strings/zh-CN.json | 6 +- dashboard-ui/strings/zh-HK.json | 6 +- dashboard-ui/strings/zh-TW.json | 6 +- 47 files changed, 309 insertions(+), 145 deletions(-) diff --git a/dashboard-ui/bower_components/emby-apiclient/apiclient.js b/dashboard-ui/bower_components/emby-apiclient/apiclient.js index cdea1c7daa..bfae25535b 100644 --- a/dashboard-ui/bower_components/emby-apiclient/apiclient.js +++ b/dashboard-ui/bower_components/emby-apiclient/apiclient.js @@ -3363,23 +3363,16 @@ self.cancelSyncItems = function (itemIds, targetId) { - if (!userId) { - throw new Error("null userId"); + if (!itemIds) { + throw new Error("null itemIds"); } - if (!itemId) { - throw new Error("null itemId"); - } - - var url = self.getUrl("Sync/Items/Cancel"); + var url = self.getUrl("Sync/" + (targetId || self.deviceId()) + "/Items", { + ItemIds: itemIds.join(',') + }); return self.ajax({ - type: "POST", - data: JSON.stringify({ - TargetId: targetId || self.deviceId(), - ItemIds: itemIds - }), - contentType: "application/json", + type: "DELETE", url: url }); }; diff --git a/dashboard-ui/components/navdrawer/navdrawer.css b/dashboard-ui/components/navdrawer/navdrawer.css index 8a00664f5a..56543a4b67 100644 --- a/dashboard-ui/components/navdrawer/navdrawer.css +++ b/dashboard-ui/components/navdrawer/navdrawer.css @@ -1,5 +1,5 @@ .touch-menu-la { - width: 240px; + width: 280px; position: fixed; top: 0; bottom: 0; diff --git a/dashboard-ui/css/dashboard.css b/dashboard-ui/css/dashboard.css index 42786b0c24..b790d8bca2 100644 --- a/dashboard-ui/css/dashboard.css +++ b/dashboard-ui/css/dashboard.css @@ -100,7 +100,7 @@ paper-input + .fieldDescription { top: 0; right: 0; bottom: 0; - left: 270px; + left: 280px; } .dashboardDocument .adminDrawerLogo { diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 1451cb7bbd..6e49d0ef05 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -90,7 +90,7 @@ var elems = page.querySelectorAll('.chkOffline'); for (i = 0, length = elems.length; i < length; i++) { - elems[i].checked = item.SyncPercent == 100; + elems[i].checked = item.SyncPercent != null; } } @@ -1127,7 +1127,8 @@ showTitle: true, centerText: true, lazy: true, - overlayPlayButton: true + overlayPlayButton: true, + allowBottomPadding: !scrollX }); } else if (item.Type == "Season") { @@ -1141,7 +1142,7 @@ overlayText: true, lazy: true, showDetailsMenu: true, - overlayPlayButton: AppInfo.enableAppLayouts + overlayPlayButton: AppInfo.enableAppLayouts, }); } else if (item.Type == "GameSystem") { @@ -2056,13 +2057,19 @@ return function (view, params) { + function resetSyncStatus() { + updateSyncStatus(view, currentItem); + } + function onSyncLocalClick() { if (this.checked) { require(['syncDialog'], function (syncDialog) { syncDialog.showMenu({ items: [currentItem] - }); + }).then(function () { + reload(view, params); + }, resetSyncStatus); }); } else { @@ -2070,10 +2077,7 @@ confirm(Globalize.translate('ConfirmRemoveDownload')).then(function () { ApiClient.cancelSyncItems([currentItem.Id]); - }, function () { - - updateSyncStatus(view, currentItem); - }); + }, resetSyncStatus); }); } } diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 7ba088f6db..db90a50ffd 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -1039,8 +1039,8 @@ var drawerWidth = screen.availWidth - 50; // At least 240 drawerWidth = Math.max(drawerWidth, 240); - // But not exceeding 270 - drawerWidth = Math.min(drawerWidth, 270); + // But not exceeding 280 + drawerWidth = Math.min(drawerWidth, 280); var disableEdgeSwipe = false; diff --git a/dashboard-ui/scripts/sync.js b/dashboard-ui/scripts/sync.js index 3ada0d9ce3..12b3db6128 100644 --- a/dashboard-ui/scripts/sync.js +++ b/dashboard-ui/scripts/sync.js @@ -219,93 +219,96 @@ function showSyncMenu(options) { - requirejs(["registrationservices"], function () { - RegistrationServices.validateFeature('sync').then(function () { - showSyncMenuInternal(options); + return new Promise(function (resolve, reject) { + + requirejs(["registrationservices", 'dialogHelper', 'formDialogStyle'], function (registrationServices, dialogHelper) { + registrationServices.validateFeature('sync').then(function () { + + showSyncMenuInternal(dialogHelper, options).then(resolve, reject); + + }, reject); }); }); } - function showSyncMenuInternal(options) { + function showSyncMenuInternal(dialogHelper, options) { - require(['dialogHelper', 'formDialogStyle'], function (dialogHelper) { + var userId = Dashboard.getCurrentUserId(); - var userId = Dashboard.getCurrentUserId(); + var dialogOptionsQuery = { + UserId: userId, + ItemIds: (options.items || []).map(function (i) { + return i.Id || i; + }).join(','), - var dialogOptionsQuery = { - UserId: userId, - ItemIds: (options.items || []).map(function (i) { - return i.Id || i; - }).join(','), + ParentId: options.ParentId, + Category: options.Category + }; - ParentId: options.ParentId, - Category: options.Category - }; + return ApiClient.getJSON(ApiClient.getUrl('Sync/Options', dialogOptionsQuery)).then(function (dialogOptions) { - ApiClient.getJSON(ApiClient.getUrl('Sync/Options', dialogOptionsQuery)).then(function (dialogOptions) { + currentDialogOptions = dialogOptions; - currentDialogOptions = dialogOptions; - - var dlg = dialogHelper.createDialog({ - size: 'small', - removeOnClose: true, - autoFocus: false - }); - - dlg.classList.add('ui-body-a'); - dlg.classList.add('background-theme-a'); - dlg.classList.add('formDialog'); - - var html = ''; - html += '
'; - html += ''; - html += '
'; - html += Globalize.translate('SyncMedia'); - html += '
'; - - html += ''; - - html += '
'; - - html += '
'; - html += '
'; - - html += '
'; - - html += '
'; - - html += '

'; - html += ''; - html += '

'; - - html += '
'; - - html += '
'; - html += '
'; - - - dlg.innerHTML = html; - document.body.appendChild(dlg); - - dialogHelper.open(dlg); - - $('form', dlg).on('submit', function () { - - submitJob(dlg, userId, options, this, dialogHelper); - return false; - }); - - $('.btnCancel', dlg).on('click', function () { - dialogHelper.close(dlg); - }); - - renderForm({ - elem: $('.formFields', dlg), - dialogOptions: dialogOptions, - dialogOptionsFn: getTargetDialogOptionsFn(dialogOptionsQuery) - }); + var dlg = dialogHelper.createDialog({ + size: 'small', + removeOnClose: true, + autoFocus: false }); + dlg.classList.add('ui-body-a'); + dlg.classList.add('background-theme-a'); + dlg.classList.add('formDialog'); + + var html = ''; + html += '
'; + html += ''; + html += '
'; + html += Globalize.translate('SyncMedia'); + html += '
'; + + html += ''; + + html += '
'; + + html += '
'; + html += '
'; + + html += '
'; + + html += '
'; + + html += '

'; + html += ''; + html += '

'; + + html += '
'; + + html += '
'; + html += '
'; + + + dlg.innerHTML = html; + document.body.appendChild(dlg); + + $('form', dlg).on('submit', function () { + + submitJob(dlg, userId, options, this, dialogHelper); + return false; + }); + + $('.btnCancel', dlg).on('click', function () { + dialogHelper.close(dlg); + }); + + var promise = dialogHelper.open(dlg); + + renderForm({ + elem: $('.formFields', dlg), + dialogOptions: dialogOptions, + dialogOptionsFn: getTargetDialogOptionsFn(dialogOptionsQuery) + }); + + return promise; }); } diff --git a/dashboard-ui/strings/ar.json b/dashboard-ui/strings/ar.json index 972331014f..c12cbf1e2a 100644 --- a/dashboard-ui/strings/ar.json +++ b/dashboard-ui/strings/ar.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/be-BY.json b/dashboard-ui/strings/be-BY.json index c3dd672299..c341339e60 100644 --- a/dashboard-ui/strings/be-BY.json +++ b/dashboard-ui/strings/be-BY.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/bg-BG.json b/dashboard-ui/strings/bg-BG.json index 09541acaf6..2e225d173d 100644 --- a/dashboard-ui/strings/bg-BG.json +++ b/dashboard-ui/strings/bg-BG.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/ca.json b/dashboard-ui/strings/ca.json index 928e20946b..b43ff98820 100644 --- a/dashboard-ui/strings/ca.json +++ b/dashboard-ui/strings/ca.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/cs.json b/dashboard-ui/strings/cs.json index af31fa88c8..090643c66e 100644 --- a/dashboard-ui/strings/cs.json +++ b/dashboard-ui/strings/cs.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/da.json b/dashboard-ui/strings/da.json index ac5cfd34b1..7cd5488562 100644 --- a/dashboard-ui/strings/da.json +++ b/dashboard-ui/strings/da.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/de.json b/dashboard-ui/strings/de.json index b0324628bc..4e0b03ba65 100644 --- a/dashboard-ui/strings/de.json +++ b/dashboard-ui/strings/de.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "Wir konnten kein FFmpeg in dem von Dir erfassten Verzeichnis finden. FFprobe wird ebenso ben\u00f6tigt und muss sich im gleichen Verzeichnis befinden. Diese Komponenten sind normalerweise in einem B\u00fcndel vorhanden um kommen zusammen mit einem Download. Bitte pr\u00fcfe das Verzeichnis und probiere es erneut.", "XmlTvPremiere": "Grunds\u00e4tzlich wird Emby {0} Stunden des EPGs importieren. Um unendlich Daten zu importieren ist eine aktive Emby Premiere Mitgliedschaft notwendig.", "MoreFromValue": "Mehr von {0}", - "OptionSaveMetadataAsHiddenHelp": "\u00c4nderungen werden sich auf neue Metadaten angewendet. Bereits existierende Metadaten werden bei der n\u00e4chsten Speicherung des Emby Servers auf den neusten Stand gebracht." + "OptionSaveMetadataAsHiddenHelp": "\u00c4nderungen werden sich auf neue Metadaten angewendet. Bereits existierende Metadaten werden bei der n\u00e4chsten Speicherung des Emby Servers auf den neusten Stand gebracht.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/el.json b/dashboard-ui/strings/el.json index f9b5e23417..a46db6545f 100644 --- a/dashboard-ui/strings/el.json +++ b/dashboard-ui/strings/el.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/en-GB.json b/dashboard-ui/strings/en-GB.json index ede9355114..51ac228427 100644 --- a/dashboard-ui/strings/en-GB.json +++ b/dashboard-ui/strings/en-GB.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/es-AR.json b/dashboard-ui/strings/es-AR.json index 2bb0ab24fe..8181102ee7 100644 --- a/dashboard-ui/strings/es-AR.json +++ b/dashboard-ui/strings/es-AR.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/es-MX.json b/dashboard-ui/strings/es-MX.json index 1a8bb13087..545e6f19ad 100644 --- a/dashboard-ui/strings/es-MX.json +++ b/dashboard-ui/strings/es-MX.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "No fue posible localizar FFmpeg usando la ruta que introdujo. FFprobe tambi\u00e9n es requerido y debe de estar en la misma carpeta. Estos componentes normalmente est\u00e1n empaquetados en la misma descarga. Por favor verifique la ruta e intente de nuevo.", "XmlTvPremiere": "Por defecto, Emby importara {0} horas de datos de la gu\u00eda. Para importar datos ilimitados necesita una subscripcion activa de Emby Premiere", "MoreFromValue": "Mas de {0}", - "OptionSaveMetadataAsHiddenHelp": "Cambiando esto se aplicara a nuevos metadatos en adelante. Los archivos de metadatos existentes ser\u00e1n actualizados la pr\u00f3xima vez que sean guardados por el Servidor Emby" + "OptionSaveMetadataAsHiddenHelp": "Cambiando esto se aplicara a nuevos metadatos en adelante. Los archivos de metadatos existentes ser\u00e1n actualizados la pr\u00f3xima vez que sean guardados por el Servidor Emby", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/es.json b/dashboard-ui/strings/es.json index 76da173129..f5eb87c608 100644 --- a/dashboard-ui/strings/es.json +++ b/dashboard-ui/strings/es.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "Por defecto Emby importar\u00e1 {0} horas de programaci\u00f3n. Importar una cantidad ilimitada necesita una suscripci\u00f3n a Emby Premiere.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/fi.json b/dashboard-ui/strings/fi.json index 6e37923c83..b1fa987332 100644 --- a/dashboard-ui/strings/fi.json +++ b/dashboard-ui/strings/fi.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/fr-CA.json b/dashboard-ui/strings/fr-CA.json index 871c23da96..a93530ac7a 100644 --- a/dashboard-ui/strings/fr-CA.json +++ b/dashboard-ui/strings/fr-CA.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/fr-FR.json b/dashboard-ui/strings/fr-FR.json index 56fd183bfd..38a233d7c3 100644 --- a/dashboard-ui/strings/fr-FR.json +++ b/dashboard-ui/strings/fr-FR.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/fr.json b/dashboard-ui/strings/fr.json index deccfdf001..29aca6706c 100644 --- a/dashboard-ui/strings/fr.json +++ b/dashboard-ui/strings/fr.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "Nous ne pouvons pas localiser FFmpeg en utilisant le chemin que vous avez saisi. FFprobe est \u00e9galement n\u00e9cessaire et doit exister dans le m\u00eame dossier. Ces composants sont g\u00e9n\u00e9ralement regroup\u00e9s dans le m\u00eame t\u00e9l\u00e9chargement. S'il vous pla\u00eet v\u00e9rifier le chemin et essayer \u00e0 nouveau.", "XmlTvPremiere": "Par d\u00e9faut, Emby importera {0} heures de donn\u00e9es de guidage. L\u2019importation de donn\u00e9es illimit\u00e9 n\u00e9cessite un abonnement Emby Premiere.", "MoreFromValue": "Plus de {0}", - "OptionSaveMetadataAsHiddenHelp": "La modification s'appliquera aux nouvelles m\u00e9tadonn\u00e9es enregistr\u00e9es \u00e0 l'avenir. Les fichiers de m\u00e9tadonn\u00e9es existants seront mis \u00e0 jour la prochaine fois par Emby Server." + "OptionSaveMetadataAsHiddenHelp": "La modification s'appliquera aux nouvelles m\u00e9tadonn\u00e9es enregistr\u00e9es \u00e0 l'avenir. Les fichiers de m\u00e9tadonn\u00e9es existants seront mis \u00e0 jour la prochaine fois par Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/gsw.json b/dashboard-ui/strings/gsw.json index d85a8b697c..eff40ae96a 100644 --- a/dashboard-ui/strings/gsw.json +++ b/dashboard-ui/strings/gsw.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/he.json b/dashboard-ui/strings/he.json index 6c4cccb01e..e278ada37a 100644 --- a/dashboard-ui/strings/he.json +++ b/dashboard-ui/strings/he.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/hr.json b/dashboard-ui/strings/hr.json index 3b8be9a48c..d7aac1b119 100644 --- a/dashboard-ui/strings/hr.json +++ b/dashboard-ui/strings/hr.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/hu.json b/dashboard-ui/strings/hu.json index 43ddf20d2b..70d441cee1 100644 --- a/dashboard-ui/strings/hu.json +++ b/dashboard-ui/strings/hu.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/id.json b/dashboard-ui/strings/id.json index 8f801d7a99..d67ca45fba 100644 --- a/dashboard-ui/strings/id.json +++ b/dashboard-ui/strings/id.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/it.json b/dashboard-ui/strings/it.json index e726ad165e..ca3b063314 100644 --- a/dashboard-ui/strings/it.json +++ b/dashboard-ui/strings/it.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/kk.json b/dashboard-ui/strings/kk.json index d30ba44ce8..14f71d646f 100644 --- a/dashboard-ui/strings/kk.json +++ b/dashboard-ui/strings/kk.json @@ -1349,7 +1349,7 @@ "HeaderPlayback": "\u0422\u0430\u0441\u044b\u0493\u044b\u0448\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u043e\u0439\u043d\u0430\u0442\u0443", "OptionAllowAudioPlaybackTranscoding": "\u049a\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443\u0493\u0430 \u0442\u0430\u043b\u0430\u0431\u044b \u0431\u0430\u0440 \u0434\u044b\u0431\u044b\u0441 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", "OptionAllowVideoPlaybackTranscoding": "\u049a\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443\u0493\u0430 \u0442\u0430\u043b\u0430\u0431\u044b \u0431\u0430\u0440 \u0431\u0435\u0439\u043d\u0435 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", - "OptionAllowVideoPlaybackRemuxing": "Allow video playback that requires conversion without re-encoding", + "OptionAllowVideoPlaybackRemuxing": "\u049a\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0442\u0430\u0443\u0441\u044b\u0437 \u0442\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0443 \u0442\u0430\u043b\u0430\u0431\u044b \u0431\u0430\u0440 \u0431\u0435\u0439\u043d\u0435 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u0440\u04b1\u049b\u0441\u0430\u0442 \u0435\u0442\u0443", "OptionAllowMediaPlaybackTranscodingHelp": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b\u043b\u0430\u0440 \u04e9\u0437\u0434\u0435\u0440\u0456\u043d\u0456\u04a3 \u0441\u0430\u044f\u0441\u0430\u0442\u0442\u0430\u0440\u044b\u043d\u0430 \u043d\u0435\u0433\u0456\u0437\u0434\u0435\u043b\u0433\u0435\u043d \u043e\u0439\u043d\u0430\u0442\u044b\u043b\u043c\u0430\u0439\u0442\u044b\u043d \u043c\u0430\u0437\u043c\u04b1\u043d \u0431\u043e\u043b\u0493\u0430\u043d\u0434\u0430\u0493\u044b \u049b\u0430\u0442\u0435 \u0442\u0443\u0440\u0430\u043b\u044b \u043e\u04a3\u0430\u0439 \u0445\u0430\u0431\u0430\u0440\u043b\u0430\u0440\u0434\u044b \u0430\u043b\u0430\u0434\u044b.", "TabStreaming": "\u0410\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443", "LabelRemoteClientBitrateLimit": "\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0442\u0435 \u0430\u0493\u044b\u043d\u043c\u0435\u043d \u0442\u0430\u0441\u044b\u043c\u0430\u043b\u0434\u0430\u0443 \u049b\u0430\u0440\u049b\u044b\u043d\u044b\u043d\u044b\u04a3 \u0448\u0435\u0433\u0456, \u041c\u0431\u0438\u0442\/\u0441:", @@ -1862,7 +1862,7 @@ "OptionMusicAlbums": "\u041c\u0443\u0437\u044b\u043a\u0430 \u0430\u043b\u044c\u0431\u043e\u043c\u0434\u0430\u0440\u044b", "OptionMusicVideos": "\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044b\u049b \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440", "OptionSongs": "\u04d8\u0443\u0435\u043d\u0434\u0435\u0440", - "OptionHomeVideos": "\u04ae\u0439 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456", + "OptionHomeVideos": "\u04ae\u0439 \u0431\u0435\u0439\u043d\u0435\u043b\u0435\u0440\u0456 \u043c\u0435\u043d \u0444\u043e\u0442\u043e\u0441\u0443\u0440\u0435\u0442\u0442\u0435\u0440", "OptionBooks": "\u041a\u0456\u0442\u0430\u043f\u0442\u0430\u0440", "ButtonUp": "\u0416\u043e\u0493\u0430\u0440\u044b\u0493\u0430", "ButtonDown": "\u0422\u04e9\u043c\u0435\u043d\u0433\u0435", @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "\u0411\u0456\u0437\u0433\u0435 \u0441\u0456\u0437 \u0435\u043d\u0433\u0456\u0437\u0433\u0435\u043d FFmpeg \u0436\u043e\u043b\u044b\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u043f \u0442\u0430\u0431\u0443 \u043c\u04af\u043c\u043a\u0456\u043d \u0431\u043e\u043b\u043c\u0430\u0434\u044b. \u0421\u043e\u043d\u0434\u0430\u0439-\u0430\u049b FFprobe \u0442\u0430\u043b\u0430\u043f \u0435\u0442\u0456\u043b\u0435\u0434\u0456 \u0436\u04d9\u043d\u0435 \u0441\u043e\u043b \u049b\u0430\u043b\u0442\u0430\u0434\u0430 \u0431\u043e\u043b\u0443\u044b \u0436\u04e9\u043d. \u0411\u04b1\u043b \u049b\u04b1\u0440\u0430\u043c\u0434\u0430\u0441\u0442\u0430\u0440 \u04d9\u0434\u0435\u0442\u0442\u0435 \u0441\u043e\u043b \u0436\u04af\u043a\u0442\u0435\u0443\u043c\u0435\u043d \u0431\u0456\u0440\u0433\u0435 \u0436\u0435\u0442\u043a\u0456\u0437\u0456\u043b\u0435\u0434\u0456. \u0416\u043e\u043b\u0434\u044b \u0442\u0435\u043a\u0441\u0435\u0440\u0456\u043f, \u049b\u0430\u0439\u0442\u0430\u043b\u0430\u043f \u043a\u04e9\u0440\u0456\u04a3\u0456\u0437.", "XmlTvPremiere": "\u04d8\u0434\u0435\u043f\u043a\u0456\u0434\u0435, Emby \u0430\u0440\u049b\u044b\u043b\u044b {0} \u0441\u0430\u0493\u0430\u0442 \u049b\u0430\u043c\u0442\u0438\u0442\u044b\u043d \u0442\u0435\u043b\u0435\u0433\u0438\u0434 \u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0456 \u0448\u0435\u0442\u0442\u0435\u043d \u04d9\u043a\u0435\u043b\u0456\u043d\u0435\u0434\u0456. \u0414\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u0448\u0435\u043a\u0441\u0456\u0437 \u0448\u0435\u0442\u0442\u0435\u043d \u04d9\u043a\u0435\u043b\u0443\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456 Emby Premiere \u0436\u0430\u0437\u044b\u043b\u044b\u043c\u044b\u043d \u049b\u0430\u0436\u0435\u0442 \u0435\u0442\u0435\u0434\u0456.", "MoreFromValue": "{0} \u0430\u0440\u049b\u044b\u043b\u044b \u043a\u04e9\u0431\u0456\u0440\u0435\u043a", - "OptionSaveMetadataAsHiddenHelp": "\u041e\u0441\u044b \u04e9\u0437\u0433\u0435\u0440\u0442\u0443 \u0431\u043e\u043b\u0430\u0448\u0430\u049b\u0442\u0430 \u0441\u0430\u049b\u0442\u0430\u043b\u0430\u0442\u044b\u043d \u0436\u0430\u04a3\u0430 \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u04af\u0448\u0456\u043d \u049b\u043e\u043b\u0434\u0430\u043d\u044b\u043b\u0430\u0434\u044b. \u0411\u0430\u0440 \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0444\u0430\u0439\u043b\u0434\u0430\u0440 \u043e\u043b\u0430\u0440 Emby \u0441\u0435\u0440\u0432\u0435\u0440\u0456 \u0430\u0440\u049b\u044b\u043b\u044b \u0441\u0430\u049b\u0442\u0430\u043b\u0493\u0430\u043d\u0434\u0430 \u043a\u0435\u043b\u0435\u0441\u0456 \u0436\u043e\u043b\u044b \u0436\u0430\u04a3\u0430\u0440\u0442\u044b\u043b\u0430\u0434\u044b." + "OptionSaveMetadataAsHiddenHelp": "\u041e\u0441\u044b \u04e9\u0437\u0433\u0435\u0440\u0442\u0443 \u0431\u043e\u043b\u0430\u0448\u0430\u049b\u0442\u0430 \u0441\u0430\u049b\u0442\u0430\u043b\u0430\u0442\u044b\u043d \u0436\u0430\u04a3\u0430 \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u04af\u0448\u0456\u043d \u049b\u043e\u043b\u0434\u0430\u043d\u044b\u043b\u0430\u0434\u044b. \u0411\u0430\u0440 \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a \u0444\u0430\u0439\u043b\u0434\u0430\u0440 \u043e\u043b\u0430\u0440 Emby \u0441\u0435\u0440\u0432\u0435\u0440\u0456 \u0430\u0440\u049b\u044b\u043b\u044b \u0441\u0430\u049b\u0442\u0430\u043b\u0493\u0430\u043d\u0434\u0430 \u043a\u0435\u043b\u0435\u0441\u0456 \u0436\u043e\u043b\u044b \u0436\u0430\u04a3\u0430\u0440\u0442\u044b\u043b\u0430\u0434\u044b.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/ko.json b/dashboard-ui/strings/ko.json index 74996fe58a..101f71b822 100644 --- a/dashboard-ui/strings/ko.json +++ b/dashboard-ui/strings/ko.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/ms.json b/dashboard-ui/strings/ms.json index e3e4d567f9..6f094688f1 100644 --- a/dashboard-ui/strings/ms.json +++ b/dashboard-ui/strings/ms.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/nb.json b/dashboard-ui/strings/nb.json index 99b7f43405..971bd24dd0 100644 --- a/dashboard-ui/strings/nb.json +++ b/dashboard-ui/strings/nb.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "Vi kan dessverre ikke finne FFmpeg bruke banen du har angitt. FFprobe er ogs\u00e5 n\u00f8dvendig og m\u00e5 ligge i samme mappe. Disse komponentene er vanligvis buntet sammen i samme nedlastning. Kontroller banen og pr\u00f8v igjen.", "XmlTvPremiere": "Som standard, vill Emby importere {0} timer av tv guide informasjon. For \u00e5 kunne importere ubegrenset med data kreves det et aktivt Emby Premiere abonnement.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/nl.json b/dashboard-ui/strings/nl.json index 6f918a3e47..4b37a57d57 100644 --- a/dashboard-ui/strings/nl.json +++ b/dashboard-ui/strings/nl.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We zijn niet in staat om FFmpeg te lokaliseren met behulp van het pad dat u hebt ingevoerd. FFprobe is ook nodig en moet \u200b\u200bin dezelfde map staan. Deze componenten worden gewoonlijk gebundeld in dezelfde download. Controleer het pad en probeer het opnieuw.", "XmlTvPremiere": "Standaard wordt {0} uur gids data in Emby ge\u00efmporteerd. Het importeren van onbeperkte data vereist een actieve Emby Premiere abonnement.", "MoreFromValue": "Meer van {0}", - "OptionSaveMetadataAsHiddenHelp": "Het veranderen van dit zal gelden voor nieuwe metadata die wordt opgeslagen. Bestaande metadata bestanden zullen de volgende keer dat ze worden opgeslagen door Emby Server worden bijgewerkt." + "OptionSaveMetadataAsHiddenHelp": "Het veranderen van dit zal gelden voor nieuwe metadata die wordt opgeslagen. Bestaande metadata bestanden zullen de volgende keer dat ze worden opgeslagen door Emby Server worden bijgewerkt.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/pl.json b/dashboard-ui/strings/pl.json index 4e8162e698..302ce22699 100644 --- a/dashboard-ui/strings/pl.json +++ b/dashboard-ui/strings/pl.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/pt-BR.json b/dashboard-ui/strings/pt-BR.json index 6a081a5d24..aa74e41190 100644 --- a/dashboard-ui/strings/pt-BR.json +++ b/dashboard-ui/strings/pt-BR.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "N\u00e3o foi poss\u00edvel localizar FFmpeg utilizando o caminho que voc\u00ea digitou. O FFprobe tamb\u00e9m \u00e9 obrigat\u00f3rio e precisa existir na mesma pasta. Estes componentes normalmente est\u00e3o juntos no mesmo download. Por favor verifique o caminho e tente novamente.", "XmlTvPremiere": "Por padr\u00e3o, o Emby importar\u00e1 {0} horas de dados do guia. A importa\u00e7\u00e3o de dados ilimitados exige uma subscri\u00e7\u00e3o ativa do Emby Premiere.", "MoreFromValue": "Mais de {0}", - "OptionSaveMetadataAsHiddenHelp": "Ao alterar isto, aplicar\u00e1 sobre novos metadados salvos daqui para a frente. Os arquivos de metadados existentes ser\u00e3o atualizados na pr\u00f3xima vez que forem salvos no Servidor Emby." + "OptionSaveMetadataAsHiddenHelp": "Ao alterar isto, aplicar\u00e1 sobre novos metadados salvos daqui para a frente. Os arquivos de metadados existentes ser\u00e3o atualizados na pr\u00f3xima vez que forem salvos no Servidor Emby.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/pt-PT.json b/dashboard-ui/strings/pt-PT.json index df2b589ef5..9a87ecc7e8 100644 --- a/dashboard-ui/strings/pt-PT.json +++ b/dashboard-ui/strings/pt-PT.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/ro.json b/dashboard-ui/strings/ro.json index 0095520c0d..ef773be7e8 100644 --- a/dashboard-ui/strings/ro.json +++ b/dashboard-ui/strings/ro.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/ru.json b/dashboard-ui/strings/ru.json index a503b72462..13975b009f 100644 --- a/dashboard-ui/strings/ru.json +++ b/dashboard-ui/strings/ru.json @@ -1349,7 +1349,7 @@ "HeaderPlayback": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "OptionAllowAudioPlaybackTranscoding": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0430\u0443\u0434\u0438\u043e, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430", "OptionAllowVideoPlaybackTranscoding": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430", - "OptionAllowVideoPlaybackRemuxing": "Allow video playback that requires conversion without re-encoding", + "OptionAllowVideoPlaybackRemuxing": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438", "OptionAllowMediaPlaybackTranscodingHelp": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.", "TabStreaming": "\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f", "LabelRemoteClientBitrateLimit": "\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438, \u041c\u0431\u0438\u0442\/\u0441:", @@ -1862,7 +1862,7 @@ "OptionMusicAlbums": "\u041c\u0443\u0437. \u0430\u043b\u044c\u0431\u043e\u043c\u044b", "OptionMusicVideos": "\u041c\u0443\u0437. \u0432\u0438\u0434\u0435\u043e", "OptionSongs": "\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438", - "OptionHomeVideos": "\u0414\u043e\u043c. \u0432\u0438\u0434\u0435\u043e", + "OptionHomeVideos": "\u0414\u043e\u043c. \u0432\u0438\u0434\u0435\u043e \u0438 \u0444\u043e\u0442\u043e", "OptionBooks": "\u041a\u043d\u0438\u0433\u0438", "ButtonUp": "\u0412\u0432\u0435\u0440\u0445", "ButtonDown": "\u0412\u043d\u0438\u0437", @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "\u041c\u044b \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c FFmpeg \u043f\u043e \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c\u0443 \u0432\u0430\u043c\u0438 \u043f\u0443\u0442\u0438. FFprobe \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0430\u043f\u043a\u0435. \u042d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0443\u0442\u044c \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443.", "XmlTvPremiere": "\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0432 Emby \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f {0} \u0447\u0430\u0441(\u0430\/\u043e\u0432) \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0433\u0438\u0434\u0430. \u0414\u043b\u044f \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Emby Premiere.", "MoreFromValue": "\u0415\u0449\u0451 \u0441 {0}", - "OptionSaveMetadataAsHiddenHelp": "\u042d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043e \u043a \u043d\u043e\u0432\u044b\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 Emby Server." + "OptionSaveMetadataAsHiddenHelp": "\u042d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043e \u043a \u043d\u043e\u0432\u044b\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/sk.json b/dashboard-ui/strings/sk.json index 6c8e2875d7..3d1ae8574f 100644 --- a/dashboard-ui/strings/sk.json +++ b/dashboard-ui/strings/sk.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/sl-SI.json b/dashboard-ui/strings/sl-SI.json index 2c443fa4ed..afc2262d2b 100644 --- a/dashboard-ui/strings/sl-SI.json +++ b/dashboard-ui/strings/sl-SI.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/sv.json b/dashboard-ui/strings/sv.json index 8d72c83fa6..bd248e1865 100644 --- a/dashboard-ui/strings/sv.json +++ b/dashboard-ui/strings/sv.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "Mer fr\u00e5n {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/tr.json b/dashboard-ui/strings/tr.json index fdc278bda9..fba8ea3255 100644 --- a/dashboard-ui/strings/tr.json +++ b/dashboard-ui/strings/tr.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/uk.json b/dashboard-ui/strings/uk.json index ca84673c50..28b93f81fd 100644 --- a/dashboard-ui/strings/uk.json +++ b/dashboard-ui/strings/uk.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/vi.json b/dashboard-ui/strings/vi.json index 0b41cdb506..cf762a0f34 100644 --- a/dashboard-ui/strings/vi.json +++ b/dashboard-ui/strings/vi.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/zh-CN.json b/dashboard-ui/strings/zh-CN.json index 2beb45f370..9f8c2e2600 100644 --- a/dashboard-ui/strings/zh-CN.json +++ b/dashboard-ui/strings/zh-CN.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/zh-HK.json b/dashboard-ui/strings/zh-HK.json index f458623643..00b47741cc 100644 --- a/dashboard-ui/strings/zh-HK.json +++ b/dashboard-ui/strings/zh-HK.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file diff --git a/dashboard-ui/strings/zh-TW.json b/dashboard-ui/strings/zh-TW.json index f215aab923..70723d99a5 100644 --- a/dashboard-ui/strings/zh-TW.json +++ b/dashboard-ui/strings/zh-TW.json @@ -2310,5 +2310,9 @@ "FFmpegSavePathNotFound": "We're unable to locate FFmpeg using the path you've entered. FFprobe is also required and must exist in the same folder. These components are normally bundled together in the same download. Please check the path and try again.", "XmlTvPremiere": "By default, Emby will import {0} hours of guide data. Importing unlimited data requires an active Emby Premiere subscription.", "MoreFromValue": "More from {0}", - "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server." + "OptionSaveMetadataAsHiddenHelp": "Changing this will apply to new metadata saved going forward. Existing metadata files will be updated the next time they are saved by Emby Server.", + "EnablePhotos": "Enable photos", + "EnablePhotosHelp": "Photos will be detected and displayed alongside other media files.", + "MakeAvailableOffline": "Make available offline", + "ConfirmRemoveDownload": "Remove download?" } \ No newline at end of file From 366395f2a302d481bfc93d2c0b696329b523cf79 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 16 Aug 2016 01:48:03 -0400 Subject: [PATCH 5/5] update WebMarkupMin --- packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages.config b/packages.config index a2d13fdf5f..3637c6c84e 100644 --- a/packages.config +++ b/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file