From 8651d4bd00970920856950568adebb4bb157e149 Mon Sep 17 00:00:00 2001 From: artiume Date: Sun, 1 Mar 2020 20:59:42 -0500 Subject: [PATCH 001/128] Update playback warning --- src/components/playback/experimentalwarnings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/playback/experimentalwarnings.js b/src/components/playback/experimentalwarnings.js index 2d1ef53c19..9c0714e57e 100644 --- a/src/components/playback/experimentalwarnings.js +++ b/src/components/playback/experimentalwarnings.js @@ -46,21 +46,21 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( function showBlurayMessage() { var message = - 'Playback of Bluray folders in this app is experimental. Some titles may not work at all. For a better experience, consider converting to mkv video files, or use an Jellyfin app with native Bluray folder support.'; + 'Playback of Bluray folders in this app is experimental. Jellyfin cannot decrypt DRM. The current behavior is to play all files in series, this can include a two minute black intro video.'; return showMessage(message, 'blurayexpirementalinfo', 'nativeblurayplayback'); } function showDvdMessage() { var message = - 'Playback of Dvd folders in this app is experimental. Some titles may not work at all. For a better experience, consider converting to mkv video files, or use an Jellyfin app with native Dvd folder support.'; + 'Playback of Dvd folders in this app is experimental. Jellyfin cannot decrypt DRM. The current behavior is to play all files in series, this can include a two minute black intro video.'; return showMessage(message, 'dvdexpirementalinfo', 'nativedvdplayback'); } function showIsoMessage() { var message = - 'Playback of ISO files in this app is experimental. Some titles may not work at all. For a better experience, consider converting to mkv video files, or use an Jellyfin app with native ISO support.'; + 'Playback of ISO files in this app is experimental. The current behavior is to play all files in series, this can include a two minute black intro video.'; return showMessage(message, 'isoexpirementalinfo', 'nativeisoplayback'); } From 9f300bfb11d1973525fac38bc34c40f1588250ac Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Thu, 19 Mar 2020 23:06:19 +0100 Subject: [PATCH 002/128] Don't scale logo on details page --- src/assets/css/librarybrowser.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 67afef2376..22b9b6f5eb 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -614,8 +614,8 @@ position: absolute; top: 15vh; right: 0; - -webkit-background-size: contain; - background-size: contain; + -webkit-background-size: auto; + background-size: auto; } .noBackdrop .detailLogo { From e5ce7af11d4fa3637268ed0a47e043c187611d89 Mon Sep 17 00:00:00 2001 From: ferferga Date: Sat, 4 Apr 2020 13:25:35 +0200 Subject: [PATCH 003/128] Translate experimentalwarnings.js --- src/components/playback/experimentalwarnings.js | 15 +++------------ src/strings/en-us.json | 5 ++++- src/strings/es.json | 5 ++++- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/components/playback/experimentalwarnings.js b/src/components/playback/experimentalwarnings.js index 9c0714e57e..09b8158242 100644 --- a/src/components/playback/experimentalwarnings.js +++ b/src/components/playback/experimentalwarnings.js @@ -44,24 +44,15 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } function showBlurayMessage() { - - var message = - 'Playback of Bluray folders in this app is experimental. Jellyfin cannot decrypt DRM. The current behavior is to play all files in series, this can include a two minute black intro video.'; - return showMessage(message, 'blurayexpirementalinfo', 'nativeblurayplayback'); + return showMessage(globalize.translate("ExperimentalBluRayPlayback"), 'blurayexpirementalinfo', 'nativeblurayplayback'); } function showDvdMessage() { - - var message = - 'Playback of Dvd folders in this app is experimental. Jellyfin cannot decrypt DRM. The current behavior is to play all files in series, this can include a two minute black intro video.'; - return showMessage(message, 'dvdexpirementalinfo', 'nativedvdplayback'); + return showMessage(globalize.translate("ExperimentalDVDPlayback"), 'dvdexpirementalinfo', 'nativedvdplayback'); } function showIsoMessage() { - - var message = - 'Playback of ISO files in this app is experimental. The current behavior is to play all files in series, this can include a two minute black intro video.'; - return showMessage(message, 'isoexpirementalinfo', 'nativeisoplayback'); + return showMessage(globalize.translate("ExperimentalISOPlayback"), 'isoexpirementalinfo', 'nativeisoplayback'); } function ExpirementalPlaybackWarnings() { diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 008c8565f9..900b3dbb20 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1492,5 +1492,8 @@ "EveryXMinutes": "Every {0} minutes", "EveryHour": "Every hour", "EveryXHours": "Every {0} hours", - "OnApplicationStartup": "On application startup" + "OnApplicationStartup": "On application startup", + "ExperimentalBlurayPlayback": "Blu-Ray playback is experimental. Jellyfin cannot decrypt content protected by DRM. All the titles in the Blu-Ray will be played anyway, including the protected ones. Some parts might be in black", + "ExperimentalDVDPlayback": "DVD playback is experimental. Jellyfin cannot decrypt content protected by DRM. All the titles in the DVD will be played anyway, including the protected ones. Some parts might be in black", + "ExperimentalISOPlayback": "ISO playback is experimental. All the titles in the ISO will be played anyway. Some parts might be in black" } diff --git a/src/strings/es.json b/src/strings/es.json index 727fb24775..53bb7a75f0 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1489,5 +1489,8 @@ "EveryXMinutes": "Cada {0} minutos", "EveryHour": "Cada hora", "EveryXHours": "Cada {0} horas", - "OnApplicationStartup": "Al iniciarse el servidor" + "OnApplicationStartup": "Al iniciarse el servidor", + "ExperimentalBluRayPlayback": "La reproducción de Blu-Ray es experimental. Jellyfin no puede leer contenidos protegidos por DRM. Se intentará reproducir todos los títulos del Blu-Ray, incluso las partes protegidas, por lo que es posible que ciertas partes se vean en negro", + "ExperimentalDVDPlayback": "La reproducción de DVD es experimental. Jellyfin no puede leer contenidos protegidos por DRM. Se intentará reproducir todos los títulos del DVD, incluso las partes protegidas, por lo que es posible que ciertas partes se vean en negro", + "ExperimentalISOPlayback": "La reproducción de archivos ISO es experimental. Se intentará reproducir todos los títulos incluidos en el archivo ISO, por lo que es posible que ciertas partes se vean en negro" } From f60eb5713036936df69b5919b3366acd8aa548ce Mon Sep 17 00:00:00 2001 From: ferferga Date: Sat, 4 Apr 2020 15:55:25 +0200 Subject: [PATCH 004/128] Fix mobile layout for itemdetails --- src/assets/css/librarybrowser.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index e4b5bcf8d6..8c5ab59955 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -533,7 +533,6 @@ .layout-mobile .itemName, .layout-mobile .itemMiscInfo, .layout-mobile .mainDetailButtons { - display: flex; align-items: center; justify-content: center; text-align: center; From 4db414fb68e11cfcef2b11162246a37699f19209 Mon Sep 17 00:00:00 2001 From: ferferga Date: Sat, 4 Apr 2020 17:10:43 +0200 Subject: [PATCH 005/128] Hacky fix --- src/assets/css/librarybrowser.css | 4 ++++ src/controllers/itemdetailpage.js | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 8c5ab59955..1a3d75a9f2 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -529,6 +529,10 @@ align-items: center; } +.parentName > a:nth-child(3) { + font-size: 0.7em; +} + .layout-mobile .parentName, .layout-mobile .itemName, .layout-mobile .itemMiscInfo, diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 178419e284..99bb038c70 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -336,7 +336,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti return html = html.join(" / "); } - + // TODO: Clean this and the CSS rules for mobile layout. See #1022 function renderName(item, container, isStatic, context) { var parentRoute; var parentNameHtml = []; @@ -406,9 +406,9 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (parentNameHtml.length) { if (parentNameLast) { - html = '

' + parentNameHtml.join(" - ") + "

"; + html = '

' + parentNameHtml.join("
") + "

"; } else { - html = '

' + parentNameHtml.join(" - ") + "

"; + html = '

' + parentNameHtml.join("
") + "

"; } } From a06a0e951537536cb3251ec966c43ae83467d098 Mon Sep 17 00:00:00 2001 From: ferferga Date: Sun, 5 Apr 2020 00:59:37 +0200 Subject: [PATCH 006/128] Fix layout also for desktop --- src/assets/css/librarybrowser.css | 11 ++++++----- src/controllers/itemdetailpage.js | 20 ++++++++++++++++---- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 1a3d75a9f2..1f9b25ac2b 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -518,6 +518,12 @@ margin: 0.5em 0; } +.nameContainer { + display: flex; + flex-direction: column; + flex-wrap: wrap; +} + .itemMiscInfo { display: -webkit-box; display: -webkit-flex; @@ -529,10 +535,6 @@ align-items: center; } -.parentName > a:nth-child(3) { - font-size: 0.7em; -} - .layout-mobile .parentName, .layout-mobile .itemName, .layout-mobile .itemMiscInfo, @@ -578,7 +580,6 @@ .infoText { white-space: nowrap; - overflow: hidden; text-overflow: ellipsis; text-align: left; } diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index 99bb038c70..f2feb62ba8 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -336,7 +336,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti return html = html.join(" / "); } - // TODO: Clean this and the CSS rules for mobile layout. See #1022 function renderName(item, container, isStatic, context) { var parentRoute; var parentNameHtml = []; @@ -406,9 +405,18 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (parentNameHtml.length) { if (parentNameLast) { - html = '

' + parentNameHtml.join("
") + "

"; + // Music + if (layoutManager.mobile) { + html = '

' + parentNameHtml.join("
") + "

"; + } else { + html = '

' + parentNameHtml.join(" - ") + "

"; + } } else { - html = '

' + parentNameHtml.join("
") + "

"; + if (layoutManager.mobile) { + html = '

' + parentNameHtml.join("
") + "

"; + } else { + html = '

' + parentNameHtml[0] + "

"; + } } } @@ -418,7 +426,11 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var offset = parentNameLast ? ".25em" : ".5em"; if (html && !parentNameLast) { - html += '

' + name + '

'; + if (!layoutManager.mobile && parentNameHtml[1]) { + html += '

' + parentNameHtml[1] + ' - ' + name + '

'; + } else { + html += '

' + name + '

'; + } } else { html = '

' + name + "

" + html; } From cf542fa8bc15a546d36f0d872b7dcb1455715130 Mon Sep 17 00:00:00 2001 From: ferferga Date: Sun, 5 Apr 2020 01:01:10 +0200 Subject: [PATCH 007/128] Bolder font in all items --- src/controllers/itemdetailpage.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index f2feb62ba8..a89bbeb07f 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -429,14 +429,14 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (!layoutManager.mobile && parentNameHtml[1]) { html += '

' + parentNameHtml[1] + ' - ' + name + '

'; } else { - html += '

' + name + '

'; + html += '

' + name + '

'; } } else { - html = '

' + name + "

" + html; + html = '

' + name + "

" + html; } if (item.OriginalTitle && item.OriginalTitle != item.Name) { - html += '

' + item.OriginalTitle + '

'; + html += '

' + item.OriginalTitle + '

'; } container.innerHTML = html; From d779286dc923ae0119a32640ad9faddb8351df9d Mon Sep 17 00:00:00 2001 From: ferferga Date: Sun, 5 Apr 2020 14:02:20 +0200 Subject: [PATCH 008/128] Move inline CSS to classes --- src/assets/css/librarybrowser.css | 1 + src/controllers/itemdetailpage.js | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 1f9b25ac2b..f5491e3895 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -516,6 +516,7 @@ .itemName { margin: 0.5em 0; + font-weight: 600; } .nameContainer { diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index a89bbeb07f..ab11f0484f 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -427,16 +427,16 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (html && !parentNameLast) { if (!layoutManager.mobile && parentNameHtml[1]) { - html += '

' + parentNameHtml[1] + ' - ' + name + '

'; + html += '

' + parentNameHtml[1] + ' - ' + name + '

'; } else { - html += '

' + name + '

'; + html += '

' + name + '

'; } } else { - html = '

' + name + "

" + html; + html = '

' + name + "

" + html; } if (item.OriginalTitle && item.OriginalTitle != item.Name) { - html += '

' + item.OriginalTitle + '

'; + html += '

' + item.OriginalTitle + '

'; } container.innerHTML = html; From dccd19d57fc4fcb732e4134fd6baa615d493cc31 Mon Sep 17 00:00:00 2001 From: ferferga Date: Sun, 5 Apr 2020 14:19:31 +0200 Subject: [PATCH 009/128] Move array contents to variables --- src/controllers/itemdetailpage.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js index ab11f0484f..e9242c5119 100644 --- a/src/controllers/itemdetailpage.js +++ b/src/controllers/itemdetailpage.js @@ -400,8 +400,10 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti } else if (item.Album) { parentNameHtml.push(item.Album); } - + // FIXME: This whole section needs some refactoring, so it becames easier to scale across all form factors. See GH #1022 var html = ""; + var tvShowHtml = parentNameHtml[0]; + var tvSeasonHtml = parentNameHtml[1]; if (parentNameHtml.length) { if (parentNameLast) { @@ -415,7 +417,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti if (layoutManager.mobile) { html = '

' + parentNameHtml.join("
") + "

"; } else { - html = '

' + parentNameHtml[0] + "

"; + html = '

' + tvShowHtml + "

"; } } } @@ -426,8 +428,8 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "userSetti var offset = parentNameLast ? ".25em" : ".5em"; if (html && !parentNameLast) { - if (!layoutManager.mobile && parentNameHtml[1]) { - html += '

' + parentNameHtml[1] + ' - ' + name + '

'; + if (!layoutManager.mobile && tvSeasonHtml) { + html += '

' + tvSeasonHtml + ' - ' + name + '

'; } else { html += '

' + name + '

'; } From 624c1dfb0c4139446ac9a5aadfbf8688fb7fd9a4 Mon Sep 17 00:00:00 2001 From: ZadenRB Date: Wed, 8 Apr 2020 11:54:42 -0600 Subject: [PATCH 010/128] Fixes inconsistent value in drop down list for date added behavior of libraries --- src/controllers/librarydisplay.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/controllers/librarydisplay.js b/src/controllers/librarydisplay.js index 97e323e665..78294f4407 100644 --- a/src/controllers/librarydisplay.js +++ b/src/controllers/librarydisplay.js @@ -27,14 +27,10 @@ define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", " view.querySelector("#chkSaveMetadataHidden").checked = config.SaveMetadataHidden; }); ApiClient.getNamedConfiguration("metadata").then(function(metadata) { - loadMetadataConfig(this, metadata); + view.querySelector("#selectDateAdded").selectedIndex = metadata.UseFileCreationTimeForDateAdded ? 1 : 0; }); } - function loadMetadataConfig(page, config) { - $("#selectDateAdded", page).val(config.UseFileCreationTimeForDateAdded ? "1" : "0"); - } - view.querySelector("form").addEventListener("submit", function(e) { loading.show(); var form = this; From b1af60a0c3d2eea67e93151c726ccf1a07026005 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 19:14:49 -0400 Subject: [PATCH 011/128] Update nowplaying.html --- src/nowplaying.html | 125 +++++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/src/nowplaying.html b/src/nowplaying.html index 59b6a4b789..1d81f69ef5 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -1,57 +1,71 @@ -
+
+ +
-

- -
- +
+

+
+
+
+
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+ + + + -
- + - + - - - - - - - - - - - - -
-
-
/
-
+ + + +
+ + + + +
-
+
-
-
@@ -155,21 +167,26 @@
- -
-
-

${TabPlaylist}

- + +
-
+
+
+
+
+
+
-
-
-
-
From d3d34eec731c171850153ad427f60371cb0b6bc2 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 19:15:27 -0400 Subject: [PATCH 012/128] Update remotecontrol.css --- .../remotecontrol/remotecontrol.css | 276 +++++++++++++++--- 1 file changed, 240 insertions(+), 36 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 83a1c48e5f..55ed615072 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -36,8 +36,32 @@ margin: 0 0 0.5em 0.5em; } +.nowPlayingAlbum a { + font-weight: normal; +} + +.nowPlayingArtist a { + font-weight: normal; +} + +.nowPlayingButtonsContainer { + display: flex; +} + +.nowPlayingInfoContainerMedia { + text-align: left; + margin-bottom: 1em; +} + +.nowPlayingPositionSlider { + width: -moz-available; /* Mozilla-based browsers will ignore this. */ + width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */ + width: fill-available; +} + .nowPlayingPositionSliderContainer { - margin: 0.7em 0 0.7em 1em; + margin: 0.2em 1em 0.2em 1em; + width: 100%; } .nowPlayingInfoButtons { @@ -60,16 +84,43 @@ .nowPlayingPageImageContainer { width: 20%; - margin-right: 0.25em; + margin-right: 1em; position: relative; -webkit-flex-shrink: 0; flex-shrink: 0; } -@media all and (min-width: 50em) { +.nowPlayingPageImageContainerNoAlbum { + width: 100%; + position: relative; + background-color: #5ccea9; +} + +.nowPlayingPageImageContainerNoAlbum:after { + content: ""; + display: block; + padding-bottom: 100%; +} + +.btnPlayPause { + font-size: xx-large; + padding: 0; + margin: 0; +} + +@media all and (min-width: 27em) { .nowPlayingPageImageContainer { width: 16%; } + + .nowPlayingPageUserDataButtonsTitle { + display: none !important; + } + + .nowPlayingPageImage { + margin: 0 auto; + width: 100%; + } } .nowPlayingInfoControls { @@ -87,10 +138,11 @@ } .nowPlayingPageImage { + display: block; bottom: 0; left: 0; right: 0; - width: 100%; + /* width: 100%; */ -webkit-box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000; border: 0.1em solid #222; @@ -102,7 +154,24 @@ -ms-user-select: none; } -@media all and (orientation: portrait) and (max-width: 50em) { +.contextMenuList { + padding: 1.5em 0; +} + +.contextMenuList i.listItemIcon { + font-size: x-large; +} + +@media all and (orientation: portrait) and (max-width: 47em) { + + .remoteControlContent { + padding-left: 7.3% !important; + padding-right: 7.3% !important; + display: flex; + height: 100%; + flex-direction: column; + } + .nowPlayingInfoContainer { -webkit-box-orient: vertical !important; -webkit-box-direction: normal !important; @@ -111,43 +180,182 @@ -webkit-box-align: center; -webkit-align-items: center; align-items: center; + width: 100%; + flex-flow: column; + height: calc(100% - 4.2em); } .nowPlayingPageTitle { - text-align: center; - margin: 0.5em 0 0.75em; + /* text-align: center; */ + margin: 0; + } + + .nowPlayingInfoContainerMedia { + text-align: left !important; + width: 80%; } .nowPlayingPositionSliderContainer { - margin: 0.7em 1em; + margin: 0.2em 1em 0.2em 1em; } .nowPlayingInfoButtons { + /* margin: 1.5em 0 0 0; */ -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center; + font-size: x-large; + height: 100%; } .nowPlayingPageImageContainer { - width: auto; - margin-right: 0; + width: 100%; + margin: auto auto; } - + + .nowPlayingPageImageContainerNoAlbum .cardImageContainer .cardImageIcon { + font-size: 15em; + color: inherit; + } + .nowPlayingInfoControls { - margin-top: 1em; - max-width: 100%; + margin: 1em 0 1em 0; + width: 100%; + -webkit-box-pack: start !important; + -webkit-justify-content: start !important; + justify-content: start !important; + } + + .nowPlayingSecondaryButtons { + /* margin: 1em 0 1em 0; */ + } + + .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle { + width: 20%; + font-size: large; + } + + .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle button { + padding-top: 0; + padding-right: 0; + margin-right: 0; + float: right; + border-radius: 0; + } + + .nowPlayingInfoButtons .btnRewind { + position: absolute; + left: 0; + margin-left: 0; + padding-left: 7.3%; + font-size: smaller + } + + .nowPlayingInfoButtons .btnFastForward { + position: absolute; + right: 0; + margin-right: 0; + padding-right: 7.3%; + font-size: smaller + } + + .paper-icon-button-light:hover { + color: #fff !important; + background-color: transparent !important; + } + + .btnPlayPause:hover { + background-color: transparent !important; } .nowPlayingPageImage { - width: auto; - height: 36vh; + /* width: inherit; */ + overflow-y: hidden; + overflow: hidden; + margin: 0 auto; } -} - -@media all and (orientation: portrait) and (max-width: 40em) { - .nowPlayingPageImage { - height: 30vh; + + .nowPlayingPageImage.nowPlayingPageImageAudio { + width: 100%; } + + .nowPlayingPageImageContainer.nowPlayingPageImagePoster { + height: 50%; + } + + .nowPlayingPageImageContainer.nowPlayingPageImagePoster img{ + height: 100%; + } + + #nowPlayingPage .playlistSection { + + } + + #nowPlayingPage .playlistSection .playlist, + #nowPlayingPage .playlistSection .contextMenu { + position: absolute; + top: 12.2em; + bottom: 4.2em; + overflow: scroll; + padding: 0 1em; + display: inline-block; + left: 0; + right: 0; + background: #202020; + z-index: 1000; + } + + .playlistSectionButton { + position: fixed; + bottom: 0; + left: 0; + height: 4.2em; + right: 0; + padding-left: 7.3%; + padding-right: 7.3%; + background-color: #101010; + } + + .btnPlayPause { + padding: 0; + margin: 0; + } + + .playlistSectionButton .btnTooglePlaylist { + font-size: larger; + margin: 0; + padding-left: 0; + } + + .playlistSectionButton .btnSavePlaylist { + margin: 0; + padding-right: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; + border-radius: 0; + } + + .playlistSectionButton .btnToogleContextMenu { + font-size: larger; + margin: 0; + padding-right: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; + border-radius: 0; + } + + .remoteControlSection { + margin: 4.2em 0 0 0; + } + } .nowPlayingTime { @@ -172,7 +380,7 @@ justify-content: center; } -@media all and (min-width: 50em) { +@media all and (min-width: 47em) { .nowPlayingSecondaryButtons { -webkit-box-flex: 1; -webkit-flex-grow: 1; @@ -181,6 +389,7 @@ -webkit-justify-content: flex-end; justify-content: flex-end; } + } @media all and (min-width: 80em) { @@ -214,26 +423,21 @@ width: 9em; } -@media all and (max-width: 50em) { - .nowPlayingInfoButtons .nowPlayingPageUserDataButtons { +@media all and (max-width: 47em) { + .nowPlayingSecondaryButtons .nowPlayingPageUserDataButtons, + .nowPlayingSecondaryButtons .repeatToggleButton, + .nowPlayingInfoButtons .playlist .listItemMediaInfo, + .nowPlayingInfoButtons .btnStop { display: none !important; } .navigationSection .collapseContent i { font-size: 4em; } -} - -@media all and (max-width: 47em) { - .nowPlayingInfoButtons .repeatToggleButton { - display: none !important; - } -} - -@media all and (max-width: 34em) { - .nowPlayingInfoButtons .btnNowPlayingFastForward, - .nowPlayingInfoButtons .btnNowPlayingRewind, - .nowPlayingInfoButtons .playlist .listItemMediaInfo { - display: none !important; + + .nowPlayingButtonsContainer { + display: block; + height: 100%; } + } From 567b80502382e6bb6cb6ea805693aa8211f1a2cc Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 19:15:49 -0400 Subject: [PATCH 013/128] Update remotecontrol.js --- src/components/remotecontrol/remotecontrol.js | 76 ++++++++++++++++--- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 7b620d536a..1149440264 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -110,31 +110,54 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL return null; } - function updateNowPlayingInfo(context, state) { + function updateNowPlayingInfo(context, state, serverId) { var item = state.NowPlayingItem; var displayName = item ? getNowPlayingNameHtml(item).replace("
", " - ") : ""; - context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; + console.debug(JSON.stringify(item, null, 4)); + //alert(item.Artists); + if(item.Type == "Audio" || item.MediaStreams[0].Type == "Audio"){ + var songName = item.Name; + if(item.Album != null && (item.Artists != null)) { + var albumName = item.Album; + if(item.ArtistItems != null) { + var artistName = item.ArtistItems[0].Name; + context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; + context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; + context.querySelector(".contextMenuAlbum").innerHTML = 'album View album'; + context.querySelector(".contextMenuArtist").innerHTML = 'person View artist'; + } else { + context.querySelector(".nowPlayingAlbum").innerHTML = albumName; + var artistName = item.Artists; + context.querySelector(".nowPlayingArtist").innerHTML = artistName; + } + + } + context.querySelector(".nowPlayingSongName").innerHTML = songName; + } else { + context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; + } - if (displayName.length > 0) { + if (displayName.length > 0 && item.Type != "Audio") { context.querySelector(".nowPlayingPageTitle").classList.remove("hide"); } else { context.querySelector(".nowPlayingPageTitle").classList.add("hide"); } var url = item ? seriesImageUrl(item, { - maxHeight: 300 * 2 + maxHeight: 300 }) || imageUrl(item, { - maxHeight: 300 * 2 + maxHeight: 300 }) : null; console.debug("updateNowPlayingInfo"); - setImageUrl(context, url); + setImageUrl(context, state, url); if (item) { backdrop.setBackdrops([item]); var apiClient = connectionManager.getApiClient(item.ServerId); apiClient.getItem(apiClient.getCurrentUserId(), item.Id).then(function (fullItem) { var userData = fullItem.UserData || {}; var likes = null == userData.Likes ? "" : userData.Likes; + context.querySelector(".nowPlayingPageUserDataButtonsTitle").innerHTML = ''; context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = ''; }); } else { @@ -143,17 +166,24 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } } - function setImageUrl(context, url) { + function setImageUrl(context, state, url) { currentImgUrl = url; + var item = state.NowPlayingItem; var imgContainer = context.querySelector(".nowPlayingPageImageContainer"); if (url) { imgContainer.innerHTML = ''; - imgContainer.classList.remove("hide"); + if(item.Type == "Audio"){ + context.querySelector(".nowPlayingPageImage").classList.add("nowPlayingPageImageAudio"); + context.querySelector(".nowPlayingPageImageContainer").classList.remove("nowPlayingPageImageAudio"); + } else { + context.querySelector(".nowPlayingPageImageContainer").classList.add("nowPlayingPageImagePoster"); + context.querySelector(".nowPlayingPageImage").classList.remove("nowPlayingPageImageAudio"); + } } else { - imgContainer.classList.add("hide"); - imgContainer.innerHTML = ""; + imgContainer.innerHTML = '
'; } + } function buttonVisible(btn, enabled) { @@ -331,7 +361,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL function updatePlayPauseState(isPaused, isActive) { var context = dlg; var btnPlayPause = context.querySelector(".btnPlayPause"); - btnPlayPause.querySelector("i").innerHTML = isPaused ? "" : "pause"; + btnPlayPause.querySelector("i").innerHTML = isPaused ? "play_circle_filled" : "pause_circle_filled"; buttonVisible(btnPlayPause, isActive); } @@ -393,6 +423,9 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } imageLoader.lazyChildren(itemsContainer); + context.querySelector(".playlist").classList.add("hide"); + context.querySelector(".contextMenu").classList.add("hide"); + context.querySelector(".btnSavePlaylist").classList.add("hide"); }); } @@ -647,7 +680,26 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var playlistItemId = e.detail.playlistItemId; playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer); }); - context.querySelector(".btnSavePlaylist").addEventListener("click", savePlaylist); + //context.querySelector(".btnSavePlaylist").addEventListener("click", savePlaylist); + context.querySelector(".btnTooglePlaylist").addEventListener("click", function () { + if(context.querySelector(".playlist").classList.contains("hide")) { + context.querySelector(".playlist").classList.remove("hide"); + context.querySelector(".btnSavePlaylist").classList.remove("hide"); + context.querySelector(".contextMenu").classList.add("hide"); + } else { + context.querySelector(".playlist").classList.add("hide"); + context.querySelector(".btnSavePlaylist").classList.add("hide"); + } + }); + context.querySelector(".btnToogleContextMenu").addEventListener("click", function () { + if(context.querySelector(".contextMenu").classList.contains("hide")) { + context.querySelector(".contextMenu").classList.remove("hide"); + context.querySelector(".btnSavePlaylist").classList.add("hide"); + context.querySelector(".playlist").classList.add("hide"); + } else { + context.querySelector(".contextMenu").classList.add("hide"); + } + }); } function onPlayerChange() { From 6619da9ba5324b01ecd79653dae566cce9681364 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 22:07:52 -0400 Subject: [PATCH 014/128] Update remotecontrol.js --- src/components/remotecontrol/remotecontrol.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 1149440264..6f9e12cb2d 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -114,7 +114,6 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var item = state.NowPlayingItem; var displayName = item ? getNowPlayingNameHtml(item).replace("
", " - ") : ""; console.debug(JSON.stringify(item, null, 4)); - //alert(item.Artists); if(item.Type == "Audio" || item.MediaStreams[0].Type == "Audio"){ var songName = item.Name; if(item.Album != null && (item.Artists != null)) { @@ -680,7 +679,6 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var playlistItemId = e.detail.playlistItemId; playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer); }); - //context.querySelector(".btnSavePlaylist").addEventListener("click", savePlaylist); context.querySelector(".btnTooglePlaylist").addEventListener("click", function () { if(context.querySelector(".playlist").classList.contains("hide")) { context.querySelector(".playlist").classList.remove("hide"); From c200abb058607b99ed055f96cc6e79d3993bd380 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 22:27:55 -0400 Subject: [PATCH 015/128] Update remotecontrol.js --- src/components/remotecontrol/remotecontrol.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 6f9e12cb2d..c4fb0c0984 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -118,15 +118,16 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var songName = item.Name; if(item.Album != null && (item.Artists != null)) { var albumName = item.Album; + var artistName; if(item.ArtistItems != null) { - var artistName = item.ArtistItems[0].Name; + artistName = item.ArtistItems[0].Name; context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; context.querySelector(".contextMenuAlbum").innerHTML = 'album View album'; context.querySelector(".contextMenuArtist").innerHTML = 'person View artist'; } else { context.querySelector(".nowPlayingAlbum").innerHTML = albumName; - var artistName = item.Artists; + artistName = item.Artists; context.querySelector(".nowPlayingArtist").innerHTML = artistName; } From 04d3dcdd55e5402fa53035a291fe720d5afb04c2 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 22:33:58 -0400 Subject: [PATCH 016/128] Update remotecontrol.js --- src/components/remotecontrol/remotecontrol.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index c4fb0c0984..8e4a1760b8 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -114,12 +114,12 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var item = state.NowPlayingItem; var displayName = item ? getNowPlayingNameHtml(item).replace("
", " - ") : ""; console.debug(JSON.stringify(item, null, 4)); - if(item.Type == "Audio" || item.MediaStreams[0].Type == "Audio"){ + if (item.Type == "Audio" || item.MediaStreams[0].Type == "Audio") { var songName = item.Name; - if(item.Album != null && (item.Artists != null)) { + if (item.Album != null && (item.Artists != null)) { var albumName = item.Album; var artistName; - if(item.ArtistItems != null) { + if (item.ArtistItems != null) { artistName = item.ArtistItems[0].Name; context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; @@ -130,7 +130,6 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL artistName = item.Artists; context.querySelector(".nowPlayingArtist").innerHTML = artistName; } - } context.querySelector(".nowPlayingSongName").innerHTML = songName; } else { @@ -173,7 +172,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL if (url) { imgContainer.innerHTML = ''; - if(item.Type == "Audio"){ + if (item.Type == "Audio") { context.querySelector(".nowPlayingPageImage").classList.add("nowPlayingPageImageAudio"); context.querySelector(".nowPlayingPageImageContainer").classList.remove("nowPlayingPageImageAudio"); } else { @@ -183,7 +182,6 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } else { imgContainer.innerHTML = '
'; } - } function buttonVisible(btn, enabled) { @@ -681,7 +679,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer); }); context.querySelector(".btnTooglePlaylist").addEventListener("click", function () { - if(context.querySelector(".playlist").classList.contains("hide")) { + if (context.querySelector(".playlist").classList.contains("hide")) { context.querySelector(".playlist").classList.remove("hide"); context.querySelector(".btnSavePlaylist").classList.remove("hide"); context.querySelector(".contextMenu").classList.add("hide"); @@ -691,7 +689,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } }); context.querySelector(".btnToogleContextMenu").addEventListener("click", function () { - if(context.querySelector(".contextMenu").classList.contains("hide")) { + if (context.querySelector(".contextMenu").classList.contains("hide")) { context.querySelector(".contextMenu").classList.remove("hide"); context.querySelector(".btnSavePlaylist").classList.add("hide"); context.querySelector(".playlist").classList.add("hide"); From d3a27baf4552f09de515e443b00967554f0205a8 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 22:52:46 -0400 Subject: [PATCH 017/128] Update remotecontrol.css --- .../remotecontrol/remotecontrol.css | 80 +++++++++---------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 55ed615072..f64cc162ef 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -96,7 +96,7 @@ background-color: #5ccea9; } -.nowPlayingPageImageContainerNoAlbum:after { +.nowPlayingPageImageContainerNoAlbum::after { content: ""; display: block; padding-bottom: 100%; @@ -112,11 +112,11 @@ .nowPlayingPageImageContainer { width: 16%; } - + .nowPlayingPageUserDataButtonsTitle { display: none !important; } - + .nowPlayingPageImage { margin: 0 auto; width: 100%; @@ -142,7 +142,6 @@ bottom: 0; left: 0; right: 0; - /* width: 100%; */ -webkit-box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000; border: 0.1em solid #222; @@ -163,7 +162,7 @@ } @media all and (orientation: portrait) and (max-width: 47em) { - + .remoteControlContent { padding-left: 7.3% !important; padding-right: 7.3% !important; @@ -171,7 +170,7 @@ height: 100%; flex-direction: column; } - + .nowPlayingInfoContainer { -webkit-box-orient: vertical !important; -webkit-box-direction: normal !important; @@ -181,7 +180,6 @@ -webkit-align-items: center; align-items: center; width: 100%; - flex-flow: column; height: calc(100% - 4.2em); } @@ -189,7 +187,7 @@ /* text-align: center; */ margin: 0; } - + .nowPlayingInfoContainerMedia { text-align: left !important; width: 80%; @@ -212,12 +210,12 @@ width: 100%; margin: auto auto; } - + .nowPlayingPageImageContainerNoAlbum .cardImageContainer .cardImageIcon { font-size: 15em; color: inherit; } - + .nowPlayingInfoControls { margin: 1em 0 1em 0; width: 100%; @@ -225,16 +223,16 @@ -webkit-justify-content: start !important; justify-content: start !important; } - + .nowPlayingSecondaryButtons { /* margin: 1em 0 1em 0; */ } - + .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle { width: 20%; font-size: large; } - + .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle button { padding-top: 0; padding-right: 0; @@ -242,28 +240,33 @@ float: right; border-radius: 0; } - + .nowPlayingInfoButtons .btnRewind { position: absolute; left: 0; margin-left: 0; padding-left: 7.3%; - font-size: smaller + font-size: smaller; } - + .nowPlayingInfoButtons .btnFastForward { position: absolute; right: 0; margin-right: 0; padding-right: 7.3%; - font-size: smaller + font-size: smaller; } - + .paper-icon-button-light:hover { color: #fff !important; background-color: transparent !important; } - + + .btnPlayPause { + padding: 0; + margin: 0; + } + .btnPlayPause:hover { background-color: transparent !important; } @@ -274,25 +277,21 @@ overflow: hidden; margin: 0 auto; } - + .nowPlayingPageImage.nowPlayingPageImageAudio { width: 100%; } - + .nowPlayingPageImageContainer.nowPlayingPageImagePoster { height: 50%; } - - .nowPlayingPageImageContainer.nowPlayingPageImagePoster img{ + + .nowPlayingPageImageContainer.nowPlayingPageImagePoster img { height: 100%; } - - #nowPlayingPage .playlistSection { - - } - + #nowPlayingPage .playlistSection .playlist, - #nowPlayingPage .playlistSection .contextMenu { + #nowPlayingPage .playlistSection .contextMenu { position: absolute; top: 12.2em; bottom: 4.2em; @@ -304,7 +303,7 @@ background: #202020; z-index: 1000; } - + .playlistSectionButton { position: fixed; bottom: 0; @@ -315,18 +314,13 @@ padding-right: 7.3%; background-color: #101010; } - - .btnPlayPause { - padding: 0; - margin: 0; - } - + .playlistSectionButton .btnTooglePlaylist { font-size: larger; margin: 0; padding-left: 0; } - + .playlistSectionButton .btnSavePlaylist { margin: 0; padding-right: 0; @@ -338,7 +332,7 @@ justify-content: flex-end; border-radius: 0; } - + .playlistSectionButton .btnToogleContextMenu { font-size: larger; margin: 0; @@ -351,11 +345,11 @@ justify-content: flex-end; border-radius: 0; } - + .remoteControlSection { margin: 4.2em 0 0 0; } - + } .nowPlayingTime { @@ -381,7 +375,7 @@ } @media all and (min-width: 47em) { - .nowPlayingSecondaryButtons { + .nowPlayingSecondaryButtons { -webkit-box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; @@ -389,7 +383,6 @@ -webkit-justify-content: flex-end; justify-content: flex-end; } - } @media all and (min-width: 80em) { @@ -434,10 +427,9 @@ .navigationSection .collapseContent i { font-size: 4em; } - + .nowPlayingButtonsContainer { display: block; height: 100%; } - } From 281b51b967929815ece99ea697c1d3067bfdd8b9 Mon Sep 17 00:00:00 2001 From: Samuel Date: Thu, 9 Apr 2020 22:56:14 -0400 Subject: [PATCH 018/128] Update remotecontrol.css --- src/components/remotecontrol/remotecontrol.css | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index f64cc162ef..70c89b7f87 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -162,7 +162,6 @@ } @media all and (orientation: portrait) and (max-width: 47em) { - .remoteControlContent { padding-left: 7.3% !important; padding-right: 7.3% !important; @@ -262,7 +261,7 @@ background-color: transparent !important; } - .btnPlayPause { + .btnPlayPause { padding: 0; margin: 0; } @@ -349,7 +348,6 @@ .remoteControlSection { margin: 4.2em 0 0 0; } - } .nowPlayingTime { @@ -375,7 +373,7 @@ } @media all and (min-width: 47em) { - .nowPlayingSecondaryButtons { + .nowPlayingSecondaryButtons { -webkit-box-flex: 1; -webkit-flex-grow: 1; flex-grow: 1; From 6724e2f2fd0a108c7312d261aee03f522862fe59 Mon Sep 17 00:00:00 2001 From: ferferga Date: Fri, 10 Apr 2020 15:51:05 +0200 Subject: [PATCH 019/128] Rename class and use flex class instead of style --- src/components/remotecontrol/remotecontrol.css | 4 ++-- src/components/remotecontrol/remotecontrol.js | 4 ++-- src/nowplaying.html | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 70c89b7f87..0f271fcb07 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -314,7 +314,7 @@ background-color: #101010; } - .playlistSectionButton .btnTooglePlaylist { + .playlistSectionButton .btnTogglePlaylist { font-size: larger; margin: 0; padding-left: 0; @@ -332,7 +332,7 @@ border-radius: 0; } - .playlistSectionButton .btnToogleContextMenu { + .playlistSectionButton .btnToggleContextMenu { font-size: larger; margin: 0; padding-right: 0; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 8e4a1760b8..2563594900 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -678,7 +678,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var playlistItemId = e.detail.playlistItemId; playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer); }); - context.querySelector(".btnTooglePlaylist").addEventListener("click", function () { + context.querySelector(".btnTogglePlaylist").addEventListener("click", function () { if (context.querySelector(".playlist").classList.contains("hide")) { context.querySelector(".playlist").classList.remove("hide"); context.querySelector(".btnSavePlaylist").classList.remove("hide"); @@ -688,7 +688,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".btnSavePlaylist").classList.add("hide"); } }); - context.querySelector(".btnToogleContextMenu").addEventListener("click", function () { + context.querySelector(".btnToggleContextMenu").addEventListener("click", function () { if (context.querySelector(".contextMenu").classList.contains("hide")) { context.querySelector(".contextMenu").classList.remove("hide"); context.querySelector(".btnSavePlaylist").classList.add("hide"); diff --git a/src/nowplaying.html b/src/nowplaying.html index 1d81f69ef5..625c051163 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -6,7 +6,7 @@
-
+

@@ -18,7 +18,7 @@
-
+
@@ -170,13 +170,13 @@
- -
From 9993f336c2403c15184245f886365d424425da40 Mon Sep 17 00:00:00 2001 From: ferferga Date: Fri, 10 Apr 2020 18:17:57 +0200 Subject: [PATCH 020/128] Removed links in miniplayer and add context menu --- src/components/itemcontextmenu.js | 2 +- src/components/nowplayingbar/nowplayingbar.js | 33 +++++++++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index bdbcfc782b..2bdd37c98a 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -90,7 +90,7 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", }); } - if (itemHelper.supportsAddingToPlaylist(item)) { + if (itemHelper.supportsAddingToPlaylist(item) && options.playlist !== false) { commands.push({ name: globalize.translate("AddToPlaylist"), id: "addtoplaylist", diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js index 8da9b9c053..e02cb87716 100644 --- a/src/components/nowplayingbar/nowplayingbar.js +++ b/src/components/nowplayingbar/nowplayingbar.js @@ -1,4 +1,4 @@ -define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', 'layoutManager', 'playbackManager', 'nowPlayingHelper', 'apphost', 'dom', 'connectionManager', 'paper-icon-button-light', 'emby-ratingbutton'], function (require, datetime, itemHelper, events, browser, imageLoader, layoutManager, playbackManager, nowPlayingHelper, appHost, dom, connectionManager) { +define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', 'layoutManager', 'playbackManager', 'nowPlayingHelper', 'apphost', 'dom', 'connectionManager', 'itemContextMenu', 'paper-icon-button-light', 'emby-ratingbutton'], function (require, datetime, itemHelper, events, browser, imageLoader, layoutManager, playbackManager, nowPlayingHelper, appHost, dom, connectionManager, itemContextMenu) { 'use strict'; var currentPlayer; @@ -67,6 +67,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', html += ''; html += ''; + html += ''; html += '
'; html += '
'; @@ -449,17 +450,13 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', } } - function getTextActionButton(item, text, serverId) { + function getTextActionButton(item, text) { if (!text) { text = itemHelper.getDisplayName(item); } - var html = ''; - - return html; + return '' + text + ''; } function seriesImageUrl(item, options) { @@ -537,13 +534,12 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', if (textLines.length > 1) { textLines[1].secondary = true; } - var serverId = nowPlayingItem ? nowPlayingItem.ServerId : null; nowPlayingTextElement.innerHTML = textLines.map(function (nowPlayingName) { var cssClass = nowPlayingName.secondary ? ' class="nowPlayingBarSecondaryText"' : ''; if (nowPlayingName.item) { - return '' + getTextActionButton(nowPlayingName.item, nowPlayingName.text, serverId) + '
'; + return '' + getTextActionButton(nowPlayingName.item, nowPlayingName.text) + '
'; } return '' + nowPlayingName.text + '
'; @@ -575,15 +571,26 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', if (isRefreshing) { var apiClient = connectionManager.getApiClient(nowPlayingItem.ServerId); - apiClient.getItem(apiClient.getCurrentUserId(), nowPlayingItem.Id).then(function (item) { - var userData = item.UserData || {}; var likes = userData.Likes == null ? '' : userData.Likes; - + var contextButton = document.querySelector('.btnToggleContextMenu'); + var options = { + play: false, + queue: false, + playlist: false, + positionTo: contextButton + }; nowPlayingUserData.innerHTML = ''; + apiClient.getCurrentUser().then(function(user) { + contextButton.addEventListener('click', function () { + itemContextMenu.show(Object.assign({ + item: item, + user: user + }, options )); + }); + }); }); - } } else { nowPlayingUserData.innerHTML = ''; From d82c379cbbdbfaccb95fd6125881fdb6ecf8e754 Mon Sep 17 00:00:00 2001 From: ferferga Date: Fri, 10 Apr 2020 18:28:01 +0200 Subject: [PATCH 021/128] Fix clickable area --- src/components/nowplayingbar/nowplayingbar.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js index e02cb87716..d9f1ba9a5c 100644 --- a/src/components/nowplayingbar/nowplayingbar.js +++ b/src/components/nowplayingbar/nowplayingbar.js @@ -240,8 +240,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', }; elem.addEventListener('click', function (e) { - - if (!dom.parentWithTag(e.target, ['BUTTON', 'INPUT', 'A'])) { + if (!dom.parentWithTag(e.target, ['BUTTON', 'INPUT'])) { showRemoteControl(0); } }); From 34cea7120b77de6c3a5adf7fecf15e5e7056105e Mon Sep 17 00:00:00 2001 From: ferferga Date: Fri, 10 Apr 2020 18:50:00 +0200 Subject: [PATCH 022/128] Removed playlist button and added back "add to playlist" in context menu --- src/components/nowplayingbar/nowplayingbar.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js index d9f1ba9a5c..25e25f2d31 100644 --- a/src/components/nowplayingbar/nowplayingbar.js +++ b/src/components/nowplayingbar/nowplayingbar.js @@ -66,7 +66,6 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', html += '
'; html += ''; - html += ''; html += ''; html += '
'; @@ -156,8 +155,6 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', } }); - elem.querySelector('.remoteControlButton').addEventListener('click', showRemoteControl); - toggleRepeatButton = elem.querySelector('.toggleRepeatButton'); toggleRepeatButton.addEventListener('click', function () { @@ -577,7 +574,6 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', var options = { play: false, queue: false, - playlist: false, positionTo: contextButton }; nowPlayingUserData.innerHTML = ''; From 5926b1cb9b2b4f3e17d60da0203e07194766d10d Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 12:59:01 -0400 Subject: [PATCH 023/128] Update nowplaying.html Add Tv show Support --- src/nowplaying.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nowplaying.html b/src/nowplaying.html index 625c051163..74ce0f92ec 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -10,9 +10,9 @@

-
-
-
+
+
+
From c3354a36e31a4105970bd7948e378862c6579759 Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 13:02:39 -0400 Subject: [PATCH 024/128] Hide overflow on Image when landscape image --- src/components/remotecontrol/remotecontrol.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 0f271fcb07..bc1929f58d 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -207,7 +207,7 @@ .nowPlayingPageImageContainer { width: 100%; - margin: auto auto; + margin: auto auto 0.5em; } .nowPlayingPageImageContainerNoAlbum .cardImageContainer .cardImageIcon { @@ -216,7 +216,7 @@ } .nowPlayingInfoControls { - margin: 1em 0 1em 0; + margin: 0.5em 0 1em 0; width: 100%; -webkit-box-pack: start !important; -webkit-justify-content: start !important; @@ -283,6 +283,7 @@ .nowPlayingPageImageContainer.nowPlayingPageImagePoster { height: 50%; + overflow: hidden; } .nowPlayingPageImageContainer.nowPlayingPageImagePoster img { From 811a809e1bc1e75503de850ae13395b02a342e4e Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 13:06:26 -0400 Subject: [PATCH 025/128] Add support for Tv show --- src/components/remotecontrol/remotecontrol.js | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 2563594900..f2eba7cad9 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -116,23 +116,35 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL console.debug(JSON.stringify(item, null, 4)); if (item.Type == "Audio" || item.MediaStreams[0].Type == "Audio") { var songName = item.Name; - if (item.Album != null && (item.Artists != null)) { + if (item.Album != null && item.Artists != null) { var albumName = item.Album; var artistName; if (item.ArtistItems != null) { artistName = item.ArtistItems[0].Name; context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; - context.querySelector(".contextMenuAlbum").innerHTML = 'album View album'; - context.querySelector(".contextMenuArtist").innerHTML = 'person View artist'; + context.querySelector(".contextMenuAlbum").innerHTML = 'album ' + globalize.translate("ViewAlbum") + ''; + context.querySelector(".contextMenuArtist").innerHTML = 'person ' + globalize.translate("ViewArtist") + ''; } else { - context.querySelector(".nowPlayingAlbum").innerHTML = albumName; artistName = item.Artists; + context.querySelector(".nowPlayingAlbum").innerHTML = albumName; context.querySelector(".nowPlayingArtist").innerHTML = artistName; } } context.querySelector(".nowPlayingSongName").innerHTML = songName; - } else { + } else if (item.Type == "Episode") { + if (item.SeasonName != null) { + context.querySelector(".nowPlayingSeason").innerHTML = '' + item.SeasonName + ''; + } + if (item.SeriesName != null) { + if (item.SeriesId !=null) { + context.querySelector(".nowPlayingSerie").innerHTML = '' + item.SeriesName + ''; + } else { + context.querySelector(".nowPlayingSerie").innerHTML = item.SeriesName; + } + } + context.querySelector(".nowPlayingEpisode").innerHTML = item.Name; + } else { context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; } @@ -143,9 +155,9 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } var url = item ? seriesImageUrl(item, { - maxHeight: 300 + maxHeight: 300 * 2 }) || imageUrl(item, { - maxHeight: 300 + maxHeight: 300 * 2 }) : null; console.debug("updateNowPlayingInfo"); From 5f9d33fe217d7baaeeb0c19e29f03a12f1859081 Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 13:09:25 -0400 Subject: [PATCH 026/128] Fix lint after last commit --- src/components/remotecontrol/remotecontrol.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index f2eba7cad9..5984b46a44 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -144,7 +144,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } } context.querySelector(".nowPlayingEpisode").innerHTML = item.Name; - } else { + } else { context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; } From 859ec893c2e9edbb42b4d8dafd0d103f11fae5f9 Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 14:44:31 -0400 Subject: [PATCH 027/128] Update src/components/remotecontrol/remotecontrol.css As suggested by @ferferga Co-Authored-By: Fernando --- src/components/remotecontrol/remotecontrol.css | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index bc1929f58d..11872daa66 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -54,9 +54,7 @@ } .nowPlayingPositionSlider { - width: -moz-available; /* Mozilla-based browsers will ignore this. */ - width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */ - width: fill-available; + width: stretch; } .nowPlayingPositionSliderContainer { From dbdfd25eefdb2020d1fba8c84bbe49f42221d22f Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 14:51:44 -0400 Subject: [PATCH 028/128] Fix text alignement of the album and artirst Fix suggested by @ferferga for the alignment of the album, artist button in the player. Artist and album text are now align on the left. --- src/components/remotecontrol/remotecontrol.css | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 11872daa66..c2254d1864 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -36,12 +36,10 @@ margin: 0 0 0.5em 0.5em; } -.nowPlayingAlbum a { - font-weight: normal; -} - +.nowPlayingAlbum a, .nowPlayingArtist a { font-weight: normal; + text-align: left !important; } .nowPlayingButtonsContainer { From c8edd2055829e44c76ae9355de75b9b8eeae5ff2 Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 15:51:12 -0400 Subject: [PATCH 029/128] Randomize album card color when no image Randomize album card color when no image present. Added function cardBuilder --- src/components/remotecontrol/remotecontrol.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 5984b46a44..0680d419c3 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -1,4 +1,4 @@ -define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageLoader", "playbackManager", "nowPlayingHelper", "events", "connectionManager", "apphost", "globalize", "layoutManager", "userSettings", "cardStyle", "emby-itemscontainer", "css!./remotecontrol.css", "emby-ratingbutton"], function (browser, datetime, backdrop, libraryBrowser, listView, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize, layoutManager, userSettings) { +define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageLoader", "playbackManager", "nowPlayingHelper", "events", "connectionManager", "apphost", "globalize", "layoutManager", "userSettings", "cardBuilder", "cardStyle", "emby-itemscontainer", "css!./remotecontrol.css", "emby-ratingbutton"], function (browser, datetime, backdrop, libraryBrowser, listView, imageLoader, playbackManager, nowPlayingHelper, events, connectionManager, appHost, globalize, layoutManager, userSettings, cardBuilder) { "use strict"; function showAudioMenu(context, player, button, item) { @@ -192,7 +192,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".nowPlayingPageImage").classList.remove("nowPlayingPageImageAudio"); } } else { - imgContainer.innerHTML = '
'; + imgContainer.innerHTML = '
'; } } From e8b9a22d6439f8bf7936dc151062df8d005aa91d Mon Sep 17 00:00:00 2001 From: Samuel Date: Fri, 10 Apr 2020 16:12:45 -0400 Subject: [PATCH 030/128] EventListener for savePlaylist was removed fix Put back the EventListener for savePlaylist that I removed by accident. --- src/components/remotecontrol/remotecontrol.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 0680d419c3..de029d7f00 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -690,6 +690,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var playlistItemId = e.detail.playlistItemId; playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer); }); + context.querySelector(".btnSavePlaylist").addEventListener("click", savePlaylist); context.querySelector(".btnTogglePlaylist").addEventListener("click", function () { if (context.querySelector(".playlist").classList.contains("hide")) { context.querySelector(".playlist").classList.remove("hide"); From c5669eca4ddef4342eacfc955764f5a60183fcb5 Mon Sep 17 00:00:00 2001 From: redSpoutnik <15638041+redSpoutnik@users.noreply.github.com> Date: Sun, 12 Apr 2020 15:22:17 +0200 Subject: [PATCH 031/128] subtitle-sync: use currentSubtitlesOctopus instead of currentAssRenderer --- src/components/htmlvideoplayer/plugin.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/components/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js index 036ea82178..bcd3a72ba9 100644 --- a/src/components/htmlvideoplayer/plugin.js +++ b/src/components/htmlvideoplayer/plugin.js @@ -600,8 +600,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa var offsetValue = parseFloat(offset); // if .ass currently rendering - if (currentAssRenderer) { + if (currentSubtitlesOctopus) { updateCurrentTrackOffset(offsetValue); + currentSubtitlesOctopus.timeOffset = offsetValue; } else { var trackElement = getTextTrack(); // if .vtt currently rendering @@ -1220,11 +1221,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa function updateSubtitleText(timeMs) { - // handle offset for ass tracks - if (currentTrackOffset) { - timeMs += (currentTrackOffset * 1000); - } - var clock = currentClock; if (clock) { try { From 8651b8c177845dadbd108f07cde00e60715cbaa6 Mon Sep 17 00:00:00 2001 From: Samuel Date: Sun, 12 Apr 2020 10:50:13 -0400 Subject: [PATCH 032/128] Add support for landscape --- .../remotecontrol/remotecontrol.css | 294 ++++++++++++++---- 1 file changed, 241 insertions(+), 53 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index c2254d1864..02970e5211 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -104,21 +104,6 @@ margin: 0; } -@media all and (min-width: 27em) { - .nowPlayingPageImageContainer { - width: 16%; - } - - .nowPlayingPageUserDataButtonsTitle { - display: none !important; - } - - .nowPlayingPageImage { - margin: 0 auto; - width: 100%; - } -} - .nowPlayingInfoControls { -webkit-box-flex: 1; -webkit-flex-grow: 1; @@ -157,6 +142,50 @@ font-size: x-large; } +.nowPlayingPageImageContainer { + width: 16%; +} + +.nowPlayingPageImage { + margin: 0 auto; + width: 100%; +} + +.nowPlayingSecondaryButtons { + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; +} + +@media all and (min-width: 63em) { + .nowPlayingSecondaryButtons { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; + } + + .nowPlayingPageUserDataButtonsTitle { + display: none !important; + } +} + +@media all and (min-width: 80em) { + .nowPlayingPageImageContainer { + margin-right: 0.75em; + } +} + @media all and (orientation: portrait) and (max-width: 47em) { .remoteControlContent { padding-left: 7.3% !important; @@ -220,7 +249,9 @@ } .nowPlayingSecondaryButtons { - /* margin: 1em 0 1em 0; */ + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; } .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle { @@ -284,6 +315,7 @@ .nowPlayingPageImageContainer.nowPlayingPageImagePoster img { height: 100%; + width: auto; } #nowPlayingPage .playlistSection .playlist, @@ -345,6 +377,198 @@ .remoteControlSection { margin: 4.2em 0 0 0; } + + .nowPlayingButtonsContainer { + display: flex; + height: 100%; + flex-direction: column; + } +} + +@media all and (orientation: landscape) and (max-width: 63em) { + .remoteControlContent { + padding-left: 4.3% !important; + padding-right: 4.3% !important; + display: flex; + height: 100%; + flex-direction: column; + } + + .nowPlayingInfoContainer { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + flex-direction: row !important; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; + width: 100%; + height: calc(100% - 4.2em); + } + + .nowPlayingPageTitle { + /* text-align: center; */ + margin: 0; + } + + .nowPlayingInfoContainerMedia { + text-align: left !important; + width: 80%; + } + + .nowPlayingPositionSliderContainer { + margin: 0.2em 1em 0.2em 1em; + } + + .nowPlayingInfoButtons { + /* margin: 1.5em 0 0 0; */ + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; + font-size: x-large; + height: 100%; + } + + .nowPlayingPageImageContainer { + width: 30%; + margin: auto 1em auto auto; + } + + .nowPlayingPageImageContainerNoAlbum .cardImageContainer .cardImageIcon { + font-size: 12em; + color: inherit; + } + + .nowPlayingInfoControls { + margin: 0.5em 0 1em 0; + width: 100%; + -webkit-box-pack: start !important; + -webkit-justify-content: start !important; + justify-content: start !important; + } + + .nowPlayingSecondaryButtons { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; + } + + .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle { + width: 20%; + font-size: large; + } + + .nowPlayingInfoControls .nowPlayingPageUserDataButtonsTitle button { + padding-top: 0; + padding-right: 0; + margin-right: 0; + float: right; + border-radius: 0; + } + + .paper-icon-button-light:hover { + color: #fff !important; + background-color: transparent !important; + } + + .btnPlayPause { + padding: 0; + margin: 0; + } + + .btnPlayPause:hover { + background-color: transparent !important; + } + + .nowPlayingPageImage { + /* width: inherit; */ + overflow-y: hidden; + overflow: hidden; + margin: 0 auto; + } + + .nowPlayingPageImage.nowPlayingPageImageAudio { + width: 100%; + } + + .nowPlayingPageImageContainer.nowPlayingPageImagePoster { + height: 100%; + overflow: hidden; + } + + .nowPlayingPageImageContainer.nowPlayingPageImagePoster img { + height: 100%; + width: auto; + } + + #nowPlayingPage .playlistSection .playlist, + #nowPlayingPage .playlistSection .contextMenu { + position: absolute; + top: 7.2em; + bottom: 4.2em; + overflow: scroll; + padding: 0 1em; + display: inline-block; + left: 0; + right: 0; + background: #202020; + z-index: 1000; + } + + .playlistSectionButton { + position: fixed; + bottom: 0; + left: 0; + height: 4.2em; + right: 0; + padding-left: 4.3%; + padding-right: 4.3%; + background-color: #101010; + } + + .playlistSectionButton .btnTogglePlaylist { + font-size: larger; + margin: 0; + padding-left: 0; + } + + .playlistSectionButton .btnSavePlaylist { + margin: 0; + padding-right: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; + border-radius: 0; + } + + .playlistSectionButton .btnToggleContextMenu { + font-size: larger; + margin: 0; + padding-right: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + flex-grow: 1; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end; + border-radius: 0; + } + + .remoteControlSection { + margin: 4.2em 0 0 0; + } + + .nowPlayingButtonsContainer { + display: flex; + height: 100%; + flex-direction: column; + } } .nowPlayingTime { @@ -355,37 +579,6 @@ margin: 0 1em; } -.nowPlayingSecondaryButtons { - display: -webkit-box; - display: -webkit-flex; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - align-items: center; - -webkit-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-pack: center; - -webkit-justify-content: center; - justify-content: center; -} - -@media all and (min-width: 47em) { - .nowPlayingSecondaryButtons { - -webkit-box-flex: 1; - -webkit-flex-grow: 1; - flex-grow: 1; - -webkit-box-pack: end; - -webkit-justify-content: flex-end; - justify-content: flex-end; - } -} - -@media all and (min-width: 80em) { - .nowPlayingPageImageContainer { - margin-right: 0.75em; - } -} - .nowPlayingNavButtonContainer { width: 30em; } @@ -411,7 +604,7 @@ width: 9em; } -@media all and (max-width: 47em) { +@media all and (max-width: 63em) { .nowPlayingSecondaryButtons .nowPlayingPageUserDataButtons, .nowPlayingSecondaryButtons .repeatToggleButton, .nowPlayingInfoButtons .playlist .listItemMediaInfo, @@ -422,9 +615,4 @@ .navigationSection .collapseContent i { font-size: 4em; } - - .nowPlayingButtonsContainer { - display: block; - height: 100%; - } } From 501a8773b80291867b0b81573097509200a2efd9 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 12 Apr 2020 23:53:30 +0900 Subject: [PATCH 033/128] pass title and filename to native shell --- src/components/filedownloader.js | 2 +- src/components/itemcontextmenu.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/filedownloader.js b/src/components/filedownloader.js index a8b45ab106..6f1bd3ff2a 100644 --- a/src/components/filedownloader.js +++ b/src/components/filedownloader.js @@ -4,7 +4,7 @@ export function download(items) { if (window.NativeShell) { items.map(function (item) { - window.NativeShell.downloadFile(item.url); + window.NativeShell.downloadFile(item); }); } else { multiDownload(items.map(function (item) { diff --git a/src/components/itemcontextmenu.js b/src/components/itemcontextmenu.js index 9d683aa27c..185d94405d 100644 --- a/src/components/itemcontextmenu.js +++ b/src/components/itemcontextmenu.js @@ -339,7 +339,9 @@ define(["apphost", "globalize", "connectionManager", "itemHelper", "appRouter", fileDownloader.download([{ url: downloadHref, itemId: itemId, - serverId: serverId + serverId: serverId, + title: item.Name, + filename: item.Path.replace(/^.*[\\\/]/, '') }]); getResolveFunction(getResolveFunction(resolve, id), id)(); }); From 3ab01d471fa62a645bfd241484de9ebcfbf654aa Mon Sep 17 00:00:00 2001 From: Samuel Date: Sun, 12 Apr 2020 10:55:52 -0400 Subject: [PATCH 034/128] Fix undefined item when casting to other device Fix undefined item when changing cast to other device. Removed NowPlayingAlbum because on smaller device we need more height --- src/components/remotecontrol/remotecontrol.js | 110 +++++++++--------- 1 file changed, 56 insertions(+), 54 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index de029d7f00..d25f4e59e0 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -114,66 +114,68 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var item = state.NowPlayingItem; var displayName = item ? getNowPlayingNameHtml(item).replace("
", " - ") : ""; console.debug(JSON.stringify(item, null, 4)); - if (item.Type == "Audio" || item.MediaStreams[0].Type == "Audio") { - var songName = item.Name; - if (item.Album != null && item.Artists != null) { - var albumName = item.Album; - var artistName; - if (item.ArtistItems != null) { - artistName = item.ArtistItems[0].Name; - context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; - context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; - context.querySelector(".contextMenuAlbum").innerHTML = 'album ' + globalize.translate("ViewAlbum") + ''; - context.querySelector(".contextMenuArtist").innerHTML = 'person ' + globalize.translate("ViewArtist") + ''; - } else { - artistName = item.Artists; - context.querySelector(".nowPlayingAlbum").innerHTML = albumName; - context.querySelector(".nowPlayingArtist").innerHTML = artistName; + if (typeof item != 'undefined') { + if (item.Type == "Audio" || item.MediaStreams[0].Type == "Audio") { + var songName = item.Name; + if (item.Album != null && item.Artists != null) { + var albumName = item.Album; + var artistName; + if (item.ArtistItems != null) { + artistName = item.ArtistItems[0].Name; + // context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; + context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; + context.querySelector(".contextMenuAlbum").innerHTML = 'album ' + globalize.translate("ViewAlbum") + ''; + context.querySelector(".contextMenuArtist").innerHTML = 'person ' + globalize.translate("ViewArtist") + ''; + } else { + artistName = item.Artists; + // context.querySelector(".nowPlayingAlbum").innerHTML = albumName; + context.querySelector(".nowPlayingArtist").innerHTML = artistName; + } } - } - context.querySelector(".nowPlayingSongName").innerHTML = songName; - } else if (item.Type == "Episode") { - if (item.SeasonName != null) { - context.querySelector(".nowPlayingSeason").innerHTML = '' + item.SeasonName + ''; - } - if (item.SeriesName != null) { - if (item.SeriesId !=null) { - context.querySelector(".nowPlayingSerie").innerHTML = '' + item.SeriesName + ''; - } else { - context.querySelector(".nowPlayingSerie").innerHTML = item.SeriesName; + context.querySelector(".nowPlayingSongName").innerHTML = songName; + } else if (item.Type == "Episode") { + if (item.SeasonName != null) { + context.querySelector(".nowPlayingSeason").innerHTML = '' + item.SeasonName + ''; } + if (item.SeriesName != null) { + if (item.SeriesId !=null) { + context.querySelector(".nowPlayingSerie").innerHTML = '' + item.SeriesName + ''; + } else { + context.querySelector(".nowPlayingSerie").innerHTML = item.SeriesName; + } + } + context.querySelector(".nowPlayingEpisode").innerHTML = item.Name; + } else { + context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; } - context.querySelector(".nowPlayingEpisode").innerHTML = item.Name; - } else { - context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; - } - if (displayName.length > 0 && item.Type != "Audio") { - context.querySelector(".nowPlayingPageTitle").classList.remove("hide"); - } else { - context.querySelector(".nowPlayingPageTitle").classList.add("hide"); - } + if (displayName.length > 0 && item.Type != "Audio") { + context.querySelector(".nowPlayingPageTitle").classList.remove("hide"); + } else { + context.querySelector(".nowPlayingPageTitle").classList.add("hide"); + } - var url = item ? seriesImageUrl(item, { - maxHeight: 300 * 2 - }) || imageUrl(item, { - maxHeight: 300 * 2 - }) : null; + var url = item ? seriesImageUrl(item, { + maxHeight: 300 * 2 + }) || imageUrl(item, { + maxHeight: 300 * 2 + }) : null; - console.debug("updateNowPlayingInfo"); - setImageUrl(context, state, url); - if (item) { - backdrop.setBackdrops([item]); - var apiClient = connectionManager.getApiClient(item.ServerId); - apiClient.getItem(apiClient.getCurrentUserId(), item.Id).then(function (fullItem) { - var userData = fullItem.UserData || {}; - var likes = null == userData.Likes ? "" : userData.Likes; - context.querySelector(".nowPlayingPageUserDataButtonsTitle").innerHTML = ''; - context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = ''; - }); - } else { - backdrop.clear(); - context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = ""; + console.debug("updateNowPlayingInfo"); + setImageUrl(context, state, url); + if (item) { + backdrop.setBackdrops([item]); + var apiClient = connectionManager.getApiClient(item.ServerId); + apiClient.getItem(apiClient.getCurrentUserId(), item.Id).then(function (fullItem) { + var userData = fullItem.UserData || {}; + var likes = null == userData.Likes ? "" : userData.Likes; + context.querySelector(".nowPlayingPageUserDataButtonsTitle").innerHTML = ''; + context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = ''; + }); + } else { + backdrop.clear(); + context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = ""; + } } } From 35a12f6022a8098c26a636b450e7380c9ed045ed Mon Sep 17 00:00:00 2001 From: Samuel Date: Sun, 12 Apr 2020 12:49:50 -0400 Subject: [PATCH 035/128] Update src/components/remotecontrol/remotecontrol.css Fix for smaller screen volume button under bottom bar Co-Authored-By: Fernando --- src/components/remotecontrol/remotecontrol.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 02970e5211..12e5368691 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -163,6 +163,7 @@ -webkit-box-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; + z-index: 0; } @media all and (min-width: 63em) { From dd3250a980c2e6920d190ddd2c33340d02ed1d1f Mon Sep 17 00:00:00 2001 From: ferferga Date: Sun, 12 Apr 2020 20:24:18 +0200 Subject: [PATCH 036/128] Change volume slider depending on layout and add artists back --- src/components/remotecontrol/remotecontrol.js | 17 +++++++++++++++-- src/nowplaying.html | 11 +---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index d25f4e59e0..4e33a1196f 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -122,13 +122,13 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var artistName; if (item.ArtistItems != null) { artistName = item.ArtistItems[0].Name; - // context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; + context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; context.querySelector(".contextMenuAlbum").innerHTML = 'album ' + globalize.translate("ViewAlbum") + ''; context.querySelector(".contextMenuArtist").innerHTML = 'person ' + globalize.translate("ViewArtist") + ''; } else { artistName = item.Artists; - // context.querySelector(".nowPlayingAlbum").innerHTML = albumName; + context.querySelector(".nowPlayingAlbum").innerHTML = albumName; context.querySelector(".nowPlayingArtist").innerHTML = artistName; } } @@ -677,6 +677,17 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } } + var contextmenuHtml = ''; + var volumecontrolHtml = '
'; + volumecontrolHtml += ''; + volumecontrolHtml += '
'; + volumecontrolHtml += '
'; + if (!layoutManager.mobile) { + context.querySelector(".nowPlayingSecondaryButtons").innerHTML += volumecontrolHtml; + context.querySelector(".playlistSectionButton").innerHTML += contextmenuHtml; + } else { + context.querySelector(".playlistSectionButton").innerHTML += volumecontrolHtml + contextmenuHtml; + } context.querySelector(".nowPlayingVolumeSlider").addEventListener("change", setVolume); context.querySelector(".nowPlayingVolumeSlider").addEventListener("mousemove", setVolumeDelayed); context.querySelector(".nowPlayingVolumeSlider").addEventListener("touchmove", setVolumeDelayed); @@ -698,9 +709,11 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".playlist").classList.remove("hide"); context.querySelector(".btnSavePlaylist").classList.remove("hide"); context.querySelector(".contextMenu").classList.add("hide"); + context.querySelector(".volumecontrol").classList.add("hide"); } else { context.querySelector(".playlist").classList.add("hide"); context.querySelector(".btnSavePlaylist").classList.add("hide"); + context.querySelector(".volumecontrol").classList.remove("hide"); } }); context.querySelector(".btnToggleContextMenu").addEventListener("click", function () { diff --git a/src/nowplaying.html b/src/nowplaying.html index 74ce0f92ec..c3364f796d 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -76,12 +76,6 @@ repeat - -
- -
@@ -168,7 +162,7 @@
-
+
-
From 6eec2ac19f64d17ee05c59b495b5cc8b0558bd08 Mon Sep 17 00:00:00 2001 From: ferferga Date: Sun, 12 Apr 2020 20:38:31 +0200 Subject: [PATCH 037/128] Fix lint issues and z-index of playback slider --- src/components/remotecontrol/remotecontrol.css | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 12e5368691..17003a4ec2 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -58,6 +58,7 @@ .nowPlayingPositionSliderContainer { margin: 0.2em 1em 0.2em 1em; width: 100%; + z-index: 0; } .nowPlayingInfoButtons { @@ -79,7 +80,7 @@ } .nowPlayingPageImageContainer { - width: 20%; + width: 16%; margin-right: 1em; position: relative; -webkit-flex-shrink: 0; @@ -123,10 +124,11 @@ bottom: 0; left: 0; right: 0; + margin: 0 auto; + width: 100%; -webkit-box-shadow: 0 0 1.9vh #000; box-shadow: 0 0 1.9vh #000; border: 0.1em solid #222; - user-drag: none; user-select: none; -moz-user-select: none; -webkit-user-drag: none; @@ -142,15 +144,6 @@ font-size: x-large; } -.nowPlayingPageImageContainer { - width: 16%; -} - -.nowPlayingPageImage { - margin: 0 auto; - width: 100%; -} - .nowPlayingSecondaryButtons { display: -webkit-box; display: -webkit-flex; From d63b3a5b22778ed12219972e4995d47e242e6eaf Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 12 Apr 2020 22:11:25 +0200 Subject: [PATCH 038/128] Resize logo on details page --- src/assets/css/librarybrowser.css | 32 ++++--------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 22b9b6f5eb..566cca3b52 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -609,11 +609,11 @@ } .detailLogo { - width: 67.25vw; - height: 14.5vh; + width: 40vw; + height: 30vh; position: absolute; - top: 15vh; - right: 0; + top: 7.5vh; + right: 18; -webkit-background-size: auto; background-size: auto; } @@ -622,30 +622,6 @@ display: none; } -@media all and (max-width: 87.5em) { - .detailLogo { - right: 5%; - } -} - -@media all and (max-width: 75em) { - .detailLogo { - right: 2%; - } -} - -@media all and (max-width: 68.75em) { - .detailLogo { - width: 14.91em; - height: 3.5em; - right: 5%; - bottom: 5%; - top: auto; - background-position: center right; - display: none; - } -} - .itemDetailImage { width: 100% !important; -webkit-box-shadow: 0 0.1em 0.5em 0 rgba(0, 0, 0, 0.75); From 34ffb8df71fc8858583c659860e6ffdfaece815f Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 12 Apr 2020 22:21:23 +0200 Subject: [PATCH 039/128] Resize logo on details page --- src/assets/css/librarybrowser.css | 83 ++++++++----------------------- 1 file changed, 22 insertions(+), 61 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 66f3f5d4a2..ce684930ca 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -21,7 +21,7 @@ } .libraryPage { - padding-top: 7em; + padding-top: 7em !important; } .itemDetailPage { @@ -115,7 +115,7 @@ display: -webkit-inline-box; display: -webkit-inline-flex; display: inline-flex; - margin: 0 0 0 0.5em; + margin: 0.3em 0 0 0.5em; height: 1.7em; -webkit-box-align: center; -webkit-align-items: center; @@ -128,10 +128,6 @@ margin-top: 0; } -.layout-mobile .pageTitleWithDefaultLogo { - background-image: url(../img/icon-transparent.png); -} - .headerLeft, .skinHeader { display: -webkit-box; @@ -242,10 +238,11 @@ } .mainDrawer-scrollContainer { - margin-bottom: 10vh; + padding-bottom: 10vh; } @media all and (min-width: 40em) { + .dashboardDocument .adminDrawerLogo, .dashboardDocument .mainDrawerButton { display: none !important; } @@ -271,6 +268,12 @@ } } +@media all and (max-width: 60em) { + .libraryDocument .mainDrawerButton { + display: none; + } +} + @media all and (max-width: 84em) { .withSectionTabs .headerTop { padding-bottom: 0.55em; @@ -313,7 +316,7 @@ } .dashboardDocument .mainDrawer-scrollContainer { - margin-top: 4.6em !important; + margin-top: 6em !important; } } @@ -606,19 +609,24 @@ } .detailLogo { - width: 40vw; - height: 30vh; + width: 30vw; + height: 25vh; position: absolute; - top: 7.5vh; - right: 18; - -webkit-background-size: auto; - background-size: auto; + top: 10vh; + right: 20vw; + background-size: contain; } .noBackdrop .detailLogo { display: none; } +@media all and (max-width: 68.75em) { + .detailLogo { + display: none; + } +} + .itemDetailImage { width: 100% !important; -webkit-box-shadow: 0 0.1em 0.5em 0 rgba(0, 0, 0, 0.75); @@ -1095,50 +1103,3 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { .itemsViewSettingsContainer > .button-flat { margin: 0; } - -.layout-mobile #myPreferencesMenuPage { - padding-top: 3.75em; -} - -.itemDetailsGroup { - margin-bottom: 1.5em; -} - -.trackSelections { - max-width: 44em; -} - -.detailsGroupItem, -.trackSelections .selectContainer { - display: flex; - max-width: 44em; - margin: 0 0 0.5em !important; -} - -.trackSelections .selectContainer { - margin: 0 0 0.3em !important; -} - -.detailsGroupItem .label, -.trackSelections .selectContainer .selectLabel { - cursor: default; - flex-grow: 0; - flex-shrink: 0; - flex-basis: 6.25em; - margin: 0 0.6em 0 0; -} - -.trackSelections .selectContainer .selectLabel { - margin: 0 0.2em 0 0; -} - -.trackSelections .selectContainer .detailTrackSelect { - font-size: inherit; - padding: 0; - overflow: hidden; -} - -.trackSelections .selectContainer .selectArrowContainer .selectArrow { - margin-top: 0; - font-size: 1.4em; -} From aae50066378d16144a1715093cb38bcd72185b20 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Sun, 12 Apr 2020 22:26:55 +0200 Subject: [PATCH 040/128] Fix admin dashboard drawer margin --- src/assets/css/librarybrowser.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index ce684930ca..2b78d356dc 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -316,7 +316,7 @@ } .dashboardDocument .mainDrawer-scrollContainer { - margin-top: 6em !important; + margin-top: 4.65em !important; } } From 30f6081338cdc2d6a5df868d963232f4fe9b36ca Mon Sep 17 00:00:00 2001 From: ferferga Date: Mon, 13 Apr 2020 00:20:47 +0200 Subject: [PATCH 041/128] Move "hide watched media" checkbox --- .../homescreensettings.template.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/homescreensettings/homescreensettings.template.html b/src/components/homescreensettings/homescreensettings.template.html index d5bae685b8..8515f3f0ad 100644 --- a/src/components/homescreensettings/homescreensettings.template.html +++ b/src/components/homescreensettings/homescreensettings.template.html @@ -10,6 +10,13 @@
${LabelPleaseRestart}
+
+ +
+
- ${HideWatchedContentFromLatestMedia} - -
-

${HeaderLibraryFolders}

From dcd228e87686e81716cbb442f187926f57786baa Mon Sep 17 00:00:00 2001 From: Maerik Date: Sun, 12 Apr 2020 17:46:48 +0000 Subject: [PATCH 042/128] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index b2edba2f33..a838ec5298 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1082,7 +1082,7 @@ "XmlTvSportsCategoriesHelp": "Programmer med disse kategorier bliver vist som sportsprogrammer. Adskil flere med '|'.", "Yesterday": "I går", "AirDate": "Luftdata", - "Albums": "Album", + "Albums": "Albums", "Artists": "Kunstnere", "Books": "Bøger", "Collections": "Samlinger", From e8b78eb8df2f1c5ac14b6863adaf9409ed7e840d Mon Sep 17 00:00:00 2001 From: Toaaster Date: Sun, 12 Apr 2020 17:05:01 +0000 Subject: [PATCH 043/128] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 03d1f81ca7..68248a476f 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1490,7 +1490,7 @@ "AskAdminToCreateLibrary": "Bitten Sie einen Administrator, eine Bibliothek zu erstellen.", "NoCreatedLibraries": "Sieht so aus als hättest du bis jetzt keine Bibliothek erstellt. {0}Möchtest du jetzt eine Bibliothek erstellen?{1}", "AllowFfmpegThrottling": "Transkodierung drosseln", - "PlaybackErrorNoCompatibleStream": "Es gab ein Problem bei der Erkennung des Wiedergabeprofils des Clients und der Server sendet kein kompatibles Format.", + "PlaybackErrorNoCompatibleStream": "Der Klient ist nicht mit dem Medium kompatibel und der Server sendet kein kompatibles Format.", "AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.", "ClientSettings": "Client Einstellungen", "OnApplicationStartup": "Beim Starten der Applikation", @@ -1515,5 +1515,9 @@ "Artist": "Künstler", "AlbumArtist": "Album Künstler", "Album": "Album", - "BoxSet": "Box Set" + "BoxSet": "Box Set", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", + "LabelLibraryPageSizeHelp": "Setzt die Anzahl der gezeigten Elemente auf einer Bibliotheksseite. Setze die Anzahl auf 0 um die Auflistung zu deaktivieren.", + "LabelLibraryPageSize": "Bibliothek Seiten Größe:" } From 14892a85859b02537eecc478d4af6bd89b9a1ed3 Mon Sep 17 00:00:00 2001 From: millallo Date: Sun, 12 Apr 2020 16:42:15 +0000 Subject: [PATCH 044/128] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index 2cd244a396..4fa78ea8fa 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1488,8 +1488,8 @@ "ListPaging": "{0}-{1} di {2}", "WriteAccessRequired": "Jellyfin Server richiede il permesso di scrittura su questa cartella. Verificare l'autorizzazione e riprovare.", "PathNotFound": "Percorso non trovato. Assicurarsi che sia valido e riprovare.", - "YadifBob": "Yadif Bob", - "Yadif": "Yadif", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", "Track": "Traccia", "Season": "Stagione", "OtherArtist": "Altri Artisti", @@ -1497,5 +1497,7 @@ "LabelLibraryPageSizeHelp": "Numero di elementi presenti nella paginazione della libreria. Il valore 0 disabilita la paginazione.", "LabelLibraryPageSize": "Elementi nella paginazione della libreria:", "Episode": "Episodio", - "BoxSet": "Cofanetto" + "BoxSet": "Cofanetto", + "AlbumArtist": "Artisti dell'Album", + "ReleaseGroup": "Release Group" } From da7c95c1ef3d6bf5dc134bb0028eef596db4608d Mon Sep 17 00:00:00 2001 From: Pedro Date: Sun, 12 Apr 2020 15:33:00 +0000 Subject: [PATCH 045/128] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 179c264aa4..a288ce5813 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1326,5 +1326,14 @@ "ClientSettings": "Configurações do Cliente", "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução.", "MySubtitles": "Minhas legendas", - "Name": "Nome" + "Name": "Nome", + "Never": "", + "Artist": "", + "LabelDeinterlaceMethod": "", + "DeinterlaceMethodHelp": "", + "Movie": "", + "LabelLibraryPageSize": "", + "Album": "", + "LabelLibraryPageSizeHelp": "", + "Episode": "" } From 9439a306b644dc6c72a44093002b748eb8606f94 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Sun, 12 Apr 2020 20:15:58 -0400 Subject: [PATCH 046/128] Various visual fix --- src/components/remotecontrol/remotecontrol.css | 17 +++++++++++++++-- src/components/remotecontrol/remotecontrol.js | 12 +++++++++--- src/nowplaying.html | 12 ++++++------ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 17003a4ec2..af03c51e0a 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -90,7 +90,10 @@ .nowPlayingPageImageContainerNoAlbum { width: 100%; position: relative; - background-color: #5ccea9; +} + +.nowPlayingPageImageContainerNoAlbum button { + cursor: default; } .nowPlayingPageImageContainerNoAlbum::after { @@ -368,8 +371,13 @@ border-radius: 0; } + .playlistSectionButton .volumecontrol { + width: 100%; + } + .remoteControlSection { - margin: 4.2em 0 0 0; + margin: 0; + padding: 0 0 4.2em 0; } .nowPlayingButtonsContainer { @@ -554,8 +562,13 @@ border-radius: 0; } + .playlistSectionButton .volumecontrol { + width: 100%; + } + .remoteControlSection { margin: 4.2em 0 0 0; + padding: 0 0 4.2em 0; } .nowPlayingButtonsContainer { diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 4e33a1196f..135713e36a 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -263,6 +263,12 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".navigationSection").classList.add("hide"); } + if (-1 != supportedCommands.indexOf("DisplayMessage") && -1 != supportedCommands.indexOf("SendString") && -1 != supportedCommands.indexOf("Select") && !currentPlayer.isLocalPlayer) { + context.querySelector(".remoteControlSection").classList.remove("hide"); + } else { + context.querySelector(".remoteControlSection").classList.add("hide"); + } + buttonVisible(context.querySelector(".btnStop"), null != item); buttonVisible(context.querySelector(".btnNextTrack"), null != item); buttonVisible(context.querySelector(".btnPreviousTrack"), null != item); @@ -416,9 +422,9 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL }); if (items.length) { - context.querySelector(".playlistSection").classList.remove("hide"); + context.querySelector(".btnTogglePlaylist").classList.remove("hide"); } else { - context.querySelector(".playlistSection").classList.add("hide"); + context.querySelector(".btnTogglePlaylist").classList.add("hide"); } var itemsContainer = context.querySelector(".playlist"); @@ -677,7 +683,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL } } - var contextmenuHtml = ''; + var contextmenuHtml = ''; var volumecontrolHtml = '
'; volumecontrolHtml += ''; volumecontrolHtml += '
'; diff --git a/src/nowplaying.html b/src/nowplaying.html index c3364f796d..a1ddcc26a7 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -1,4 +1,4 @@ -
+
@@ -10,7 +10,7 @@

-
+
@@ -161,18 +161,18 @@
-
+
-
-
-
+
+
From c19385c9363cd2eee332e3888d778df3cdbb6583 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Sun, 12 Apr 2020 20:22:34 -0400 Subject: [PATCH 047/128] Fix bug introduce in last commit --- src/components/remotecontrol/remotecontrol.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 135713e36a..dce9502d82 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -263,7 +263,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".navigationSection").classList.add("hide"); } - if (-1 != supportedCommands.indexOf("DisplayMessage") && -1 != supportedCommands.indexOf("SendString") && -1 != supportedCommands.indexOf("Select") && !currentPlayer.isLocalPlayer) { + if ((-1 != supportedCommands.indexOf("DisplayMessage") || -1 != supportedCommands.indexOf("SendString") || -1 != supportedCommands.indexOf("Select")) && !currentPlayer.isLocalPlayer) { context.querySelector(".remoteControlSection").classList.remove("hide"); } else { context.querySelector(".remoteControlSection").classList.add("hide"); From d5ae0275cf589d631cfc366e19fd5e6792f6145c Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Mon, 13 Apr 2020 12:49:40 +0300 Subject: [PATCH 048/128] Move delayed volume update to playbackManager --- src/components/nowplayingbar/nowplayingbar.js | 18 ++---------------- src/components/playback/playbackmanager.js | 17 ++++++++++++++++- src/components/remotecontrol/remotecontrol.js | 18 ++---------------- src/controllers/playback/videoosd.js | 17 ++--------------- 4 files changed, 22 insertions(+), 48 deletions(-) diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js index 8205211b4f..3462501041 100644 --- a/src/components/nowplayingbar/nowplayingbar.js +++ b/src/components/nowplayingbar/nowplayingbar.js @@ -187,29 +187,15 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', volumeSliderContainer.classList.remove('hide'); } - var volumeSliderTimer; - function setVolume() { - clearTimeout(volumeSliderTimer); - volumeSliderTimer = null; - if (currentPlayer) { currentPlayer.setVolume(this.value); } } - function setVolumeDelayed() { - if (!volumeSliderTimer) { - var that = this; - volumeSliderTimer = setTimeout(function () { - setVolume.call(that); - }, 700); - } - } - volumeSlider.addEventListener('change', setVolume); - volumeSlider.addEventListener('mousemove', setVolumeDelayed); - volumeSlider.addEventListener('touchmove', setVolumeDelayed); + volumeSlider.addEventListener('mousemove', setVolume); + volumeSlider.addEventListener('touchmove', setVolume); positionSlider = elem.querySelector('.nowPlayingBarPositionSlider'); positionSlider.addEventListener('change', function () { diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 2ea4c67cfb..b004c00a5a 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -3282,7 +3282,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla function onPlaybackVolumeChange(e) { var player = this; - sendProgressUpdate(player, 'volumechange'); + sendProgressUpdateDelayed(player, 'volumechange'); } function onRepeatModeChange(e) { @@ -3377,7 +3377,14 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla pluginManager.ofType('mediaplayer').map(initMediaPlayer); + /** Delay timer for sendProgressUpdate */ + var sendProgressUpdateTimer; + /** Delay time in ms for sendProgressUpdate */ + var sendProgressUpdateDelay = 700; + function sendProgressUpdate(player, progressEventName, reportPlaylist) { + clearTimeout(sendProgressUpdateTimer); + sendProgressUpdateTimer = null; if (!player) { throw new Error('player cannot be null'); @@ -3403,6 +3410,14 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla } } + function sendProgressUpdateDelayed(player, progressEventName, reportPlaylist) { + if (!sendProgressUpdateTimer) { + sendProgressUpdateTimer = setTimeout(function () { + sendProgressUpdate(player, progressEventName, reportPlaylist); + }, sendProgressUpdateDelay); + } + } + function getLiveStreamMediaInfo(player, streamInfo, mediaSource, liveStreamId, serverId) { console.debug('getLiveStreamMediaInfo'); diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 7b620d536a..149fc77381 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -614,27 +614,13 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL return datetime.getDisplayRunningTime(ticks); }; - var volumeSliderTimer; - function setVolume() { - clearTimeout(volumeSliderTimer); - volumeSliderTimer = null; - playbackManager.setVolume(this.value, currentPlayer); } - function setVolumeDelayed() { - if (!volumeSliderTimer) { - var that = this; - volumeSliderTimer = setTimeout(function () { - setVolume.call(that); - }, 700); - } - } - context.querySelector(".nowPlayingVolumeSlider").addEventListener("change", setVolume); - context.querySelector(".nowPlayingVolumeSlider").addEventListener("mousemove", setVolumeDelayed); - context.querySelector(".nowPlayingVolumeSlider").addEventListener("touchmove", setVolumeDelayed); + context.querySelector(".nowPlayingVolumeSlider").addEventListener("mousemove", setVolume); + context.querySelector(".nowPlayingVolumeSlider").addEventListener("touchmove", setVolume); context.querySelector(".buttonMute").addEventListener("click", function () { playbackManager.toggleMute(currentPlayer); }); diff --git a/src/controllers/playback/videoosd.js b/src/controllers/playback/videoosd.js index f71eb0e095..555e34c5b0 100644 --- a/src/controllers/playback/videoosd.js +++ b/src/controllers/playback/videoosd.js @@ -1272,7 +1272,6 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med var programEndDateMs = 0; var playbackStartTimeTicks = 0; var subtitleSyncOverlay; - var volumeSliderTimer; var nowPlayingVolumeSlider = view.querySelector(".osdVolumeSlider"); var nowPlayingVolumeSliderContainer = view.querySelector(".osdVolumeSliderContainer"); var nowPlayingPositionSlider = view.querySelector(".osdPositionSlider"); @@ -1423,27 +1422,15 @@ define(["playbackManager", "dom", "inputManager", "datetime", "itemHelper", "med } function setVolume() { - clearTimeout(volumeSliderTimer); - volumeSliderTimer = null; - playbackManager.setVolume(this.value, currentPlayer); } - function setVolumeDelayed() { - if (!volumeSliderTimer) { - var that = this; - volumeSliderTimer = setTimeout(function () { - setVolume.call(that); - }, 700); - } - } - view.querySelector(".buttonMute").addEventListener("click", function () { playbackManager.toggleMute(currentPlayer); }); nowPlayingVolumeSlider.addEventListener("change", setVolume); - nowPlayingVolumeSlider.addEventListener("mousemove", setVolumeDelayed); - nowPlayingVolumeSlider.addEventListener("touchmove", setVolumeDelayed); + nowPlayingVolumeSlider.addEventListener("mousemove", setVolume); + nowPlayingVolumeSlider.addEventListener("touchmove", setVolume); nowPlayingPositionSlider.addEventListener("change", function () { var player = currentPlayer; From 990b5c72370e148ecc43f6d7562e8db475599d5b Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Mon, 13 Apr 2020 13:09:01 +0200 Subject: [PATCH 049/128] Finish moving elements --- src/components/guide/guide.js | 15 +------ src/components/indicators/indicators.js | 41 +----------------- .../emby-itemrefreshindicator.js | 0 .../emby-itemscontainer.js | 0 .../emby-playstatebutton.js | 0 .../emby-programcell/emby-programcell.js | 16 +++++++ .../emby-progressbar/emby-progressbar.js | 42 +++++++++++++++++++ .../emby-ratingbutton}/emby-ratingbutton.js | 0 .../emby-scrollbuttons/emby-scrollbuttons.css | 0 .../emby-scrollbuttons/emby-scrollbuttons.js | 0 .../emby-scroller/emby-scroller.css | 0 .../emby-scroller/emby-scroller.js | 0 .../emby-tabs/emby-tabs.css | 0 .../emby-tabs/emby-tabs.js | 0 src/scripts/site.js | 16 +++---- 15 files changed, 69 insertions(+), 61 deletions(-) rename src/{components => elements}/emby-itemrefreshindicator/emby-itemrefreshindicator.js (100%) rename src/{components => elements}/emby-itemscontainer/emby-itemscontainer.js (100%) rename src/{components/userdatabuttons => elements/emby-playstatebutton}/emby-playstatebutton.js (100%) create mode 100644 src/elements/emby-programcell/emby-programcell.js create mode 100644 src/elements/emby-progressbar/emby-progressbar.js rename src/{components/userdatabuttons => elements/emby-ratingbutton}/emby-ratingbutton.js (100%) rename src/{components => elements}/emby-scrollbuttons/emby-scrollbuttons.css (100%) rename src/{components => elements}/emby-scrollbuttons/emby-scrollbuttons.js (100%) rename src/{components => elements}/emby-scroller/emby-scroller.css (100%) rename src/{components => elements}/emby-scroller/emby-scroller.js (100%) rename src/{components => elements}/emby-tabs/emby-tabs.css (100%) rename src/{components => elements}/emby-tabs/emby-tabs.js (100%) diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index a00baaa6f0..d6497e5f09 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -1,4 +1,4 @@ -define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', 'scrollHelper', 'serverNotifications', 'loading', 'datetime', 'focusManager', 'playbackManager', 'userSettings', 'imageLoader', 'events', 'layoutManager', 'itemShortcuts', 'dom', 'css!./guide.css', 'programStyles', 'material-icons', 'scrollStyles', 'emby-button', 'paper-icon-button-light', 'emby-tabs', 'emby-scroller', 'flexStyles', 'registerElement'], function (require, inputManager, browser, globalize, connectionManager, scrollHelper, serverNotifications, loading, datetime, focusManager, playbackManager, userSettings, imageLoader, events, layoutManager, itemShortcuts, dom) { +define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', 'scrollHelper', 'serverNotifications', 'loading', 'datetime', 'focusManager', 'playbackManager', 'userSettings', 'imageLoader', 'events', 'layoutManager', 'itemShortcuts', 'dom', 'css!./guide.css', 'programStyles', 'material-icons', 'scrollStyles', 'emby-programcell', 'emby-button', 'paper-icon-button-light', 'emby-tabs', 'emby-scroller', 'flexStyles', 'registerElement'], function (require, inputManager, browser, globalize, connectionManager, scrollHelper, serverNotifications, loading, datetime, focusManager, playbackManager, userSettings, imageLoader, events, layoutManager, itemShortcuts, dom) { 'use strict'; function showViewSettings(instance) { @@ -1252,18 +1252,5 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', }); } - var ProgramCellPrototype = Object.create(HTMLButtonElement.prototype); - - ProgramCellPrototype.detachedCallback = function () { - this.posLeft = null; - this.posWidth = null; - this.guideProgramName = null; - }; - - document.registerElement('emby-programcell', { - prototype: ProgramCellPrototype, - extends: 'button' - }); - return Guide; }); diff --git a/src/components/indicators/indicators.js b/src/components/indicators/indicators.js index e41ccb9775..633706d209 100644 --- a/src/components/indicators/indicators.js +++ b/src/components/indicators/indicators.js @@ -1,4 +1,4 @@ -define(['datetime', 'itemHelper', 'css!./indicators.css', 'material-icons'], function (datetime, itemHelper) { +define(['datetime', 'itemHelper', 'emby-progressbar', 'css!./indicators.css', 'material-icons'], function (datetime, itemHelper) { 'use strict'; function enableProgressIndicator(item) { @@ -183,45 +183,6 @@ define(['datetime', 'itemHelper', 'css!./indicators.css', 'material-icons'], fun return ''; } - var ProgressBarPrototype = Object.create(HTMLDivElement.prototype); - - function onAutoTimeProgress() { - var start = parseInt(this.getAttribute('data-starttime')); - var end = parseInt(this.getAttribute('data-endtime')); - - var now = new Date().getTime(); - var total = end - start; - var pct = 100 * ((now - start) / total); - - pct = Math.min(100, pct); - pct = Math.max(0, pct); - - var itemProgressBarForeground = this.querySelector('.itemProgressBarForeground'); - itemProgressBarForeground.style.width = pct + '%'; - } - - ProgressBarPrototype.attachedCallback = function () { - if (this.timeInterval) { - clearInterval(this.timeInterval); - } - - if (this.getAttribute('data-automode') === 'time') { - this.timeInterval = setInterval(onAutoTimeProgress.bind(this), 60000); - } - }; - - ProgressBarPrototype.detachedCallback = function () { - if (this.timeInterval) { - clearInterval(this.timeInterval); - this.timeInterval = null; - } - }; - - document.registerElement('emby-progressbar', { - prototype: ProgressBarPrototype, - extends: 'div' - }); - return { getProgressHtml: getProgressHtml, getProgressBarHtml: getProgressBarHtml, diff --git a/src/components/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js similarity index 100% rename from src/components/emby-itemrefreshindicator/emby-itemrefreshindicator.js rename to src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js diff --git a/src/components/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js similarity index 100% rename from src/components/emby-itemscontainer/emby-itemscontainer.js rename to src/elements/emby-itemscontainer/emby-itemscontainer.js diff --git a/src/components/userdatabuttons/emby-playstatebutton.js b/src/elements/emby-playstatebutton/emby-playstatebutton.js similarity index 100% rename from src/components/userdatabuttons/emby-playstatebutton.js rename to src/elements/emby-playstatebutton/emby-playstatebutton.js diff --git a/src/elements/emby-programcell/emby-programcell.js b/src/elements/emby-programcell/emby-programcell.js new file mode 100644 index 0000000000..a959033186 --- /dev/null +++ b/src/elements/emby-programcell/emby-programcell.js @@ -0,0 +1,16 @@ +define([], function() { + 'use strict'; + + var ProgramCellPrototype = Object.create(HTMLButtonElement.prototype); + + ProgramCellPrototype.detachedCallback = function () { + this.posLeft = null; + this.posWidth = null; + this.guideProgramName = null; + }; + + document.registerElement('emby-programcell', { + prototype: ProgramCellPrototype, + extends: 'button' + }); +}); diff --git a/src/elements/emby-progressbar/emby-progressbar.js b/src/elements/emby-progressbar/emby-progressbar.js new file mode 100644 index 0000000000..a799f82bdd --- /dev/null +++ b/src/elements/emby-progressbar/emby-progressbar.js @@ -0,0 +1,42 @@ +define([], function() { + 'use strict'; + + var ProgressBarPrototype = Object.create(HTMLDivElement.prototype); + + function onAutoTimeProgress() { + var start = parseInt(this.getAttribute('data-starttime')); + var end = parseInt(this.getAttribute('data-endtime')); + + var now = new Date().getTime(); + var total = end - start; + var pct = 100 * ((now - start) / total); + + pct = Math.min(100, pct); + pct = Math.max(0, pct); + + var itemProgressBarForeground = this.querySelector('.itemProgressBarForeground'); + itemProgressBarForeground.style.width = pct + '%'; + } + + ProgressBarPrototype.attachedCallback = function () { + if (this.timeInterval) { + clearInterval(this.timeInterval); + } + + if (this.getAttribute('data-automode') === 'time') { + this.timeInterval = setInterval(onAutoTimeProgress.bind(this), 60000); + } + }; + + ProgressBarPrototype.detachedCallback = function () { + if (this.timeInterval) { + clearInterval(this.timeInterval); + this.timeInterval = null; + } + }; + + document.registerElement('emby-progressbar', { + prototype: ProgressBarPrototype, + extends: 'div' + }); +}); diff --git a/src/components/userdatabuttons/emby-ratingbutton.js b/src/elements/emby-ratingbutton/emby-ratingbutton.js similarity index 100% rename from src/components/userdatabuttons/emby-ratingbutton.js rename to src/elements/emby-ratingbutton/emby-ratingbutton.js diff --git a/src/components/emby-scrollbuttons/emby-scrollbuttons.css b/src/elements/emby-scrollbuttons/emby-scrollbuttons.css similarity index 100% rename from src/components/emby-scrollbuttons/emby-scrollbuttons.css rename to src/elements/emby-scrollbuttons/emby-scrollbuttons.css diff --git a/src/components/emby-scrollbuttons/emby-scrollbuttons.js b/src/elements/emby-scrollbuttons/emby-scrollbuttons.js similarity index 100% rename from src/components/emby-scrollbuttons/emby-scrollbuttons.js rename to src/elements/emby-scrollbuttons/emby-scrollbuttons.js diff --git a/src/components/emby-scroller/emby-scroller.css b/src/elements/emby-scroller/emby-scroller.css similarity index 100% rename from src/components/emby-scroller/emby-scroller.css rename to src/elements/emby-scroller/emby-scroller.css diff --git a/src/components/emby-scroller/emby-scroller.js b/src/elements/emby-scroller/emby-scroller.js similarity index 100% rename from src/components/emby-scroller/emby-scroller.js rename to src/elements/emby-scroller/emby-scroller.js diff --git a/src/components/emby-tabs/emby-tabs.css b/src/elements/emby-tabs/emby-tabs.css similarity index 100% rename from src/components/emby-tabs/emby-tabs.css rename to src/elements/emby-tabs/emby-tabs.css diff --git a/src/components/emby-tabs/emby-tabs.js b/src/elements/emby-tabs/emby-tabs.js similarity index 100% rename from src/components/emby-tabs/emby-tabs.js rename to src/elements/emby-tabs/emby-tabs.js diff --git a/src/scripts/site.js b/src/scripts/site.js index 90fa1d849f..f861824797 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -780,6 +780,15 @@ var AppInfo = {}; define("emby-slider", [elementsPath + "/emby-slider/emby-slider"], returnFirstDependency); define("emby-textarea", [elementsPath + "/emby-textarea/emby-textarea"], returnFirstDependency); define("emby-toggle", [elementsPath + "/emby-toggle/emby-toggle"], returnFirstDependency); + define("emby-scroller", [elementsPath + "/emby-scroller/emby-scroller"], returnFirstDependency); + define("emby-tabs", [elementsPath + "/emby-tabs/emby-tabs"], returnFirstDependency); + define("emby-scrollbuttons", [elementsPath + "/emby-scrollbuttons/emby-scrollbuttons"], returnFirstDependency); + define("emby-itemrefreshindicator", [elementsPath + "/emby-itemrefreshindicator/emby-itemrefreshindicator"], returnFirstDependency); + define("emby-itemscontainer", [elementsPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency); + define("emby-playstatebutton", [elementsPath + "/emby-playstatebutton/emby-playstatebutton"], returnFirstDependency); + define("emby-ratingbutton", [elementsPath + "/emby-ratingbutton/emby-ratingbutton"], returnFirstDependency); + define("emby-progressbar", [elementsPath + "/emby-progressbar/emby-progressbar"], returnFirstDependency); + define("emby-programcell", [elementsPath + "/emby-programcell/emby-programcell"], returnFirstDependency); define("webSettings", [scriptsPath + "/settings/webSettings"], returnFirstDependency); define("appSettings", [scriptsPath + "/settings/appSettings"], returnFirstDependency); @@ -798,12 +807,7 @@ var AppInfo = {}; define("playerSettingsMenu", [componentsPath + "/playback/playersettingsmenu"], returnFirstDependency); define("playMethodHelper", [componentsPath + "/playback/playmethodhelper"], returnFirstDependency); define("brightnessOsd", [componentsPath + "/playback/brightnessosd"], returnFirstDependency); - define("emby-itemscontainer", [componentsPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency); define("alphaNumericShortcuts", [componentsPath + "/alphanumericshortcuts/alphanumericshortcuts"], returnFirstDependency); - define("emby-scroller", [componentsPath + "/emby-scroller/emby-scroller"], returnFirstDependency); - define("emby-tabs", [componentsPath + "/emby-tabs/emby-tabs"], returnFirstDependency); - define("emby-scrollbuttons", [componentsPath + "/emby-scrollbuttons/emby-scrollbuttons"], returnFirstDependency); - define("emby-itemrefreshindicator", [componentsPath + "/emby-itemrefreshindicator/emby-itemrefreshindicator"], returnFirstDependency); define("multiSelect", [componentsPath + "/multiselect/multiselect"], returnFirstDependency); define("alphaPicker", [componentsPath + "/alphapicker/alphapicker"], returnFirstDependency); define("tabbedView", [componentsPath + "/tabbedview/tabbedview"], returnFirstDependency); @@ -860,8 +864,6 @@ var AppInfo = {}; define("objectassign", [componentsPath + "/polyfills/objectassign"], returnFirstDependency); define("focusPreventScroll", [componentsPath + "/polyfills/focusPreventScroll"], returnFirstDependency); define("userdataButtons", [componentsPath + "/userdatabuttons/userdatabuttons"], returnFirstDependency); - define("emby-playstatebutton", [componentsPath + "/userdatabuttons/emby-playstatebutton"], returnFirstDependency); - define("emby-ratingbutton", [componentsPath + "/userdatabuttons/emby-ratingbutton"], returnFirstDependency); define("listView", [componentsPath + "/listview/listview"], returnFirstDependency); define("indicators", [componentsPath + "/indicators/indicators"], returnFirstDependency); define("viewSettings", [componentsPath + "/viewsettings/viewsettings"], returnFirstDependency); From 46a055935b5b141f5e63a8fb24ab14dc196bf9a7 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Mon, 13 Apr 2020 08:18:09 -0400 Subject: [PATCH 050/128] As suggested by @MrTimscampi defaultCardBackground --- src/components/remotecontrol/remotecontrol.css | 7 +++++++ src/components/remotecontrol/remotecontrol.js | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index af03c51e0a..08192cae05 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -209,6 +209,13 @@ margin: 0; } + .nowPlayingAlbum, + .nowPlayingArtist { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .nowPlayingInfoContainerMedia { text-align: left !important; width: 80%; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index dce9502d82..a6d8c21dc7 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -194,7 +194,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".nowPlayingPageImage").classList.remove("nowPlayingPageImageAudio"); } } else { - imgContainer.innerHTML = '
'; + imgContainer.innerHTML = '
'; } } From 753bf80642ff7e73896db8e2492f59e476744ebe Mon Sep 17 00:00:00 2001 From: Mark Monteiro Date: Mon, 13 Apr 2020 14:53:51 -0400 Subject: [PATCH 051/128] Handle 403 response codes at login and display an appropriate message --- src/controllers/auth/login.js | 5 +++-- src/strings/en-us.json | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/controllers/auth/login.js b/src/controllers/auth/login.js index 4296b8bfb3..440a777762 100644 --- a/src/controllers/auth/login.js +++ b/src/controllers/auth/login.js @@ -24,9 +24,10 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout page.querySelector("#txtManualPassword").value = ""; loading.hide(); - if (response.status === 401) { + if (response.status === 401 || response.status === 403) { require(["toast"], function (toast) { - toast(Globalize.translate("MessageInvalidUser")); + var messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser" + toast(Globalize.translate(messageKey)); }); } else { Dashboard.alert({ diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 990145ee95..a71505d57d 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -990,6 +990,7 @@ "MessageInstallPluginFromApp": "This plugin must be installed from within the app you intend to use it in.", "MessageInvalidForgotPasswordPin": "An invalid or expired pin code was entered. Please try again.", "MessageInvalidUser": "Invalid username or password. Please try again.", + "MessageUnauthorizedUser": "You are not authorized to access the server at this time. Please contact your server administrator for more information.", "MessageItemSaved": "Item saved.", "MessageItemsAdded": "Items added.", "MessageLeaveEmptyToInherit": "Leave empty to inherit settings from a parent item or the global default value.", From 4666da1d0b96c7c87995d24af363d86a180ba6f1 Mon Sep 17 00:00:00 2001 From: Mark Monteiro Date: Mon, 13 Apr 2020 15:37:57 -0400 Subject: [PATCH 052/128] Handle correct response code for parental control authentication failure --- src/components/appRouter.js | 2 +- src/controllers/auth/login.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/appRouter.js b/src/components/appRouter.js index a602d6dce8..17b51b376d 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -200,7 +200,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'layoutManager', 'skinM var apiClient = this; - if (data.status === 401) { + if (data.status === 403) { if (data.errorCode === "ParentalControl") { var isCurrentAllowed = currentRouteInfo ? (currentRouteInfo.route.anonymous || currentRouteInfo.route.startup) : true; diff --git a/src/controllers/auth/login.js b/src/controllers/auth/login.js index 440a777762..35821f80f6 100644 --- a/src/controllers/auth/login.js +++ b/src/controllers/auth/login.js @@ -26,7 +26,7 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout if (response.status === 401 || response.status === 403) { require(["toast"], function (toast) { - var messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser" + var messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser"; toast(Globalize.translate(messageKey)); }); } else { From e7f595c460ed8488f2b7107e67602bc81ffdddfa Mon Sep 17 00:00:00 2001 From: Mark Monteiro Date: Mon, 13 Apr 2020 16:41:24 -0400 Subject: [PATCH 053/128] Apply code review suggestions --- src/controllers/auth/login.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/controllers/auth/login.js b/src/controllers/auth/login.js index 35821f80f6..4b679bbbd8 100644 --- a/src/controllers/auth/login.js +++ b/src/controllers/auth/login.js @@ -24,9 +24,10 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout page.querySelector("#txtManualPassword").value = ""; loading.hide(); - if (response.status === 401 || response.status === 403) { + const UnauthorizedOrForbidden = [401, 403]; + if (UnauthorizedOrForbidden.includes(response.status)) { require(["toast"], function (toast) { - var messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser"; + const messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser"; toast(Globalize.translate(messageKey)); }); } else { From 075ebc78605365e85ffdb46c0cb6a7e90c24337e Mon Sep 17 00:00:00 2001 From: Himbeer Date: Mon, 13 Apr 2020 12:57:21 +0000 Subject: [PATCH 054/128] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 68248a476f..347d115f76 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1490,7 +1490,7 @@ "AskAdminToCreateLibrary": "Bitten Sie einen Administrator, eine Bibliothek zu erstellen.", "NoCreatedLibraries": "Sieht so aus als hättest du bis jetzt keine Bibliothek erstellt. {0}Möchtest du jetzt eine Bibliothek erstellen?{1}", "AllowFfmpegThrottling": "Transkodierung drosseln", - "PlaybackErrorNoCompatibleStream": "Der Klient ist nicht mit dem Medium kompatibel und der Server sendet kein kompatibles Format.", + "PlaybackErrorNoCompatibleStream": "Dieser Client ist nicht mit den Medien kompatibel und der Server sendet kein kompatibles Medienformat.", "AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig geskippt wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.", "ClientSettings": "Client Einstellungen", "OnApplicationStartup": "Beim Starten der Applikation", @@ -1519,5 +1519,7 @@ "YadifBob": "YADIF Bob", "Yadif": "YADIF", "LabelLibraryPageSizeHelp": "Setzt die Anzahl der gezeigten Elemente auf einer Bibliotheksseite. Setze die Anzahl auf 0 um die Auflistung zu deaktivieren.", - "LabelLibraryPageSize": "Bibliothek Seiten Größe:" + "LabelLibraryPageSize": "Bibliothek Seiten Größe:", + "DeinterlaceMethodHelp": "Wähle die Deinterlacing-Methode zum Transkodieren von Inhalten im Zeilensprungverfahren (Interlace).", + "LabelDeinterlaceMethod": "Deinterlacing-Methode:" } From 40f82838efad3bd29c0da4f8e3b1d15ae08a71ed Mon Sep 17 00:00:00 2001 From: Jeisson rojas Date: Mon, 13 Apr 2020 23:01:50 +0000 Subject: [PATCH 055/128] Translated using Weblate (Spanish (Argentina)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/ --- src/strings/es-ar.json | 43 +++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index 52b4d02cf2..90e5283c0c 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -38,7 +38,7 @@ "Folders": "Carpetas", "Genres": "Géneros", "HeaderAlbumArtists": "Artistas de álbum", - "HeaderContinueWatching": "Continuar viendo", + "HeaderContinueWatching": "Seguir viendo", "HeaderNextUp": "A Continuación", "Movies": "Películas", "Photos": "Fotos", @@ -361,23 +361,23 @@ "EnableThemeSongs": "Canciones temáticas", "EnableThemeSongsHelp": "Reproducir canciones temáticas en el fondo mientras se navega por la biblioteca.", "EnableThemeVideos": "Videos temáticos", - "EnableThemeVideosHelp": "Al habilitarse, los videos de tema se reproducirán de fondo mientras navegues por la biblioteca.", + "EnableThemeVideosHelp": "Al habilitarse, los vídeos de tema se reproducirán de fondo mientras navegues por la biblioteca.", "Ended": "Finalizado", "EndsAtValue": "Termina en {0}", "Episodes": "Episodios", "ErrorAddingListingsToSchedulesDirect": "Ocurrió un error al añadir el alineamiento a tu cuenta de Schedules Direct. Schedules Direct solo permite una cantidad limitada de alineamientos por cuenta. Quizás necesites ingresar al sitio de Schedules Direct y eliminar otros alineamientos de tu cuenta antes de continuar.", "ErrorAddingMediaPathToVirtualFolder": "Ocurrió un error al agregar la ruta de medios. Por favor, asegurate que la ruta es válida y que el proceso que sirve Jellyfin tiene acceso a esa ubicación.", "ErrorAddingTunerDevice": "Ocurrió un error al añadir el dispositivo sintonizador. Por favor asegurate que está disponible e intenta de nuevo.", - "ErrorAddingXmlTvFile": "Ocurrió un error al acceder al archivo de XmlTV. Por favor asegurate de que el archivo existe e intenta de nuevo.", + "ErrorAddingXmlTvFile": "Ocurrió un error al acceder al archivo de XmlTV. Por favor asegúrate de que el archivo existe e intenta de nuevo.", "ErrorDeletingItem": "Ocurrió un error al eliminar el ítem del servidor Jellyfin. Por favor verifica que el servidor Jellyfin tiene permiso de escritura a la carpeta de medios e intenta de nuevo.", - "ErrorGettingTvLineups": "Ocurrió un error al descargar los alineamientos de TV. Por favor asegúrate que tu información es correcta e intenta de nuevo.", + "ErrorGettingTvLineups": "Ocurrió un error al descargar la guía de programación de TV. Por favor asegúrate que tu información es correcta e intenta de nuevo.", "ErrorMessageStartHourGreaterThanEnd": "La hora de fin tiene que ser mayor que la de inicio.", "ErrorPleaseSelectLineup": "Por favor selecciona un alineamiento e intenta de nuevo. Si no existen alineamientos disponibles, asegúrate de que tu nombre de usuario, contraseña y código postal son correctos.", "ErrorSavingTvProvider": "Ocurrió un error al guardar el proveedor de TV. Por favor asegúrate de que está disponible e intenta de nuevo.", "EveryNDays": "Cada {0} días", "ExitFullscreen": "Salir de pantalla completa", "ExtraLarge": "Extra grande", - "ExtractChapterImagesHelp": "Extraer imágenes de los capítulos permitirá a las aplicaciones de Jellyfin mostrar menúes gráficos de selección de escena. El proceso puede ser lento, ocupar mucho tiempo de cpu y puede ocupar varios gigabytes de almacenamiento. El proceso corre cuando los videos son descubiertos, y también como un proceso periódico por la noche. El horario del proceso periódico se puede configurar en el área de procesos periódicos. No se recomienda correr este proceso durante horas de alto uso.", + "ExtractChapterImagesHelp": "Extraer imágenes de los capítulos permitirá a las aplicaciones de Jellyfin mostrar menús gráficos de selección de escena. El proceso puede ser lento, ocupar mucho tiempo de cpu y puede ocupar varios gigabytes de almacenamiento. El proceso corre cuando los vídeos son descubiertos, y también como un proceso periódico por la noche. El horario del proceso periódico se puede configurar en el área de procesos periódicos. No se recomienda correr este proceso durante horas de alto uso.", "Extras": "Extras", "FFmpegSavePathNotFound": "No pudimos localizar FFmpeg usando la ruta que has ingresado. FFprobe también es necesario y debe existir en la misma carpeta. Éstos componentes normalmente están incluidos en la misma descarga. Por favor, revisa la ruta e intenta de nuevo.", "FastForward": "Avanzar Rápido", @@ -391,8 +391,8 @@ "FolderTypeBooks": "Libros", "FolderTypeMovies": "Películas", "FolderTypeMusic": "Música", - "FolderTypeMusicVideos": "Videos Musicales", - "FolderTypeUnset": "Sin especificar (Contenido Mixto)", + "FolderTypeMusicVideos": "Vídeos Musicales", + "FolderTypeUnset": "Contenido Mixto", "FormatValue": "Formato: {0}", "Friday": "Viernes", "Fullscreen": "Pantalla Completa", @@ -421,7 +421,7 @@ "HeaderCancelRecording": "Cancelar Grabación", "HeaderBranding": "Marca", "HeaderBooks": "Libros", - "HeaderBlockItemsWithNoRating": "Bloquear elementos con rating de información no reconocible:", + "HeaderBlockItemsWithNoRating": "Bloquear elementos con rating de información vacía o no reconocible:", "HeaderAutomaticUpdates": "Actualizaciones Automáticas", "HeaderAudioSettings": "Configuración del Audio", "HeaderAudioBooks": "Audiolibros", @@ -444,10 +444,10 @@ "HeaderActiveDevices": "Dispositivos activos", "HeaderAccessScheduleHelp": "Crear un calendario de acceso, para limitar el acceso en determinadas horas.", "HeaderAccessSchedule": "Acceder al Calendario", - "HardwareAccelerationWarning": "Habilitar la aceleración de hardware puede causar inestabilidad en algunos entornos. Asegúrese de que su sistema operativo y los controladores de video estén completamente actualizados. Si tiene dificultades para reproducir el video después de habilitarlo, deberá volver a cambiar la configuración a \"Nada\".", + "HardwareAccelerationWarning": "Habilitar la aceleración de hardware puede causar inestabilidad en algunos entornos. Asegúrese de que su sistema operativo y los controladores de vídeo estén completamente actualizados. Si tiene dificultades para reproducir el vídeo después de habilitarlo, deberá volver a cambiar la configuración a \"Nada\".", "HandledByProxy": "Manejado por un proxy reverso", "HDPrograms": "Programas en HD", - "EncoderPresetHelp": "Elige un valor más rápido para mejorar la performance, o elige un valor más lento para mejorar la calidad.", + "EncoderPresetHelp": "Elige un valor más rápido para mejorar el desempeño, o elige un valor más lento para mejorar la calidad.", "FetchingData": "Obteniendo información adicional", "Episode": "Episodio", "Yesterday": "Ayer", @@ -455,5 +455,26 @@ "BoxSet": "Colección", "Artist": "Artista", "AlbumArtist": "Artista del Album", - "Album": "Album" + "Album": "Album", + "HeaderDateIssued": "Fecha de Emisión", + "HeaderCustomDlnaProfiles": "Perfiles personalizados", + "HeaderContinueListening": "Seguir escuchando", + "HeaderContainerProfileHelp": "Los perfiles de contenedor indican las limitaciones de un dispositivo cuando se reproducen formatos específicos. Si se aplica una limitación, los medios se transcodificarán, incluso si el formato está configurado para reproducción directa.", + "HeaderContainerProfile": "Perfil de contenedor", + "HeaderConnectionFailure": "Conexión fallida", + "HeaderConnectToServer": "Conectar al servidor", + "HeaderConfirmRevokeApiKey": "Revocar llave de API", + "HeaderConfirmProfileDeletion": "Confirmar borrado de perfil", + "HeaderConfirmPluginInstallation": "Confirmar instalación del complemento", + "HeaderConfigureRemoteAccess": "Configurar acceso remoto", + "HeaderCodecProfileHelp": "Los perfiles de códec indican las limitaciones de un dispositivo cuando se reproducen códecs específicos. Si se aplica una limitación, los medios se transcodificarán, incluso si el códec está configurado para reproducción directa.", + "HeaderCodecProfile": "Perfil del códec", + "HeaderChapterImages": "Imágenes del capitulo", + "HeaderChannels": "Canales", + "HeaderChannelAccess": "Acceso al canal", + "HeaderCastCrew": "Reparto", + "HeaderCastAndCrew": "Reparto", + "HeaderCancelSeries": "Cancelar serie", + "H264CrfHelp": "El Factor de velocidad constante (CRF) es la configuración de calidad predeterminada para el codificador x264. Puede establecer los valores entre 0 y 51, donde valores más bajos resultarían en una mejor calidad (a expensas de tamaños de archivo más altos). Los valores correctos están entre 18 y 28. El valor predeterminado para x264 es 23, por lo que puede usar esto como punto de partida.", + "DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al transcodificar contenido entrelazado." } From 738f246a9bc251c89fdede9df9b950ffdbf3a5dc Mon Sep 17 00:00:00 2001 From: millallo Date: Tue, 14 Apr 2020 09:11:58 +0000 Subject: [PATCH 056/128] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index 4fa78ea8fa..120e18d5db 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -93,7 +93,7 @@ "ButtonRename": "Rinomina", "ButtonRepeat": "Ripeti", "ButtonResetEasyPassword": "Resetta codice PIN", - "ButtonResetPassword": "Ripristina Password", + "ButtonResetPassword": "Reset Password", "ButtonRestart": "Riavvia", "ButtonResume": "Riprendi", "ButtonRevoke": "Revocare", @@ -202,7 +202,7 @@ "EnableStreamLoopingHelp": "Abilita questo se gli streaming in diretta contengono solo pochi secondi di dati e devono essere costantemente richiesti. L'abilitazione di questa funzione quando non è servita può causare problemi.", "EnableThemeSongs": "Canzoni a tema", "EnableThemeSongsHelp": "Le canzoni a tema saranno riprodotte mentre visualizzi la tua libreria.", - "EnableThemeVideos": "VIdeo a tema", + "EnableThemeVideos": "Video a tema", "EnableThemeVideosHelp": "Riproduzione dei video a tema sullo sfondo mentre visualizzi la tua libreria.", "Ended": "Finito", "EndsAtValue": "Finirà alle {0}", @@ -1040,9 +1040,9 @@ "PackageInstallFailed": "Installazione di {0} (versione {1}) fallita.", "ParentalRating": "Classificazione per genitori", "PasswordMatchError": "Le password non coincidono.", - "PasswordResetComplete": "la password è stata ripristinata.", - "PasswordResetConfirmation": "Sei sicuro di voler ripristinare la password?", - "PasswordResetHeader": "Ripristina Password", + "PasswordResetComplete": "Reset della password eseguito.", + "PasswordResetConfirmation": "Sicuro di voler eseguire il reset della password?", + "PasswordResetHeader": "Reset Password", "PasswordSaved": "Password salvata.", "People": "Attori", "PerfectMatch": "Corrispondenza perfetta", @@ -1202,7 +1202,7 @@ "TabProfiles": "Profili", "TabRecordings": "Registrazioni", "TabResponses": "Risposte", - "TabResumeSettings": "Ripristina", + "TabResumeSettings": "Riprendi", "TabScheduledTasks": "Operazioni Pianificate", "TabSeries": "Serie TV", "TabSettings": "Impostazioni", @@ -1355,7 +1355,7 @@ "OptionProtocolHls": "Streaming in Diretta HTTP", "OptionDownloadArtImage": "Art", "OptionMax": "Massimo", - "PasswordResetProviderHelp": "Scegli un Provider Reset Password da utilizzare quando questo utente richiede un reset della password", + "PasswordResetProviderHelp": "Scegli un Provider Reset Password da utilizzare quando questo utente ne richiede il reset", "PlaybackData": "Dati di Riproduzione", "TagsValue": "Tag: {0}", "Whitelist": "Lista bianca", From aa2653013ab1921b3319ae8930488383ca3f7222 Mon Sep 17 00:00:00 2001 From: Vitorvlv Date: Mon, 13 Apr 2020 20:16:10 +0000 Subject: [PATCH 057/128] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 45681762ca..5111966b2e 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1470,5 +1470,34 @@ "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux estiver suficientemente avançada da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais proveitoso para quando não há avanço ou retrocesso do vídeo com frequência. Desative se tiver problemas de reprodução.", "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir as informações incorporadas nos arquivos dos episódios ao invés dos nomes", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Isso utiliza as informações dos episódios incorporadas nos metadados dos arquivos se estiverem disponíveis.", - "ClientSettings": "Configurações do cliente" + "ClientSettings": "Configurações do cliente", + "OnApplicationStartup": "Na inicialização do aplicativo", + "EveryXHours": "A cada {0} horas", + "EveryHour": "A cada hora", + "EveryXMinutes": "A cada {0} minutos", + "OnWakeFromSleep": "Ao acordar da suspensão", + "WeeklyAt": "{0} às {1}", + "DailyAt": "Diariamente à {0}", + "LastSeen": "Visto pela última vez {0}", + "PersonRole": "como {0}", + "ListPaging": "{0}-{1} de {2}", + "WriteAccessRequired": "O servidor Jellyfin necessita de acesso de escrita para essa pasta. Garanta o acesso e tente novamente.", + "PathNotFound": "O caminho não pôde ser encontrado. Por favor certifique-se da validade e tente novamente.", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", + "Track": "Trilha", + "Season": "Temporada", + "ReleaseGroup": "Grupo de Lançamento", + "Person": "Pessoa", + "OtherArtist": "Outro Artista", + "Movie": "Filme", + "LabelLibraryPageSizeHelp": "Selecione a quantidade de itens a aparecer na página da biblioteca. Coloque 0 para desabilitar a paginação.", + "LabelLibraryPageSize": "Tamanho da página da biblioteca:", + "LabelDeinterlaceMethod": "Método de desentrelaçamento:", + "Episode": "Episódio", + "DeinterlaceMethodHelp": "Selecione o método de desentrelaçamento a ser usado ao transcodificar o conteúdo entrelaçado.", + "BoxSet": "Coleção", + "Artist": "Artista", + "AlbumArtist": "Artista do Album", + "Album": "Album" } From 71bb2b800290ce3d72db7b9f3bf07928052f4a11 Mon Sep 17 00:00:00 2001 From: tluciomiranda Date: Tue, 14 Apr 2020 09:51:17 +0000 Subject: [PATCH 058/128] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index d4a81580f2..981b7a7b41 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1428,7 +1428,7 @@ "LabelXDlnaDoc": "X-DLNA doc:", "LabelXDlnaCap": "X-DLNA cap:", "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para aceleração de hardware.", - "LabelVaapiDevice": "VA API Dispositivo:", + "LabelVaapiDevice": "Dispositivo VAAPI:", "LabelTypeMetadataDownloaders": "{0} transferências de metadados:", "LabelTheme": "Tema:", "LabelTVHomeScreen": "TV modo ecrã de casa:", From 7c7e84554e0376b4bf76cb122fa9de640bddd1d8 Mon Sep 17 00:00:00 2001 From: Boommoon Date: Mon, 13 Apr 2020 02:44:19 +0000 Subject: [PATCH 059/128] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 718cb4d572..ca2dd5b936 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -885,7 +885,7 @@ "Images": "圖片", "ImportFavoriteChannelsHelp": "如果啟用,只有在調諧器設備中被標記為我的最愛的頻道才會被導入。", "ImportMissingEpisodesHelp": "如果啟用,有關缺失劇集的數據導入您的Jellyfin媒體庫,並在季節和系列中顯示。 這可能會導致媒體庫掃描延長。", - "InstallingPackage": "正在安装 {0}", + "InstallingPackage": "正在安装 {0} (版本 {1})", "InstantMix": "即時混音", "Items": "項目", "Kids": "兒童", @@ -988,7 +988,7 @@ "LabelVersionInstalled": "{0} 已安裝", "DashboardVersionNumber": "版本:{0}", "DashboardServerName": "伺服器:{0}", - "NoSubtitles": "沒有字幕", + "NoSubtitles": "無", "List": "清單", "OptionAllowMediaPlayback": "允許播放媒體", "OneChannel": "單聲道", @@ -1414,7 +1414,7 @@ "News": "新聞", "NoNewDevicesFound": "找不到裝置,要添加新調諧器,請關閉此對話框並手動輸入裝置訊息。", "OnlyForcedSubtitles": "僅顯示強制字幕", - "OnlyImageFormats": "僅圖片格式(VOBSUB、PGS、SUB 等)", + "OnlyImageFormats": "圖片格式(VOBSUB、PGS、SUB)", "OptionAllowLinkSharingHelp": "只有網頁包含的媒體訊息會被共享,媒體檔案本身不會被公開共享,共享的內容會在 {0} 天後到期。", "OptionAllowRemoteSharedDevices": "允許遠端控制共享裝置", "OptionAllowSyncTranscoding": "允許需要轉檔的媒體下載和同步", @@ -1441,7 +1441,7 @@ "OptionSubstring": "子串", "OptionWeekdays": "工作日", "Overview": "概述", - "PackageInstallCancelled": "{0} 安裝被取消。", + "PackageInstallCancelled": "{0} (版本 {1})安裝被取消。", "PlayAllFromHere": "從這裡開始全部播放", "PleaseAddAtLeastOneFolder": "請點擊新增按鈕,新增至少一個資料夾到這個媒體庫。", "PleaseConfirmPluginInstallation": "點擊「OK」以確認您已經閱讀了上述內容並希望繼續安裝模組。", @@ -1459,7 +1459,7 @@ "ProductionLocations": "產地", "Programs": "節目", "Quality": "品質", - "PackageInstallFailed": "{0} 安裝失敗。", + "PackageInstallFailed": "{0} (版本 {1}) 安裝失敗。", "QueueAllFromHere": "將這裡的全部內容加入佇列", "Raised": "提高", "Rate": "評等", @@ -1508,7 +1508,7 @@ "LabelNumber": "編號:", "LabelNumberOfGuideDays": "下載電視指南日數:", "OnlyForcedSubtitlesHelp": "只有標記為「強制」的字幕會被載入。", - "PackageInstallCompleted": "{0} 安裝完成。", + "PackageInstallCompleted": "{0} (版本 {1}) 安裝完成。", "OptionDisplayFolderViewHelp": "在其他媒體庫旁邊顯示資料夾,對想要一個普通的資料夾檢視很有用。", "LabelReasonForTranscoding": "轉檔原因:", "LabelRecord": "錄影:", @@ -1647,5 +1647,9 @@ "AllowFfmpegThrottling": "限制轉檔", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "這將會使用內建劇集資料。", "PlaybackErrorNoCompatibleStream": "用戶端偵測出了問題,伺服器也未傳送相容的媒體格式。", - "PreferEmbeddedEpisodeInfosOverFileNames": "優先使用內建劇集資訊而不是檔案名稱" + "PreferEmbeddedEpisodeInfosOverFileNames": "優先使用內建劇集資訊而不是檔案名稱", + "OtherArtist": "其他歌手", + "Artist": "歌手", + "AlbumArtist": "專輯歌手", + "Album": "專輯" } From 194739ca5c1ac2c4e9e27ac2e8c307530340eced Mon Sep 17 00:00:00 2001 From: Adam Bokor Date: Tue, 14 Apr 2020 15:10:02 +0000 Subject: [PATCH 060/128] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index a439cc073f..92fc370c02 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -758,7 +758,7 @@ "HeaderMusicQuality": "Zene minősége", "HeaderNewApiKey": "Új API kulcs", "HeaderNewDevices": "Új eszközök", - "HeaderNextEpisodePlayingInValue": "Következő epizód lejátszása {0} múlva", + "HeaderNextEpisodePlayingInValue": "A következő epizód {0} múlva automatikusan elindul", "HeaderNextVideoPlayingInValue": "Következő videó lejátszása {0}", "HeaderOtherItems": "Egyéb elemek", "HeaderPasswordReset": "Jelszó visszaállítása", From 1519ee48d7a388648d7c6a0bfd72560fe1059b9b Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> Date: Wed, 15 Apr 2020 09:57:19 +0300 Subject: [PATCH 061/128] Apply suggestions from code review Co-Authored-By: dkanada --- src/components/playback/playbackmanager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index b004c00a5a..46fed9182c 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -3379,6 +3379,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla /** Delay timer for sendProgressUpdate */ var sendProgressUpdateTimer; + /** Delay time in ms for sendProgressUpdate */ var sendProgressUpdateDelay = 700; From 5459ef2a780d5966e168b53f0c0d8d95059132b9 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Wed, 15 Apr 2020 13:08:48 +0200 Subject: [PATCH 062/128] Use screenfull to handle fullscreen switching --- package.json | 1 + src/bundle.js | 7 ++ src/components/fullscreenManager.js | 103 --------------------- src/components/htmlvideoplayer/plugin.js | 4 +- src/components/playback/playbackmanager.js | 12 +-- src/scripts/site.js | 7 +- yarn.lock | 5 + 7 files changed, 23 insertions(+), 116 deletions(-) delete mode 100644 src/components/fullscreenManager.js diff --git a/package.json b/package.json index 8f42635adc..bc8089947f 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "page": "^1.11.5", "query-string": "^6.11.1", "resize-observer-polyfill": "^1.5.1", + "screenfull": "^5.0.2", "shaka-player": "^2.5.10", "sortablejs": "^1.10.2", "swiper": "^5.3.1", diff --git a/src/bundle.js b/src/bundle.js index cf4822deb6..eb358797e6 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -135,7 +135,14 @@ _define("fast-text-encoding", function () { return fast_text_encoding; }); +// intersection-observer var intersection_observer = require("intersection-observer"); _define("intersection-observer", function () { return intersection_observer; }); + +// screenfull +var screenfull = require("screenfull"); +_define("screenfull", function () { + return screenfull; +}); diff --git a/src/components/fullscreenManager.js b/src/components/fullscreenManager.js deleted file mode 100644 index 8ae31073a2..0000000000 --- a/src/components/fullscreenManager.js +++ /dev/null @@ -1,103 +0,0 @@ -define(['events', 'dom', 'apphost', 'browser'], function (events, dom, appHost, browser) { - 'use strict'; - - function fullscreenManager() { - - } - - fullscreenManager.prototype.requestFullscreen = function (element) { - - element = element || document.documentElement; - - if (element.requestFullscreen) { - element.requestFullscreen(); - return; - } else if (element.mozRequestFullScreen) { - element.mozRequestFullScreen(); - return; - } else if (element.webkitRequestFullscreen) { - element.webkitRequestFullscreen(); - return; - } else if (element.msRequestFullscreen) { - element.msRequestFullscreen(); - return; - } - - // Hack - This is only available for video elements in ios safari - if (element.tagName !== 'VIDEO') { - element = document.querySelector('video') || element; - } - if (element.webkitEnterFullscreen) { - element.webkitEnterFullscreen(); - } - }; - - fullscreenManager.prototype.exitFullscreen = function () { - - if (!this.isFullScreen()) { - return; - } - if (document.exitFullscreen) { - document.exitFullscreen(); - } else if (document.mozCancelFullScreen) { - document.mozCancelFullScreen(); - } else if (document.webkitExitFullscreen) { - document.webkitExitFullscreen(); - } else if (document.webkitCancelFullscreen) { - document.webkitCancelFullscreen(); - } else if (document.msExitFullscreen) { - document.msExitFullscreen(); - } - }; - - // TODO: use screenfull.js - fullscreenManager.prototype.isFullScreen = function () { - return document.fullscreen || - document.mozFullScreen || - document.webkitIsFullScreen || - document.msFullscreenElement || /* IE/Edge syntax */ - document.fullscreenElement || /* Standard syntax */ - document.webkitFullscreenElement || /* Chrome, Safari and Opera syntax */ - document.mozFullScreenElement; /* Firefox syntax */ - }; - - var manager = new fullscreenManager(); - - function onFullScreenChange() { - events.trigger(manager, 'fullscreenchange'); - } - - dom.addEventListener(document, 'fullscreenchange', onFullScreenChange, { - passive: true - }); - - dom.addEventListener(document, 'webkitfullscreenchange', onFullScreenChange, { - passive: true - }); - - dom.addEventListener(document, 'mozfullscreenchange', onFullScreenChange, { - passive: true - }); - - function isTargetValid(target) { - return !dom.parentWithTag(target, ['BUTTON', 'INPUT', 'TEXTAREA']); - } - if (appHost.supports("fullscreenchange") && (browser.edgeUwp || -1 !== navigator.userAgent.toLowerCase().indexOf("electron"))) { - - dom.addEventListener(window, 'dblclick', function (e) { - - if (isTargetValid(e.target)) { - if (manager.isFullScreen()) { - manager.exitFullscreen(); - } else { - manager.requestFullscreen(); - } - } - - }, { - passive: true - }); - } - - return manager; -}); diff --git a/src/components/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js index bcd3a72ba9..77fa687dc2 100644 --- a/src/components/htmlvideoplayer/plugin.js +++ b/src/components/htmlvideoplayer/plugin.js @@ -1,4 +1,4 @@ -define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackManager', 'appRouter', 'appSettings', 'connectionManager', 'htmlMediaHelper', 'itemHelper', 'fullscreenManager', 'globalize'], function (browser, require, events, appHost, loading, dom, playbackManager, appRouter, appSettings, connectionManager, htmlMediaHelper, itemHelper, fullscreenManager, globalize) { +define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackManager', 'appRouter', 'appSettings', 'connectionManager', 'htmlMediaHelper', 'itemHelper', 'screenfull', 'globalize'], function (browser, require, events, appHost, loading, dom, playbackManager, appRouter, appSettings, connectionManager, htmlMediaHelper, itemHelper, screenfull, globalize) { "use strict"; /* globals cast */ @@ -795,7 +795,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa dlg.parentNode.removeChild(dlg); } - fullscreenManager.exitFullscreen(); + screenfull.exit(); }; function onEnded() { diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 2ea4c67cfb..352df53958 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,4 +1,4 @@ -define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'playQueueManager', 'userSettings', 'globalize', 'connectionManager', 'loading', 'apphost', 'fullscreenManager'], function (events, datetime, appSettings, itemHelper, pluginManager, PlayQueueManager, userSettings, globalize, connectionManager, loading, apphost, fullscreenManager) { +define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'playQueueManager', 'userSettings', 'globalize', 'connectionManager', 'loading', 'apphost', 'screenfull'], function (events, datetime, appSettings, itemHelper, pluginManager, PlayQueueManager, userSettings, globalize, connectionManager, loading, apphost, screenfull) { 'use strict'; function enableLocalPlaylistManagement(player) { @@ -17,7 +17,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla } function bindToFullscreenChange(player) { - events.on(fullscreenManager, 'fullscreenchange', function () { + screenfull.on('change', function () { events.trigger(player, 'fullscreenchange'); }); } @@ -1518,7 +1518,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla return player.isFullscreen(); } - return fullscreenManager.isFullScreen(); + return screenfull.isFullscreen; }; self.toggleFullscreen = function (player) { @@ -1528,10 +1528,8 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla return player.toggleFulscreen(); } - if (fullscreenManager.isFullScreen()) { - fullscreenManager.exitFullscreen(); - } else { - fullscreenManager.requestFullscreen(); + if (screenfull.isEnabled) { + screenfull.toggle(); } }; diff --git a/src/scripts/site.js b/src/scripts/site.js index f861824797..ffe006ccc6 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -588,7 +588,7 @@ var AppInfo = {}; } } - require(["playerSelectionMenu", "fullscreenManager"]); + require(["playerSelectionMenu"]); var apiClient = window.ConnectionManager && window.ConnectionManager.currentApiClient(); if (apiClient) { @@ -706,7 +706,8 @@ var AppInfo = {}; "polyfill", "fast-text-encoding", "intersection-observer", - "classlist-polyfill" + "classlist-polyfill", + "screenfull" ] }, urlArgs: urlArgs, @@ -834,8 +835,6 @@ var AppInfo = {}; define("searchFields", [componentsPath + "/search/searchfields"], returnFirstDependency); define("searchResults", [componentsPath + "/search/searchresults"], returnFirstDependency); define("upNextDialog", [componentsPath + "/upnextdialog/upnextdialog"], returnFirstDependency); - define("fullscreen-doubleclick", [componentsPath + "/fullscreen/fullscreen-dc"], returnFirstDependency); - define("fullscreenManager", [componentsPath + "/fullscreenManager", "events"], returnFirstDependency); define("subtitleAppearanceHelper", [componentsPath + "/subtitlesettings/subtitleappearancehelper"], returnFirstDependency); define("subtitleSettings", [componentsPath + "/subtitlesettings/subtitlesettings"], returnFirstDependency); define("displaySettings", [componentsPath + "/displaysettings/displaysettings"], returnFirstDependency); diff --git a/yarn.lock b/yarn.lock index 03437af39b..099117476e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10216,6 +10216,11 @@ schema-utils@^2.6.0, schema-utils@^2.6.4, schema-utils@^2.6.5: ajv "^6.12.0" ajv-keywords "^3.4.1" +screenfull@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.0.2.tgz#b9acdcf1ec676a948674df5cd0ff66b902b0bed7" + integrity sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ== + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" From 18af3b5b58400bb4a1a3d703dcd62ec36297af07 Mon Sep 17 00:00:00 2001 From: Mathias Date: Wed, 15 Apr 2020 09:05:26 +0000 Subject: [PATCH 063/128] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 309 +++++++++++++++++++++++++++++--------------- 1 file changed, 204 insertions(+), 105 deletions(-) diff --git a/src/strings/da.json b/src/strings/da.json index a838ec5298..2407eed454 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -29,7 +29,7 @@ "BirthDateValue": "Født: {0}", "BirthLocation": "Fødselslokation", "BirthPlaceValue": "Fødselssted: {0}", - "BookLibraryHelp": "Lyd- og tekstbøger er understøttet. Se {0}Jellyfins guide til navngivning af bøger{1}.", + "BookLibraryHelp": "Lyd- og tekstbøger er understøttet. Se {0}bog guide til navngivning af bøger{1}.", "Browse": "Gennemse", "BrowsePluginCatalogMessage": "Gennemse vores plugin-katalog for at se tilgængelige plugins.", "ButtonAdd": "Tilføj", @@ -53,7 +53,7 @@ "ButtonEdit": "Rediger", "ButtonEditImages": "Rediger billeder", "ButtonEditOtherUserPreferences": "Rediger denne brugers profil, billede og personlige indstillinger.", - "ButtonForgotPassword": "Glemt adgangskode", + "ButtonForgotPassword": "Glemt Adgangskode", "ButtonFullscreen": "Fuld skærm", "ButtonGotIt": "Forstået", "ButtonHelp": "Hjælp", @@ -136,30 +136,30 @@ "DoNotRecord": "Optag ikke", "Download": "Hent", "DrmChannelsNotImported": "Kanaler med DRM importeres ikke.", - "EasyPasswordHelp": "Din pinkode bruges til offline adgang til understøttede Jellyfin apps, og kan også bruges til nemt login inden for eget netværk.", + "EasyPasswordHelp": "Din nemme pin-kode bruges til offline adgang på understøttede klienter og kan også bruges til nem login på netværket.", "Edit": "Rediger", "EditImages": "Rediger billeder", "EditSubtitles": "Rediger undertekster", - "EnableCinemaMode": "Aktiver biograftilstand", - "EnableColorCodedBackgrounds": "Aktiver farvekodet baggrunde", + "EnableCinemaMode": "Aktiver Biograftilstand", + "EnableColorCodedBackgrounds": "Aktiver Farvekodet baggrunde", "EnableHardwareEncoding": "Aktiver hardware indkoding", - "EnablePhotos": "Aktiver fotos", - "EnablePhotosHelp": "Fotos bliver opdaget og vist sammen med andre mediefiler.", + "EnablePhotos": "Vis fotoer", + "EnablePhotosHelp": "Billeder registreres og vises sammen med andre mediefiler.", "EnableStreamLooping": "Auto-gentag live streams", "EnableStreamLoopingHelp": "Aktiver dette hvis live streams kun indeholder få sekunders data og skal efterspørgsel hele tiden. Aktivering af dette uden det er nødvendigt kan forårsage problemer.", "Ended": "Færdig", "EndsAtValue": "Slutter {0}", - "ErrorAddingListingsToSchedulesDirect": "Der opstod en fejl under tilføjelse af opstilling til din Schedules Direct-konto. Schedules Direct tillader kun et begrænset antal opstillinger pr. konto. Du bliver muligvis nød til at logge på Schedules Direct-hjemmesiden og fjerne andre lister fra din konto for at fortsætte.", + "ErrorAddingListingsToSchedulesDirect": "Der opstod en fejl ved tilføjelse af lineup til din Schedules Direct-konto. Schedules Direct tillader kun et begrænset antal opstillinger pr. Konto. Det kan være nødvendigt at du logger ind på Schedules Direct-webstedet og fjerner andre lister fra din konto, før du fortsætter.", "ErrorAddingMediaPathToVirtualFolder": "Der opstod en fejl under tilføjelse af mediesti. Kontroller venligst at stien er gyldig og at Jellyfin Server-processen har adgang til denne lokation.", "ErrorAddingTunerDevice": "Der opstod en fejl under tilføjelse af tuner-enhed. Kontroller venligst at den er tilgængelig og prøv igen.", - "ErrorAddingXmlTvFile": "Der opstod en fejl under tilgang til XmlTV-filen. Kontroller venligst at filen findes og prøv igen.", - "ErrorGettingTvLineups": "Der opstod en fejl under download af tv-opstillinger. Kontroller venligst at dine informationer er korrekte og prøv igen.", + "ErrorAddingXmlTvFile": "Der opstod en fejl under tilgang til XMLTV-filen. Kontroller venligst at filen findes og prøv igen.", + "ErrorGettingTvLineups": "Der opstod en fejl under download af TV-opstillinger. Kontroller venligst at dine informationer er korrekte og prøv igen.", "ErrorMessageStartHourGreaterThanEnd": "Slut tid skal være større end start tid.", "ErrorPleaseSelectLineup": "Vælg venligst en opstilling og prøv igen. Hvis ingen opstillinger er tilgængelige, så kontroller venligst at dit brugernavn, adgangskode og postnummer er korrekt.", "ErrorSavingTvProvider": "Der opstod en fejl i forsøget på at gemme udbyder. Kontroller venligst at den er tilgængelig og prøv igen.", "EveryNDays": "Hver {0} dage", "ExitFullscreen": "Afslut fuldskærm", - "ExtractChapterImagesHelp": "Udvinding af kapitelbilleder lader Jellyfin apps vise grafiske menuer for scenevalg. Processen kan være langsom, cpu-intensiv og kræver muligvis adskillige gigabytes af lagerplads. Den køres når videoer opdages og desuden som en planlagt opgave, natligt. Den planlagte opgave kan konfigureres i området for planlagte opgaver. Det anbefales ikke at køre denne opgave under timer med spidsbelastning.", + "ExtractChapterImagesHelp": "Udtrækning af kapitelbilleder giver klienter mulighed for at vise grafiske scenevalgmenuer. Processen kan være langsom, ressourcekrævende og kan kræve flere gigabyte plads. Det kører, når videoer opdages, og også som en planlagt nat opgave. Skemaet kan konfigureres i det planlagte opgaverområde. Det anbefales ikke at køre denne opgave i de mest brugte timer.", "FFmpegSavePathNotFound": "Vi er ikke i stand til at finde FFmpeg via stien du har angivet. FFprobe er også påkrævet og skal findes i samme mappe. Disse komponenter er som regel pakket i den samme download. Kontroller venligst stien og prøv igen.", "FastForward": "Spol fremad", "Favorite": "Favorit", @@ -170,9 +170,9 @@ "FolderTypeBooks": "Bøger", "FolderTypeMovies": "Film", "FolderTypeMusic": "Musik", - "FolderTypeMusicVideos": "Musikvideoer", + "FolderTypeMusicVideos": "Musik Videoer", "FolderTypeTvShows": "TV", - "FolderTypeUnset": "Ikke valgt (blandet indhold)", + "FolderTypeUnset": "Blandet Indhold", "Friday": "Fredag", "Fullscreen": "Fuldskærm", "General": "Generel", @@ -183,7 +183,7 @@ "H264CrfHelp": "Den Konstante Ratefaktor (CRF) er standardindstillingen for X264-koderen. Du kan sætte værdien i mellem 0 og 51, hvor de lavere værdier resulterer i bedre kvalitet (på bekostning af større filstørrelser). Fornuftige værdier er i mellem 18 og 28. Standarden for X264 er 23, så du kan bruge dette som udgangspunkt.", "EncoderPresetHelp": "Vælg en hurtigere værdi for at forbedre ydeevne, eller en langsommere værdi for at forbedre kvalitet.", "HDPrograms": "HD-programmer", - "HardwareAccelerationWarning": "Aktivering af hardwareacceleration kan forårsage ustabilitet i nogle miljøer. Kontroller at dit operativsystem og videodriver er ajourført. Hvis du har problemer med at afspille video efter aktivering af dette, bliver du nød til at skifte tilbage til Auto.", + "HardwareAccelerationWarning": "Aktivering af hardwareacceleration kan forårsage ustabilitet i nogle miljøer. Kontroller at dit operativsystem og videodriver er opdateret. Hvis du har problemer med at afspille video efter aktivering af dette, bliver du nød til at skifte tilbage til Ingen.", "HeaderAccessSchedule": "Adgangsskema", "HeaderAccessScheduleHelp": "Skab et adgangsskema for at begrænse adgangen til bestemte tidsrum.", "HeaderActiveDevices": "Aktive enheder", @@ -197,9 +197,9 @@ "HeaderAdditionalParts": "Andre stier", "HeaderAlert": "Advarsel", "HeaderAllowMediaDeletionFrom": "Tillad Media Sletning Fra", - "HeaderApiKey": "API nøgle", - "HeaderApiKeys": "API nøgler", - "HeaderApiKeysHelp": "Eksterne applikationer skal have en API nøgle for at kunne kommunikere med Jellyfin. Nøgler udstedes ved at logge ind med en Jellyfin konto, eller ved manuelt at tildele applikationen en nøgle.", + "HeaderApiKey": "API Nøgle", + "HeaderApiKeys": "API Nøgler", + "HeaderApiKeysHelp": "Eksterne applikationer skal have en API-nøgle for at kunne kommunikere med Jellyfin. Nøgler udstedes ved at logge ind med en Jellyfin konto, eller ved manuelt at tildele applikationen en nøgle.", "HeaderAudioSettings": "Lydindstillinger", "HeaderAutomaticUpdates": "Automatiske opdateringer", "HeaderBlockItemsWithNoRating": "Klokér titler uden eller med ukendt bedømmelses information:", @@ -266,7 +266,7 @@ "HeaderItems": "Element", "HeaderKeepRecording": "Bevar Optagelse", "HeaderKeepSeries": "Bevar Serie", - "HeaderKodiMetadataHelp": "For at aktivere NFO metadata, rediger et bibliotek i Jellyfin biblioteks redigering og find metadata gemmer sektionen.", + "HeaderKodiMetadataHelp": "For at aktivere eller deaktivere NFO-metadata skal du redigere et bibliotek i Jellyfin-biblioteksopsætningen og finde afsnittet om metadata.", "HeaderLatestEpisodes": "Sidste episoder", "HeaderLatestMedia": "Seneste medier", "HeaderLatestMovies": "Seneste film", @@ -287,7 +287,7 @@ "HeaderMusicVideos": "Musikvideoer", "HeaderMyDevice": "Min Enhed", "HeaderMyMedia": "Mine medier", - "HeaderNewApiKey": "Ny API nøgle", + "HeaderNewApiKey": "Ny API Nøgle", "HeaderNewDevices": "Nye Enheder", "HeaderNextUp": "Næste", "HeaderOnNow": "Vises Nu", @@ -373,7 +373,7 @@ "Images": "Billeder", "ImportFavoriteChannelsHelp": "Hvis aktiveret, importeres der udelukkende kanaler der er markeret som favoritter på tuner-enheden.", "ImportMissingEpisodesHelp": "hvis aktiveret, vil information omkring manglende episoder bliver importeret ind i din Jellyfin-database og blive vist i sæsoner og serier. Dette medfører muligvis længere biblioteksscanninger.", - "InstallingPackage": "Installerer {0}", + "InstallingPackage": "Installerer {0} (version {1})", "InstantMix": "Instant Mix", "ItemCount": "{0} elementer", "Items": "emner", @@ -397,13 +397,13 @@ "LabelAll": "Alle", "LabelAllowHWTranscoding": "Tillad hardware-omkodning", "LabelAllowServerAutoRestart": "Tillad serveren at genstarte automatisk for at påføre opdateringer", - "LabelAllowServerAutoRestartHelp": "Serveren vil kun genstarte i inaktive perioder, når ingen brugere er aktive", + "LabelAllowServerAutoRestartHelp": "Serveren vil kun genstarte i inaktive perioder, når ingen brugere er aktive.", "LabelAllowedRemoteAddresses": "Fjernadgang IP adresse filter:", "LabelAllowedRemoteAddressesMode": "Fjernadgang IP adresse filter mode:", "LabelAppName": "App navn", - "LabelAppNameExample": "F. eks: Sickbeard, NzbDrone", + "LabelAppNameExample": "F. eks: Sickbeard, Sonarr", "LabelArtists": "Artister:", - "LabelArtistsHelp": "Angiv flere ved at sætte mellem dem ;", + "LabelArtistsHelp": "Angiv flere ved at sætte ;", "LabelAudioLanguagePreference": "Foretrukket lydsprog:", "LabelAutomaticallyRefreshInternetMetadataEvery": "Genopfrisk automatisk metadata fra internettet:", "LabelBindToLocalNetworkAddress": "Bind til lokal netværksadresse:", @@ -411,9 +411,9 @@ "LabelBirthDate": "Fødselsdato:", "LabelBirthYear": "Fødselsår:", "LabelBlastMessageInterval": "Interval mellem 'i live' beskeder (sekunder)", - "LabelBlastMessageIntervalHelp": "Angiver intervallet i sekunder mellem serverens 'i live' beskeder.", + "LabelBlastMessageIntervalHelp": "Bestemmer varigheden i sekunder mellem eksplosive levende meddelelser.", "LabelCachePath": "Cachesti:", - "LabelCachePathHelp": "Angiv en brugerdefineret lokation for server cachefiler, så som billeder. Efterlad blankt for at benytte serverens standard.", + "LabelCachePathHelp": "Angiv en brugerdefineret placering for servercache-filer, såsom billeder. Lad være tom for at bruge serverens standard.", "LabelCancelled": "Annulleret", "LabelChannels": "Kanaler:", "LabelCollection": "Samling:", @@ -425,8 +425,8 @@ "LabelCustomCertificatePath": "Brugerdefineret SSL certifikat sti:", "LabelCustomCertificatePathHelp": "Sti til PKCS #12 fil indeholdende et certifikat og privat nøgle for at aktivere TLS understøttelse på et brugerdefineret domæne.", "LabelCustomCss": "Brugerdefineret CSS:", - "LabelCustomCssHelp": "Anvend din egen css til webinterfacet.", - "LabelCustomDeviceDisplayName": "Vist navn:", + "LabelCustomCssHelp": "Anvend din egen stil til webinterfacet.", + "LabelCustomDeviceDisplayName": "Visningsnavn:", "LabelCustomDeviceDisplayNameHelp": "Angiv en brugerdefineret navn. hvis der ikke angives et navn, bruges det navn enheden sender.", "LabelCustomRating": "Brugerdefineret bedømmelse:", "LabelDateAdded": "Dato for tilføjelse:", @@ -444,24 +444,24 @@ "LabelDisplayOrder": "Visningsorden:", "LabelDisplaySpecialsWithinSeasons": "Vis specialepisoder sammen med den sæson de blev sent i", "LabelDownMixAudioScale": "Forøg lydstyrke ved nedmiksning:", - "LabelDownMixAudioScaleHelp": "Forøg lydstyrken når der nedmikses. Sæt værdien til 1 for at beholde den originale lydstyrke.", + "LabelDownMixAudioScaleHelp": "Forøg lydstyrken når der nedmikses. Sæt værdien til en, for at beholde den originale lydstyrke.", "LabelDownloadLanguages": "Hent sprog:", - "LabelDropImageHere": "Smid billede her.", + "LabelDropImageHere": "Drop billede her, eller Tryk for at vælge.", "LabelEasyPinCode": "Pinkode:", "LabelEmbedAlbumArtDidl": "Indsæt album billede i DIDL", "LabelEmbedAlbumArtDidlHelp": "Nogle enheder foretrækker denne metode til overførsel af album billede. Andre kan fejle når dette er aktiveret.", "LabelEnableAutomaticPortMap": "Aktiver automatisk port mapping", - "LabelEnableAutomaticPortMapHelp": "Forsøg at mappe den offentlige port til den lokale port med uPnP. Dette virker ikke med alle routere.", + "LabelEnableAutomaticPortMapHelp": "Forsøg at mappe den offentlige port til den lokale port med uPnP. Dette virker ikke med alle routere. Ændringerne vil først træde i kræft et en server genstart.", "LabelEnableBlastAliveMessages": "Masseudsend 'i live' beskeder", "LabelEnableBlastAliveMessagesHelp": "Aktiver dette hvis UPnP enheder har problemer med forbindelsen til serveren.", "LabelEnableDlnaClientDiscoveryInterval": "Interval for klientsøgning (sekunder)", "LabelEnableDlnaClientDiscoveryIntervalHelp": "angiver intervallet i sekunder mellem Jellyfins SSDP søgninger.", "LabelEnableDlnaDebugLogging": "Aktiver debu logning af DLNA", - "LabelEnableDlnaDebugLoggingHelp": "Dette generer meget store logfiler, og er kun anbefalet at bruge til fejlfindingsformål.", + "LabelEnableDlnaDebugLoggingHelp": "Opret store logfiler og skal kun bruges efter behov til fejlfinding.", "LabelEnableDlnaPlayTo": "Aktiver DLNA \"Afspil Til\"", - "LabelEnableDlnaPlayToHelp": "Jellyfin kan finde enheder i dit netværk og tilbyde at kontrollere dem.", - "LabelEnableDlnaServer": "Aktiver DNLA server", - "LabelEnableDlnaServerHelp": "Tillader UPnP enheder i dit netværk at gennemse og afspille Jellyfins indhold.", + "LabelEnableDlnaPlayToHelp": "Find enheder i dit netværk og tilbyd at fjernstyre dem.", + "LabelEnableDlnaServer": "Aktiver DLNA server", + "LabelEnableDlnaServerHelp": "Tillader UPnP enheder i dit netværk at gennemse og afspille indhold.", "LabelEnableRealtimeMonitor": "Aktiver realtidsovervågning", "LabelEnableRealtimeMonitorHelp": "Ændringer vil blive behandlet øjeblikkeligt på understøttede filsystemer.", "LabelEnableSingleImageInDidlLimit": "Begræns til et enkelt indlejret billede", @@ -471,56 +471,56 @@ "LabelEvent": "Hændelse:", "LabelEveryXMinutes": "Hver:", "LabelExtractChaptersDuringLibraryScan": "Udtræk kapitelbilleder under biblioteksskanning", - "LabelExtractChaptersDuringLibraryScanHelp": "Aktiver dette for at udtrække kapitelbillleder mens videofiler bliver importeret under biblioteksskanningen. Hvi det ikke er aktiveret, bliver de udtrukket når den planlagte opgave kapitelbilleder kører, og lader den almindelige biblioteksskanning afslutte hurtigere.", + "LabelExtractChaptersDuringLibraryScanHelp": "Generere kapitelbillleder mens videofiler bliver importeret under biblioteksskanningen. Alternativt bliver de udtrukket når den planlagte opgave kapitelbilleder kører, hvilket tillader den almindelige biblioteksskanning at afslutte hurtigere.", "LabelFailed": "Fejlet", - "LabelFileOrUrl": "Fil eller url:", + "LabelFileOrUrl": "Fil eller URL:", "LabelFinish": "Afslut", "LabelForgotPasswordUsernameHelp": "Indtast dit brugernavn, hvis du kan huske det.", "LabelFriendlyName": "System venligt navn:", - "LabelServerNameHelp": "Dette navn bruges til at identificere serveren. Hvis det ikke udfyldes, bruges computerens navn.", + "LabelServerNameHelp": "Dette navn bruges til at identificere serveren. Som udgangspunkt anvendes computerens navn.", "LabelGroupMoviesIntoCollections": "Grupper film i samlinger", "LabelGroupMoviesIntoCollectionsHelp": "Film i samlinger vil blive vist som en samlet enhed i filmlister.", "LabelH264Crf": "H264-kodning CRF:", "LabelEncoderPreset": "Forudindstillet H264-kodning:", "LabelHardwareAccelerationType": "Hardwareacceleration:", - "LabelHardwareAccelerationTypeHelp": "Kun tilgængelig for understøttede systemer.", + "LabelHardwareAccelerationTypeHelp": "Hardwareacceleration kræver yderligere konfiguration.", "LabelHttpsPort": "Lokalt HTTPS portnummer:", - "LabelHttpsPortHelp": "Det portnummer Jellyfins https-server bruger.", - "LabelIconMaxHeight": "Max højde på ikoner:", - "LabelIconMaxHeightHelp": "Maksimumopløsningen på ikoner der bliver vist med upnp:icon", - "LabelIconMaxWidth": "Max bredde på ikoner:", - "LabelIconMaxWidthHelp": "Maksimumopløsningen på ikoner der bliver vist med upnp:icon", + "LabelHttpsPortHelp": "Det TCP-portnummer, som Jellyfins HTTPS-server skal benytte.", + "LabelIconMaxHeight": "Maximal højde af ikoner:", + "LabelIconMaxHeightHelp": "Maksimalopløsningen af ikoner, der bliver vist med upnp:icon.", + "LabelIconMaxWidth": "Maximal bredde på ikoner:", + "LabelIconMaxWidthHelp": "Maksimalopløsningen på ikoner der bliver vist med upnp:icon.", "LabelIdentificationFieldHelp": "En case-insensitive substring eller regex ekspression.", "LabelImageFetchersHelp": "Aktiver og ranger dine fortrukne billede-hentere i en prioriteret rækkefølge.", "LabelImageType": "Billedtype:", "LabelImportOnlyFavoriteChannels": "Begræns til kanaler der er markeret som favoritter", "LabelInNetworkSignInWithEasyPassword": "Tillad login inden for eget netværk med pinkode", - "LabelInNetworkSignInWithEasyPasswordHelp": "Aktiver dette for at loge ind i Jellyfin apps med din pinkode inden for dit eget netværk. Din almindelige adgangskode skal du så kun bruge når du ikke er hjemme. Hvis pinkoden er tom, kan du logge ind uden adgangskode inden for dit eget netværk.", + "LabelInNetworkSignInWithEasyPasswordHelp": "Brug den lette pinkode til at logge ind på klienter i dit lokale netværk. Din almindelige adgangskode er kun nødvendig hjemmefra. Hvis pinkoden efterlades tom, behøver du ikke en adgangskode på dit hjemmenetværk.", "LabelKeepUpTo": "Bevar op til:", "LabelKidsCategories": "Børnekategorier:", "LabelKodiMetadataDateFormat": "Format for udgivelsesdato:", - "LabelKodiMetadataDateFormatHelp": "Alle datoer i NFO-filer vil blive læst og skrevet med dette format.", - "LabelKodiMetadataEnableExtraThumbs": "kopier extrafanart til extrathumbs", + "LabelKodiMetadataDateFormatHelp": "Alle datoer i NFO-filer vil blive analyseret med dette format.", + "LabelKodiMetadataEnableExtraThumbs": "Kopier ekstra fanart til extrathumbs", "LabelKodiMetadataEnableExtraThumbsHelp": "Ved hentning af billeder, kan de gemmes i både extrafanart og extrathumbs. Dette giver maksimal Kodi skin kompatibilitet.", "LabelKodiMetadataEnablePathSubstitution": "Aktiver stisubstitution", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktiverer stisubstitution for billedstier med serverens stisubstitutionsindstillinger.", "LabelKodiMetadataSaveImagePaths": "Gem stier til billeder i Nfo-filer", "LabelKodiMetadataSaveImagePathsHelp": "Dette er anbefalet hvis du har billedfiler med navne der ikke lever op til Kodis retningslinjer.", - "LabelKodiMetadataUser": "Gem brugers set data til NFO'er for:", - "LabelKodiMetadataUserHelp": "Aktiver dette for at komme set data til NFO filer som andre programmer kan bruge.", + "LabelKodiMetadataUser": "Gem brugerdata til NFO-filer til:", + "LabelKodiMetadataUserHelp": "Gem overvågningsdata til NFO-filer til andre applikationer.", "LabelLanNetworks": "LAN netwærk:", "LabelLanguage": "Sprog:", "LabelLineup": "Opstilling:", - "LabelLocalHttpServerPortNumber": "Lokalt http portnummer:", - "LabelLocalHttpServerPortNumberHelp": "Det portnummer Jellyfins http-server bruger.", + "LabelLocalHttpServerPortNumber": "Lokalt HTTP-portnummer:", + "LabelLocalHttpServerPortNumberHelp": "Det TCP-portnummer, som Jellyfin's HTTP-server skal binde til.", "LabelLockItemToPreventChanges": "Lås for at undgå fremtidige ændringer", "LabelLoginDisclaimer": "Login ansvarsfraskrivelse:", - "LabelLoginDisclaimerHelp": "Dette bliver vist i bunden af loginsiden.", - "LabelManufacturer": "Producent", - "LabelManufacturerUrl": "Producent url", + "LabelLoginDisclaimerHelp": "En besked, som vises i bunden af loginsiden.", + "LabelManufacturer": "Producent:", + "LabelManufacturerUrl": "Producentens URL", "LabelMaxBackdropsPerItem": "Maksimum antal af bagtæpper per element:", "LabelMaxParentalRating": "Højst tilladte aldersgrænse:", - "LabelMaxResumePercentage": "Maks. fortsæt procentdel:", + "LabelMaxResumePercentage": "Maksimal fortsæt procentdel:", "LabelMaxResumePercentageHelp": "Medier anses som fuldt afspillet, hvis de stoppes efter denne tid.", "LabelMaxScreenshotsPerItem": "Maksimum antal af skærmbilleder per element:", "LabelMaxStreamingBitrate": "Maks. streaming kvalitet:", @@ -538,9 +538,9 @@ "LabelMethod": "Metode:", "LabelMinBackdropDownloadWidth": "Minimum baggrundsbillede bredde:", "LabelMinResumeDuration": "Min. fortsæt tidsrum (sekunder):", - "LabelMinResumeDurationHelp": "Medier med kortere afspilningstid en denne kan ikke fortsættes.", - "LabelMinResumePercentage": "Min. fortsæt procentdel:", - "LabelMinResumePercentageHelp": "Medier anses om ikke afspillet, hvis de stoppes inden denne tid.", + "LabelMinResumeDurationHelp": "Den korteste videolængde i sekunder, der gemmer afspilningsplacering og giver dig mulighed for at genoptage.", + "LabelMinResumePercentage": "Minimal fortsæt procentdel:", + "LabelMinResumePercentageHelp": "Medier anses som ikke afspillede, hvis de stoppes inden denne tid.", "LabelMinScreenshotDownloadWidth": "Minimum skærmbillede bredde:", "LabelModelDescription": "Modelbeskrivelse", "LabelModelName": "Modelnavn", @@ -548,10 +548,10 @@ "LabelMonitorUsers": "Overvåg aktivitet fra:", "LabelMovieCategories": "Filmkategorier:", "LabelMoviePrefix": "Film-præfiks:", - "LabelMoviePrefixHelp": "Angiv venligst her hvis der tilføjes et præfiks til filmtitler, så Jellyfin kan håndtere det korrekt.", + "LabelMoviePrefixHelp": "Angiv venligst her hvis der tilføjes et præfiks til filmtitler, så serveren kan håndtere det korrekt.", "LabelMovieRecordingPath": "Film afspilningssti (valgfri):", "LabelMusicStreamingTranscodingBitrate": "Bitrate for musiktranskodning:", - "LabelMusicStreamingTranscodingBitrateHelp": "Angiv en maksimal bitrate når der streames musik", + "LabelMusicStreamingTranscodingBitrateHelp": "Angiv en maksimal bitrate når der streames musik.", "LabelName": "Navn:", "LabelNewName": "Nyt navn:", "LabelNewPassword": "Ny kode:", @@ -590,10 +590,10 @@ "LabelProtocol": "Protokol:", "LabelProtocolInfo": "Protokolinformation:", "LabelProtocolInfoHelp": "Den værdi der bruges til svar på GetProtocolInfo-forespørgsler fra enheden.", - "LabelPublicHttpPort": "Offentligt http portnummer:", - "LabelPublicHttpPortHelp": "Det offentlige portnummer som bliver knyttet til det lokale http portnummer.", - "LabelPublicHttpsPort": "Offentligt https portnummer:", - "LabelPublicHttpsPortHelp": "Det offentlige portnummer som bliver knyttet til det lokale https portnummer.", + "LabelPublicHttpPort": "Offentligt HTTP-portnummer:", + "LabelPublicHttpPortHelp": "Det offentlige portnummer som bliver knyttet til det lokale HTTP-portnummer.", + "LabelPublicHttpsPort": "Offentligt HTTPS portnummer:", + "LabelPublicHttpsPortHelp": "Det offentlige portnummer som bliver knyttet til det lokale HTTPS portnummer.", "LabelReadHowYouCanContribute": "Lær hvordan du kan bidrage.", "LabelRecord": "Optag:", "LabelRecordingPath": "Standard afspilningssti:", @@ -614,7 +614,7 @@ "LabelSerialNumber": "Serienummer", "LabelSeriesRecordingPath": "Serier afspilningssti (valgfri):", "LabelServerHost": "Vært:", - "LabelServerHostHelp": "F. eks: 192.168.1.100 eller https://myserver.com", + "LabelServerHostHelp": "F. eks: 192.168.1.100:8096 eller https://myserver.com", "LabelSimultaneousConnectionLimit": "samtidige stream begrænsning:", "LabelSkipIfAudioTrackPresent": "Undlad hvis standardlydsporet er det samme sprog", "LabelSkipIfAudioTrackPresentHelp": "Angiv ikke dette for at sikre at alle videoer har undertekster, uanset hvilket sprog lydsporet anvender.", @@ -647,7 +647,7 @@ "LabelTranscodingTempPathHelp": "Definér en bugerdefineret sti til transkodede filer til klienter. Lad den stå tom for at bruge standardmappen i serverens datamappe.", "LabelTranscodingTemporaryFiles": "Midlertidige filer til omkodning:", "LabelTranscodingThreadCount": "Antal af omkodningstråde:", - "LabelTranscodingThreadCountHelp": "Vælg det maksimale antal af tråde der bruges under omkodning. Reduktion af antallet af tråde sænker cpu-forbrug, men resulterer muligvis i at konverteringer ikke foregår hurtigt nok til en jævn afspilning.", + "LabelTranscodingThreadCountHelp": "Vælg det maksimale antal af tråde der bruges under transcoding. Reduktion af antallet af tråde sænker CPU-forbrug, men resulterer muligvis i at konverteringer ikke foregår hurtigt nok til en jævn afspilning.", "LabelTriggerType": "Udløsertype:", "LabelTunerIpAddress": "IP-adresse for Tuner:", "LabelTunerType": "Tunertype:", @@ -707,37 +707,37 @@ "MessageConfirmRemoveMediaLocation": "Er du sikker på du ønsker at fjerne denne lokalisation?", "MessageConfirmRestart": "Er du sikker på du ønsker at genstarte Jellyfin?", "MessageConfirmRevokeApiKey": "Er du sikker på du ønsker at invalidere denne api nøgle? Applikationens forbindelse til Jellyfin vil blive afbrudt øjeblikkeligt.", - "MessageConfirmShutdown": "Er du sikker på du ønsker at lukke Jellyfin?", + "MessageConfirmShutdown": "Er du sikker på du ønsker at slukke for serveren?", "MessageContactAdminToResetPassword": "Kontakt venligst din systemadministrator for at nulstille din adgangskode.", "MessageCreateAccountAt": "Opret en konto hos {0}", "MessageDeleteTaskTrigger": "Er du sikker på du ønsker at slette denne task trigger?", "MessageDirectoryPickerBSDInstruction": "For BSD skal du muligvis konfigurere lager i dit FreeNAS Jail, før Jellyfin kan tilgå det.", "MessageDirectoryPickerInstruction": "Netværksstier kan indtastes manuelt i tilfælde af at netværksknappen ikke kan lokalisere dine enheder. Foreksempel, {0} eller {1}.", - "MessageDirectoryPickerLinuxInstruction": "For Linux på Arch Linux, CentOS, Debian, Fedora, OpenSuse eller Ubuntu skal du give Jellyfin-systembrugeren minimum læseadgang til dine lagerlokationer.", + "MessageDirectoryPickerLinuxInstruction": "For Linux på Arch Linux, CentOS, Debian, Fedora, openSUSE eller Ubuntu, skal du give servicebrugeren mindst læseadgang til dine lagerpladser.", "MessageDownloadQueued": "Download sat i kø.", "MessageEnablingOptionLongerScans": "Aktivering af denne indstilling kan resultere i væsentlig længere biblioteks skan.", "MessageFileReadError": "Der opstod en fejl i forsøget på at læse filen.", "MessageForgotPasswordFileCreated": "Den følgende fil er blevet oprettet på din server og indeholder instruktioner vedrørende hvordan du skal fortsætte:", "MessageForgotPasswordInNetworkRequired": "Prøv igen inde i dit hjemmenetværk for at igangsætte nulstilling af din adgangskode.", - "MessageInstallPluginFromApp": "Dette plugin skal være installeret inde i den app du ønsker at benytte det fra.", + "MessageInstallPluginFromApp": "Dette plugin skal installeres fra den app, du har til hensigt at bruge det i.", "MessageInvalidForgotPasswordPin": "En ugyldig eller udløbet pinkode blev indtastet. Prøv igen.", "MessageInvalidUser": "Ukendt brugernavn eller adgangskode. Prøv igen.", "MessageItemSaved": "Element gemt.", "MessageItemsAdded": "Emne tilføjet.", - "MessageLeaveEmptyToInherit": "Efterlad tom for at arve indstillinger fra en overliggende post eller den globale standardværdi.", + "MessageLeaveEmptyToInherit": "Lad være tom for at arve indstillinger fra et overordnet element eller den globale standardværdi.", "MessageNoAvailablePlugins": "Ingen tilgængelige plugins.", "MessageNoMovieSuggestionsAvailable": "Ingen filmforslag er tilgængelige. Begynd at se og vurder dine film, og kom tilbage for at se dine anbefalinger.", "MessageNoPluginsInstalled": "Du har ingen plugins installeret.", "MessageNoTrailersFound": "Ingen trailere fundet. Installer Trailer kanalen for at tilføje et bibliotek med trailere fra internettet.", "MessageNothingHere": "Her er ingenting.", - "MessagePasswordResetForUsers": "Adgangskoder blev fjernet for følgende brugere. For at logge ind, skal der benyttes en blank adgangskode.", + "MessagePasswordResetForUsers": "Følgende brugere har fået nulstillet deres adgangskoder. De kan nu logge på med de pinkoder, der blev brugt til at udføre nulstillingen.", "MessagePleaseEnsureInternetMetadata": "Sørg venligst for at hentning af metadata fra internettet er aktiveret.", "MessagePleaseWait": "Vent venligst. Dette kan tage et minut.", "MessagePluginConfigurationRequiresLocalAccess": "For at konfigurerer dette plugin log da venligst direkte ind på din lokale server.", "MessagePluginInstallDisclaimer": "Plugins fremstillet af medlemmer fra Jellyfin-fællesskabet er en alle tiders måde at forbedre din oplevelse af Jellyfin med yderligere features og fordele. Før installation, bedes du venligst være opmærksom på de effekter de kan have på din Jellyfin Server; så som lange scantider på biblioteker, yderligere baggrundsbehandling og forringet systemstabilitet.", "MessageReenableUser": "Se nedenfor om genaktivering", "MessageSettingsSaved": "Indstillinger er gemt.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Følgende medielokationer bliver fjernet fra dit Jellyfin-bibliotek:", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Følgende medieplaceringer fjernes fra dit bibliotek:", "MessageUnableToConnectToServer": "Vi kan ikke forbinde til den valgte server på nuværende tidspunkt. Sikrer dig venligst at serveren kører og prøv igen.", "MessageUnsetContentHelp": "Indhold vil blive vist som almindelige mapper. For det bedste resultat benyt metadata manageren til at vælge indholdstypen i undermapper.", "MessageYouHaveVersionInstalled": "Du har version {0} installeret.", @@ -747,10 +747,10 @@ "MinutesBefore": "minutter før", "Monday": "Mandag", "MoreFromValue": "Mere fra {0}", - "MoreUsersCanBeAddedLater": "Flere brugere kan tilføjes senere i betjeningspanelet.", + "MoreUsersCanBeAddedLater": "Flere brugere kan tilføjes senere fra dashboardet.", "MoveLeft": "Flyt mod venstre", "MoveRight": "Flyt mod højre", - "MovieLibraryHelp": "Gennemse {0}Jellyfin film navngivningsguiden{1}.", + "MovieLibraryHelp": "Gennemse {0}film navngivningsguiden{1}.", "Movies": "Film", "Mute": "Afbryd lyd", "MySubtitles": "Mine Undertekster", @@ -782,7 +782,7 @@ "OptionAllowMediaPlaybackTranscodingHelp": "At begrænse adgang til omkodning kan forårsage afspilningsfejl i Jellyfin apps på grund af usupporterede medie formater.", "OptionAllowRemoteControlOthers": "Tillad fjernstyring af andre brugere", "OptionAllowRemoteSharedDevices": "Tillad fjernstyring af delte enheder", - "OptionAllowRemoteSharedDevicesHelp": "DLNA-enheder er delte indtil en bruger begynder at bruge den.", + "OptionAllowRemoteSharedDevicesHelp": "DLNA-enheder betragtes som delt, indtil en bruger begynder at kontrollere dem.", "OptionAllowSyncTranscoding": "Tillad medie hentning og synkronisering der kræver omkodning", "OptionAllowUserToManageServer": "Tillad denne bruger at administrere serveren", "OptionAllowVideoPlaybackRemuxing": "Tillad videoafspilning som kræver konvertering uden omkodning", @@ -811,13 +811,13 @@ "OptionDisableUserHelp": "Hvis deaktiveret vil serveren ikke tillade forbindelser fra denne bruger. Eksisterende forbindelser vil blive afbrudt øjeblikkeligt.", "OptionDislikes": "Ikke-Lide", "OptionDisplayFolderView": "Få vist en mappevisning til at se enkle mediemapper", - "OptionDisplayFolderViewHelp": "Hvis aktiveret, vil Jellyfin apps vise en Mappekategori ved siden af dine mediebiblioteker. Dette er brugbart, hvis du vil have vist enkle mappevisninger.", + "OptionDisplayFolderViewHelp": "Vis mapper sammen med dine andre mediebiblioteker. Dette kan være nyttigt, hvis du gerne vil have en almindelig mappevisning.", "OptionDownloadArtImage": "Billede", "OptionDownloadBackImage": "Bagside", "OptionDownloadBoxImage": "Boks", "OptionDownloadDiscImage": "Disk", "OptionDownloadImagesInAdvance": "Download billeder på forhånd", - "OptionDownloadImagesInAdvanceHelp": "Som standard downloades billeder kun når de anmodes af en Jellyfin app. Aktiver denne indstilling for at downloade alle billeder på forhånd, i mens nyt medie importeres. Dette resulterer muligvis i længere scanninger af bibliotek.", + "OptionDownloadImagesInAdvanceHelp": "Som standard downloades de fleste billeder kun, når de anmodes fra en Jellyfin-app. Aktivér denne mulighed for at downloade alle billeder på forhånd, da nye medier importeres. Dette kan forårsage betydeligt længere biblioteksscanninger.", "OptionDownloadPrimaryImage": "Primær", "OptionDownloadThumbImage": "Miniature", "OptionDvd": "DVD", @@ -826,7 +826,7 @@ "OptionEnableAccessToAllChannels": "Tillad adgang til alle kanaler", "OptionEnableAccessToAllLibraries": "Tillad adgang til alle biblioteker", "OptionEnableExternalContentInSuggestions": "Aktiver eksternt indhold i anbefalinger", - "OptionEnableExternalContentInSuggestionsHelp": "Tillad at internet-trailers og live-tv-programmer bliver inkluderet i det anbefalede indhold.", + "OptionEnableExternalContentInSuggestionsHelp": "Tillad at internet-trailers og live TV programmer bliver inkluderet i det anbefalede indhold.", "OptionEnableForAllTuners": "Aktiver for alle tuner-enheder", "OptionEnableM2tsMode": "Aktiver M2ts tilstand", "OptionEnableM2tsModeHelp": "Aktiver M2ts tilstand når der omkodes til mpegts.", @@ -844,8 +844,8 @@ "OptionHasThemeVideo": "Temavideo", "OptionHideUser": "Vis ikke denne bruger på loginsiden", "OptionHideUserFromLoginHelp": "Nyttigt for private kontoer eller skjulte administratorkontoer. Brugeren skal logge ind ved at skive sit brugernavn og adgangskode.", - "OptionHlsSegmentedSubtitles": "Hls segmented undertekster", - "OptionHomeVideos": "Hjemmevideoer og billeder", + "OptionHlsSegmentedSubtitles": "HLS segmenterede undertekster", + "OptionHomeVideos": "Billeder", "OptionIgnoreTranscodeByteRangeRequests": "Ignorer forespørgsler vedrørende transcode byte interval", "OptionIgnoreTranscodeByteRangeRequestsHelp": "Hvis aktiveret vil disse forespørgsler blive efterkommet, men byte range headeren ignoreret.", "OptionImdbRating": "IMDB bedømmelse", @@ -883,7 +883,7 @@ "OptionThursday": "Torsdag", "OptionTrackName": "Nummerets navn", "OptionTuesday": "Tirsdag", - "OptionTvdbRating": "Tvdb bedømmelse", + "OptionTvdbRating": "TVDB bedømmelse", "OptionUnairedEpisode": "Ikke sendte episoder", "OptionUnplayed": "Ikke afspillet", "OptionWakeFromSleep": "Vågner fra dvale", @@ -893,9 +893,9 @@ "OptionWeekly": "Ugentlig", "OriginalAirDateValue": "Originalt sendt: {0}", "Overview": "Overblik", - "PackageInstallCancelled": "{0} installation afbrudt.", - "PackageInstallCompleted": "{0} installation udført.", - "PackageInstallFailed": "{0} installationen mislykkedes.", + "PackageInstallCancelled": "{0} (version {1}) installation annulleret.", + "PackageInstallCompleted": "{0} (version {1}) installation udført.", + "PackageInstallFailed": "{0} (version {1}) installationen mislykkedes.", "ParentalRating": "Parental Rating", "PasswordMatchError": "Adgangskode og bekræft adgangskode skal være ens.", "PasswordResetComplete": "Adgangskoden er blevet nulstillet.", @@ -913,7 +913,7 @@ "Played": "Afspillet", "PleaseAddAtLeastOneFolder": "Tilføj venligst som minimum en enkelt mappe til dette bibliotek ved at klikke på Tilføj-knappen.", "PleaseConfirmPluginInstallation": "Klik venligst OK for at bekræfte at du har læst ovenstående og ønsker at fortsætte med installationen af plugin.", - "PleaseEnterNameOrId": "Indtast venligst et navn eller eksternt Id.", + "PleaseEnterNameOrId": "Indtast venligst et navn eller eksternt ID.", "PleaseRestartServerName": "Genstart venligst Jellyfin Server - {0}.", "PleaseSelectTwoItems": "Vælg venligst mindst to elementer.", "PluginInstalledMessage": "Plugin blev installeret med success. Jellyfin serveren skal genstartes for at aktivere det.", @@ -1025,7 +1025,7 @@ "TabProfiles": "Profiler", "TabRecordings": "Optagelser", "TabResponses": "Svar", - "TabResumeSettings": "Indstillinger for Genoptag", + "TabResumeSettings": "Genoptag", "TabScheduledTasks": "Planlagte opgaver", "TabSeries": "Serier", "TabSettings": "Indstillinger", @@ -1044,13 +1044,13 @@ "TitlePlayback": "Afspilning", "TrackCount": "{0} numre", "Tuesday": "Tirsdag", - "TvLibraryHelp": "Gennemse {0}Jellyfin TV navngivningsguiden{1}.", + "TvLibraryHelp": "Gennemgå {0} TV-navneguiden {1}.", "UninstallPluginConfirmation": "Er du sikker på du vil afinstallere {0}?", "UninstallPluginHeader": "Afinstaller plugin", "Unmute": "Genoptag lyd", "Unrated": "Ingen bedømmelse", - "UserAgentHelp": "Angiv en brugerdefineret user-agent http header, hvis nødvendigt.", - "UserProfilesIntro": "Jellyfin har indbygget understøttelse af brugerprofiler. Dette giver hver bruger sine egne indstillinger for visning, afspilningsstatus og forældrekontrol.", + "UserAgentHelp": "Angiv en brugerdefineret bruger-agent HTTP-header.", + "UserProfilesIntro": "Jellyfin inkluderer support til brugerprofiler med granuleret displayindstillinger, afspilningstilstand og forældrekontrol.", "ValueAlbumCount": "{0} album", "ValueAudioCodec": "Lyd codec: {0}", "ValueConditions": "Forhold: {0}", @@ -1072,13 +1072,13 @@ "ViewPlaybackInfo": "Vis afspilnings information", "Wednesday": "Onsdag", "WelcomeToProject": "Velkommen til Jellyfin!", - "WizardCompleted": "Det er alt vi behøver for nu. Jellyfin er begyndt at indsamle information omkring dit mediebibliotek. Tjek nogle af vores apps og klik derefter på Færdig for at se Server betjeningspanelet.", + "WizardCompleted": "Det er alt, hvad vi har brug for nu. Jellyfin er begyndt at indsamle information om dit mediebibliotek. Se nogle af vores apps, og klik derefter på Udfør for at se Dashboard.", "Writer": "Forfatter", - "XmlDocumentAttributeListHelp": "Disse attributter bliver tilføjet til rodelementet i alle XML svar.", + "XmlDocumentAttributeListHelp": "Disse attributter anvendes til rodelementet i hvert XML-svar.", "XmlTvKidsCategoriesHelp": "Programmer med disse kategorier bliver vist som programmer for børn. Adskil flere med '|'.", "XmlTvMovieCategoriesHelp": "Programmer med disse kategorier bliver vist som film. Adskil flere med '|'.", "XmlTvNewsCategoriesHelp": "Programmer med disse kategorier bliver vist som nyhedsprogrammer. Adskil flere med '|'.", - "XmlTvPathHelp": "En sti til en xml tv-fil. Jellyfin læser denne fil og kontrollerer periodisk for opdateringer. Du er ansvarlig for at oprette og opdatere filen.", + "XmlTvPathHelp": "En sti til en XMLTV fil. Jellyfin læser denne fil og kontrollerer periodisk for opdateringer. Du er ansvarlig for at oprette og opdatere filen.", "XmlTvSportsCategoriesHelp": "Programmer med disse kategorier bliver vist som sportsprogrammer. Adskil flere med '|'.", "Yesterday": "I går", "AirDate": "Luftdata", @@ -1100,7 +1100,7 @@ "Shows": "Serier", "Songs": "Sange", "AndroidUnlockRestoreHelp": "For at gendanne dit tidligere køb skal du sørge for, at du er logget ind på enheden med den samme Google- eller Amazon-konto, som oprindeligt gjorde købet. Sørg for, at app store er aktiveret og ikke begrænset af forældrekontrol, og sørg for, at du har en aktiv internetforbindelse. Du skal kun gøre dette én gang for at gendanne dit tidligere køb.", - "AnyLanguage": "Ethvert sprog", + "AnyLanguage": "Hvilken som helst sprog", "Art": "Kunst", "Ascending": "Stigende", "AudioBitDepthNotSupported": "Lyd bit dybde ikke understøttet", @@ -1121,7 +1121,7 @@ "Blacklist": "Blackliste", "Box": "Boks", "BoxRear": "Boks (bagside)", - "BurnSubtitlesHelp": "Bestemmer om serveren skal brænde underteksterne ind i videoen når den konverterer baseret på undertekstformatet. Det vil øge serverens ydeevne ikke at brænde underteksterne i filen. Vælg Automatisk for at brænde billedbaserede formater (VOBSUB, PGS, SUB/IDX, osv) og nogle ASS/SSA undertekster.", + "BurnSubtitlesHelp": "Bestemmer om serveren skal brænde undertekster, når der afspilles transcoding videoer. Undgå dette vil forbedre ydelsen meget. Vælg Auto for at brænde billedbaserede formater (VOBSUB, PGS, SUB, IDX) og bestemte ASS- eller SSA-undertekster.", "ButtonFilter": "Filter", "ButtonGuide": "Vejledning", "ButtonInfo": "Information", @@ -1174,14 +1174,14 @@ "DisplayInOtherHomeScreenSections": "Visning på hjemmeskærm sektioner som seneste medier og se videre", "DisplayMissingEpisodesWithinSeasons": "Vis manglende afsnit inde i sæsoner", "DisplayMissingEpisodesWithinSeasonsHelp": "Dette skal også være aktiveret for TV biblioteker i serverens indstillinger.", - "DisplayModeHelp": "Vælg skærmtypen du kører Jellyfin på.", + "DisplayModeHelp": "Vælg det ønskede tema for grænsefladen.", "Down": "Ned", "DownloadItemLimitHelp": "Valgfri. Sæt en begrænsning på antallet af ting der vil blive hentet.", "Downloaded": "Hentet", "DownloadingDots": "Henter...", "Downloads": "Hentninger", "DownloadsValue": "{0} hentninger", - "DropShadow": "Drop skygge", + "DropShadow": "Drop Skygge", "DvrFeatureDescription": "Tidsindstil individuelle TV optagelser, serie optagelser, og mere med Jellyfin DVR.", "EditMetadata": "Redigér metadata", "EnableBackdrops": "Baggrundsbilleder", @@ -1201,7 +1201,7 @@ "ErrorAddingJellyfinConnectAccount1": "Der skete en fejl ved tilføjelsen af Jellyfin Connect kontoen. Har du lavet en Jellyfin konto? Registrer dig på {0}.", "ErrorAddingJellyfinConnectAccount2": "Hvis du stadig har et problem, så send venligst en email til {0} fra den email adresse tilknyttet Jellyfin kontoen.", "ErrorDeletingItem": "Der skete en fejl ved sletningen af mediet fra Jellyfin Server. Tjek venligst at Jellyfin Server har skrive adgang til mediemappen og prøv igen.", - "ExtraLarge": "Ekstra stor", + "ExtraLarge": "Ekstra Stor", "Extras": "Bonusmateriale", "Features": "Funktioner", "Filters": "Filtre", @@ -1270,18 +1270,18 @@ "LabelArtist": "Kunstner", "LabelAudio": "Lyd", "LabelBitrateMbps": "Bitrate (Mbps):", - "LabelBlockContentWithTags": "Blokér filer med mærkerne:", + "LabelBlockContentWithTags": "Blokér filer med etiketter:", "LabelBurnSubtitles": "Brænd undertekster:", "LabelCache": "Cache:", "LabelCertificatePassword": "Adgangskode til certifikat:", - "LabelCertificatePasswordHelp": "Hvis dit certifikat kræver en adgangskode, skriv det benligst her.", + "LabelCertificatePasswordHelp": "Hvis dit certifikat kræver en adgangskode, skriv det venligst her.", "LabelConvertTo": "Konvertér til:", "LabelDashboardTheme": "Server dashboard tema:", "LabelDateTimeLocale": "Dato og tid område:", "LabelDefaultScreen": "Standard skærm:", "LabelDisplayLanguage": "Visningssprog:", "LabelDisplayLanguageHelp": "Oversættelse af Jellyfin er et vedvarende projekt.", - "LabelDisplayMode": "Visningsmodus:", + "LabelDisplayMode": "Visningstilstand:", "LabelDropShadow": "Drop skygge:", "LabelDynamicExternalId": "{0} ID:", "LabelEmail": "Email:", @@ -1297,7 +1297,7 @@ "LabelMaxBitrate": "Maks bitrate:", "LabelMaxChromecastBitrate": "Chromecast streaming kvalitet:", "LabelMetadata": "Metadata:", - "LabelModelUrl": "Model link", + "LabelModelUrl": "Model URL", "LabelPreferredSubtitleLanguage": "Foretrukket undertekst sprog:", "LabelProfileCodecs": "Codecs:", "LabelProfileContainer": "Beholder:", @@ -1378,7 +1378,7 @@ "Off": "Fra", "OnlyForcedSubtitles": "Kun tvungne undertekster", "OnlyForcedSubtitlesHelp": "Kun undertekster markeret som tvungne vil blive indlæst.", - "OnlyImageFormats": "Kun billedformater (VOBSUB, PGS, SUB, etc)", + "OnlyImageFormats": "Kun billedformater (VOBSUB, PGS, SUB)", "Option2Player": "2+", "Option3D": "3D", "Option3Player": "3+", @@ -1420,7 +1420,7 @@ "PlayCount": "Afspilninger", "PlayNext": "Afspil næste", "PlayNextEpisodeAutomatically": "Afspil næste afsnit automatisk", - "PlaybackErrorNoCompatibleStream": "Ingen kompatible streams er tilgængelige. Prøv venligst igen senere eller kontakt din system administrator for detaljer.", + "PlaybackErrorNoCompatibleStream": "Denne klient er ikke kompatibel med medierne, og serveren sender ikke et kompatibelt medieformat.", "PlaybackErrorNotAllowed": "Du har ikke adgang til at afspille dette indhold. Kontakt venligst system administratoren for detaljer.", "PlaybackErrorPlaceHolder": "Indlæs venligst disken for at afspille denne video.", "PlaybackSettings": "Afspilningsindstillinger", @@ -1436,7 +1436,7 @@ "RefFramesNotSupported": "Antal af video reference billeder ikke understøttet", "RefreshMetadata": "Genopfrisk metadata", "RepeatAll": "Gentag alle", - "RepeatMode": "Gentagelsesmode", + "RepeatMode": "Gentagelses tilstand", "RepeatOne": "Gentag én", "RestartPleaseWaitMessage": "Vent venligst mens Jellyfin Server lukker og genstarter. Dette kan tage et minut eller to.", "RunAtStartup": "Kør ved opstart", @@ -1444,7 +1444,7 @@ "Schedule": "Tidsplan", "Screenshot": "Skærmbillede", "SecondaryAudioNotSupported": "Lydspor skift ikke understøttet", - "SeriesDisplayOrderHelp": "Sortér afsnit efter sende dato, dvd rækkefølge eller obsolut nummering.", + "SeriesDisplayOrderHelp": "Sortér episoder efter luftdato, DVD-orden eller absolut nummerering.", "ShowTitle": "Vis titel", "ShowYear": "Vis år", "Small": "Lille", @@ -1536,5 +1536,104 @@ "AllowFfmpegThrottlingHelp": "Når en omkodning eller remux kommer langt nok foran den nuværende afspildings position, pauses processen så der bruges færre resurser. Dette er mest brugbart når man ikke springer i filmen. Slå dette fra hvis du har problemer med playback.", "AllowFfmpegThrottling": "Begræns Omkodning", "AlbumArtist": "Album Artist", - "Album": "Album" + "Album": "Album", + "EveryHour": "Hver time", + "EveryXMinutes": "Hvert {0} minut", + "OnWakeFromSleep": "Når du vågner fra søvn", + "WeeklyAt": "{0}s ved {1}", + "DailyAt": "Dagligt kl. {0}", + "LastSeen": "Sidst set {0}", + "PersonRole": "som {0}", + "ListPaging": "{0}-{1} af {2}", + "WriteAccessRequired": "Jellyfin Server kræver skriveadgang til denne mappe. Sørg for skriveadgang, og prøv igen.", + "PathNotFound": "Stien blev ikke fundet. Sørg for, at stien er gyldig, og prøv igen.", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", + "Track": "Spor", + "TabNetworking": "Netværk", + "SubtitleOffset": "Undertekst Offset", + "SelectAdminUsername": "Vælg et brugernavn til administrator kontoen.", + "Season": "Sæson", + "ReleaseGroup": "Release Group", + "Premiere": "Premiere", + "PreferEmbeddedEpisodeInfosOverFileNames": "Foretrækker integreret episode information frem for filnavne", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Dette bruger episode informationen fra de integrerede metadata, hvis den er tilgængelig.", + "PlaybackData": "Afspilningsdata", + "Person": "Person", + "PasswordResetProviderHelp": "Vælg en leverandør af nulstil adgangskode, der skal bruges, når denne bruger anmoder om en nulstilling af adgangskode", + "OtherArtist": "Anden kunstner", + "OptionThumbCard": "Thumb card", + "OptionThumb": "Thumb", + "OptionRandom": "Tilfældig", + "OptionPosterCard": "Plakatkort", + "OptionPoster": "Plakat", + "OptionLoginAttemptsBeforeLockoutHelp": "En værdi på nul betyder at arve standard for tre forsøg for normale brugere og fem for administratorer. Indstilling af dette til -1 vil deaktivere funktionen.", + "OptionLoginAttemptsBeforeLockout": "Bestemmer, hvor mange forkerte loginforsøg, der kan gøres, før lockout finder sted.", + "OptionList": "Liste", + "OptionForceRemoteSourceTranscoding": "Tving transcoding af eksterne mediekilder (som LiveTV)", + "NoCreatedLibraries": "Det ser ud til, at du ikke har oprettet nogen biblioteker endnu. {0} Vil du oprette en nu? {1}", + "MusicVideo": "Musik Video", + "MusicLibraryHelp": "Gennemgå {0} guide til navngivning af musik {1}.", + "MusicArtist": "Musik Artist", + "MusicAlbum": "Musik Album", + "Movie": "Film", + "MoreMediaInfo": "Medieinfo", + "MessageNoServersAvailable": "Der er ikke fundet nogen servere ved hjælp af den automatiske serveropdagelse.", + "MessageNoCollectionsAvailable": "Samlinger tillader dig at nyde personlige grupperinger af Film, Serier og Albums. Klik på + knappen for at skabe en samling.", + "MessageConfirmAppExit": "Vil du afslutte?", + "MediaInfoStreamTypeSubtitle": "Undertekst", + "MediaInfoStreamTypeEmbeddedImage": "Indlejret billede", + "MediaInfoStreamTypeAudio": "Lyd", + "LaunchWebAppOnStartupHelp": "Åben web klienten i den standard web browser når serveren starter første gang. Dette vil ikke ske når restart server funktionen benyttes.", + "LaunchWebAppOnStartup": "Åben webinterfacet når serveren startes", + "LabelWeb": "Web:", + "LabelVideoResolution": "Videoopløsning:", + "LabelVideoBitrate": "Video bitrate:", + "DashboardArchitecture": "Arkitektur: {0}", + "DashboardOperatingSystem": "Styresystem: {0}", + "DashboardServerName": "Server: {0}", + "DashboardVersionNumber": "Version: {0}", + "LabelTranscodingProgress": "Transcoding fremskridt:", + "LabelTranscodingFramerate": "Transcoding framerate:", + "LabelTranscodes": "Transcodes:", + "LabelTranscodePath": "Transcode sti:", + "LabelStreamType": "Stream type:", + "LabelSonyAggregationFlags": "Sony aggregering flag:", + "LabelSize": "Størrelse:", + "EnableFastImageFadeInHelp": "Aktivér hurtigere fade-in-animation til indlæste billeder", + "EnableFastImageFadeIn": "Hurtigt billede indtoning", + "LabelPleaseRestart": "Ændringer vil træde i kraft efter web klienten er blevet genindlæst manuelt.", + "LabelPlayMethod": "Afspilnings metode:", + "LabelPlayerDimensions": "Afspillerdimensioner:", + "LabelPlayer": "Afspiller:", + "LabelPasswordResetProvider": "Udbyder til nulstilling as kodeord:", + "LabelLibraryPageSizeHelp": "Indstiller mængden af genstande, der skal vises på en bibliotekside. Indstil til 0 for at deaktivere.", + "LabelLibraryPageSize": "Biblioteks størrelse:", + "LabelFolder": "Mappe:", + "LabelBaseUrl": "Base URL:", + "LabelBaseUrlHelp": "Du kan tilføje en speciel undermappe her for, at have adgang til serveren fra en mere unik URL.", + "LabelDroppedFrames": "Tabte frames:", + "LabelDeinterlaceMethod": "Konventerings metode:", + "LabelCorruptedFrames": "Korrupte frames:", + "LabelBitrate": "Bitrate:", + "LabelAuthProvider": "Autentificeringsudbyder:", + "LabelAudioSampleRate": "Lydeksempelfrekvens:", + "LabelAudioCodec": "Lyd codec:", + "LabelAudioChannels": "Lyd kanaler:", + "LabelAudioBitrate": "Lyd bitrate:", + "LabelAudioBitDepth": "Lyd bitdybde:", + "HeaderFavoritePeople": "Foretrukne Personer", + "HeaderFavoriteBooks": "Foretrukne Bøger", + "FetchingData": "Henter yderligere data", + "Episode": "Afsnit", + "DeinterlaceMethodHelp": "Vælg hvilken konverteringsmulighed der skal bruges til transkodning af indhold.", + "CopyStreamURLError": "Der skete en fejl med at kopiere URL'en.", + "CopyStreamURLSuccess": "URL er kopiret succesfuldt.", + "CopyStreamURL": "Kopir Stream URL", + "ClientSettings": "Klient Indstillinger", + "ButtonSplit": "Opdel", + "BoxSet": "Box Set", + "AuthProviderHelp": "Vælg en godkendelse udbyder, der skal bruges til at godkende denne brugers adgangskode.", + "AskAdminToCreateLibrary": "Spørg en administrator om at oprette et bibliotek.", + "Artist": "Artist" } From 286cfd85ed0b8fc582d442143bd557cd09319ba8 Mon Sep 17 00:00:00 2001 From: gnehs Date: Wed, 15 Apr 2020 07:14:50 +0000 Subject: [PATCH 064/128] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index ca2dd5b936..ff2ffa80f6 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -462,7 +462,7 @@ "DisplayInOtherHomeScreenSections": "在“最新媒體”和“繼續觀看“等主畫面區塊中顯示", "DisplayMissingEpisodesWithinSeasons": "顯示每季缺少的劇集", "DisplayMissingEpisodesWithinSeasonsHelp": "必須在 Jellyfin 伺服器的電視媒體庫設定中啟用該功能。", - "DisplayModeHelp": "選擇您正在運行Jellyfin的螢幕類型。", + "DisplayModeHelp": "選擇您想要的界面樣式。", "DoNotRecord": "不要錄", "Down": "下", "DownloadItemLimitHelp": "非必要。 設置要下載的項目數限制。", @@ -1024,7 +1024,7 @@ "ShowAdvancedSettings": "顯示進階選項", "ShowTitle": "顯示標題", "ShowYear": "顯示年份", - "Shuffle": "隨ㄔㄧ", + "Shuffle": "隨機播放", "Smart": "智慧", "HeaderFavoriteBooks": "最愛的書籍", "LabelAudioBitrate": "音訊比特率:", @@ -1130,7 +1130,7 @@ "ManageRecording": "管理錄影", "MessageAlreadyInstalled": "已安裝此版本。", "MessageConfirmRestart": "您確定要重新啟動嗎?", - "Metadata": "ˊ中繼資料", + "Metadata": "中繼資料", "OptionAllUsers": "所有使用者", "OptionHomeVideos": "圖片", "OptionPoster": "海報", @@ -1628,7 +1628,7 @@ "SelectAdminUsername": "請為管理員賬戶選擇一個用戶名。", "CopyStreamURLError": "複製網址的時候發生錯誤.", "OptionSaveMetadataAsHiddenHelp": "更改此項將應用於以後保存的元數據。現有元數據文件將在下一次 Jellyfin 伺服器保存它們時被更新。", - "OptionAllowRemoteSharedDevicesHelp": "DLNA 設備在用戶對它們進行控制前都被視作共享的。", + "OptionAllowRemoteSharedDevicesHelp": "DLNA裝置將被視為共享中,直至有使用者控制。", "OptionForceRemoteSourceTranscoding": "强制遠端轉碼(像電視直播一樣)", "MessageConfirmAppExit": "您要退出嗎?", "LaunchWebAppOnStartupHelp": "伺服器啓動時在默認游覽器中打開網頁端。使用重啓伺服器功能時此項不生效。", @@ -1646,10 +1646,35 @@ "AllowFfmpegThrottlingHelp": "當轉檔或重組進度大量超前目前播放進度時,將暫停轉檔節省消耗的資源。在不常跳播的時候最有效。如果遇到播放問題,請關閉此功能。", "AllowFfmpegThrottling": "限制轉檔", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "這將會使用內建劇集資料。", - "PlaybackErrorNoCompatibleStream": "用戶端偵測出了問題,伺服器也未傳送相容的媒體格式。", + "PlaybackErrorNoCompatibleStream": "用戶端與該媒體不相容,伺服器也未傳送相容的媒體格式。", "PreferEmbeddedEpisodeInfosOverFileNames": "優先使用內建劇集資訊而不是檔案名稱", "OtherArtist": "其他歌手", "Artist": "歌手", "AlbumArtist": "專輯歌手", - "Album": "專輯" + "Album": "專輯", + "YadifBob": "YADIF Bob", + "WriteAccessRequired": "Jellyfin 伺服器需要此資料夾的寫入權限,請確認是否擁有寫入權限並重試。", + "PathNotFound": "無法找到此路徑,請確認路徑可用並重試。", + "Track": "音軌", + "Yadif": "YADIF", + "ListPaging": "{2} 的 {0}-{1}", + "PersonRole": "作為 {0}", + "LastSeen": "上次觀看 {0}", + "DailyAt": "每日的 {0}", + "WeeklyAt": "每週第 {0} 天的 {1}", + "OnWakeFromSleep": "當從睡眠中喚醒時", + "EveryXMinutes": "每 {0} 分鐘", + "EveryHour": "每一小時", + "EveryXHours": "每 {0} 小時", + "OnApplicationStartup": "當應用程式啟動時", + "Season": "季", + "ReleaseGroup": "發行組織", + "Person": "人物", + "Movie": "電影", + "LabelLibraryPageSizeHelp": "設置媒體庫頁面每頁要顯示的最多媒體個數。設置為 0 來停用分頁。", + "LabelLibraryPageSize": "媒體庫分頁大小:", + "LabelDeinterlaceMethod": "反交錯方法:", + "Episode": "劇集", + "DeinterlaceMethodHelp": "選擇對隔行掃描內容進行轉碼時所用的反交錯方法。", + "BoxSet": "套裝" } From e0f3a7069efe44ac08400df551b0f3635eb411d3 Mon Sep 17 00:00:00 2001 From: Mathias Date: Wed, 15 Apr 2020 11:55:30 +0000 Subject: [PATCH 065/128] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index 2407eed454..6dfc99600a 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1635,5 +1635,6 @@ "BoxSet": "Box Set", "AuthProviderHelp": "Vælg en godkendelse udbyder, der skal bruges til at godkende denne brugers adgangskode.", "AskAdminToCreateLibrary": "Spørg en administrator om at oprette et bibliotek.", - "Artist": "Artist" + "Artist": "Artist", + "EveryXHours": "Hver {0} time" } From e25cb1e0f302e0ac94a5cf0e748f9303acb5432d Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Wed, 15 Apr 2020 15:49:57 +0200 Subject: [PATCH 066/128] Fix Home button on mobile --- src/assets/css/librarybrowser.css | 12 +++++------- src/scripts/librarymenu.js | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 2b78d356dc..83bc9d9826 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -24,6 +24,10 @@ padding-top: 7em !important; } +.layout-mobile .libraryPage { + padding-top: 4em !important; +} + .itemDetailPage { padding-top: 0 !important; } @@ -115,7 +119,7 @@ display: -webkit-inline-box; display: -webkit-inline-flex; display: inline-flex; - margin: 0.3em 0 0 0.5em; + margin: 0 0 0 0.5em; height: 1.7em; -webkit-box-align: center; -webkit-align-items: center; @@ -268,12 +272,6 @@ } } -@media all and (max-width: 60em) { - .libraryDocument .mainDrawerButton { - display: none; - } -} - @media all and (max-width: 84em) { .withSectionTabs .headerTop { padding-bottom: 0.55em; diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js index 11c89b01da..fe7c3bcaf2 100644 --- a/src/scripts/librarymenu.js +++ b/src/scripts/librarymenu.js @@ -73,7 +73,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " } if (user && user.localUser) { - if (headerHomeButton && !layoutManager.mobile) { + if (headerHomeButton) { headerHomeButton.classList.remove("hide"); } From 1898543a4e0555a6fec97b0ee2bf191e5d6743f3 Mon Sep 17 00:00:00 2001 From: Medzhnun Date: Wed, 15 Apr 2020 12:40:25 +0000 Subject: [PATCH 067/128] Translated using Weblate (Bulgarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bg/ --- src/strings/bg-bg.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json index e21176f6ec..ab4cfcb931 100644 --- a/src/strings/bg-bg.json +++ b/src/strings/bg-bg.json @@ -872,5 +872,11 @@ "CancelSeries": "Откажи сериите", "CancelRecording": "Откажи записа", "ButtonSplit": "Раздели", - "ButtonResetEasyPassword": "Нулиране на бързия ПИН код" + "ButtonResetEasyPassword": "Нулиране на бързия ПИН код", + "ButtonRevoke": "Отмени", + "ButtonEditOtherUserPreferences": "Редакция на потребителския профил, изображение и лични предпочитания.", + "BoxRear": "Комплект (стар)", + "BoxSet": "Комплект", + "AuthProviderHelp": "Избор на доставчик на услуга за Автентификация, която ще се използва за автентификация на потребителската парола.", + "AllowedRemoteAddressesHelp": "Списък с IP адреси или IP/маска записи, разделени със запетая, които ще имат отдалечен достъп. Ако полето не е попълнено всички адреси ще имат отдалечен достъп." } From a42aae04f5ff00451d2ca3b7a26957bf428daf84 Mon Sep 17 00:00:00 2001 From: Mathias Date: Wed, 15 Apr 2020 11:55:37 +0000 Subject: [PATCH 068/128] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index 6dfc99600a..3b8f4f13db 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1636,5 +1636,6 @@ "AuthProviderHelp": "Vælg en godkendelse udbyder, der skal bruges til at godkende denne brugers adgangskode.", "AskAdminToCreateLibrary": "Spørg en administrator om at oprette et bibliotek.", "Artist": "Artist", - "EveryXHours": "Hver {0} time" + "EveryXHours": "Hver {0} time", + "OnApplicationStartup": "Ved programstart" } From 08318ca4d6f941c89bde01aa71d3a1a58645f3cf Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Wed, 15 Apr 2020 16:22:57 +0200 Subject: [PATCH 069/128] Adjust drawer swipe hotspot --- src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index 624be19360..ed63ca1a98 100644 --- a/src/index.html +++ b/src/index.html @@ -92,7 +92,7 @@ left: 0; bottom: 0; z-index: 1; - width: 10px; + width: 0.8em; } From 5b513146a730b6f23e128d6ab36a6af2cc41ab55 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Wed, 15 Apr 2020 16:26:19 +0200 Subject: [PATCH 070/128] Hide User menu icon on mobile --- src/scripts/librarymenu.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js index fe7c3bcaf2..71326add4e 100644 --- a/src/scripts/librarymenu.js +++ b/src/scripts/librarymenu.js @@ -63,7 +63,9 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " hasImage = true; } - headerUserButton.classList.remove("hide"); + if (!layoutManager.mobile) { + headerUserButton.classList.remove("hide"); + } } else { headerUserButton.classList.add("hide"); } From 4c74a490320a0587f686b49caac5d3988be36148 Mon Sep 17 00:00:00 2001 From: Vasily Date: Wed, 15 Apr 2020 19:29:21 +0300 Subject: [PATCH 071/128] Fix .ass subtitles not starting on mobile --- src/components/htmlMediaHelper.js | 4 +++- src/components/htmlvideoplayer/plugin.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js index 7df38a6c87..8026110e21 100644 --- a/src/components/htmlMediaHelper.js +++ b/src/components/htmlMediaHelper.js @@ -162,7 +162,7 @@ define(['appSettings', 'browser', 'events'], function (appSettings, browser, eve } } - function seekOnPlaybackStart(instance, element, ticks) { + function seekOnPlaybackStart(instance, element, ticks, onMediaReady) { var seconds = (ticks || 0) / 10000000; @@ -175,6 +175,7 @@ define(['appSettings', 'browser', 'events'], function (appSettings, browser, eve if (element.duration >= seconds) { // media is ready, seek immediately setCurrentTimeIfNeeded(element, seconds); + if (onMediaReady) onMediaReady(); } else { // update video player position when media is ready to be sought var events = ["durationchange", "loadeddata", "play", "loadedmetadata"]; @@ -189,6 +190,7 @@ define(['appSettings', 'browser', 'events'], function (appSettings, browser, eve events.map(function(name) { element.removeEventListener(name, onMediaChange); }); + if (onMediaReady) onMediaReady(); } }; events.map(function (name) { diff --git a/src/components/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js index bcd3a72ba9..969c2689d8 100644 --- a/src/components/htmlvideoplayer/plugin.js +++ b/src/components/htmlvideoplayer/plugin.js @@ -857,7 +857,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa loading.hide(); - htmlMediaHelper.seekOnPlaybackStart(self, e.target, self._currentPlayOptions.playerStartPositionTicks); + htmlMediaHelper.seekOnPlaybackStart(self, e.target, self._currentPlayOptions.playerStartPositionTicks, function () { + if (currentSubtitlesOctopus) currentSubtitlesOctopus.resize(); + }); if (self._currentPlayOptions.fullscreen) { From dffdc33629a7ee8f8a20abed9216fefac0963f44 Mon Sep 17 00:00:00 2001 From: gnehs Date: Wed, 15 Apr 2020 14:56:48 +0000 Subject: [PATCH 072/128] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 146 ++++++++++++++++++++--------------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index ff2ffa80f6..b0e92657df 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -45,7 +45,7 @@ "Edit": "編輯", "EditImages": "編輯圖片", "Ended": "完結", - "EndsAtValue": "完結於{0}", + "EndsAtValue": "於 {0} 結束", "Favorite": "加到最愛", "File": "檔案", "FileNotFound": "未找到檔案。", @@ -67,13 +67,13 @@ "HeaderDeleteItem": "刪除項目", "HeaderEasyPinCode": "簡易 PIN 碼", "HeaderFeatureAccess": "可以使用的功能", - "HeaderFetchImages": "抓取圖像:", + "HeaderFetchImages": "擷取圖像:", "HeaderForgotPassword": "忘記密碼", "HeaderFrequentlyPlayed": "經常播放", "HeaderGuideProviders": "節目表提供者", "HeaderImageSettings": "圖像設置", "HeaderInstantMix": "瞬時混播", - "HeaderLatestEpisodes": "最新節目單元", + "HeaderLatestEpisodes": "最新劇集", "HeaderLatestMovies": "最新電影", "HeaderLatestRecordings": "最新錄影的節目", "HeaderLatestSongs": "最新歌曲", @@ -106,7 +106,7 @@ "LabelAllowServerAutoRestart": "允許伺服器自動重新啟動去安裝更新資料", "LabelAllowServerAutoRestartHelp": "伺服器只會在沒有使用者在使用時重新啟動。", "LabelAudioLanguagePreference": "音頻語言偏好選項:", - "LabelCachePath": "緩存路徑:", + "LabelCachePath": "快取路徑:", "LabelCollection": "收藏櫃:", "LabelContentType": "內容類型:", "LabelCountry": "國家:", @@ -116,7 +116,7 @@ "LabelEnableDlnaClientDiscoveryInterval": "尋找客戶端時間間隔(秒)", "LabelEnableDlnaDebugLogging": "記錄 DLNA 除錯資料到日誌", "LabelEnableDlnaDebugLoggingHelp": "將會建立非常大的日誌檔案,建議在進行故障排除時啟用。", - "LabelEnableDlnaPlayTo": "播放到DLNA設備", + "LabelEnableDlnaPlayTo": "播放到 DLNA 設備", "LabelEnableRealtimeMonitor": "啟用實時監控", "LabelEnableRealtimeMonitorHelp": "支持的檔案系統上的更改,將會立即處理。", "LabelEvent": "事件:", @@ -149,15 +149,15 @@ "LabelTime": "時間:", "LabelTriggerType": "觸發類型:", "LabelUser": "使用者:", - "LabelYourFirstName": "你的名字:", - "LabelYoureDone": "完成!", + "LabelYourFirstName": "您的名字:", + "LabelYoureDone": "完成,耶!", "LibraryAccessHelp": "選擇媒體資料夾與此使用者共享。管理員將可以使用中繼資料管理器編輯所有的媒體資料夾。", "Like": "喜歡", "MaxParentalRatingHelp": "具有較高的家長評級內容將從這使用者被隱藏。", "MessageAreYouSureDeleteSubtitles": "您真的要刪除這個字幕檔嗎?", "MessageDownloadQueued": "下載已排程。", "MessageItemsAdded": "已新增項目。", - "MessageNoMovieSuggestionsAvailable": "目前並沒有推薦的電影。開始觀看並對您的電影評分後,我們就會為您推薦您可能會喜歡的內容。", + "MessageNoMovieSuggestionsAvailable": "目前並沒有推薦的電影,開始觀看並對您的電影評分後,我們就會為您推薦您可能會喜歡的內容。", "MessageNothingHere": "這裡沒有什麼。", "MessagePasswordResetForUsers": "下列使用者的密碼已被重新設置。該使用者現在可以使用在密碼重置時所使用之 PIN 代碼進行登入。", "MessagePleaseEnsureInternetMetadata": "請確保已啟用從互聯網下載媒體資料。", @@ -181,7 +181,7 @@ "OptionBluray": "藍光", "OptionCommunityRating": "社區評分", "OptionContinuing": "持續", - "OptionCriticRating": "評論家評價", + "OptionCriticRating": "影評人評價", "OptionDaily": "每日", "OptionDateAdded": "新增日期", "OptionDatePlayed": "播放日期", @@ -235,7 +235,7 @@ "OptionWeekly": "每週", "OriginalAirDateValue": "原始播出日期:{0}", "ParentalRating": "Parental Rating", - "PasswordMatchError": "密碼和密碼確認必須一致。", + "PasswordMatchError": "兩個密碼必須一致。", "PasswordResetComplete": "密碼已重設。", "PasswordResetConfirmation": "你確定要重設密碼?", "PasswordSaved": "密碼已保存。", @@ -245,8 +245,8 @@ "RecordingCancelled": "已取消排程錄製。", "RecordingScheduled": "已排程錄製。", "Refresh": "重新整理", - "RefreshDialogHelp": "詳細資料的更新方式會依據Jellyfin的設定及已經啟用的網路服務來進行。", - "ReplaceAllMetadata": "取代所有詳細資料", + "RefreshDialogHelp": "詳細資料的更新方式會依據 Jellyfin 的設定及已經啟用的網路服務來進行。", + "ReplaceAllMetadata": "取代所有中繼資料", "ReplaceExistingImages": "取代現有圖片", "Saturday": "星期六", "Save": "保存", @@ -291,19 +291,19 @@ "TabTrailers": "預告", "TabTranscoding": "轉碼中", "TabUpcoming": "接下來", - "TellUsAboutYourself": "請自我介紹一下你自己", - "ThisWizardWillGuideYou": "此精靈將帶你完成安裝過程。開始之前,請選擇您慣用的語言。", + "TellUsAboutYourself": "介紹一下自己", + "ThisWizardWillGuideYou": "此精靈將帶你完成安裝過程,開始之前,請選擇您慣用的語言。", "Thursday": "星期四", - "TrackCount": "{0}個曲目", + "TrackCount": "{0} 個曲目", "Tuesday": "星期二", - "UninstallPluginConfirmation": "你確定要卸載{0}?", - "UninstallPluginHeader": "卸載插件", + "UninstallPluginConfirmation": "你確定要解除安裝 {0}?", + "UninstallPluginHeader": "解除安裝插件", "UserProfilesIntro": "Jellyfin 可單獨對使用者進行設定,所有使用者擁有自己的顯示設置,播放狀態和家長控制。", "Users": "使用者", "VersionNumber": "版本 {0}", "Wednesday": "星期三", "WelcomeToProject": "歡迎使用 Jellyfin!", - "WizardCompleted": "這就是我們所需的全部資訊,Jellyfin 現在正在收集你的媒體櫃的資料,在這段時間內,不妨參考我們推出的應用程式。按一下完成進入伺服器總覽頁。", + "WizardCompleted": "這就是我們所需的全部資訊,Jellyfin 現在正在收集你的媒體櫃的資料,在這段時間內,不妨參考我們推出的應用程式。按一下完成進入控制台。", "Actor": "演員", "AddToPlayQueue": "加入播放清單", "AddToPlaylist": "加入播放列表", @@ -367,7 +367,7 @@ "ButtonConnect": "連結", "ButtonDown": "下", "ButtonDownload": "下載", - "ButtonEditOtherUserPreferences": "編輯此使用者的內容,大頭貼和個人設定。", + "ButtonEditOtherUserPreferences": "編輯此使用者的內容、大頭貼和個人設定。", "ButtonFullscreen": "全螢幕", "ButtonHelp": "幫助", "ButtonInfo": "詳細資料", @@ -498,7 +498,7 @@ "EnterFFmpegLocation": "輸入 FFmpeg 路徑", "Episodes": "劇集", "Error": "錯誤", - "ErrorAddingListingsToSchedulesDirect": "在將電視節目時間表添加到您的Schedules Direct賬號時出現錯誤。每個Schedules Direct賬號只允許有限的時間表。您在繼續前可能需要登入Schedules Direct網站并刪除賬號中的其它列表。", + "ErrorAddingListingsToSchedulesDirect": "在將電視節目時間表新增到您的 Schedules Direct 帳號時出現錯誤。每個 Schedules Direct 帳號只允許有限的時間表。您在繼續前可能需要登入 Schedules Direct 網站並刪除帳號中的其它列表。", "ErrorAddingGuestAccount1": "新增Jellyfin Connect時發生錯誤。你的賓客有建立Jellyfin帳號嗎?他們可以在 {0} 創建帳號。", "ErrorAddingGuestAccount2": "若你還是遇到問題,請發送email至 {0} 並附上你和他們的email帳號。", "ErrorAddingJellyfinConnectAccount1": "新增Jellyfin Connect時發生錯誤。您有建立Jellyfin帳號嗎?您可以在 {0} 創建帳號。", @@ -506,17 +506,17 @@ "ErrorAddingJellyfinConnectAccount3": "這個 Jellyfin 帳號已經被連接至一個本地帳號。一個 Jellyfin帳號 只能同時被連接到一個本機帳號。", "ErrorAddingMediaPathToVirtualFolder": "新增媒體路徑時發生錯誤,請確認路徑是否有效,且你的 Jellyfin 伺服器有對該位置的存取權。", "ErrorAddingTunerDevice": "新增調諧器設備時發生錯誤,請確認它是否可被存取後再試一次。", - "ErrorAddingXmlTvFile": "存取 XMLTV 文件時發生錯誤。請確認該檔案是否存在後再試一次。", + "ErrorAddingXmlTvFile": "存取 XMLTV 檔案時發生錯誤,請確認該檔案是否存在後再試一次。", "ErrorConnectServerUnreachable": "處理請求時發生錯誤。您的伺服器無法與我們位於 {0} 的 Jellyfin Connect伺服器溝通。請確認你的伺服器有網路連結且防火牆或其他安全性程式允許這個程式對外溝通。", - "ErrorDeletingItem": "從Jellyfin伺服器刪除項目時發生錯誤。請確認伺服器有那個磁碟的寫入權限並再試一次。", - "ErrorGettingTvLineups": "下載電視節目表時發生錯誤,請確認你的資訊是正確的然後再試一次。", + "ErrorDeletingItem": "從 Jellyfin 伺服器刪除項目時發生錯誤,請確認伺服器對該磁碟有寫入權限並再試一次。", + "ErrorGettingTvLineups": "下載電視節目表時發生錯誤,請確認你的資訊是否正確並重試。", "ErrorMessagePasswordNotMatchConfirm": "密碼和密碼確認必須吻合。", "ErrorMessageStartHourGreaterThanEnd": "結束時間必須在開始時間後。", "ErrorMessageUsernameInUse": "用戶名已存在。請重新選個名稱再試。", "ErrorPleaseSelectLineup": "請選擇節目表,然後再試一次。如果沒有可用的節目表,請檢查您的使用者名稱、密碼和郵遞區號是否正確。", "ErrorReachingJellyfinConnect": "連接 Jellyfin Connect 伺服器時發生錯誤。請確認你的網絡狀態是否穩定後再試一次。", "ErrorRemovingJellyfinConnectAccount": "移除 Jellyfin Connect 帳號時發生錯誤。請確認你的網絡狀態是否穩定後再試一次。", - "ErrorSavingTvProvider": "儲存電視供應商時發生錯誤。請確認它是可存取後再試一次。", + "ErrorSavingTvProvider": "儲存電視供應商時發生錯誤,請確認是否可存取並重試。", "EveryNDays": "每 {0} 天", "ExitFullscreen": "結束全螢幕", "ExtraLarge": "特大", @@ -542,15 +542,15 @@ "Genres": "風格", "GroupBySeries": "按系列分組", "GroupVersions": "按版本分組", - "GuestStar": "特邀明星", + "GuestStar": "客串", "GuestUserNotFound": "未找到用戶。請確保用戶名稱正確後重試,或者嘗試輸入他們的電子郵件地址。", "Guide": "指南", "GuideProviderSelectListings": "選擇列表", - "H264CrfHelp": "The Constant Rate Factor (CRF) 是 x264 編碼器的默認畫質設置。此方法允許編碼器自動分配位元速率來試著達到一定輸出品質。讓每個畫格得到它需要的位元數來保持所需的品質等級。CRF 會得到最佳的位元速率分配結果。", + "H264CrfHelp": "CRF 是 x264 編碼器的預設畫質設置。此方法允許編碼器自動分配位元速率來試著達到一定輸出品質。讓每個畫格得到它需要的位元數來保持所需的品質等級。CRF 會得到最佳的位元速率分配結果。", "EncoderPresetHelp": "速度越慢則會得到更好的壓縮編碼效率。", - "HDPrograms": "HD節目", + "HDPrograms": "HD 節目", "HandledByProxy": "由反向代理處理", - "HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後播放影片產生困難,那麼你需要將此選項設回”無“。", + "HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後難以播放影片,那麼你需要將此選項設回「無」。", "HeaderAccessSchedule": "存取時程", "HeaderAccessScheduleHelp": "建立一個存取時程以限制可存取的時段。", "HeaderActiveDevices": "運行中裝置", @@ -570,7 +570,7 @@ "HeaderAllowMediaDeletionFrom": "允許從中刪除媒體", "HeaderApiKey": "API 金鑰", "HeaderApiKeys": "API 金鑰", - "HeaderApiKeysHelp": "外部應用程式需要有一個 API 金鑰以用於和 Jellyfin 伺服器溝通。金鑰將在通過 Jellyfin 帳戶登入時自動發行,或者你可以手動為應用程式產生一個金鑰。", + "HeaderApiKeysHelp": "外部應用程式需要有一個 API 金鑰以用於和 Jellyfin 伺服器溝通。金鑰會在 Jellyfin 使用者登入時自動發行,或者你可以手動為應用程式產生一個金鑰。", "HeaderApp": "應用程式", "HeaderAppearsOn": "同時出現於", "HeaderAudio": "音訊", @@ -606,12 +606,12 @@ "HeaderConfirmRecordingCancellation": "確認取消錄製", "HeaderConfirmRecordingDeletion": "確認刪除錄影", "HeaderConfirmRemoveUser": "移除用戶", - "HeaderConfirmRevokeApiKey": "撤銷 API 金鑰", + "HeaderConfirmRevokeApiKey": "重置 API 金鑰", "HeaderConfirmSeriesCancellation": "確認系列取消", "HeaderConfirmation": "確認", "HeaderConnectToServer": "連結至伺服器", "HeaderConnectionFailure": "連結失敗", - "HeaderContainerProfile": "影片容器設定檔", + "HeaderContainerProfile": "影片載體設定", "HeaderContainerProfileHelp": "影片容器的設定檔標明了設備播放特定媒體格式時的限制。如果在限制之內則媒體將被轉碼,否則媒體格式將被設定為直接播放。", "HeaderContinueListening": "繼續聆聽", "HeaderContinueWatching": "繼續觀賞", @@ -628,7 +628,7 @@ "HeaderDeleteTaskTrigger": "刪除任務觸發條件", "HeaderDestination": "目的地", "HeaderDetectMyDevices": "偵測我的設備", - "HeaderDeveloperInfo": "開發者訊息", + "HeaderDeveloperInfo": "開發者資訊", "HeaderDevice": "裝置", "HeaderDeviceAccess": "允許裝置存取", "HeaderDevices": "裝置", @@ -651,7 +651,7 @@ "HeaderFavoriteAlbums": "最愛專輯", "HeaderFavoriteArtists": "最愛演出者", "HeaderFavoriteCollections": "最愛收藏", - "HeaderFavoriteEpisodes": "最愛級數", + "HeaderFavoriteEpisodes": "最愛影集", "HeaderFavoriteMovies": "最愛電影", "HeaderFavoritePlaylists": "最愛播放列表", "HeaderFavoriteShows": "最愛節目", @@ -668,7 +668,7 @@ "HeaderHomePage": "主畫面", "HeaderHomeScreen": "主畫面", "HeaderHomeScreenSettings": "主畫面設定", - "HeaderHttpHeaders": "Http 標頭", + "HeaderHttpHeaders": "HTTP 標頭", "HeaderIdentification": "身份識別", "HeaderIdentificationCriteriaHelp": "至少輸入一個識別標準。", "HeaderIdentificationHeader": "身份識別標題", @@ -871,9 +871,9 @@ "HeaderVideoType": "影片類型", "HeaderVideoTypes": "影片類型", "HeaderVideos": "影片", - "HeaderXmlDocumentAttribute": "XML檔案屬性", - "HeaderXmlDocumentAttributes": "XML檔案屬性", - "HeaderXmlSettings": "XML設置", + "HeaderXmlDocumentAttribute": "XML 檔案屬性", + "HeaderXmlDocumentAttributes": "XML 檔案屬性", + "HeaderXmlSettings": "XML 設置", "HeaderYears": "年份", "HeadersFolders": "資料夾", "Hide": "隱藏", @@ -883,14 +883,14 @@ "HttpsRequiresCert": "要啟用安全連線,您需要提供受信任的SSL證書,如 Let's Encrypt。 請提供證書,或停用安全連線。", "Identify": "識別", "Images": "圖片", - "ImportFavoriteChannelsHelp": "如果啟用,只有在調諧器設備中被標記為我的最愛的頻道才會被導入。", - "ImportMissingEpisodesHelp": "如果啟用,有關缺失劇集的數據導入您的Jellyfin媒體庫,並在季節和系列中顯示。 這可能會導致媒體庫掃描延長。", - "InstallingPackage": "正在安装 {0} (版本 {1})", + "ImportFavoriteChannelsHelp": "若啟用,只有在調諧器設備中被標記為我的最愛的頻道才會被導入。", + "ImportMissingEpisodesHelp": "若啟用,有關缺失劇集的數據導入您的 Jellyfin 媒體庫,並在季節和系列中顯示。 這可能會導致媒體庫掃描延長。", + "InstallingPackage": "正在安装 {0}(版本 {1})", "InstantMix": "即時混音", "Items": "項目", "Kids": "兒童", - "Label3DFormat": "3D格式:", - "LabelAbortedByServerShutdown": "(因為伺服器關閉被中止)", + "Label3DFormat": "3D 格式:", + "LabelAbortedByServerShutdown": "(因為伺服器關閉被中止)", "LabelAccessDay": "一周中的何時:", "LabelAccessEnd": "結束時間:", "LabelAccessStart": "開始時間:", @@ -904,24 +904,24 @@ "LabelAlbumArtMaxHeight": "專輯封面最大高度:", "LabelAlbumArtMaxHeightHelp": "通過 upnp:albumArtURI 顯示的專輯封面超鏈接的最大分辨率。", "LabelAlbumArtMaxWidth": "專輯封面最大寬度:", - "LabelAlbumArtMaxWidthHelp": "通過upnp:albumArtURI顯示的專輯封面超鏈接的最大分辨率。", - "LabelAlbumArtPN": "專輯封面PN :", + "LabelAlbumArtMaxWidthHelp": "通過 upnp:albumArtURI 顯示的專輯封面超鏈接的最大解析度。", + "LabelAlbumArtPN": "專輯封面 PN :", "LabelAlbumArtists": "專輯作家:", "LabelAll": "所有", "LabelAllowHWTranscoding": "允許硬體轉碼", - "LabelAllowedRemoteAddresses": "遠端IP地址過濾:", - "LabelAllowedRemoteAddressesMode": "遠端IP地址過濾模式:", - "LabelAppName": "APP名稱", - "LabelAppNameExample": "例如: Sickbeard, Sonarr", + "LabelAllowedRemoteAddresses": "遠端 IP 過濾:", + "LabelAllowedRemoteAddressesMode": "遠端 IP 過濾模式:", + "LabelAppName": "APP 名稱", + "LabelAppNameExample": "例如:可愛蹦蹦主機、小安的 Jellyfin", "LabelArtists": "藝人:", "LabelArtistsHelp": "分開多重使用 ;", "LabelAudio": "音頻", "LabelAuthProvider": "認證提供者:", "LabelAutomaticallyRefreshInternetMetadataEvery": "從網路自動刷新數據:", "LabelBindToLocalNetworkAddress": "聯結本地網絡地址:", - "LabelBindToLocalNetworkAddressHelp": "(可選的)覆蓋 HTTP 服務器綁定的本地 IP 地址。如果留空,服務器將會監聽所有可用的地址。改變這個值需要重啟 Jellyfin 伺服器\n。", + "LabelBindToLocalNetworkAddressHelp": "(選用)覆蓋 HTTP 服務器綁定的本地 IP 地址。如果留空,服務器將會監聽所有可用的地址。改變這個值需要重啟 Jellyfin 伺服器。", "LabelBirthDate": "出生日期:", - "LabelBirthYear": "出生年份:", + "LabelBirthYear": "出生年:", "LabelBlastMessageInterval": "活動信號的時間間隔(秒)", "LabelBlastMessageIntervalHelp": "確定伺服器活動消息之間的持續時間(秒)。", "LabelBlockContentWithTags": "通過標籤鎖定內容:", @@ -940,17 +940,17 @@ "LabelCustomCssHelp": "於 Web 介面套用您的自訂樣式。", "LabelCustomDeviceDisplayName": "顯示名稱:", "Depressed": "凹陷", - "HeaderHome": "主頁", + "HeaderHome": "首頁", "HeaderSelectMetadataPathHelp": "瀏覽或者輸入路徑以用於保存中繼資料,請確保資料夾可以寫入。", "HeaderSelectServerCachePathHelp": "瀏覽或者輸入路徑以用於伺服器快取檔案。請確保該資料夾可以被寫入。", "LabelCustomDeviceDisplayNameHelp": "指定自訂的顯示名稱,或者留空以使用設備自己報告的名稱。", "LabelCustomRating": "自訂分級:", - "LabelDashboardTheme": "儀表板佈景主題:", + "LabelDashboardTheme": "控制台佈景主題:", "LabelDateAdded": "新增日期:", "LabelDateAddedBehavior": "新内容加入的日期應使用:", "LabelDateTimeLocale": "設定時區:", "LabelDeathDate": "死亡時間:", - "LabelDefaultScreen": "預設螢幕:", + "LabelDefaultScreen": "預設分頁:", "LabelDefaultUser": "預設使用者:", "LabelDeviceDescription": "裝置說明", "LabelDidlMode": "DIDL 模式:", @@ -966,13 +966,13 @@ "OptionMax": "最大", "LabelAudioBitDepth": "音訊位元深度:", "LabelBaseUrl": "根路徑:", - "LabelIconMaxHeight": "Icon 最高高度:", + "LabelIconMaxHeight": "圖示最高高度:", "LabelHttpsPortHelp": "Jellyfin 的 HTTPS 伺服器應綁定的 TCP 端口。", "LabelIconMaxHeightHelp": "通過 upnp:icon 的圖標最大解析度。", "CopyStreamURL": "複製串流連結", "MediaInfoDefault": "預設", "MediaInfoStreamTypeAudio": "音訊", - "LabelDateAddedBehaviorHelp": "如果原本就有中繼資料,則將始終在這些選項之一之前使用它。", + "LabelDateAddedBehaviorHelp": "如果原本就有中繼資料,將會優先使用其數據。", "LabelScreensaver": "螢幕保護程式:", "LabelSeasonNumber": "季:", "LabelDropImageHere": "拖移圖片到這裡,或是點擊來選取。", @@ -1010,7 +1010,7 @@ "ValueCodec": "編碼:{0}", "ValueSongCount": "{0} 首歌", "LabelFileOrUrl": "檔案或路徑:", - "LabelKodiMetadataSaveImagePaths": "在 nfo 檔案中儲存圖片路徑", + "LabelKodiMetadataSaveImagePaths": "在 NFO 檔案中儲存圖片路徑", "LabelLanNetworks": "區域網路:", "LabelMetadataPathHelp": "指定自訂路徑來儲存下載的圖片與中繼資料。", "LabelZipCode": "郵遞區號:", @@ -1144,7 +1144,7 @@ "TV": "電視", "TabUsers": "使用者", "Trailers": "預告", - "LabelImageFetchersHelp": "按優先級啟用並排列您喜歡的圖片抓取器。", + "LabelImageFetchersHelp": "啟用並按優先順序排序您的首選圖片擷取器。", "LabelDownMixAudioScale": "縮混時的音訊增強:", "LabelDownMixAudioScaleHelp": "縮混時增強音訊。其中一個音軌將保持原始音量。", "LabelDownloadLanguages": "下載語言:", @@ -1162,7 +1162,7 @@ "LabelSelectUsers": "選擇使用者:", "LabelSelectVersionToInstall": "選擇要安裝的版本:", "LabelSendNotificationToUsers": "傳送通知給:", - "LabelSortBy": "排序依:", + "LabelSortBy": "排序按照:", "LabelVideoBitrate": "影片比特率:", "MediaInfoSize": "大小", "MediaInfoTimestamp": "時間戳", @@ -1295,7 +1295,7 @@ "Up": "上", "ValueOneSeries": "1 劇集", "Writer": "編劇", - "XmlTvMovieCategoriesHelp": "有這些類別的節目會被當作電影。用「|」分隔多個。", + "XmlTvMovieCategoriesHelp": "有這些類別的節目會被當作電影,以「|」來分隔多個項目。", "ValueSeriesCount": "{0} 劇集", "LabelHardwareAccelerationTypeHelp": "硬件加速需要額外的配置。", "LabelHomeNetworkQuality": "區域網路畫質:", @@ -1317,7 +1317,7 @@ "OptionEstimateContentLength": "轉檔時,估計內容長度", "OptionExternallyDownloaded": "外部下載", "OptionHlsSegmentedSubtitles": "HLS 分段字幕", - "OptionLoginAttemptsBeforeLockout": "確定在被封鎖之前可以登入失敗幾次。", + "OptionLoginAttemptsBeforeLockout": "在被封鎖之前可以登入失敗幾次。", "OptionRequirePerfectSubtitleMatch": "只下載與我的影片檔案完美匹配的字幕", "PlayCount": "播放次數", "Series": "電視劇", @@ -1342,7 +1342,7 @@ "LabelMoviePrefixHelp": "若前綴套用到電影標題,請在此處輸入它來方便伺服器能夠正確處理。", "LabelMovieRecordingPath": "電影錄製路徑(選用):", "LabelNotificationEnabled": "啟用這個通知", - "LabelProfileContainersHelp": "以逗號分隔。留空則適用於所有影片容器。", + "LabelProfileContainersHelp": "以逗號分隔,留空則適用於所有影片容器。", "LabelSelectFolderGroupsHelp": "未選中的資料夾將在其自己的檢視中顯示。", "LabelSerialNumber": "序號", "LabelSeriesRecordingPath": "電視劇錄影路徑(選用):", @@ -1398,7 +1398,7 @@ "MessageDirectoryPickerLinuxInstruction": "使用 Linux on Arch Linux、CentOS、Debian、Fedora、openSUSE 或 Ubuntu 作業系統,您必須授權使用者至少讀取權限來存取您的儲存路徑。", "MessageEnablingOptionLongerScans": "啟用這個選項可能會延長媒體庫的掃描時間。", "MessageFileReadError": "讀取檔案時發生錯誤。", - "MessageForgotPasswordInNetworkRequired": "請檢查您的區域網路後再試一次來開始密碼重置流程。", + "MessageForgotPasswordInNetworkRequired": "請檢查您的區域網路後再開始密碼重置流程。", "MessageForgotPasswordFileCreated": "已在伺服器上建立了以下檔案,並包含有關後續步驟說明:", "MessageNoAvailablePlugins": "沒有可用的模組。", "MessageNoServersAvailable": "無法自動偵測伺服器。", @@ -1474,7 +1474,7 @@ "Uniform": "輪廓", "Unmute": "取消靜音", "Unplayed": "尚未播放", - "TvLibraryHelp": "查看{0}電視命名指南{1}。", + "TvLibraryHelp": "查看 {0} 電視命名指南 {1} 。", "LabelMonitorUsers": "監控活動:", "LabelPleaseRestart": "改動將在手動重啟用戶端後生效。", "LabelProfileCodecsHelp": "以逗號分隔。留空則適用於所有編解碼器。", @@ -1482,7 +1482,7 @@ "LabelInNetworkSignInWithEasyPasswordHelp": "你可以在你的家庭網路中使用你的簡易 PIN 碼登錄 Jellyfin 應用程式,僅在你使用外部網路時才需要輸入密碼,如果 PIN 碼留空,那麼在你的區域網路中便不需輸入密碼。", "LabelReleaseDate": "釋出日期:", "LabelRemoteClientBitrateLimit": "網際網路串流傳輸位元率限制(Mbps):", - "LanNetworksHelp": "在强制頻寬限制時,認作本地網路上的 IP 地址或 IP/網路掩碼條目的逗號分隔列表。如果設置此項,所有其它 IP 地址將被視作在外部網路上,并且將受到外部頻寬限制。如果保留爲空,則只將服務器的子網視作本地網路。", + "LanNetworksHelp": "在強制頻寬限制時,認作本地網路上的 IP 地址或 IP/子網域遮罩項目的逗號分隔列表。若設置此項,所有其它 IP 地址將被視作在外部網路上,并且將受到外部頻寬限制。如果保留爲空,則只將服務器的子網域遮罩作本地網路。", "OptionIgnoreTranscodeByteRangeRequests": "忽略轉檔位元組範圍請求", "OptionIgnoreTranscodeByteRangeRequestsHelp": "如果啟用,這些請求會被兌現,但會忽略的位元組範圍標頭。", "OptionLoginAttemptsBeforeLockoutHelp": "若值為 0,則表示將允許普通使用者嘗試三次、管理員嘗試五次的預設值,設定為 -1 來停用此功能。", @@ -1507,7 +1507,7 @@ "SystemDlnaProfilesHelp": "系統設定檔案是唯讀的,更改系統設定檔案將被儲存到自訂的新設定檔案。", "LabelNumber": "編號:", "LabelNumberOfGuideDays": "下載電視指南日數:", - "OnlyForcedSubtitlesHelp": "只有標記為「強制」的字幕會被載入。", + "OnlyForcedSubtitlesHelp": "僅被標記為「強制」的字幕會被載入。", "PackageInstallCompleted": "{0} (版本 {1}) 安裝完成。", "OptionDisplayFolderViewHelp": "在其他媒體庫旁邊顯示資料夾,對想要一個普通的資料夾檢視很有用。", "LabelReasonForTranscoding": "轉檔原因:", @@ -1534,7 +1534,7 @@ "LabelSportsCategories": "體育分類:", "LabelStartWhenPossible": "當可能時自動開始:", "LabelVaapiDevice": "VA API 裝置:", - "DashboardArchitecture": "結構:{0}", + "DashboardArchitecture": "架構:{0}", "MediaInfoSampleRate": "採樣率", "MessageContactAdminToResetPassword": "請聯繫您的管理員來重置密碼。", "MessageUnsetContentHelp": "內容將顯示為純資料夾,建議使用中繼資料管理器設置子資料夾的內容類型。", @@ -1542,7 +1542,7 @@ "OptionCustomUsers": "自訂", "OptionDateAddedFileTime": "使用檔案建立日期", "OptionReportByteRangeSeekingWhenTranscodingHelp": "這對一些時間跳轉緩慢的裝置是必要的。", - "XmlTvNewsCategoriesHelp": "有這些類別的節目會被當作新聞節目。用「|」分隔多個。", + "XmlTvNewsCategoriesHelp": "有這些類別的節目會被當作新聞節目,以「|」來分隔多個項目。", "LabelKodiMetadataEnableExtraThumbsHelp": "為了相容 Kodi 主題,下載的圖片將被同時儲存在 extrafanart 和 extrathumbs 資料夾中。", "LabelInternetQuality": "網路畫質:", "LabelKodiMetadataEnablePathSubstitutionHelp": "允許將圖片的路徑以伺服器路徑來替換。", @@ -1575,16 +1575,16 @@ "LabelPostProcessorArguments": "處理器後命令行參數:", "LabelPostProcessorArgumentsHelp": "使用 {path} 作為錄製檔案的路徑。", "LabelPreferredDisplayLanguage": "首選語言:", - "LabelPreferredDisplayLanguageHelp": "翻譯 Jellyfin 是一個進行中的項目。", + "LabelPreferredDisplayLanguageHelp": "歡迎一起翻譯 Jellyfin!", "LabelPreferredSubtitleLanguage": "字幕語言偏好:", - "LabelProtocol": "協議:", + "LabelProtocol": "協議:", "LabelProtocolInfo": "協議資訊:", "LabelPublicHttpPort": "公開 HTTP 端口:", "LabelPublicHttpsPort": "公開 HTTPS 端口:", "LabelProtocolInfoHelp": "當響應來自裝置的 GetProtocolInfo(獲取協議訊息)請求時,該值將被使用。", "LabelPublicHttpPortHelp": "公開連接埠應映射到本地 HTTP 連接埠。", "LabelPublicHttpsPortHelp": "公開連接埠應映射到本地 HTTPS 連接埠。", - "LabelReadHowYouCanContribute": "了解如何作出貢獻。", + "LabelReadHowYouCanContribute": "瞭解如何一同貢獻。", "LabelSelectFolderGroups": "自動將以下資料夾中的內容分組到視圖中,例如電影、音樂和電視:", "LabelStatus": "狀態:", "LiveBroadcasts": "直播", @@ -1603,13 +1603,13 @@ "Vertical": "垂直", "VideoRange": "影片範圍", "ViewPlaybackInfo": "查看播放訊息", - "XmlTvSportsCategoriesHelp": "有這些類別的節目會被當作體育節目。用「|」分隔多個。", + "XmlTvSportsCategoriesHelp": "有這些類別的節目會被當作體育節目,以「|」來分隔多個項目。", "XmlTvPathHelp": "XML 電視檔案的路徑,Jellyfin 將讀取該檔案並定期檢查其更新,您負責建立和更新檔案。", "MessageInvalidForgotPasswordPin": "簡易代碼錯誤或已過期,請再試一次。", "OptionAllowVideoPlaybackTranscoding": "允許播放需要轉檔的影片", "Small": "小", "Smaller": "更小", - "XmlTvKidsCategoriesHelp": "有這些類別的節目會被當作兒童節目。用「|」分隔多個。", + "XmlTvKidsCategoriesHelp": "有這些類別的節目會被當作兒童節目,以「|」來分隔多個項目。", "TabResponses": "響應", "LabelDisplaySpecialsWithinSeasons": "顯示劇集季度中的特集", "LabelNumberOfGuideDaysHelp": "下載更多電視指南資料會提供更好時間表查看能力,但將需要更長的下載時間。自動基於頻道數目來選擇。", @@ -1664,7 +1664,7 @@ "WeeklyAt": "每週第 {0} 天的 {1}", "OnWakeFromSleep": "當從睡眠中喚醒時", "EveryXMinutes": "每 {0} 分鐘", - "EveryHour": "每一小時", + "EveryHour": "每小時", "EveryXHours": "每 {0} 小時", "OnApplicationStartup": "當應用程式啟動時", "Season": "季", From 54a80f8ab668c7f93f67407ca9df678d88829b65 Mon Sep 17 00:00:00 2001 From: WWWesten Date: Wed, 15 Apr 2020 19:55:35 +0000 Subject: [PATCH 073/128] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 49 +++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index d50bcaccaa..637cfd3492 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -15,7 +15,7 @@ "Alerts": "Оповещения", "All": "Все", "AllChannels": "Все каналы", - "AllComplexFormats": "Все комлексные форматы (ASS, SSA, VOBSUB, PGS, SUB/IDX и т.д.)", + "AllComplexFormats": "Все комплексные форматы (ASS, SSA, VOBSUB, PGS, SUB и IDX)", "AllEpisodes": "Все эпизоды", "AllLanguages": "Все языки", "AllLibraries": "Все медиатеки", @@ -27,7 +27,7 @@ "AllowRemoteAccess": "Разрешение удалённого доступа к данному серверу Jellyfin Server.", "AllowRemoteAccessHelp": "Если флажок снят, то все удалённые подключения будут заблокированы.", "AllowedRemoteAddressesHelp": "Список разделённых запятыми IP-адресов или записей IP/netmask для сетей, которым разрешено удалённое соединение. Если не заполнять, то будут использованы все внешние адреса.", - "AlwaysPlaySubtitles": "Всегда воспроизводить с субтитрами", + "AlwaysPlaySubtitles": "Воспроизводить всегда", "AlwaysPlaySubtitlesHelp": "Субтитры, соответствующие настройке языка, будут загружаться независимо от языка аудио.", "AnyLanguage": "Любой язык", "Anytime": "В любое время", @@ -54,7 +54,7 @@ "BoxRear": "Спинка коробки", "Browse": "Навигация", "BrowsePluginCatalogMessage": "Просмотрите каталог плагинов, чтобы ознакомиться с имеющимися плагинами.", - "BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при преобразовании видео в зависимости от формата субтитров. Избегание внедрения субтитров улучшит производительность сервера. Выберите «Авто» для записи основанных на графике форматов (VOBSUB, PGS, SUB/IDX и т.п.) и некоторых субтитров ASS/SSA.", + "BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при перекодировании. Избежание этого значительно улучшит производительность. Выберите «Авто» для записи основанных на графике форматов (VOBSUB, PGS, SUB и IDX) и некоторых субтитров ASS или SSA.", "ButtonAdd": "Добавить", "ButtonAddMediaLibrary": "Добавить медиатеку", "ButtonAddScheduledTaskTrigger": "Добавить триггер", @@ -191,7 +191,7 @@ "DisplayInOtherHomeScreenSections": "Показывать в разделах главного экрана (нпр., новейшие медиаданные, продолжение просмотра и т.п.)", "DisplayMissingEpisodesWithinSeasons": "Отображать отсутствующие эпизоды в пределах сезонов", "DisplayMissingEpisodesWithinSeasonsHelp": "Это также должно быть включено для ТВ-медиатек в конфигурации сервера.", - "DisplayModeHelp": "Выберите тип экрана, где запущен Jellyfin.", + "DisplayModeHelp": "Выберите желательный стиль разметки для интерфейса.", "DoNotRecord": "Не записывать", "Down": "Вниз", "Download": "Загрузить", @@ -492,7 +492,7 @@ "Images": "Рисунки", "ImportFavoriteChannelsHelp": "При включении, будут импортированы только каналы, которые обозначены как избранное на тюнерном устройстве.", "ImportMissingEpisodesHelp": "При включении, информация об отсутствующих эпизодах будет импортирована в вашу базу данных Jellyfin и отображаться в пределах сезонов и сериалов. Это может увеличить время сканирования медиатеки.", - "InstallingPackage": "Устанавливается {0}", + "InstallingPackage": "Устанавливается {0} (версия {1})", "InstantMix": "Автомикс", "ItemCount": "{0} элемент(а/ов)", "Items": "Элементы", @@ -961,16 +961,16 @@ "NoNextUpItemsMessage": "Ничего не найдено. Начните смотреть свои ТВ-передачи!", "NoPluginConfigurationMessage": "В данном плагине нет параметров конфигурирования.", "NoSubtitleSearchResultsFound": "Результатов не найдено.", - "NoSubtitles": "Без субтитров", + "NoSubtitles": "Ничего", "NoSubtitlesHelp": "По умолчанию, субтитры не будут загружаться. Они могут быть все ещё включены вручную во время воспроизведения.", "None": "Ничего", "Normal": "Обычный", "NumLocationsValue": "{0} пап(ки/ок)", "Off": "Выкл", "OneChannel": "Один канал", - "OnlyForcedSubtitles": "Только форсированные субтитры", + "OnlyForcedSubtitles": "Только форсированные", "OnlyForcedSubtitlesHelp": "Загружены будут только форсированные субтитры.", - "OnlyImageFormats": "Только графические форматы (VOBSUB, PGS, SUB и т.д.)", + "OnlyImageFormats": "Только графические форматы (VOBSUB, PGS и SUB)", "OptionAdminUsers": "Администраторы", "OptionAlbum": "Альбом", "OptionAlbumArtist": "Исп. альбома", @@ -1110,9 +1110,9 @@ "OptionWeekly": "Еженедельно", "OriginalAirDateValue": "Дата исходного эфира: {0}", "Overview": "Обзор", - "PackageInstallCancelled": "Установка {0} отменена.", - "PackageInstallCompleted": "Установка {0} завершена.", - "PackageInstallFailed": "Установка {0} неудачна.", + "PackageInstallCancelled": "Установка {0} (версия {1}) отменена.", + "PackageInstallCompleted": "Установка {0} (версия {1}) завершена.", + "PackageInstallFailed": "Установка {0} (версия {1}) неудачна.", "ParentalRating": "Возр. кат-ия", "PasswordMatchError": "Пароль и подтверждение пароля должны совпадать.", "PasswordResetComplete": "Пароль был сброшен.", @@ -1466,6 +1466,29 @@ "NoCreatedLibraries": "Похоже, вы еще не создали ни одной медиатеки. {0}Желаете создать её сейчас?{1}", "AskAdminToCreateLibrary": "Попросите администратора создать медиатеку.", "AllowFfmpegThrottling": "Притормаживать перекодировку", - "PlaybackErrorNoCompatibleStream": "Возникла проблема с профилем клиента, и сервер не отправляет совместимый формат мультимедиа.", - "AllowFfmpegThrottlingHelp": "Когда перекодирование или переупаковка достаточно далеко опережают текущую позицию воспроизведения, процесс приостанавливается, так что он использует меньше ресурсов. Это наиболее полезно, когда вы редко меняете позиции в видео. Выключите это, если у вас возникли проблемы с воспроизведением." + "PlaybackErrorNoCompatibleStream": "Этот клиент несовместим с медиаданными, а сервер не отправляет медиаданные в совместимом формате.", + "AllowFfmpegThrottlingHelp": "Когда перекодирование или переупаковка достаточно далеко опережают текущую позицию воспроизведения, процесс приостанавливается, так что он использует меньше ресурсов. Это наиболее полезно, когда вы редко меняете позиции в видео. Выключите это, если у вас возникли проблемы с воспроизведением.", + "OnWakeFromSleep": "При пробуждении ото сна", + "YadifBob": "YADIF Bob", + "OnApplicationStartup": "При запуске приложения", + "EveryXHours": "Каждые {0} часов", + "EveryHour": "Каждый час", + "EveryXMinutes": "Каждые {0} мин", + "WeeklyAt": "{0} в {1}", + "DailyAt": "Ежедневно в {0}", + "PersonRole": "как {0}", + "ListPaging": "{0}-{1} из {2}", + "Yadif": "YADIF", + "Track": "Дорожка", + "Season": "Сезон", + "Person": "Персона", + "OtherArtist": "Другой исполнитель", + "Movie": "Фильм", + "LabelLibraryPageSize": "Размер страницы медиатеки:", + "Episode": "Эпизод", + "ClientSettings": "Параметры клиента", + "BoxSet": "Коллекция", + "Artist": "Исполнитель", + "AlbumArtist": "Исп. альбома", + "Album": "Альбом" } From e53f8006e8ab3b660b4b00b03b45fefca729e123 Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 16 Apr 2020 18:45:59 +0000 Subject: [PATCH 074/128] Translated using Weblate (Kazakh) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kk/ --- src/strings/kk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/kk.json b/src/strings/kk.json index 852e408a3b..144fb007b9 100644 --- a/src/strings/kk.json +++ b/src/strings/kk.json @@ -1502,5 +1502,6 @@ "AskAdminToCreateLibrary": "Tasýǵyshanany jasaý úshin ákimshiden suraý.", "AllowFfmpegThrottling": "Qaıta kodtaýdy retteý", "PlaybackErrorNoCompatibleStream": "Klıent profaılyn jasaýda másele oryn aldy jáne server úılesimdi pishiminde tasyǵysh derekterin jibermedi.", - "AllowFfmpegThrottlingHelp": "Qaıta kodtaý nemese qaıta býmalaý aǵymdyq oınatý jaıǵasymynan edáýir alǵa ozǵanda, qor kózderin azdaý tutynatyndaı etip údiristi kidirtedi. Bul jıi izdemeı qaraý kezinde paıdaly. Eger oınatý máseleleri bolsa, ony óshirińiz." + "AllowFfmpegThrottlingHelp": "Qaıta kodtaý nemese qaıta býmalaý aǵymdyq oınatý jaıǵasymynan edáýir alǵa ozǵanda, qor kózderin azdaý tutynatyndaı etip údiristi kidirtedi. Bul jıi izdemeı qaraý kezinde paıdaly. Eger oınatý máseleleri bolsa, ony óshirińiz.", + "Album": "" } From a12691798bf3d8280eb45d569fd3b29fbc091568 Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 16 Apr 2020 18:35:04 +0000 Subject: [PATCH 075/128] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 637cfd3492..b1bfb3d9b7 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1490,5 +1490,14 @@ "BoxSet": "Коллекция", "Artist": "Исполнитель", "AlbumArtist": "Исп. альбома", - "Album": "Альбом" + "Album": "Альбом", + "LastSeen": "Последнимй раз был {0}", + "WriteAccessRequired": "Jellyfin Server требуются права на запись в эту папку. Обеспечьте доступ для записи и попробуйте снова.", + "PathNotFound": "Путь не может быть найден. Убедитесь, что путь правильный и попробуйте снова.", + "ReleaseGroup": "Релиз-группа", + "PreferEmbeddedEpisodeInfosOverFileNames": "Предпочитать встроенную информацию эпизода вместо имён файлов", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Используется информация об эпизоде из встроенных метаданных, если они доступны.", + "LabelLibraryPageSizeHelp": "Устанавливается количество элементов для отображения на странице медиатеки. Установите 0 для отключения нумерации страниц.", + "LabelDeinterlaceMethod": "Метод устранения гребёнки:", + "DeinterlaceMethodHelp": "Выберите метод устранения гребёнки, который будет использоваться при перекодировании чересстрочного содержания." } From a1c40bd8a846914c94f4ebdf9a33705eee857bc3 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Thu, 16 Apr 2020 15:45:32 -0400 Subject: [PATCH 076/128] As requested by @MrTimscampi + theme adjustement --- src/components/nowplayingbar/nowplayingbar.js | 7 +++--- .../remotecontrol/remotecontrol.css | 19 +++++++++++---- src/components/remotecontrol/remotecontrol.js | 24 ++++++++++--------- src/nowplaying.html | 9 ++++--- src/themes/appletv/theme.css | 4 +++- src/themes/blueradiance/theme.css | 2 ++ src/themes/dark/theme.css | 2 ++ src/themes/light/theme.css | 4 +++- src/themes/purplehaze/theme.css | 2 ++ src/themes/wmc/theme.css | 4 +++- 10 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js index 3308ad252a..a3839a9342 100644 --- a/src/components/nowplayingbar/nowplayingbar.js +++ b/src/components/nowplayingbar/nowplayingbar.js @@ -439,7 +439,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', text = itemHelper.getDisplayName(item); } - return '' + text + ''; + return `${text}`; } function seriesImageUrl(item, options) { @@ -522,10 +522,11 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', var cssClass = nowPlayingName.secondary ? ' class="nowPlayingBarSecondaryText"' : ''; if (nowPlayingName.item) { - return '' + getTextActionButton(nowPlayingName.item, nowPlayingName.text) + '
'; + var nowPlayingText = getTextActionButton(nowPlayingName.item, nowPlayingName.text); + return `
${nowPlayingText}
`; } - return '' + nowPlayingName.text + '
'; + return `
${nowPlayingText}
`; }).join(''); diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 08192cae05..21342bff73 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -40,6 +40,7 @@ .nowPlayingArtist a { font-weight: normal; text-align: left !important; + color: inherit !important; } .nowPlayingButtonsContainer { @@ -143,6 +144,10 @@ padding: 1.5em 0; } +.contextMenuList a { + color: inherit !important; +} + .contextMenuList i.listItemIcon { font-size: x-large; } @@ -295,6 +300,7 @@ .btnPlayPause { padding: 0; margin: 0; + font-size: 1.7em; } .btnPlayPause:hover { @@ -332,7 +338,8 @@ display: inline-block; left: 0; right: 0; - background: #202020; + + /* background: #202020; */ z-index: 1000; } @@ -344,7 +351,8 @@ right: 0; padding-left: 7.3%; padding-right: 7.3%; - background-color: #101010; + + /* background-color: #101010; */ } .playlistSectionButton .btnTogglePlaylist { @@ -486,6 +494,7 @@ .btnPlayPause { padding: 0; margin: 0; + font-size: 1.7em; } .btnPlayPause:hover { @@ -523,7 +532,8 @@ display: inline-block; left: 0; right: 0; - background: #202020; + + /* background: #202020; */ z-index: 1000; } @@ -535,7 +545,8 @@ right: 0; padding-left: 4.3%; padding-right: 4.3%; - background-color: #101010; + + /* background-color: #101010; */ } .playlistSectionButton .btnTogglePlaylist { diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 88f7d4e919..a4f04ef413 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -113,8 +113,8 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL function updateNowPlayingInfo(context, state, serverId) { var item = state.NowPlayingItem; var displayName = item ? getNowPlayingNameHtml(item).replace("
", " - ") : ""; - console.debug(JSON.stringify(item, null, 4)); - if (typeof item != 'undefined') { + if (typeof item !== 'undefined') { + var nowPlayingServerId = (item.ServerId || serverId); if (item.Type == "Audio" || item.MediaStreams[0].Type == "Audio") { var songName = item.Name; if (item.Album != null && item.Artists != null) { @@ -122,10 +122,10 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var artistName; if (item.ArtistItems != null) { artistName = item.ArtistItems[0].Name; - context.querySelector(".nowPlayingAlbum").innerHTML = '' + albumName + ''; - context.querySelector(".nowPlayingArtist").innerHTML = '' + artistName + ''; - context.querySelector(".contextMenuAlbum").innerHTML = 'album ' + globalize.translate("ViewAlbum") + ''; - context.querySelector(".contextMenuArtist").innerHTML = 'person ' + globalize.translate("ViewArtist") + ''; + context.querySelector(".nowPlayingAlbum").innerHTML = '${albumName}`; + context.querySelector(".nowPlayingArtist").innerHTML = '${artistName}`; + context.querySelector(".contextMenuAlbum").innerHTML = ' ` + globalize.translate("ViewAlbum") + ''; + context.querySelector(".contextMenuArtist").innerHTML = ' ` + globalize.translate("ViewArtist") + ''; } else { artistName = item.Artists; context.querySelector(".nowPlayingAlbum").innerHTML = albumName; @@ -135,13 +135,15 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".nowPlayingSongName").innerHTML = songName; } else if (item.Type == "Episode") { if (item.SeasonName != null) { - context.querySelector(".nowPlayingSeason").innerHTML = '' + item.SeasonName + ''; + var seasonName = item.SeasonName; + context.querySelector(".nowPlayingSeason").innerHTML = '${seasonName}`; } if (item.SeriesName != null) { + var seriesName = item.SeriesName; if (item.SeriesId !=null) { - context.querySelector(".nowPlayingSerie").innerHTML = '' + item.SeriesName + ''; + context.querySelector(".nowPlayingSerie").innerHTML = '${seriesName}`; } else { - context.querySelector(".nowPlayingSerie").innerHTML = item.SeriesName; + context.querySelector(".nowPlayingSerie").innerHTML = seriesName; } } context.querySelector(".nowPlayingEpisode").innerHTML = item.Name; @@ -149,7 +151,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL context.querySelector(".nowPlayingPageTitle").innerHTML = displayName; } - if (displayName.length > 0 && item.Type != "Audio") { + if (displayName.length > 0 && item.Type != "Audio" && item.Type != "Episode") { context.querySelector(".nowPlayingPageTitle").classList.remove("hide"); } else { context.querySelector(".nowPlayingPageTitle").classList.add("hide"); @@ -379,7 +381,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL function updatePlayPauseState(isPaused, isActive) { var context = dlg; var btnPlayPause = context.querySelector(".btnPlayPause"); - btnPlayPause.querySelector("i").innerHTML = isPaused ? "play_circle_filled" : "pause_circle_filled"; + btnPlayPause.querySelector("i").innerHTML = isPaused ? "" : ""; buttonVisible(btnPlayPause, isActive); } diff --git a/src/nowplaying.html b/src/nowplaying.html index a1ddcc26a7..7bfde2d9e9 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -163,16 +163,15 @@
-
-
-
+
+
diff --git a/src/themes/appletv/theme.css b/src/themes/appletv/theme.css index 5ca517bea5..6a91dcf8cf 100644 --- a/src/themes/appletv/theme.css +++ b/src/themes/appletv/theme.css @@ -43,7 +43,9 @@ html { } .backgroundContainer, -.dialog { +.dialog, +.nowPlayingPlaylist, +.nowPlayingContextMenu { background: #d5e9f2; -webkit-background-size: 100% 100%; background-size: 100% 100%; diff --git a/src/themes/blueradiance/theme.css b/src/themes/blueradiance/theme.css index b929c2a296..d7c47b1a2c 100644 --- a/src/themes/blueradiance/theme.css +++ b/src/themes/blueradiance/theme.css @@ -42,6 +42,8 @@ html { } .dialog, +.nowPlayingPlaylist, +.nowPlayingContextMenu, html { background-color: #033361; } diff --git a/src/themes/dark/theme.css b/src/themes/dark/theme.css index 4363be991b..291a0b8b55 100644 --- a/src/themes/dark/theme.css +++ b/src/themes/dark/theme.css @@ -36,6 +36,8 @@ html { .backgroundContainer, .dialog, +.nowPlayingPlaylist, +.nowPlayingContextMenu, html { background-color: #101010; } diff --git a/src/themes/light/theme.css b/src/themes/light/theme.css index d84a1c3b67..ad9695c6ee 100644 --- a/src/themes/light/theme.css +++ b/src/themes/light/theme.css @@ -51,7 +51,9 @@ html { background-color: rgba(255, 255, 255, 0.8); } -.dialog { +.dialog, +.nowPlayingPlaylist, +.nowPlayingContextMenu { background-color: #f0f0f0; } diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index 45f43abc2f..f01c0c6405 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -37,6 +37,8 @@ html { } .dialog, +.nowPlayingPlaylist, +.nowPlayingContextMenu, html { background-color: #230c33; } diff --git a/src/themes/wmc/theme.css b/src/themes/wmc/theme.css index 6143b7fe2c..2cdae4dd2e 100644 --- a/src/themes/wmc/theme.css +++ b/src/themes/wmc/theme.css @@ -48,7 +48,9 @@ html { } .backgroundContainer, -.dialog { +.dialog, +.nowPlayingPlaylist, +.nowPlayingContextMenu { background: -webkit-gradient(linear, left top, left bottom, from(#0f3562), color-stop(#1162a4), to(#03215f)); background: -webkit-linear-gradient(top, #0f3562, #1162a4, #03215f); background: -o-linear-gradient(top, #0f3562, #1162a4, #03215f); From 65859a510be55c4efa22c148a9092759b64c11a5 Mon Sep 17 00:00:00 2001 From: Delgan Date: Thu, 16 Apr 2020 22:36:14 +0200 Subject: [PATCH 077/128] Fix dropdown not properly aligned for long subtitles --- src/itemdetails.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/itemdetails.html b/src/itemdetails.html index 605ff926e3..0520c80d11 100644 --- a/src/itemdetails.html +++ b/src/itemdetails.html @@ -136,7 +136,7 @@
-
+
From b139a23f042ad6fdb73134299fd21ee360434935 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Thu, 16 Apr 2020 19:14:40 -0400 Subject: [PATCH 078/128] As resquested by @MrTimscampi + theme adjustement --- .../remotecontrol/remotecontrol.css | 22 ++++++++++++------- src/components/remotecontrol/remotecontrol.js | 11 +++++----- src/nowplaying.html | 2 +- src/themes/appletv/theme.css | 3 ++- src/themes/blueradiance/theme.css | 3 ++- src/themes/dark/theme.css | 3 ++- src/themes/light/theme.css | 3 ++- src/themes/purplehaze/theme.css | 3 ++- src/themes/wmc/theme.css | 3 ++- 9 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.css b/src/components/remotecontrol/remotecontrol.css index 21342bff73..9cdfcde151 100644 --- a/src/components/remotecontrol/remotecontrol.css +++ b/src/components/remotecontrol/remotecontrol.css @@ -1,3 +1,7 @@ +.nowPlayingPage { + padding: 5em 0 0 0 !important; +} + .nowPlayingInfoContainer { display: -webkit-box; display: -webkit-flex; @@ -168,6 +172,10 @@ } @media all and (min-width: 63em) { + .nowPlayingPage { + padding: 8em 0 0 0 !important; + } + .nowPlayingSecondaryButtons { -webkit-box-flex: 1; -webkit-flex-grow: 1; @@ -180,6 +188,12 @@ .nowPlayingPageUserDataButtonsTitle { display: none !important; } + + .playlistSectionButton, + .nowPlayingPlaylist, + .nowPlayingContextMenu { + background: unset !important; + } } @media all and (min-width: 80em) { @@ -338,8 +352,6 @@ display: inline-block; left: 0; right: 0; - - /* background: #202020; */ z-index: 1000; } @@ -351,8 +363,6 @@ right: 0; padding-left: 7.3%; padding-right: 7.3%; - - /* background-color: #101010; */ } .playlistSectionButton .btnTogglePlaylist { @@ -532,8 +542,6 @@ display: inline-block; left: 0; right: 0; - - /* background: #202020; */ z-index: 1000; } @@ -545,8 +553,6 @@ right: 0; padding-left: 4.3%; padding-right: 4.3%; - - /* background-color: #101010; */ } .playlistSectionButton .btnTogglePlaylist { diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index a4f04ef413..8e2a382d1d 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -243,29 +243,30 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL var supportedCommands = playerInfo.supportedCommands; currentPlayerSupportedCommands = supportedCommands; var playState = state.PlayState || {}; - buttonVisible(context.querySelector(".btnToggleFullscreen"), item && "Video" == item.MediaType && -1 != supportedCommands.indexOf("ToggleFullscreen")); + var isSupportedCommands = supportedCommands.includes("DisplayMessage") || supportedCommands.includes("SendString") || supportedCommands.includes("Select"); + buttonVisible(context.querySelector(".btnToggleFullscreen"), item && "Video" == item.MediaType && supportedCommands.includes("ToggleFullscreen")); updateAudioTracksDisplay(player, context); updateSubtitleTracksDisplay(player, context); - if (-1 != supportedCommands.indexOf("DisplayMessage") && !currentPlayer.isLocalPlayer) { + if (supportedCommands.includes("DisplayMessage") && !currentPlayer.isLocalPlayer) { context.querySelector(".sendMessageSection").classList.remove("hide"); } else { context.querySelector(".sendMessageSection").classList.add("hide"); } - if (-1 != supportedCommands.indexOf("SendString") && !currentPlayer.isLocalPlayer) { + if (supportedCommands.includes("SendString") && !currentPlayer.isLocalPlayer) { context.querySelector(".sendTextSection").classList.remove("hide"); } else { context.querySelector(".sendTextSection").classList.add("hide"); } - if (-1 != supportedCommands.indexOf("Select") && !currentPlayer.isLocalPlayer) { + if (supportedCommands.includes("Select") && !currentPlayer.isLocalPlayer) { context.querySelector(".navigationSection").classList.remove("hide"); } else { context.querySelector(".navigationSection").classList.add("hide"); } - if ((-1 != supportedCommands.indexOf("DisplayMessage") || -1 != supportedCommands.indexOf("SendString") || -1 != supportedCommands.indexOf("Select")) && !currentPlayer.isLocalPlayer) { + if (isSupportedCommands && !currentPlayer.isLocalPlayer) { context.querySelector(".remoteControlSection").classList.remove("hide"); } else { context.querySelector(".remoteControlSection").classList.add("hide"); diff --git a/src/nowplaying.html b/src/nowplaying.html index 7bfde2d9e9..0f34e5ba32 100644 --- a/src/nowplaying.html +++ b/src/nowplaying.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/themes/appletv/theme.css b/src/themes/appletv/theme.css index 6a91dcf8cf..760038ad72 100644 --- a/src/themes/appletv/theme.css +++ b/src/themes/appletv/theme.css @@ -188,7 +188,8 @@ html { } .appfooter, -.formDialogFooter:not(.formDialogFooter-clear) { +.formDialogFooter:not(.formDialogFooter-clear), +.playlistSectionButton { color: rgba(0, 0, 0, 0.7); background: #303030; background: -webkit-gradient(linear, left top, right top, from(#bcbcbc), color-stop(#a7b4b7), color-stop(#beb5a5), color-stop(#adbec2), to(#b9c7cb)); diff --git a/src/themes/blueradiance/theme.css b/src/themes/blueradiance/theme.css index d7c47b1a2c..3e86782f37 100644 --- a/src/themes/blueradiance/theme.css +++ b/src/themes/blueradiance/theme.css @@ -181,7 +181,8 @@ html { color: rgba(255, 255, 255, 0.87); } -.appfooter { +.appfooter, +.playlistSectionButton { background: #033664; color: #ccc; color: rgba(255, 255, 255, 0.78); diff --git a/src/themes/dark/theme.css b/src/themes/dark/theme.css index 291a0b8b55..f9163d82f5 100644 --- a/src/themes/dark/theme.css +++ b/src/themes/dark/theme.css @@ -163,7 +163,8 @@ html { color: rgba(255, 255, 255, 0.87); } -.appfooter { +.appfooter, +.playlistSectionButton { background: #202020; color: #ccc; color: rgba(255, 255, 255, 0.78); diff --git a/src/themes/light/theme.css b/src/themes/light/theme.css index ad9695c6ee..114ef7c3b1 100644 --- a/src/themes/light/theme.css +++ b/src/themes/light/theme.css @@ -185,7 +185,8 @@ html { color: rgba(255, 255, 255, 0.87); } -.appfooter { +.appfooter, +.playlistSectionButton { background: #282828; color: #ccc; color: rgba(255, 255, 255, 0.78); diff --git a/src/themes/purplehaze/theme.css b/src/themes/purplehaze/theme.css index f01c0c6405..82b774a736 100644 --- a/src/themes/purplehaze/theme.css +++ b/src/themes/purplehaze/theme.css @@ -271,7 +271,8 @@ a[data-role=button] { color: rgba(255, 255, 255, 0.87); } -.appfooter { +.appfooter, +.playlistSectionButton { background: #06256f; color: #ccc; color: rgba(255, 255, 255, 0.78); diff --git a/src/themes/wmc/theme.css b/src/themes/wmc/theme.css index 2cdae4dd2e..e7d4c0371b 100644 --- a/src/themes/wmc/theme.css +++ b/src/themes/wmc/theme.css @@ -174,7 +174,8 @@ html { } .appfooter, -.formDialogFooter:not(.formDialogFooter-clear) { +.formDialogFooter:not(.formDialogFooter-clear), +.playlistSectionButton { background: #0c2450; background: -webkit-gradient(linear, left bottom, left top, from(#0c2450), to(#081b3b)); background: -webkit-linear-gradient(bottom, #0c2450, #081b3b); From 33c220a4587cddd3bed21383f4ea3958c1d0e607 Mon Sep 17 00:00:00 2001 From: artiume Date: Thu, 16 Apr 2020 20:38:32 -0400 Subject: [PATCH 079/128] Update src/strings/en-us.json Co-Authored-By: dkanada --- src/strings/en-us.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 900b3dbb20..03f2d85b2f 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1493,7 +1493,5 @@ "EveryHour": "Every hour", "EveryXHours": "Every {0} hours", "OnApplicationStartup": "On application startup", - "ExperimentalBlurayPlayback": "Blu-Ray playback is experimental. Jellyfin cannot decrypt content protected by DRM. All the titles in the Blu-Ray will be played anyway, including the protected ones. Some parts might be in black", - "ExperimentalDVDPlayback": "DVD playback is experimental. Jellyfin cannot decrypt content protected by DRM. All the titles in the DVD will be played anyway, including the protected ones. Some parts might be in black", - "ExperimentalISOPlayback": "ISO playback is experimental. All the titles in the ISO will be played anyway. Some parts might be in black" + "UnsupportedPlayback": "Jellyfin cannot decrypt content protected by DRM but all content will be attempted regardless, including protected titles. Some files may appear completely black due to encryption or other unsupported features, such as interactive titles." } From c6179ec3b4e4a40c84aa84aecdb900f94c5ec117 Mon Sep 17 00:00:00 2001 From: artiume Date: Thu, 16 Apr 2020 20:38:48 -0400 Subject: [PATCH 080/128] Update src/components/playback/experimentalwarnings.js Co-Authored-By: dkanada --- src/components/playback/experimentalwarnings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/experimentalwarnings.js b/src/components/playback/experimentalwarnings.js index 09b8158242..aab926839e 100644 --- a/src/components/playback/experimentalwarnings.js +++ b/src/components/playback/experimentalwarnings.js @@ -44,7 +44,7 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } function showBlurayMessage() { - return showMessage(globalize.translate("ExperimentalBluRayPlayback"), 'blurayexpirementalinfo', 'nativeblurayplayback'); + return showMessage(globalize.translate("UnsupportedPlayback"), 'blurayexpirementalinfo', 'nativeblurayplayback'); } function showDvdMessage() { From a57894c8c36134db3c5ade303a0634691201fd81 Mon Sep 17 00:00:00 2001 From: artiume Date: Thu, 16 Apr 2020 20:39:00 -0400 Subject: [PATCH 081/128] Update src/components/playback/experimentalwarnings.js Co-Authored-By: dkanada --- src/components/playback/experimentalwarnings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/experimentalwarnings.js b/src/components/playback/experimentalwarnings.js index aab926839e..443c4fa7b7 100644 --- a/src/components/playback/experimentalwarnings.js +++ b/src/components/playback/experimentalwarnings.js @@ -48,7 +48,7 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } function showDvdMessage() { - return showMessage(globalize.translate("ExperimentalDVDPlayback"), 'dvdexpirementalinfo', 'nativedvdplayback'); + return showMessage(globalize.translate("UnsupportedPlayback"), 'dvdexpirementalinfo', 'nativedvdplayback'); } function showIsoMessage() { From a80d6b9f27cab1d3e7b7adb77146327583d603f7 Mon Sep 17 00:00:00 2001 From: artiume Date: Thu, 16 Apr 2020 20:39:09 -0400 Subject: [PATCH 082/128] Update src/components/playback/experimentalwarnings.js Co-Authored-By: dkanada --- src/components/playback/experimentalwarnings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/experimentalwarnings.js b/src/components/playback/experimentalwarnings.js index 443c4fa7b7..02a7b82caf 100644 --- a/src/components/playback/experimentalwarnings.js +++ b/src/components/playback/experimentalwarnings.js @@ -52,7 +52,7 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } function showIsoMessage() { - return showMessage(globalize.translate("ExperimentalISOPlayback"), 'isoexpirementalinfo', 'nativeisoplayback'); + return showMessage(globalize.translate("UnsupportedPlayback"), 'isoexpirementalinfo', 'nativeisoplayback'); } function ExpirementalPlaybackWarnings() { From 5330bdd93fc4307d55679ca25564d4ebc77f669a Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 16 Apr 2020 18:53:05 +0000 Subject: [PATCH 083/128] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index b1bfb3d9b7..2a6349763c 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -54,7 +54,7 @@ "BoxRear": "Спинка коробки", "Browse": "Навигация", "BrowsePluginCatalogMessage": "Просмотрите каталог плагинов, чтобы ознакомиться с имеющимися плагинами.", - "BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при перекодировании. Избежание этого значительно улучшит производительность. Выберите «Авто» для записи основанных на графике форматов (VOBSUB, PGS, SUB и IDX) и некоторых субтитров ASS или SSA.", + "BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при перекодировании. Избежание этого значительно улучшит производительность. Выберите «Авто» для записи основанных на графике форматов (VOBSUB, PGS, SUB и IDX) и некоторых субтитров ASS или SSA.", "ButtonAdd": "Добавить", "ButtonAddMediaLibrary": "Добавить медиатеку", "ButtonAddScheduledTaskTrigger": "Добавить триггер", @@ -1497,7 +1497,7 @@ "ReleaseGroup": "Релиз-группа", "PreferEmbeddedEpisodeInfosOverFileNames": "Предпочитать встроенную информацию эпизода вместо имён файлов", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Используется информация об эпизоде из встроенных метаданных, если они доступны.", - "LabelLibraryPageSizeHelp": "Устанавливается количество элементов для отображения на странице медиатеки. Установите 0 для отключения нумерации страниц.", + "LabelLibraryPageSizeHelp": "Устанавливается количество элементов для отображения на странице медиатеки. Установите 0 для отключения нумерации страниц.", "LabelDeinterlaceMethod": "Метод устранения гребёнки:", "DeinterlaceMethodHelp": "Выберите метод устранения гребёнки, который будет использоваться при перекодировании чересстрочного содержания." } From fc33ecfe7e9a143ac47273eede1fca0490709af3 Mon Sep 17 00:00:00 2001 From: taladro Date: Fri, 17 Apr 2020 09:37:38 +0000 Subject: [PATCH 084/128] Translated using Weblate (Spanish (Argentina)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_AR/ --- src/strings/es-ar.json | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index 90e5283c0c..44ddbbf300 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -429,7 +429,7 @@ "HeaderApp": "Aplicación", "HeaderApiKeysHelp": "Las aplicaciones externas requieren una llave API para poder comunicarse con el servidor Jellyfin. Las llaves se emiten iniciando sesión con una cuenta Jellyfin u otorgando manualmente una clave a la aplicación.", "HeaderApiKeys": "Llaves API", - "HeaderApiKey": "Llave API", + "HeaderApiKey": "Contraseña API", "HeaderAllowMediaDeletionFrom": "Permitir el borrado de medios desde", "HeaderAlert": "Alerta", "HeaderAlbums": "Albumes", @@ -476,5 +476,28 @@ "HeaderCastAndCrew": "Reparto", "HeaderCancelSeries": "Cancelar serie", "H264CrfHelp": "El Factor de velocidad constante (CRF) es la configuración de calidad predeterminada para el codificador x264. Puede establecer los valores entre 0 y 51, donde valores más bajos resultarían en una mejor calidad (a expensas de tamaños de archivo más altos). Los valores correctos están entre 18 y 28. El valor predeterminado para x264 es 23, por lo que puede usar esto como punto de partida.", - "DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al transcodificar contenido entrelazado." + "DeinterlaceMethodHelp": "Seleccione el método de desentrelazado que se usará al transcodificar contenido entrelazado.", + "HeaderFavoriteVideos": "Videos favoritos", + "HeaderFavoritePeople": "Gente favorita", + "HeaderFavoriteMovies": "Películas Favoritas", + "HeaderFavoriteBooks": "Libros favoritos", + "HeaderExternalIds": "IDs externos:", + "HeaderError": "Error", + "HeaderEpisodes": "Episodios", + "HeaderEnabledFields": "Campos habilitados", + "HeaderEditImages": "Editar imágenes", + "HeaderEasyPinCode": "Pin sencillo", + "HeaderDownloadSync": "Descargar y sincronizar", + "HeaderDisplay": "Pantalla", + "HeaderDirectPlayProfile": "Perfil Direct Play", + "HeaderDevices": "Dispositivos", + "HeaderDeviceAccess": "Acceso al dispositivo", + "HeaderDeveloperInfo": "Información para desarrolladores", + "HeaderDetectMyDevices": "Detectar mis dispositivos", + "HeaderDeleteTaskTrigger": "Elminar disparador de acciones", + "HeaderDeleteProvider": "Eliminar proveedor", + "HeaderDeleteItems": "Eliminar ítems", + "HeaderDeleteItem": "Eliminar ítem", + "HeaderDeleteDevice": "Eliminar dispositivo", + "HeaderDefaultRecordingSettings": "Ajustes de grabación por defecto" } From 5267795f19961b95f096000c72cf263ac9f983db Mon Sep 17 00:00:00 2001 From: millallo Date: Fri, 17 Apr 2020 11:28:16 +0000 Subject: [PATCH 085/128] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 120e18d5db..842f6edf75 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1499,5 +1499,6 @@ "Episode": "Episodio", "BoxSet": "Cofanetto", "AlbumArtist": "Artisti dell'Album", - "ReleaseGroup": "Release Group" + "ReleaseGroup": "Release Group", + "UnsupportedPlayback": "Jellyfin non è in grado di decriptare i contenuti protetti da DRM ma tutti i contenuti verranno tentati a prescindere, compresi quelli protetti. Alcuni file potrebbero apparire completamente neri a causa della crittografia o di altre funzionalità non supportate, come i titoli interattivi." } From 54e65ca0fe75add589134203e8dc7235842da62e Mon Sep 17 00:00:00 2001 From: Andrey Sinitsyn Date: Fri, 17 Apr 2020 07:31:43 +0000 Subject: [PATCH 086/128] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 122 ++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 2a6349763c..4e4050880e 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -3,12 +3,12 @@ "AccessRestrictedTryAgainLater": "В настоящее время доступ запрещён. Повторите попытку позже.", "Actor": "Актёр", "Add": "Добавить", - "AddItemToCollectionHelp": "Добавляйте элементы в коллекции проведя их поиск, и с помощью правого щелчка по ним или по касанию меню, чтобы присоединить ко коллекции.", + "AddItemToCollectionHelp": "Добавляйте элементы в коллекции, выполняя их поиск, и с помощью правой кнопки мыши или касания меню присоедините их к коллекции.", "AddToCollection": "Добавить в коллекцию", "AddToPlayQueue": "Добавить в очередь воспроизведения", "AddToPlaylist": "Добавить в плей-лист", "AddedOnValue": "Добавлено {0}", - "AdditionalNotificationServices": "Просмотрите каталог плагинов, чтобы установить дополнительные услуги для уведомлений.", + "AdditionalNotificationServices": "Просмотрите каталог плагинов, чтобы установить дополнительные сервисы уведомлений.", "AirDate": "Дата эфира", "Aired": "Эфирный", "Albums": "Альбомы", @@ -23,10 +23,10 @@ "AllowMediaConversion": "Разрешить преобразование медиаданных", "AllowMediaConversionHelp": "Предоставить или запретить доступ к компоненте преобразования медиаданных.", "AllowOnTheFlySubtitleExtraction": "Разрешить динамическое извлечение субтитров", - "AllowOnTheFlySubtitleExtractionHelp": "Внедрённые субтитры возможно извлекать из видео и доставлять клиентам в виде обычного текста, в целях предотвращения перекодировки видео. На некоторых системах это может занять продолжительное время и вызывать задержки воспроизведения видео в процессе извлечения. Отключите это, для прошивки внедрённых субтитров во время перекодировки видео, при отсутствии встроенной поддержки их в клиентском устройстве.", - "AllowRemoteAccess": "Разрешение удалённого доступа к данному серверу Jellyfin Server.", + "AllowOnTheFlySubtitleExtractionHelp": "Встроенные субтитры могут быть извлечены из видео и доставлены клиентам в виде обычного текста, в целях предотвращения перекодировки видео. На некоторых системах это может занять продолжительное время и вызвать задержки воспроизведения видео в процессе извлечения. Отключите этот параметр, чтобы встроенные субтитры записывались при перекодировании видео, если они изначально не поддерживаются клиентским устройством.", + "AllowRemoteAccess": "Разрешить удалённый доступ к данному серверу Jellyfin Server.", "AllowRemoteAccessHelp": "Если флажок снят, то все удалённые подключения будут заблокированы.", - "AllowedRemoteAddressesHelp": "Список разделённых запятыми IP-адресов или записей IP/netmask для сетей, которым разрешено удалённое соединение. Если не заполнять, то будут использованы все внешние адреса.", + "AllowedRemoteAddressesHelp": "Список разделённых запятыми IP-адресов или записей IP/netmask сетей, которым разрешено удалённое соединение. Если оставить это поле пустым, то будут разрешены все удаленные адреса.", "AlwaysPlaySubtitles": "Воспроизводить всегда", "AlwaysPlaySubtitlesHelp": "Субтитры, соответствующие настройке языка, будут загружаться независимо от языка аудио.", "AnyLanguage": "Любой язык", @@ -36,22 +36,22 @@ "Artists": "Исполнители", "AsManyAsPossible": "Как можно больше", "Ascending": "По возрастанию", - "AspectRatio": "Соот-ие сторон", + "AspectRatio": "Соотношение сторон", "AttributeNew": "Новинка", "Audio": "Аудио", "Auto": "Авто", "AutoBasedOnLanguageSetting": "Авто (на основе настройки языка)", - "Backdrop": "Задник", - "Backdrops": "Задники", + "Backdrop": "Фон", + "Backdrops": "Фоны", "Banner": "Баннер", "BirthDateValue": "Дата рождения: {0}", "BirthLocation": "Место рождения", "BirthPlaceValue": "Место рождения: {0}", "Blacklist": "Чёрный список", - "BookLibraryHelp": "Поддерживаются аудио и текстовые книги. Просмотрите {0}руководство по именованию книг{1}.", + "BookLibraryHelp": "Поддерживаются аудио и текстовые книги. Просмотрите {0}руководство по именованию книг{1}.", "Books": "Книги", "Box": "Коробка", - "BoxRear": "Спинка коробки", + "BoxRear": "Коробка (задняя часть)", "Browse": "Навигация", "BrowsePluginCatalogMessage": "Просмотрите каталог плагинов, чтобы ознакомиться с имеющимися плагинами.", "BurnSubtitlesHelp": "Определяется, должен ли сервер внедрять субтитры при перекодировании. Избежание этого значительно улучшит производительность. Выберите «Авто» для записи основанных на графике форматов (VOBSUB, PGS, SUB и IDX) и некоторых субтитров ASS или SSA.", @@ -70,12 +70,12 @@ "ButtonChangeServer": "Сменить сервер", "ButtonConnect": "Подсоединиться", "ButtonDelete": "Удалить", - "ButtonDeleteImage": "Удалить рисунок", + "ButtonDeleteImage": "Удалить изображение", "ButtonDown": "Вниз", "ButtonDownload": "Загрузить", "ButtonEdit": "Править", - "ButtonEditImages": "Править рисунки", - "ButtonEditOtherUserPreferences": "Править профиль, рисунок и личные настройки этого пользователя.", + "ButtonEditImages": "Править изображения", + "ButtonEditOtherUserPreferences": "Править профиль, изображение и персональные настройки этого пользователя.", "ButtonFilter": "Фильтр", "ButtonForgotPassword": "Напомнить пароль", "ButtonFullscreen": "Полный экран", @@ -90,14 +90,14 @@ "ButtonMore": "Ещё", "ButtonNetwork": "Сеть", "ButtonNew": "Новое", - "ButtonNextTrack": "След. дорожка", + "ButtonNextTrack": "Следующая дорожка", "ButtonOff": "Откл", "ButtonOk": "Ок", "ButtonOpen": "Открыть", - "ButtonParentalControl": "Управлять содержанием", + "ButtonParentalControl": "Родительский контроль", "ButtonPause": "Пауза", "ButtonPlay": "Воспр.", - "ButtonPreviousTrack": "Пред. дорожка", + "ButtonPreviousTrack": "Предыдущая дорожка", "ButtonProfile": "Профиль", "ButtonQuickStartGuide": "Руководство по запуску", "ButtonRefresh": "Обновить", @@ -147,27 +147,27 @@ "CommunityRating": "Общественная оценка", "Composer": "Композитор", "ConfigureDateAdded": "Как конфигурировать дату добавления определяется в Панели Jellyfin Server в параметрах Медиатеки", - "ConfirmDeleteImage": "Удалить рисунок?", + "ConfirmDeleteImage": "Удалить изображение?", "ConfirmDeleteItem": "При удалении данного элемента, он удалится и из файловой системы, и из медиатеки. Вы действительно хотите продолжить?", "ConfirmDeleteItems": "При удалении данных элементов, он удалится и из файловой системы, и из медиатеки. Вы действительно хотите продолжить?", "ConfirmDeletion": "Подтверждение удаления", "ConfirmEndPlayerSession": "Вы хотите завершить работу Jellyfin на {0}?", - "Connect": "Подсоединиться", + "Connect": "Соединиться", "ContinueWatching": "Продолжение просмотра", "Continuing": "Продолжающееся", "CriticRating": "Оценка критиков", "CustomDlnaProfilesHelp": "Создайте настраиваемый профиль, назначаемый для нового устройства или переопределите системный профиль.", "DateAdded": "Дата добавления", "DatePlayed": "Дата воспроизведения", - "DeathDateValue": "Кончина: {0}", - "Default": "Умолчание", + "DeathDateValue": "Дата смерти: {0}", + "Default": "По умолчанию", "DefaultErrorMessage": "Произошла ошибка при обработке запроса. Повторите попытку позже.", "DefaultMetadataLangaugeDescription": "Они являются значениями по умолчанию и могут быть подстроены индивидуально для каждой медиатеки.", "DefaultSubtitlesHelp": "Загрузки субтитров определяются флагами \"По умолчанию\" и \"Форсированные\" во внедрённых метаданных. Языковые настройки учитываются при наличии нескольких опций.", "Delete": "Удалить", "DeleteDeviceConfirmation": "Вы действительно хотите удалить данное устройство? Оно появится снова в следующий раз, когда пользователь войдёт с него.", - "DeleteImage": "Удалить рисунок", - "DeleteImageConfirmation": "Вы действительно хотите удалить данный рисунок?", + "DeleteImage": "Удалить изображение", + "DeleteImageConfirmation": "Вы действительно хотите удалить данное изображение?", "DeleteMedia": "Удалить медиаданные", "DeleteUser": "Удалить пользователя", "DeleteUserConfirmation": "Вы действительно хотите удалить этого пользователя?", @@ -200,7 +200,7 @@ "DropShadow": "Теневая", "EasyPasswordHelp": "Простой PIN-код используется для автономного доступа на поддерживаемых клиентах и может также использоваться для удобного внутрисетевого входа.", "Edit": "Правка", - "EditImages": "Править рисунки", + "EditImages": "Править изображения", "EditMetadata": "Править метаданные", "EditSubtitles": "Править субтитры", "EnableBackdrops": "Задники", @@ -214,7 +214,7 @@ "EnableNextVideoInfoOverlay": "Показывать сведения о следующем видео во время воспроизведения", "EnableNextVideoInfoOverlayHelp": "В конце видео отображать информацию о последующем видео в текущем плей-листе.", "EnablePhotos": "Отображать фотографии", - "EnablePhotosHelp": "Рисунки будут обнаруживаться и отображаться наряду с другими медиафайлами.", + "EnablePhotosHelp": "Изображения будут обнаруживаться и отображаться наряду с другими медиафайлами.", "EnableStreamLooping": "Автоциклирование трансляций", "EnableStreamLoopingHelp": "Включайте, если трансляции содержат данные только на несколько секунд и необходимо непрерывно их запрашивать. Включение этого без необходимости может породить проблемы.", "EnableThemeSongs": "Тематические композиции", @@ -236,7 +236,7 @@ "EveryNDays": "Каждые {0} дней", "ExitFullscreen": "Выход с полного экрана", "ExtraLarge": "Очень крупный", - "ExtractChapterImagesHelp": "Извлечение рисунков сцен предоставляет возможности клиентам для отображения графических меню выбора сцены. Данный процесс может быть медленным, потребляет ресурсы, и могут понадобиться несколько гигабайт пространства. Он работает при обнаружении видеофайлов, а также, как задача, назначенная на ночь. Расписание возможно перенастроить в области Назначенных задач. Не рекомендуется запускать данную задачу в часы пик.", + "ExtractChapterImagesHelp": "Извлечение изображений сцен предоставляет возможности клиентам для отображения графических меню выбора сцены. Данный процесс может быть медленным, потребляет ресурсы, и могут понадобиться несколько гигабайт пространства. Он работает при обнаружении видеофайлов, а также, как задача, назначенная на ночь. Расписание возможно перенастроить в области Назначенных задач. Не рекомендуется запускать данную задачу в часы пик.", "Extras": "Допматериалы", "FFmpegSavePathNotFound": "Мы не смогли обнаружить FFmpeg по введённому вами пути. FFprobe также необходим и должен быть в той же самой папке. Эти компоненты обычно поставляются вместе в одном загрузочном пакете. Проверьте путь и повторите попытку.", "FastForward": "Быстро вперёд", @@ -280,7 +280,7 @@ "HeaderAddScheduledTaskTrigger": "Добавление триггера", "HeaderAddToCollection": "Добавить в коллекцию", "HeaderAddToPlaylist": "Добавление в плей-лист", - "HeaderAddUpdateImage": "Добавление/Обновление рисунка", + "HeaderAddUpdateImage": "Добавление/Обновление изображения", "HeaderAddUser": "Добавить пользователя", "HeaderAdditionalParts": "Дополнительные части", "HeaderAdmin": "Администрирование", @@ -305,7 +305,7 @@ "HeaderCastCrew": "Снимались и снимали", "HeaderChannelAccess": "Доступ ко каналам", "HeaderChannels": "Каналы", - "HeaderChapterImages": "Рисунки сцен", + "HeaderChapterImages": "Изображения сцен", "HeaderCodecProfile": "Профиль кодеков", "HeaderCodecProfileHelp": "Профили кодеков обозначают ограничения устройства при воспроизведении с определёнными кодеками. Если применяется ограничение, то медиаданные перекодируются, даже если кодек настроен для прямого воспроизведения.", "HeaderConfigureRemoteAccess": "Конфигурирование удалённого доступа", @@ -335,7 +335,7 @@ "HeaderDisplay": "Отображение", "HeaderDownloadSync": "Загрузка и синхро", "HeaderEasyPinCode": "Простой PIN-код", - "HeaderEditImages": "Править рисунки", + "HeaderEditImages": "Править изображения", "HeaderEnabledFields": "Включённые поля", "HeaderEnabledFieldsHelp": "Снимите флажок, чтобы зафиксировать поле и защитить его данные от изменнений.", "HeaderEpisodes": "Эпизоды", @@ -343,7 +343,7 @@ "HeaderExternalIds": "Внешние идентификаторы:", "HeaderFeatureAccess": "Доступ к компонентам", "HeaderFeatures": "Материалы", - "HeaderFetchImages": "Отборка рисунков:", + "HeaderFetchImages": "Отборка изображений:", "HeaderFetcherSettings": "Параметры отборщика", "HeaderFilters": "Фильтры", "HeaderForKids": "Детям", @@ -356,8 +356,8 @@ "HeaderIdentificationCriteriaHelp": "Введите хотя бы одно условие распознания.", "HeaderIdentificationHeader": "Заголовок для распознания", "HeaderIdentifyItemHelp": "Введите одно или несколько условий поиска. Изымите условие, чтобы прирастить найденные результаты.", - "HeaderImageOptions": "Опции рисунка", - "HeaderImageSettings": "Параметры рисунков", + "HeaderImageOptions": "Параметры изображения", + "HeaderImageSettings": "Настройки изображения", "HeaderInstall": "Установка", "HeaderInstantMix": "Автомикс", "HeaderItems": "Элементы", @@ -467,10 +467,10 @@ "HeaderTranscodingProfileHelp": "Добавьте профили перекодировки, чтобы указать, какие форматы следует использовать, когда требуется перекодировка.", "HeaderTunerDevices": "Тюнерные устройства", "HeaderTuners": "Тюнеры", - "HeaderTypeImageFetchers": "{0} отборщики рисунков", + "HeaderTypeImageFetchers": "{0} отборщики изображений", "HeaderTypeText": "Ввод текста", "HeaderUpcomingOnTV": "Ожидаемое на ТВ", - "HeaderUploadImage": "Выкладка рисунка", + "HeaderUploadImage": "Загрузка изображения", "HeaderUser": "Пользователь", "HeaderUsers": "Пользователи", "HeaderVideoQuality": "Качество видео", @@ -489,7 +489,7 @@ "Horizontal": "Горизонтально", "HttpsRequiresCert": "Чтобы включить HTTPS для внешних подключений, вам нужно будет предоставить доверенный SSL-cертификат, например, Let's Encrypt. Предоставьте сертификат или отключите защищенные соединения.", "Identify": "Распознать", - "Images": "Рисунки", + "Images": "Изображения", "ImportFavoriteChannelsHelp": "При включении, будут импортированы только каналы, которые обозначены как избранное на тюнерном устройстве.", "ImportMissingEpisodesHelp": "При включении, информация об отсутствующих эпизодах будет импортирована в вашу базу данных Jellyfin и отображаться в пределах сезонов и сериалов. Это может увеличить время сканирования медиатеки.", "InstallingPackage": "Устанавливается {0} (версия {1})", @@ -508,7 +508,7 @@ "LabelAirsBeforeEpisode": "Эпизод airs_before:", "LabelAirsBeforeSeason": "Сезон airs_before:", "LabelAlbum": "Альбом:", - "LabelAlbumArtHelp": "PN используемое для альбомных обложек, внутри атрибута dlna:profileID при upnp:albumArtURI. Некоторым устройствам требуется специфическое значение, вне зависимости от размера рисунка.", + "LabelAlbumArtHelp": "PN используемое для альбомных обложек, внутри атрибута dlna:profileID при upnp:albumArtURI. Некоторым устройствам требуется специфическое значение, вне зависимости от размера изображения.", "LabelAlbumArtMaxHeight": "Макс. высота облома альбома:", "LabelAlbumArtMaxHeightHelp": "Максимальное разрешение обложек альбома, представляемых с помощью upnp:albumArtURI.", "LabelAlbumArtMaxWidth": "Макс. ширина обложки альбома:", @@ -538,7 +538,7 @@ "LabelBurnSubtitles": "Внедрение субтитров:", "LabelCache": "Кэш:", "LabelCachePath": "Путь к кешу:", - "LabelCachePathHelp": "Укажите произвольное расположение для файлов серверного кэша, например, рисунков. Оставьте поле незаполненным, чтобы использовать значение по умолчанию.", + "LabelCachePathHelp": "Укажите произвольное расположение для файлов серверного кэша, например, изображений. Оставьте поле незаполненным, чтобы использовать значение по умолчанию.", "LabelCancelled": "Отменено", "LabelCertificatePassword": "Пароль сертификата:", "LabelCertificatePasswordHelp": "Если для вашего сертификата требуется пароль, то введите его здесь.", @@ -579,7 +579,7 @@ "LabelDownMixAudioScale": "Коэффициент усиления при понижающем микшировании:", "LabelDownMixAudioScaleHelp": "Коэффициент компенсирующего усиления звука при понижающем до стерео микшировании. Значение 1 сохраняет исходный уровень.", "LabelDownloadLanguages": "Загружаемые языки:", - "LabelDropImageHere": "Перетащите рисунок сюда или щёлкните для навигации.", + "LabelDropImageHere": "Перетащите изображение сюда или щёлкните для навигации.", "LabelDropShadow": "Окантовка:", "LabelEasyPinCode": "Простой PIN-код:", "LabelEmbedAlbumArtDidl": "Внедрять альбомные обложки в DIDL", @@ -599,14 +599,14 @@ "LabelEnableHardwareDecodingFor": "Включить аппаратное декодирование для:", "LabelEnableRealtimeMonitor": "Включить отслеживание в реальном времени", "LabelEnableRealtimeMonitorHelp": "В поддерживаемых файловых системах правки файлов будут обрабатываться незамедлительно.", - "LabelEnableSingleImageInDidlLimit": "Лимитировать до единственного внедрённого рисунка", - "LabelEnableSingleImageInDidlLimitHelp": "На некоторых устройствах не отрисовывается нормально, если внедрены несколько рисунков внутри DIDL.", + "LabelEnableSingleImageInDidlLimit": "Ограничить единственным встроенным изображением", + "LabelEnableSingleImageInDidlLimitHelp": "На некоторых устройствах не отрисовывается нормально, если встроено несколько изображений внутри DIDL.", "LabelEndDate": "Конечная дата:", "LabelEpisodeNumber": "Номер эпизода:", "LabelEvent": "Событие:", "LabelEveryXMinutes": "Каждые:", - "LabelExtractChaptersDuringLibraryScan": "Извлекать рисунки сцен в процессе сканирования медиатеки", - "LabelExtractChaptersDuringLibraryScanHelp": "Генерируются рисунки сцен при импорте видео в процессе сканирования медиатеки. В противном случае, они будут извлечены в процессе назначенной задачи «Рисунки сцен», позволяя регулярному сканированию медиатеки завершаться быстрее.", + "LabelExtractChaptersDuringLibraryScan": "Извлекать изображения сцен в процессе сканирования медиатеки", + "LabelExtractChaptersDuringLibraryScanHelp": "Генерируются изображения сцен при импорте видео в процессе сканирования медиатеки. В противном случае, они будут извлечены в процессе назначенной задачи «Изображения сцен», позволяя регулярному сканированию медиатеки завершаться быстрее.", "LabelFailed": "Неудачно", "LabelFileOrUrl": "Файл или URL:", "LabelFinish": "Завершить", @@ -630,8 +630,8 @@ "LabelIconMaxWidth": "Макс. ширина значка:", "LabelIconMaxWidthHelp": "Максимальное разрешение значков представляемых с помощью upnp:icon.", "LabelIdentificationFieldHelp": "Подстрока без учёта регистра, либо регулярное выражение.", - "LabelImageFetchersHelp": "Включите и ранжируйте предпочитаемые отборщики рисунков в порядке приоритета.", - "LabelImageType": "Тип рисунка:", + "LabelImageFetchersHelp": "Включите и ранжируйте предпочитаемые отборщики изображений в порядке приоритета.", + "LabelImageType": "Тип изображения:", "LabelImportOnlyFavoriteChannels": "Ограничиваться каналами обозначенными как избранное", "LabelInNetworkSignInWithEasyPassword": "Включить внутрисетевой вход со своим простым PIN-кодом", "LabelInNetworkSignInWithEasyPasswordHelp": "Используется простой PIN-код для входа в клиенты внутри своей локальной сети. Ваш обычный пароль будет необходим только вне дома. Если PIN-код не заполнен, то внутри своей домашней сети не потребуется пароль.", @@ -641,11 +641,11 @@ "LabelKodiMetadataDateFormat": "Формат даты выпуска:", "LabelKodiMetadataDateFormatHelp": "Все даты в пределах NFO-файлов будут разбираться по данному формату.", "LabelKodiMetadataEnableExtraThumbs": "Копировать extrafanart в поле extrathumbs", - "LabelKodiMetadataEnableExtraThumbsHelp": "При загрузке рисунков, их возможно сохранять внутрь extrafanart и extrathumbs для максимальной совместимости с оболочкой Kodi.", + "LabelKodiMetadataEnableExtraThumbsHelp": "Загружаемые изображения могут быть сохранены внутри полей extrafanart и extrathumbs для максимальной совместимости с оболочкой Kodi.", "LabelKodiMetadataEnablePathSubstitution": "Включить подстановки путей", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Включаются подстановки путей к рисункам с помощью параметров подстановки путей сервера.", - "LabelKodiMetadataSaveImagePaths": "Сохранять пути рисунков в пределах NFO-файлов", - "LabelKodiMetadataSaveImagePathsHelp": "Рекомендуется, если имена файлов рисунков не соответствуют руководящим принципам Kodi.", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Включаются подстановки путей к изображениям с помощью параметров подстановки путей сервера.", + "LabelKodiMetadataSaveImagePaths": "Сохранять пути изображений в пределах NFO-файлов", + "LabelKodiMetadataSaveImagePathsHelp": "Рекомендуется, если имена файлов изображений не соответствуют руководящим принципам Kodi.", "LabelKodiMetadataUser": "Сохранение в NFO-файле данных о просмотре пользователем:", "LabelKodiMetadataUserHelp": "Сохраняет данные о просмотрах в NFO-файлах для использования в других приложениях.", "LabelLanNetworks": "Домашние сети:", @@ -1024,8 +1024,8 @@ "OptionDownloadBannerImage": "Баннер", "OptionDownloadBoxImage": "DVD-бокс", "OptionDownloadDiscImage": "Диск", - "OptionDownloadImagesInAdvance": "Загружать рисунки заблаговременно", - "OptionDownloadImagesInAdvanceHelp": "По умолчанию, большинство рисунков загружаются только при запросе от Jellyfin-приложения. Включите данную опцию, чтобы загружать все рисунки заблаговременно, при импорте новых медиаданных. Это может привести к существенно длительным сканированиям медиатеки.", + "OptionDownloadImagesInAdvance": "Загружать изображения заблаговременно", + "OptionDownloadImagesInAdvanceHelp": "По умолчанию, большинство изображений загружаются только при запросе от Jellyfin-приложения. Включите данную опцию, чтобы загружать все изображения заблаговременно, при импорте новых медиаданных. Это может привести к существенно длительным сканированиям медиатеки.", "OptionDownloadLogoImage": "Логотип", "OptionDownloadMenuImage": "Меню", "OptionDownloadPrimaryImage": "Основной", @@ -1045,7 +1045,7 @@ "OptionEstimateContentLength": "Рассчитывать длину содержимого при перекодировке", "OptionEveryday": "Ежедневно", "OptionExternallyDownloaded": "Внешние загружаемые", - "OptionExtractChapterImage": "Включить извлечение рисунков сцен", + "OptionExtractChapterImage": "Включить извлечение изображений сцен", "OptionFavorite": "Избранное", "OptionFriday": "пятница", "OptionHasSpecialFeatures": "Доп. материалы", @@ -1092,7 +1092,7 @@ "OptionResumable": "Возможно возобновление", "OptionRuntime": "Длительность", "OptionSaturday": "суббота", - "OptionSaveMetadataAsHidden": "Сохранять метаданные и рисунки в виде скрытых файлов", + "OptionSaveMetadataAsHidden": "Сохранять метаданные и изображения в виде скрытых файлов", "OptionSaveMetadataAsHiddenHelp": "Это изменение будет применено к новым метаданным сохраняемым в будущем. Существующие файлы метаданных будут обновлены в следующий раз, когда они будут сохраняться на Jellyfin Server.", "OptionSpecialEpisode": "Спецэпизоды", "OptionSubstring": "Подстрока", @@ -1179,7 +1179,7 @@ "RepeatMode": "Режим повтора", "RepeatOne": "Повторить раз", "ReplaceAllMetadata": "Замена всех метаданных", - "ReplaceExistingImages": "Замена имеющихся рисунков", + "ReplaceExistingImages": "Замена имеющихся изображений", "RequiredForAllRemoteConnections": "Требуется для всех внешних подключений", "RestartPleaseWaitMessage": "Подождите, пока Jellyfin Server выключится и перезапустится. Это может занять минуту или две.", "ResumeAt": "Возобновить с {0}", @@ -1243,7 +1243,7 @@ "Subtitles": "Субтитры", "Suggestions": "Предлагаемое", "Sunday": "воскресенье", - "Sync": "Синхро", + "Sync": "Синхронизация", "SystemDlnaProfilesHelp": "Системные профили доступны только для чтения. Правки системного профиля будут сохранены в новом настраиваемом профиле.", "TV": "ТВ", "TabAccess": "Доступ", @@ -1346,7 +1346,7 @@ "ValueSeconds": "{0} сек", "ValueSeriesCount": "{0} сериал(а/ов)", "ValueSongCount": "{0} композици(и/й)", - "ValueSpecialEpisodeName": "Спецэпизод - {0}", + "ValueSpecialEpisodeName": "Специальный эпизод - {0}", "ValueTimeLimitMultiHour": "Временной лимит: {0} час(а/ов)", "ValueTimeLimitSingleHour": "Временной лимит: 1 час", "ValueVideoCodec": "Видео кодек: {0}", @@ -1373,7 +1373,7 @@ "LabelDynamicExternalId": "{0} Ид:", "LeaveBlankToNotSetAPassword": "Оставьте пустым, чтобы не назначать пароль.", "MessageImageFileTypeAllowed": "Поддерживаются только файлы JPEG и PNG.", - "MessageImageTypeNotSelected": "Выберите тип рисунка из выпадающего меню.", + "MessageImageTypeNotSelected": "Выберите тип изображения из выпадающего меню.", "OptionResElement": "res-элемент", "AuthProviderHelp": "Выберите поставщика аутентификации, который будет использоваться для аутентификации пароля этого пользователя.", "HeaderFavoriteMovies": "Избранные фильмы", @@ -1401,7 +1401,7 @@ "MediaInfoSoftware": "ПО", "MediaInfoStreamTypeAudio": "Аудио", "MediaInfoStreamTypeData": "Данные", - "MediaInfoStreamTypeEmbeddedImage": "Внедрённый рисунок", + "MediaInfoStreamTypeEmbeddedImage": "Встроенное изображение", "MediaInfoStreamTypeSubtitle": "Субтитры", "MediaInfoStreamTypeVideo": "Видео", "MessageNoCollectionsAvailable": "Коллекции позволяют вам наслаждаться персонализированными группами фильмов, сериалов и альбомов. Нажмите кнопку +, чтобы начать создавать коллекции.", @@ -1445,10 +1445,10 @@ "HeaderFavoriteBooks": "Избранные книги", "CopyStreamURL": "Копировать URL потока", "LabelPleaseRestart": "Изменения вступят в силу после перезагрузки веб-клиента вручную.", - "CopyStreamURLSuccess": "URL скопирован успешно.", + "CopyStreamURLSuccess": "URL скопирован успешно.", "MusicLibraryHelp": "Просмотрите {0}руководство по именованию музыки{1}.", "FetchingData": "Выборка дополнительных данных", - "ButtonAddImage": "Добавить рисунок", + "ButtonAddImage": "Добавить изображение", "HeaderFavoritePeople": "Избранные люди", "OptionRandom": "Случайный", "ButtonSplit": "Разделить", @@ -1456,8 +1456,8 @@ "HeaderNavigation": "Навигация", "LabelVideoResolution": "Разрешение видео:", "LabelStreamType": "Тип потока:", - "EnableFastImageFadeInHelp": "Включить быстрое появление анимации для загруженных рисунков", - "EnableFastImageFadeIn": "Быстрое появление рисунка", + "EnableFastImageFadeInHelp": "Включить быстрое появление анимации для загруженных изображений", + "EnableFastImageFadeIn": "Быстрое появление изображения", "LabelPlayerDimensions": "Размеры проигрывателя:", "LabelDroppedFrames": "Пропущенные кадры:", "LabelCorruptedFrames": "Испорченные кадры:", @@ -1489,7 +1489,7 @@ "ClientSettings": "Параметры клиента", "BoxSet": "Коллекция", "Artist": "Исполнитель", - "AlbumArtist": "Исп. альбома", + "AlbumArtist": "Исполнитель альбома", "Album": "Альбом", "LastSeen": "Последнимй раз был {0}", "WriteAccessRequired": "Jellyfin Server требуются права на запись в эту папку. Обеспечьте доступ для записи и попробуйте снова.", From b1c12a7eb143b788f4fba8ea31e17dbed63f0618 Mon Sep 17 00:00:00 2001 From: lldsolitude Date: Fri, 17 Apr 2020 04:10:31 +0000 Subject: [PATCH 087/128] Translated using Weblate (Chinese (Simplified)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 671c183a1d..c48a661d0c 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1504,5 +1504,6 @@ "LabelDeinterlaceMethod": "反交错方法:", "DeinterlaceMethodHelp": "选择对隔行扫描内容进行转码时所用的反交错方法。", "LabelLibraryPageSize": "媒体库分页阈值:", - "LabelLibraryPageSizeHelp": "设置媒体库页面每页要显示的最多媒体个数。设置为 0 以禁用分页。" + "LabelLibraryPageSizeHelp": "设置媒体库页面每页要显示的最多媒体个数。设置为 0 以禁用分页。", + "UnsupportedPlayback": "Jellyfin无法解密被DRM保护的内容,但仍然会尝试播放包括受保护内容在内的所有内容。某些文件由于被加密或包含不受支持的特性(如互动标题),在播放时可能显示为黑屏。" } From b87adc9d6c0727d3db424b33f5e6a53fa9deae34 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 17 Apr 2020 14:34:34 +0300 Subject: [PATCH 088/128] Add scheduled playback progress report --- src/components/playback/playbackmanager.js | 19 +--- src/libraries/apiclient/apiclientcore.js | 100 +++++++++++++++++---- 2 files changed, 82 insertions(+), 37 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index b5340f0bfb..29bc94bf14 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -3280,7 +3280,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla function onPlaybackVolumeChange(e) { var player = this; - sendProgressUpdateDelayed(player, 'volumechange'); + sendProgressUpdate(player, 'volumechange'); } function onRepeatModeChange(e) { @@ -3375,16 +3375,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla pluginManager.ofType('mediaplayer').map(initMediaPlayer); - /** Delay timer for sendProgressUpdate */ - var sendProgressUpdateTimer; - - /** Delay time in ms for sendProgressUpdate */ - var sendProgressUpdateDelay = 700; - function sendProgressUpdate(player, progressEventName, reportPlaylist) { - clearTimeout(sendProgressUpdateTimer); - sendProgressUpdateTimer = null; - if (!player) { throw new Error('player cannot be null'); } @@ -3409,14 +3400,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla } } - function sendProgressUpdateDelayed(player, progressEventName, reportPlaylist) { - if (!sendProgressUpdateTimer) { - sendProgressUpdateTimer = setTimeout(function () { - sendProgressUpdate(player, progressEventName, reportPlaylist); - }, sendProgressUpdateDelay); - } - } - function getLiveStreamMediaInfo(player, streamInfo, mediaSource, liveStreamId, serverId) { console.debug('getLiveStreamMediaInfo'); diff --git a/src/libraries/apiclient/apiclientcore.js b/src/libraries/apiclient/apiclientcore.js index 557a4e1033..499c22b4e0 100644 --- a/src/libraries/apiclient/apiclientcore.js +++ b/src/libraries/apiclient/apiclientcore.js @@ -1,6 +1,12 @@ define(["events", "appStorage"], function(events, appStorage) { "use strict"; + /** Report rate limits in ms for different events */ + const reportRateLimits = { + "timeupdate": 10000, + "volumechange": 3000 + }; + function redetectBitrate(instance) { stopBitrateDetection(instance), instance.accessToken() && !1 !== instance.enableAutomaticBitrateDetection && setTimeout(redetectBitrateInternal.bind(instance), 6e3) } @@ -231,6 +237,11 @@ define(["events", "appStorage"], function(events, appStorage) { } return 0 } + + function cancelReportPlaybackProgressPromise(instance) { + if (typeof instance.reportPlaybackProgressCancel === "function") instance.reportPlaybackProgressCancel(); + } + ApiClient.prototype.appName = function() { return this._appName }, ApiClient.prototype.setRequestHeaders = function(headers) { @@ -1417,6 +1428,7 @@ define(["events", "appStorage"], function(events, appStorage) { }, ApiClient.prototype.reportPlaybackStart = function(options) { if (!options) throw new Error("null options"); this.lastPlaybackProgressReport = 0, this.lastPlaybackProgressReportTicks = null, stopBitrateDetection(this); + cancelReportPlaybackProgressPromise(this); var url = this.getUrl("Sessions/Playing"); return this.ajax({ type: "POST", @@ -1426,25 +1438,74 @@ define(["events", "appStorage"], function(events, appStorage) { }) }, ApiClient.prototype.reportPlaybackProgress = function(options) { if (!options) throw new Error("null options"); - var newPositionTicks = options.PositionTicks; - if ("timeupdate" === (options.EventName || "timeupdate")) { - var now = (new Date).getTime(), - msSinceLastReport = now - (this.lastPlaybackProgressReport || 0); - if (msSinceLastReport <= 1e4) { - if (!newPositionTicks) return Promise.resolve(); - var expectedReportTicks = 1e4 * msSinceLastReport + (this.lastPlaybackProgressReportTicks || 0); - if (Math.abs((newPositionTicks || 0) - expectedReportTicks) < 5e7) return Promise.resolve() - } - this.lastPlaybackProgressReport = now - } else this.lastPlaybackProgressReport = 0; - this.lastPlaybackProgressReportTicks = newPositionTicks; - var url = this.getUrl("Sessions/Playing/Progress"); - return this.ajax({ - type: "POST", - data: JSON.stringify(options), - contentType: "application/json", - url: url - }) + + const eventName = options.EventName || "timeupdate"; + let reportRateLimitTime = reportRateLimits[eventName] || 0; + + const now = (new Date).getTime(); + const msSinceLastReport = now - (this.lastPlaybackProgressReport || 0); + const newPositionTicks = options.PositionTicks; + + if (msSinceLastReport < reportRateLimitTime && eventName === "timeupdate" && newPositionTicks) { + const expectedReportTicks = 1e4 * msSinceLastReport + (this.lastPlaybackProgressReportTicks || 0); + if (Math.abs((newPositionTicks || 0) - expectedReportTicks) >= 5e7) reportRateLimitTime = 0; + } + + if (reportRateLimitTime < (this.reportPlaybackProgressTimeout !== undefined ? this.reportPlaybackProgressTimeout : 1e6)) { + cancelReportPlaybackProgressPromise(this); + } + + this.lastPlaybackProgressOptions = options; + + if (this.reportPlaybackProgressPromise) return Promise.resolve(); + + let instance = this; + let promise; + let cancelled = false; + + let resetPromise = function () { + if (instance.reportPlaybackProgressPromise !== promise) return; + + delete instance.lastPlaybackProgressOptions; + delete instance.reportPlaybackProgressTimeout; + delete instance.reportPlaybackProgressPromise; + delete instance.reportPlaybackProgressCancel; + }; + + let sendReport = function (options) { + resetPromise(); + + if (!options) throw new Error("null options"); + + instance.lastPlaybackProgressReport = (new Date).getTime(); + instance.lastPlaybackProgressReportTicks = options.PositionTicks; + + const url = instance.getUrl("Sessions/Playing/Progress"); + return instance.ajax({ + type: "POST", + data: JSON.stringify(options), + contentType: "application/json", + url: url + }); + }; + + let delay = Math.max(0, reportRateLimitTime - msSinceLastReport); + + promise = new Promise((resolve, reject) => setTimeout(resolve, delay)).then(() => { + if (cancelled) return Promise.resolve(); + return sendReport(instance.lastPlaybackProgressOptions); + }).finally(() => { + resetPromise(); + }); + + this.reportPlaybackProgressTimeout = reportRateLimitTime; + this.reportPlaybackProgressPromise = promise; + this.reportPlaybackProgressCancel = function () { + cancelled = true; + resetPromise(); + }; + + return promise; }, ApiClient.prototype.reportOfflineActions = function(actions) { if (!actions) throw new Error("null actions"); var url = this.getUrl("Sync/OfflineActions"); @@ -1489,6 +1550,7 @@ define(["events", "appStorage"], function(events, appStorage) { }, ApiClient.prototype.reportPlaybackStopped = function(options) { if (!options) throw new Error("null options"); this.lastPlaybackProgressReport = 0, this.lastPlaybackProgressReportTicks = null, redetectBitrate(this); + cancelReportPlaybackProgressPromise(this); var url = this.getUrl("Sessions/Playing/Stopped"); return this.ajax({ type: "POST", From 9c7e5a0382ba1fc32c99db367da3a3799f68b5f2 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 17 Apr 2020 15:44:23 +0300 Subject: [PATCH 089/128] Fix smelling code --- src/libraries/apiclient/apiclientcore.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libraries/apiclient/apiclientcore.js b/src/libraries/apiclient/apiclientcore.js index 499c22b4e0..2046cae69b 100644 --- a/src/libraries/apiclient/apiclientcore.js +++ b/src/libraries/apiclient/apiclientcore.js @@ -1448,7 +1448,7 @@ define(["events", "appStorage"], function(events, appStorage) { if (msSinceLastReport < reportRateLimitTime && eventName === "timeupdate" && newPositionTicks) { const expectedReportTicks = 1e4 * msSinceLastReport + (this.lastPlaybackProgressReportTicks || 0); - if (Math.abs((newPositionTicks || 0) - expectedReportTicks) >= 5e7) reportRateLimitTime = 0; + if (Math.abs(newPositionTicks - expectedReportTicks) >= 5e7) reportRateLimitTime = 0; } if (reportRateLimitTime < (this.reportPlaybackProgressTimeout !== undefined ? this.reportPlaybackProgressTimeout : 1e6)) { @@ -1472,18 +1472,18 @@ define(["events", "appStorage"], function(events, appStorage) { delete instance.reportPlaybackProgressCancel; }; - let sendReport = function (options) { + let sendReport = function (lastOptions) { resetPromise(); - if (!options) throw new Error("null options"); + if (!lastOptions) throw new Error("null options"); instance.lastPlaybackProgressReport = (new Date).getTime(); - instance.lastPlaybackProgressReportTicks = options.PositionTicks; + instance.lastPlaybackProgressReportTicks = lastOptions.PositionTicks; const url = instance.getUrl("Sessions/Playing/Progress"); return instance.ajax({ type: "POST", - data: JSON.stringify(options), + data: JSON.stringify(lastOptions), contentType: "application/json", url: url }); From 4648b6012c6e9236b80558921f84cbf95c30a1bc Mon Sep 17 00:00:00 2001 From: Andrey Sinitsyn Date: Fri, 17 Apr 2020 12:59:28 +0000 Subject: [PATCH 090/128] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 4e4050880e..6d88e3ea8d 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -867,7 +867,7 @@ "MediaInfoCodec": "Кодек", "MediaInfoCodecTag": "Тег кодека", "MediaInfoContainer": "Контейнер", - "MediaInfoDefault": "Умолчание", + "MediaInfoDefault": "По умолчанию", "MediaInfoExternal": "Внешние", "MediaInfoForced": "Форсир-ые", "MediaInfoFramerate": "Ч-та кадров", @@ -1419,8 +1419,8 @@ "OptionLoginAttemptsBeforeLockoutHelp": "При значении 0 наследуются по умолчанию три попытки для обычных пользователей и пять для администратора. При установке этого значения в -1 функция отключается.", "OptionPoster": "Постер", "OptionPosterCard": "Постер-карта", - "OptionThumb": "Бегунок", - "OptionThumbCard": "Бегунок-карта", + "OptionThumb": "Эскиз", + "OptionThumbCard": "Эскиз-карта", "PasswordResetProviderHelp": "Выберите поставщика сброса пароля, который будет использоваться, когда этот пользователь запрашивает сброс пароля", "PlaybackData": "Данные воспроизведения", "SubtitleOffset": "Сдвиг субтитров", @@ -1499,5 +1499,6 @@ "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Используется информация об эпизоде из встроенных метаданных, если они доступны.", "LabelLibraryPageSizeHelp": "Устанавливается количество элементов для отображения на странице медиатеки. Установите 0 для отключения нумерации страниц.", "LabelDeinterlaceMethod": "Метод устранения гребёнки:", - "DeinterlaceMethodHelp": "Выберите метод устранения гребёнки, который будет использоваться при перекодировании чересстрочного содержания." + "DeinterlaceMethodHelp": "Выберите метод устранения гребёнки, который будет использоваться при перекодировании чересстрочного содержания.", + "UnsupportedPlayback": "Jellyfin не может расшифровать содержимое, защищенное DRM, но в любом случае будет предпринята попытка расшифровки всего содержимого, включая защищенные заголовки. Некоторые файлы могут выглядеть полностью черными из-за шифрования или других неподдерживаемых функций, таких как интерактивные заголовки." } From 256970afcf550e98b8dd1a67bd1124e981ac54cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mur=C3=A1ncsik=20Sebesty=C3=A9n?= Date: Fri, 17 Apr 2020 17:08:03 +0000 Subject: [PATCH 091/128] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 92fc370c02..0c69b41123 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1473,8 +1473,8 @@ "PlaybackErrorNoCompatibleStream": "Ez a kliens nem kompatibilis ezzel a médiával és a szerver nem tud kompatibilis streamet küldeni az eszközre.", "AllowFfmpegThrottlingHelp": "Ha az átkódolás vagy remux eléggé előtöltődött a jelenlegi lejátszási pozícióhoz képest, ez megállítja a folyamatot, hogy kevesebb erőforrást vegyen igénybe. Ez akkor hasznos, ha ritkán ugrálsz előre a lejátszott videókban. Kapcsold ki, ha lejátszási problémákba ütközöl.", "AllowFfmpegThrottling": "Átkódolás visszafogása", - "PreferEmbeddedEpisodeInfosOverFileNames": "Inkább a beágyazott epizódokra vonatkozó információkat részesítse előnyben a fájlnevekkel szemben", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Ez a beágyazott metaadatok epizódinformációit használja, ha rendelkezésre állnak.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Az epizódból elérhető beágyazott információkat használja inkább, fájlnevek helyett", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Ez az epizóddal kapcsolatos beágyazott metaadatokat használja, ha azok elérhetőek.", "OnApplicationStartup": "Az alkalmazás indításakor", "EveryXHours": "{0} óránként", "EveryHour": "Óránként", @@ -1494,8 +1494,11 @@ "Movie": "Film", "Episode": "Epizód", "ClientSettings": "Kliens beállítások", - "BoxSet": "Dobozos készlet", + "BoxSet": "Dobozos kiadások", "Artist": "Előadó", "AlbumArtist": "Album előadó", - "Album": "Album" + "Album": "Album", + "LabelLibraryPageSizeHelp": "Az oldalnként megmutatott elemek száma. Nullára állítva a lapozási funkció ki lesz kapcsolva.", + "LabelLibraryPageSize": "Könyvtár oldalméret:", + "LabelDeinterlaceMethod": "Deinterlacing mód:" } From bffafa69143b110f4a550c66642a4497366fad5b Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 17 Apr 2020 20:17:20 +0300 Subject: [PATCH 092/128] Make reportPlayback less spammy --- src/components/playback/playbackmanager.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 29bc94bf14..161cc391f3 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -38,6 +38,12 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla events.trigger(playbackManagerInstance, 'playerchange', [newPlayer, newTarget, previousPlayer]); } + /** Last invoked method */ + let reportPlaybackLastMethod; + + /** Last invoke time of method */ + let reportPlaybackLastTime; + function reportPlayback(playbackManagerInstance, state, player, reportPlaylist, serverId, method, progressEventName) { if (!serverId) { @@ -57,7 +63,14 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla addPlaylistToPlaybackReport(playbackManagerInstance, info, player, serverId); } - console.debug(method + '-' + JSON.stringify(info)); + const now = (new Date).getTime(); + + if (method !== reportPlaybackLastMethod || now - (reportPlaybackLastTime || 0) >= 1e3) { + console.debug(method + '-' + JSON.stringify(info)); + reportPlaybackLastMethod = method; + reportPlaybackLastTime = now; + } + var apiClient = connectionManager.getApiClient(serverId); apiClient[method](info); } From 9d118baa2519ece1274b42d6adc544fa7c46d561 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Fri, 17 Apr 2020 20:56:38 +0200 Subject: [PATCH 093/128] Fix accidentally deleted CSS in details page --- src/assets/css/librarybrowser.css | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 83bc9d9826..af5427759f 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -1101,3 +1101,50 @@ div:not(.sectionTitleContainer-cards) > .sectionTitle-cards { .itemsViewSettingsContainer > .button-flat { margin: 0; } + +.layout-mobile #myPreferencesMenuPage { + padding-top: 3.75em; +} + +.itemDetailsGroup { + margin-bottom: 1.5em; +} + +.trackSelections { + max-width: 44em; +} + +.detailsGroupItem, +.trackSelections .selectContainer { + display: flex; + max-width: 44em; + margin: 0 0 0.5em !important; +} + +.trackSelections .selectContainer { + margin: 0 0 0.3em !important; +} + +.detailsGroupItem .label, +.trackSelections .selectContainer .selectLabel { + cursor: default; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 6.25em; + margin: 0 0.6em 0 0; +} + +.trackSelections .selectContainer .selectLabel { + margin: 0 0.2em 0 0; +} + +.trackSelections .selectContainer .detailTrackSelect { + font-size: inherit; + padding: 0; + overflow: hidden; +} + +.trackSelections .selectContainer .selectArrowContainer .selectArrow { + margin-top: 0; + font-size: 1.4em; +} From 79c48f6476f6a66ca133807a16d61f4805aa9d70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mur=C3=A1ncsik=20Sebesty=C3=A9n?= Date: Fri, 17 Apr 2020 17:12:32 +0000 Subject: [PATCH 094/128] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 0c69b41123..32a30dcd83 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1484,7 +1484,7 @@ "DailyAt": "Naponta ekkor: {0}", "LastSeen": "Utoljára elérhető {0}", "PersonRole": "mint {0}", - "ListPaging": "{0}-{1} ennyiből: {2}", + "ListPaging": "{0}-{1} / {2}", "WriteAccessRequired": "A Jellyfin Szerver írási jogosultságot igényel ehhez a könyvtárhoz. Kérjük, ellenőrizd, hogy van-e jogod írni ide, majd próbáld újra.", "PathNotFound": "Az elérési út nem található. Kérjük, ellenőrizd, hogy az elérési út megfelelő-e, majd próbáld újra.", "Track": "Szám", @@ -1500,5 +1500,10 @@ "Album": "Album", "LabelLibraryPageSizeHelp": "Az oldalnként megmutatott elemek száma. Nullára állítva a lapozási funkció ki lesz kapcsolva.", "LabelLibraryPageSize": "Könyvtár oldalméret:", - "LabelDeinterlaceMethod": "Deinterlacing mód:" + "LabelDeinterlaceMethod": "Deinterlacing mód:", + "DeinterlaceMethodHelp": "Válassza ki a váltottsorosság megszűntetéséhez használandó módszert a váltottsoros tartalmak transzkódolásakor.", + "UnsupportedPlayback": "Jellyfin nem tud DRM-titkosított tartalmak dekriptálására, ettől függetlenül a lejátszással mindig megpróbálkozik. Néhány fájl emiatt teljesen fekete képernyőt ad, amely vagy a titkosítás miatt van, vagy nem olyan nem támogatott tartalmak miatt, mint az interaktív címek.", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", + "ReleaseGroup": "Kiadócsoport" } From 0910e6cf4e197782c35a3bc9a5bfda86dba1a255 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 17 Apr 2020 22:53:12 +0300 Subject: [PATCH 095/128] Fix reference to undefined variable --- src/scripts/browser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scripts/browser.js b/src/scripts/browser.js index f89df82c0c..8b21c85469 100644 --- a/src/scripts/browser.js +++ b/src/scripts/browser.js @@ -77,10 +77,10 @@ define([], function () { var camel = prop.replace(/-([a-z]|[0-9])/ig, function (all, letter) { return (letter + '').toUpperCase(); }); - // Check if the property is supported - var support = (camel in el.style); // Create test element var el = document.createElement('div'); + // Check if the property is supported + var support = (camel in el.style); // Assign the property and value to invoke // the CSS interpreter el.style.cssText = prop + ':' + value; From 71b458829f92993f16e13bcac4f6aef794cb9893 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 17 Apr 2020 16:16:04 -0400 Subject: [PATCH 096/128] Revert "Hide User menu icon on mobile" This reverts commit 5b513146a730b6f23e128d6ab36a6af2cc41ab55. --- src/scripts/librarymenu.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js index 71326add4e..fe7c3bcaf2 100644 --- a/src/scripts/librarymenu.js +++ b/src/scripts/librarymenu.js @@ -63,9 +63,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", " hasImage = true; } - if (!layoutManager.mobile) { - headerUserButton.classList.remove("hide"); - } + headerUserButton.classList.remove("hide"); } else { headerUserButton.classList.add("hide"); } From 71746a6ffcc60dcfd444fb00561acf5979bf8811 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sat, 18 Apr 2020 00:06:51 +0300 Subject: [PATCH 097/128] Extract const value --- src/components/playback/playbackmanager.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 161cc391f3..f323d3609c 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,6 +1,9 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'playQueueManager', 'userSettings', 'globalize', 'connectionManager', 'loading', 'apphost', 'screenfull'], function (events, datetime, appSettings, itemHelper, pluginManager, PlayQueueManager, userSettings, globalize, connectionManager, loading, apphost, screenfull) { 'use strict'; + /** Delay time in ms for reportPlayback logging */ + const reportPlaybackLogDelay = 1e3; + function enableLocalPlaylistManagement(player) { if (player.getPlaylist) { @@ -65,7 +68,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla const now = (new Date).getTime(); - if (method !== reportPlaybackLastMethod || now - (reportPlaybackLastTime || 0) >= 1e3) { + if (method !== reportPlaybackLastMethod || now - (reportPlaybackLastTime || 0) >= reportPlaybackLogDelay) { console.debug(method + '-' + JSON.stringify(info)); reportPlaybackLastMethod = method; reportPlaybackLastTime = now; From d98cd1887cbedd33dd470deb4fcc60e1e10be60f Mon Sep 17 00:00:00 2001 From: Julien Machiels Date: Sat, 18 Apr 2020 05:14:48 +0000 Subject: [PATCH 098/128] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 72ea6f3ed3..2189b6826c 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1463,7 +1463,7 @@ "LabelPlayerDimensions": "Dimension du lecteur :", "LabelDroppedFrames": "Images perdues :", "LabelCorruptedFrames": "Images corrompues :", - "CopyStreamURLError": "Il y a eu une erreur lors de la copie du URL.", + "CopyStreamURLError": "Une erreur est survenue lors de la copie de l'URL.", "AskAdminToCreateLibrary": "Demander à un administrateur de créer une médiathèque.", "AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment loin de la position de lecture, le processus se mettra en pause afin d’économiser des ressources. Plus utile lors d’une lecture continue. À désactiver en cas de problèmes de lecture.", "AllowFfmpegThrottling": "Adapter la Vitesse du Transcodage", @@ -1500,5 +1500,6 @@ "LabelDeinterlaceMethod": "Méthode de désentrelacement :", "DeinterlaceMethodHelp": "Sélectionnes la méthode de désentrelacement à utiliser lors du transcodage de contenu entrelacé.", "LabelLibraryPageSize": "Taille de la page de la médiathèque :", - "LabelLibraryPageSizeHelp": "Définit la quantité d'éléments à afficher sur une page de médiathèque. Définir à 0 afin de désactiver la pagination." + "LabelLibraryPageSizeHelp": "Définit la quantité d'éléments à afficher sur une page de médiathèque. Définir à 0 afin de désactiver la pagination.", + "UnsupportedPlayback": "Jellyfin ne peut pas décoder du contenu protégé par un système de gestion des droits numériques, mais une tentative de lecture sera effectuée sur tout le contenu, y compris les titres protégés. Certains fichiers peuvent apparaître complètement noir, du fait de protections ou de fonctionnalités non supportées, comme les titres interactifs." } From 409409ba506b5e7cc0a9785f1cb2f2063bb42fa6 Mon Sep 17 00:00:00 2001 From: Vitorvlv Date: Sat, 18 Apr 2020 02:40:07 +0000 Subject: [PATCH 099/128] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 5111966b2e..54c300b569 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1499,5 +1499,6 @@ "BoxSet": "Coleção", "Artist": "Artista", "AlbumArtist": "Artista do Album", - "Album": "Album" + "Album": "Album", + "UnsupportedPlayback": "O Jellyfin não pode descriptografar conteúdo protegido por DRM, porém mesmo assim fará uma tentativa para todo tipo de conteúdo, incluindo títulos protegidos. A imagem de alguns arquivos pode aparecer completamente preta devido a criptografia ou outros recursos não suportados, como títulos interativos." } From a25d037e95f88c864ba3671ab560b507c57186a6 Mon Sep 17 00:00:00 2001 From: Julien Machiels Date: Sat, 18 Apr 2020 05:38:47 +0000 Subject: [PATCH 100/128] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 2189b6826c..62b9e1d326 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -199,10 +199,10 @@ "EditMetadata": "Éditer les métadonnées", "EditSubtitles": "Modifier les sous-titres", "EnableBackdrops": "Images d'arrière-plans", - "EnableBackdropsHelp": "Afficher les images d'arrière-plans sur certaines pages pendant la navigation dans la médiathèque.", + "EnableBackdropsHelp": "Afficher des images d'arrière-plans sur certaines pages pendant la navigation dans la médiathèque.", "EnableCinemaMode": "Mode cinéma", "EnableColorCodedBackgrounds": "Fonds avec code couleur", - "EnableDisplayMirroring": "Partage d'écran", + "EnableDisplayMirroring": "Affichage en miroir", "EnableExternalVideoPlayers": "Lecteurs vidéo externes", "EnableExternalVideoPlayersHelp": "Une liste des lecteurs externes sera affichée au lancement de la lecture d'une vidéo.", "EnableHardwareEncoding": "Activer l'encodage matériel", @@ -231,7 +231,7 @@ "EveryNDays": "Tous les {0} jours", "ExitFullscreen": "Sortir du plein écran", "ExtraLarge": "Très Grand", - "ExtractChapterImagesHelp": "L'extraction d'images de chapitre permettra aux applications d'afficher des menus visuels pour la sélection des scènes. Le processus peut être long, consommateur de ressources et peut nécessiter de nombreux gigaoctets de stockage. Il s'exécute lorsque des vidéos sont découvertes et également comme tâche planifiée. La planification peut être modifiée dans les options du planificateur de tâches. Il n'est pas conseillé d'exécuter cette tâche pendant les heures d'usage intensif.", + "ExtractChapterImagesHelp": "L'extraction d'images de chapitre permettra aux applications d'afficher des menus visuels pour la sélection des scènes. Le processus peut être lent, gourmand en ressources et peut nécessiter plusieurs gigaoctets de stockage. Il s'exécute lorsque des vidéos sont découvertes et également comme tâche planifiée. L'horaire est configurable dans les options du planificateur de tâches. Il n'est pas recommandé d'exécuter cette tâche pendant les heures d'usage intensif.", "FFmpegSavePathNotFound": "Nous ne pouvons pas localiser FFmpeg en utilisant le chemin que vous avez saisi. FFprobe est également nécessaire et doit exister dans le même dossier. Ces composants sont généralement regroupés dans le même téléchargement. Veuillez vérifier le chemin et essayer à nouveau.", "FastForward": "Avance rapide", "Favorite": "Favori", @@ -274,7 +274,7 @@ "HeaderAddUser": "Ajouter un utilisateur", "HeaderAdditionalParts": "Parties additionelles", "HeaderAdmin": "Administrateur", - "HeaderAlbumArtists": "Artistes d'album", + "HeaderAlbumArtists": "Artistes de l'album", "HeaderAlert": "Alerte", "HeaderAllowMediaDeletionFrom": "Autoriser la suppression de médias à partir de", "HeaderApiKey": "Clé API", @@ -624,7 +624,7 @@ "LabelKidsCategories": "Catégories jeunesse :", "LabelKodiMetadataDateFormat": "Format de la date de sortie :", "LabelKodiMetadataDateFormatHelp": "Toutes les dates des fichiers NFO seront anlysés en utilisant ce format.", - "LabelKodiMetadataEnableExtraThumbs": "Copier les extrafanart vers le champ extrathumbs", + "LabelKodiMetadataEnableExtraThumbs": "Copier les extrafanart dans les champs extrathumbs", "LabelKodiMetadataEnableExtraThumbsHelp": "Pendant le téléchargement, les images peuvent être enregistrées en tant qu'extrafanart et extrathumbs pour améliorer la compatibilité avec le skin Kodi.", "LabelKodiMetadataEnablePathSubstitution": "Activer la substitution des chemins", "LabelKodiMetadataEnablePathSubstitutionHelp": "Active la substitution du chemin des images en utilisant les paramètres de substitution des chemins du serveur.", @@ -1437,10 +1437,10 @@ "LabelVideoBitrate": "Débit vidéo :", "LabelTranscodingProgress": "Progression du transcodage :", "LabelTranscodingFramerate": "Taux de rafraîchissement du transcodage :", - "LabelPleaseRestart": "Les changements prendront effet lors d'un rechargement manuel du client web.", + "LabelPleaseRestart": "Les changements prendront effet après un rechargement manuel du client web.", "LabelPlayMethod": "Méthode de lecture :", "LabelPlayer": "Lecteur :", - "LabelBaseUrl": "Lien d'origine :", + "LabelBaseUrl": "URL de base :", "LabelAudioSampleRate": "Taux d’échantillonnage audio :", "LabelAudioCodec": "Codec audio :", "LabelAudioChannels": "Canaux audio :", @@ -1448,7 +1448,7 @@ "FetchingData": "Récuperer des données suplémentaires", "CopyStreamURLSuccess": "URL copiée avec succès.", "CopyStreamURL": "Copier l'URL du flux", - "LabelBaseUrlHelp": "Vous pouvez ajouter un sous-répertoire personalisé ici pour accéder au serveur depuis une URL plus exclusive.", + "LabelBaseUrlHelp": "Vous pouvez ajouter un sous-répertoire personnalisé ici pour accéder au serveur via un lien unique.", "HeaderFavoritePeople": "Personnes préférées", "OptionRandom": "Aléatoire", "ButtonSplit": "Séparer", @@ -1458,8 +1458,8 @@ "MessageConfirmAppExit": "Voulez-vous quitter ?", "LabelVideoResolution": "Résolution vidéo :", "LabelStreamType": "Type de flux :", - "EnableFastImageFadeInHelp": "Activer un transition plus rapide pour images téléchargées", - "EnableFastImageFadeIn": "Transition d'image rapide", + "EnableFastImageFadeInHelp": "Activer un fondu plus rapide pour l'animation des images chargées", + "EnableFastImageFadeIn": "Fondu d'image rapide", "LabelPlayerDimensions": "Dimension du lecteur :", "LabelDroppedFrames": "Images perdues :", "LabelCorruptedFrames": "Images corrompues :", From b6fe5f3fef0ef39f8b7483746e123d14a9f88d82 Mon Sep 17 00:00:00 2001 From: Julien Machiels Date: Sat, 18 Apr 2020 05:53:19 +0000 Subject: [PATCH 101/128] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 62b9e1d326..651a9a4cef 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1399,7 +1399,7 @@ "AuthProviderHelp": "Sélectionner un fournisseur d'authentification pour authentifier le mot de passe de cet utilisateur.", "PasswordResetProviderHelp": "Choisissez un Fournisseur de réinitialisation de mot de passe à utiliser lorsqu'un utilisateur demande la réinitialisation de son mot de passe", "HeaderHome": "Accueil", - "LabelUserLoginAttemptsBeforeLockout": "Essais manqués restants avant verrouillage utilisateur :", + "LabelUserLoginAttemptsBeforeLockout": "Tentatives de connexion échouées avant que l'utilisateur ne soit verrouillé:", "DashboardOperatingSystem": "Système d'Exploitation: {0}", "DashboardArchitecture": "Architecture : {0}", "LaunchWebAppOnStartup": "Démarrer l'interface web dans mon navigateur quand le serveur est démarré", From af43213ffbccf566bcc0e330f2c6a453a071556b Mon Sep 17 00:00:00 2001 From: Julien Machiels Date: Sat, 18 Apr 2020 06:00:57 +0000 Subject: [PATCH 102/128] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 651a9a4cef..78c4d9e15c 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1409,7 +1409,7 @@ "MessageNoServersAvailable": "Aucun serveur n'a été trouvé en utilisant la recherche automatique de serveur.", "OptionBanner": "Bannière", "OptionList": "Liste", - "OptionLoginAttemptsBeforeLockout": "Détermine le nombre de tentative de connexion infructueuse avant le blocage d'accès.", + "OptionLoginAttemptsBeforeLockout": "Défini le nombre de tentative de connexion échouées avant blocage du compte", "OptionPoster": "Affiche", "OptionPosterCard": "Affichette", "OptionThumb": "Vignette", @@ -1467,7 +1467,7 @@ "AskAdminToCreateLibrary": "Demander à un administrateur de créer une médiathèque.", "AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment loin de la position de lecture, le processus se mettra en pause afin d’économiser des ressources. Plus utile lors d’une lecture continue. À désactiver en cas de problèmes de lecture.", "AllowFfmpegThrottling": "Adapter la Vitesse du Transcodage", - "NoCreatedLibraries": "Il semblerait que vous n'ayez créé aucune librairie. {0}Voulez-vous en créer une maintenant ?{1}", + "NoCreatedLibraries": "Il semble que vous n'ayez pas encore créé de bibliothèques. {0}Voulez-vous en créer une maintenant ?{1}", "PlaybackErrorNoCompatibleStream": "Ce client n'est pas compatible avec le média et le serveur n'envoie pas de format compatible.", "PreferEmbeddedEpisodeInfosOverFileNames": "Préférer les informations intégrées aux noms de fichiers", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilise les informations des métadonnées intégrées, si disponible.", From ff28682aaad2e09fe521601b107b40243f155659 Mon Sep 17 00:00:00 2001 From: Julien Machiels Date: Sat, 18 Apr 2020 06:02:40 +0000 Subject: [PATCH 103/128] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 78c4d9e15c..35d47979b1 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1409,7 +1409,7 @@ "MessageNoServersAvailable": "Aucun serveur n'a été trouvé en utilisant la recherche automatique de serveur.", "OptionBanner": "Bannière", "OptionList": "Liste", - "OptionLoginAttemptsBeforeLockout": "Défini le nombre de tentative de connexion échouées avant blocage du compte", + "OptionLoginAttemptsBeforeLockout": "Définis le nombre de tentatives de connexion échouées avant blocage du compte.", "OptionPoster": "Affiche", "OptionPosterCard": "Affichette", "OptionThumb": "Vignette", From 91e8d2c44fdb597525477671bf1b8d329074192d Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sat, 18 Apr 2020 11:32:11 +0300 Subject: [PATCH 104/128] Fix inputManager trigger --- src/scripts/inputManager.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index cacc6c99a3..d9dcf52d84 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -235,6 +235,9 @@ import appHost from 'apphost'; } } + // Alias for backward compatibility + export const trigger = handleCommand; + dom.addEventListener(document, 'click', notify, { passive: true }); From 1a22e7fded00a02301ea1971afa3a10182fb4ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Str=C3=A5b=C3=B8?= Date: Sat, 18 Apr 2020 06:32:15 +0000 Subject: [PATCH 105/128] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 3d863d17e0..1e410c9d2d 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -382,7 +382,7 @@ "Images": "Bilder", "ImportFavoriteChannelsHelp": "Hvis aktivert, vil kun kanaler som er markert som favoritt på tuneren bli importert.", "ImportMissingEpisodesHelp": "Hvis aktivert, vil informasjon om manglende episoder importeres til Jellyfin-databasen og de vil vises under sesonger og serier. Dette kan føre til at skanning av biblioteket tar betydelig lengre tid.", - "InstallingPackage": "Installerer {0}", + "InstallingPackage": "Installerer {0} (versjon {1})", "InstantMix": "Direktemiks", "ItemCount": "{0} elementer", "Items": "Elementer", @@ -1129,9 +1129,9 @@ "AllowOnTheFlySubtitleExtractionHelp": "Integrerte undertekster kan hentes ut fra videoer og bli levert til klienter i klartekst for å unngå omkoding av video. På noen systemer kan dette ta lang tid og føre til opphold i avspillingen samtidig som prosessen pågår. Deaktiver innstillingen for å brenne inn underteksten i videoen ved hjelp av omkoding når undertekstformatet ikke er støttet av klienten.", "AllowOnTheFlySubtitleExtraction": "Tillat at undertekster hentes ut fortløpende", "AllLanguages": "Alle språk", - "AllComplexFormats": "Alle avanserte formater (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)", + "AllComplexFormats": "Alle avanserte formater (ASS, SSA, VOBSUB, PGS, SUB, IDX)", "AccessRestrictedTryAgainLater": "Tilgang er for øyeblikket begrenset. Vennligst prøv igjen senere.", - "BurnSubtitlesHelp": "Angir om serveren skal brenne inn teksting når videoer konverteres, basert på tekstformatet. Ytelsen på serveren vil forbedres dersom tekstingen ikke brennes inn. Velg Automatisk for å brenne inn bildebaserte formater (VOBSUB, PGS, SUB/IDX, osv.) og enkelte ASS/SSA-undertekster.", + "BurnSubtitlesHelp": "Angir om serveren skal brenne inn teksting når videoer konverteres, basert på tekstformatet. Ytelsen på serveren vil forbedres dersom tekstingen ikke brennes inn. Velg Automatisk for å brenne inn bildebaserte formater (VOBSUB, PGS, SUB, IDX) og enkelte ASS eller SSA-undertekster.", "General": "Generelt", "ChangingMetadataImageSettingsNewContent": "Endringer gjort i innstillinger for metadata eller omslagsbilder vil kun gjelde nytt innhold i biblioteket ditt. For å endre eksisterende innhold, må du oppdatere dets metadata manuelt.", "DefaultSubtitlesHelp": "Undertekster lastes inn basert på flaggene \"standard\" og \"tvungen\" i videoens integrerte metadata. Språkpreferanser tas høyde for dersom flere valg er tilgjengelig.", @@ -1218,7 +1218,7 @@ "Unmute": "Skru på lyd", "OptionIsHD": "HD", "ButtonAddImage": "Legg til bilde", - "DisplayModeHelp": "Velg hvilken slags skjerm du bruker Jellyfin på.", + "DisplayModeHelp": "Velg hvilket brukergrensesnitt oppsett du vil ha.", "DownloadsValue": "{0} nedlastninger", "EnableNextVideoInfoOverlayHelp": "Vis informasjon om den neste videoen i spillelisten ved slutten av en video.", "ExtractChapterImagesHelp": "Uthenting av kapittelbilder vil gjøre det mulig for klienter å vise bilder i menyer for å velge kapitel. Denne prosessen kan være treg, ressurskrevende, og kan kreve flere gigabyte med lagringsplass. Prosessen kjører når videoer oppdages, samt som en daglig planlagt hendelse. Tidsplanen kan endres i innstillinger for planlagte hendelser. Det anbefales ikke at denne prosessen kjøres når det er mange aktive brukere innlogget.", @@ -1467,5 +1467,11 @@ "AskAdminToCreateLibrary": "Spør en administrator om å lage et bibliotek.", "PlaybackErrorNoCompatibleStream": "Det oppstod et problem med klientprofilering, og serveren sender ikke et kompatibelt medieformat.", "AllowFfmpegThrottlingHelp": "Når en omkoding eller ompakking kommer langt nok foran den nåværende avspillingsposisjonen stoppes prosessen slik at den bruker mindre ressurser. Dette er mest nyttig når du sjeldent bytter posisjon i videoen. Slå av dette hvis du opplever problemer med avspilling.", - "AllowFfmpegThrottling": "Begrens hastighet på omkoding" + "AllowFfmpegThrottling": "Begrens hastighet på omkoding", + "Episode": "Episode", + "ClientSettings": "Klientinstillinger", + "BoxSet": "Samleboks", + "Artist": "Artist", + "AlbumArtist": "Albumartist", + "Album": "Album" } From f2ce2c359d9d26c2008592e1bb16cdccc9450e1c Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Sat, 18 Apr 2020 16:22:44 +0200 Subject: [PATCH 106/128] Add Android icon for Android TV --- src/scripts/imagehelper.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scripts/imagehelper.js b/src/scripts/imagehelper.js index 790862b223..f1da17bf2b 100644 --- a/src/scripts/imagehelper.js +++ b/src/scripts/imagehelper.js @@ -14,6 +14,7 @@ import browser from 'browser'; case "Kodi": return baseUrl + "kodi.svg"; case "Jellyfin Android": + case "Android TV": return baseUrl + "android.svg"; case "Jellyfin Web": switch (device.Name || device.DeviceName) { From 36f2a76829c639351ab3a7f8050c61ac060cb9af Mon Sep 17 00:00:00 2001 From: Andreas B <6439218+YouKnowBlom@users.noreply.github.com> Date: Sat, 18 Apr 2020 17:26:10 +0200 Subject: [PATCH 107/128] Change Chromecast player name to Google Cast --- src/components/chromecast/chromecastplayer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/chromecast/chromecastplayer.js b/src/components/chromecast/chromecastplayer.js index 18103e433f..71058cf01b 100644 --- a/src/components/chromecast/chromecastplayer.js +++ b/src/components/chromecast/chromecastplayer.js @@ -5,7 +5,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' var currentResolve; var currentReject; - var PlayerName = 'Chromecast'; + var PlayerName = 'Google Cast'; function sendConnectionResult(isOk) { From 53c2e7f48ace8cceaa9f8a188468ebd788f89979 Mon Sep 17 00:00:00 2001 From: Klanc Date: Sat, 18 Apr 2020 16:25:27 +0000 Subject: [PATCH 108/128] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 80e4b90067..f3cc97ece0 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -732,7 +732,7 @@ "XmlTvNewsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes de notícies. Separa'n varis emprant '|'.", "XmlTvSportsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes esportius. Separa'n varis emprant '|'.", "Books": "Llibres", - "Folders": "Directoris", + "Folders": "Carpetes", "Photos": "Fotos", "Shows": "Programes", "Songs": "Cançons", @@ -741,7 +741,7 @@ "Channels": "Canals", "Collections": "Col·leccions", "Favorites": "Preferits", - "HeaderAlbumArtists": "Artistes dels Àlbums", + "HeaderAlbumArtists": "Artistes del Àlbum", "HeaderFavoriteAlbums": "Àlbums Preferits", "HeaderFavoriteArtists": "Artistes Preferits", "HeaderFavoriteEpisodes": "Episodis Preferits", From 01cdc511b8b5c4ac61ff6987bed98ac65a3d2e13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Libor=20Fil=C3=ADpek?= Date: Sun, 19 Apr 2020 13:04:58 +0000 Subject: [PATCH 109/128] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 4f0745b425..fc6abce2e7 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1575,8 +1575,8 @@ "Track": "Stopa", "Season": "Sezóna", "ReleaseGroup": "Vydavatel", - "PreferEmbeddedEpisodeInfosOverFileNames": "Preferovat vložené informace o epizodě před názvy souborů", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Používá se informace o epizodě z vložených metadat, pokud jsou k dispozici.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Preferovat vloženou informaci o epizodě před názvem souboru", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Používat informaci o epizodě z vložených metadat, pokud jsou k dispozici.", "Person": "Osoba", "OtherArtist": "Ostatní interpreti", "Movie": "Film", @@ -1597,10 +1597,11 @@ "PathNotFound": "Cesta nebyla nalezena. Zkontrolujte, zda je platná a zkuste to znovu.", "WeeklyAt": "V {0} v {1}", "LastSeen": "Naposledy zobrazené {0}", - "YadifBob": "Yadif Bob", - "Yadif": "Yadif", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", "LabelLibraryPageSizeHelp": "Určuje počet položek k zobrazení na stránce knihovny. Nastavte na 0 pro vypnutí stránkování.", "LabelLibraryPageSize": "Velikost stránky knihovny:", "LabelDeinterlaceMethod": "Metoda odstranění prokládání:", - "DeinterlaceMethodHelp": "Vyberte metodu odstranění prokládání obrazu při překódování obsahu." + "DeinterlaceMethodHelp": "Vyberte metodu odstranění prokládání obrazu při překódování obsahu.", + "UnsupportedPlayback": "Jellyfin nemůže dešifrovat obsah chráněný technologií DRM, ale pokusí se zobrazit o veškerý obsah, včetně chráněných titulů. Některé soubory se mohou zdát úplně černé kvůli šifrování nebo jiným nepodporovaným funkcím, jako jsou například interaktivní funkce." } From 45433754e1ea736fbb81f0ab703afe9ceca1eb25 Mon Sep 17 00:00:00 2001 From: gnehs Date: Sun, 19 Apr 2020 14:38:22 +0000 Subject: [PATCH 110/128] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index b0e92657df..1f4b2b4d6d 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1676,5 +1676,6 @@ "LabelDeinterlaceMethod": "反交錯方法:", "Episode": "劇集", "DeinterlaceMethodHelp": "選擇對隔行掃描內容進行轉碼時所用的反交錯方法。", - "BoxSet": "套裝" + "BoxSet": "套裝", + "UnsupportedPlayback": "Jellyfin 無法解密受 DRM 保護的內容,但仍然會嘗試播放所有內容。某些檔案由於被加密或包含如互動標題等不受支援的內容,在播放時可能會沒有畫面。" } From b7e8c7378ae1af27eede8af4859fb78ab9038c64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Rodr=C3=ADguez?= Date: Mon, 20 Apr 2020 09:43:46 +0000 Subject: [PATCH 111/128] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 1bb9a76537..f50f37033a 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1504,5 +1504,8 @@ "LabelDeinterlaceMethod": "Metodo de desentrelazar:", "DeinterlaceMethodHelp": "Seleccione el método de desentrelazar para el transcodificar de contenido entrelazado.", "LabelLibraryPageSize": "Tamaño de la página de la biblioteca:", - "LabelLibraryPageSizeHelp": "Establece la cantidad de artículos a mostrar en una página de la biblioteca. Ponlo en 0 para desactivar la paginación." + "LabelLibraryPageSizeHelp": "Establece la cantidad de artículos a mostrar en una página de la biblioteca. Ponlo en 0 para desactivar la paginación.", + "UnsupportedPlayback": "No es posible desencriptar contenido protegido mediante DRM; sin embargo se intentará su reproducción. Algunos archivos pueden aparecer completamente negros debido a encriptación u otras características no soportadas, como títulos interactivos.", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF" } From 8ffd07dac548e7fd19920680dd05caf4592e9846 Mon Sep 17 00:00:00 2001 From: lldsolitude Date: Mon, 20 Apr 2020 17:16:08 +0000 Subject: [PATCH 112/128] Translated using Weblate (Chinese (Simplified)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index c48a661d0c..034871138e 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -449,7 +449,7 @@ "Hide": "隐藏", "HideWatchedContentFromLatestMedia": "从最新媒体中隐藏已观看的内容", "Home": "首页", - "HttpsRequiresCert": "要启用安全连接, 您需要提供一个受信任的 SSL 证书, 如 \"允许加密\"。请提供证书或禁用安全连接。", + "HttpsRequiresCert": "要启用安全连接, 您需要提供一个受信任的 SSL 证书, 例如 Let's Encrypt 。请提供证书或禁用安全连接。", "Identify": "识别", "Images": "图片", "ImportFavoriteChannelsHelp": "如果启用,只有在协调器设备中被标记为我的最爱的频道才会被导入。", From 74448a4c836a0323899d9922689c07871cbd7705 Mon Sep 17 00:00:00 2001 From: MrTimscampi Date: Tue, 21 Apr 2020 19:17:57 +0200 Subject: [PATCH 113/128] Add title and year to posters in TV genres view --- src/controllers/shows/tvgenres.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index 9a0823a6b9..80e2f646b6 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -113,6 +113,9 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader itemsContainer: elem, shape: getPortraitShape(), scalable: true, + showTitle: true, + centerText: true, + showYear: true, overlayMoreButton: true, allowBottomPadding: false }); From d9a07675f1032e0f559bb2622623851671082d51 Mon Sep 17 00:00:00 2001 From: Gregor Hoffleit Date: Tue, 21 Apr 2020 13:30:32 +0000 Subject: [PATCH 114/128] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 347d115f76..cf03296503 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1097,7 +1097,7 @@ "RefreshMetadata": "Aktualisiere Metadaten", "RefreshQueued": "Aktualisierung eingereiht.", "ReleaseDate": "Veröffentlichungsdatum", - "RememberMe": "Erinnere mich", + "RememberMe": "Angemeldet bleiben", "RemoveFromCollection": "Aus Sammlung entfernen", "RemoveFromPlaylist": "Von Wiedergabeliste entfernen", "Repeat": "Wiederholen", @@ -1518,7 +1518,7 @@ "BoxSet": "Box Set", "YadifBob": "YADIF Bob", "Yadif": "YADIF", - "LabelLibraryPageSizeHelp": "Setzt die Anzahl der gezeigten Elemente auf einer Bibliotheksseite. Setze die Anzahl auf 0 um die Auflistung zu deaktivieren.", + "LabelLibraryPageSizeHelp": "Setzt die Anzahl der auf einer Seite angezeigten Objekte. Setze auf 0, um alle Elemente auf einer Seite anzuzeigen.", "LabelLibraryPageSize": "Bibliothek Seiten Größe:", "DeinterlaceMethodHelp": "Wähle die Deinterlacing-Methode zum Transkodieren von Inhalten im Zeilensprungverfahren (Interlace).", "LabelDeinterlaceMethod": "Deinterlacing-Methode:" From b3624c0f91a0d0cb0e0fbda27edd0c0139dd9c1a Mon Sep 17 00:00:00 2001 From: Mehdi Khosravi Date: Tue, 21 Apr 2020 09:21:56 +0000 Subject: [PATCH 115/128] Translated using Weblate (Persian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/ --- src/strings/fa.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fa.json b/src/strings/fa.json index 1e227b0e80..15a8681260 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -127,7 +127,7 @@ "HeaderFavoriteAlbums": "آلبوم‌های مورد علاقه", "HeaderFavoriteArtists": "هنرمندان مورد علاقه", "HeaderFavoriteSongs": "آهنگ‌های مورد علاقه", - "HeaderLiveTV": "تلویزیون زنده", + "HeaderLiveTV": "پخش زنده", "Movies": "فیلم‌ها", "Photos": "عکس‌ها", "Playlists": "لیست‌های پخش", From 9bd770ffd49cc63a58ab0d949f7f890cc559521f Mon Sep 17 00:00:00 2001 From: 4d1m Date: Tue, 21 Apr 2020 10:22:23 +0000 Subject: [PATCH 116/128] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index fd4927f4a1..4da3ddde49 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -1470,8 +1470,8 @@ "Track": "Cale", "Season": "Sezon", "ReleaseGroup": "Gruparea lansării", - "PreferEmbeddedEpisodeInfosOverFileNames": "Preferați informațiile despre episod încorporate în fișier decât numele fișierelor", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Aceasta folosește informațiile despre episod din metadatele încorporate, dacă sunt disponibile.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Preferați informația despre episod încorporată în fișier decât numele fișierelor", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Aceasta folosește informația despre episod din metadatele încorporate, dacă sunt disponibile.", "Person": "Persoană", "OtherArtist": "Alt artist", "Movie": "Film", @@ -1493,8 +1493,11 @@ "ListPaging": "{0}-{1} din {2}", "WriteAccessRequired": "Jellyfin Server necesită acces de scriere la acest folder. Vă rugăm să vă asigurați accesul la scriere și încercați din nou.", "PathNotFound": "Calea nu a fost găsită. Vă rugăm să vă asigurați de validitatea căii și încercați din nou.", - "YadifBob": "Yadif Bob", - "Yadif": "Yadif", + "YadifBob": "YADIF Bob", + "Yadif": "YADIF", "LabelDeinterlaceMethod": "Metoda de intercalare:", - "DeinterlaceMethodHelp": "Selectați metoda de intercalat pe care să o utilizați la transcodarea conținutului intercalat." + "DeinterlaceMethodHelp": "Selectați metoda de intercalat pe care să o utilizați la transcodarea conținutului intercalat.", + "UnsupportedPlayback": "Jellyfin nu poate decripta conținut protejat de DRM, dar tot conținutul va fi încercat indiferent de titlurile protejate. Unele fișiere pot părea complet negre din cauza criptării sau a altor funcții neacceptate, cum ar fi titluri interactive.", + "LabelLibraryPageSizeHelp": "Setează cantitatea de elemente de afișat pe o pagină a bibliotecii. Setați la 0 pentru a dezactiva paginarea.", + "LabelLibraryPageSize": "Mărimea paginii Bibliotecă:" } From 4258c6a5f69acaaf626acdfb55f7858bd3ad396d Mon Sep 17 00:00:00 2001 From: gersouza Date: Tue, 21 Apr 2020 18:03:38 +0000 Subject: [PATCH 117/128] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index a288ce5813..ff4da5610a 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1327,13 +1327,41 @@ "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução.", "MySubtitles": "Minhas legendas", "Name": "Nome", - "Never": "", - "Artist": "", - "LabelDeinterlaceMethod": "", - "DeinterlaceMethodHelp": "", - "Movie": "", + "Never": "Nunca", + "Artist": "Artista", + "LabelDeinterlaceMethod": "Método de desentrelaçamento:", + "DeinterlaceMethodHelp": "Selecione o método de desentrelaçamento para converter conteúdo entrelaçado.", + "Movie": "Filme", "LabelLibraryPageSize": "", - "Album": "", - "LabelLibraryPageSizeHelp": "", - "Episode": "" + "Album": "Álbum", + "LabelLibraryPageSizeHelp": "Escolher a quantidade itens a exibir numa página de biblioteca. Escolha \"0\" para desabilitar a exibição em páginas.", + "Episode": "Episódio", + "OptionRequirePerfectSubtitleMatch": "Baixar apenas legendas que correspondem corretamente aos arquivos de vídeo", + "OptionRandom": "Aleatório", + "OptionPoster": "Encarte", + "OptionLoginAttemptsBeforeLockout": "Determinar a quantidade de tentativas de login incorretas até que ocorra bloqueio.", + "OptionList": "Listar", + "OptionIsSD": "Definição padrão", + "OptionIsHD": "Alta definição", + "OptionHomeVideos": "Fotos", + "OptionHasTrailer": "Trailer", + "OptionEnableExternalContentInSuggestions": "Habilitar sugestão de conteúdo externo", + "OptionDownloadMenuImage": "Menu", + "OptionDownloadLogoImage": "Logotipo", + "OptionDownloadBannerImage": "Encarte", + "OptionDisplayFolderViewHelp": "Exibir de pastas ao lado das bibliotecas. Isto pode ser útil para visualização em pasta simples.", + "OptionDisplayFolderView": "Exibir em pastas", + "OptionBluray": "Bluray", + "OptionBanner": "Poster", + "OptionAuto": "Automático", + "OptionAllowVideoPlaybackRemuxing": "Permitir execução de vídeo que requer conversão sem recodificar", + "OptionAllowLinkSharingHelp": "Somente páginas da web que contêm informações sobre mídia são compartilhadas. Os arquivos de mídia nunca são compartilhados publicamente. O tempo de compartilhamento é limitado e expira após {0} dias.", + "Option3D": "3D", + "NextUp": "acima", + "Next": "Próximo", + "NewEpisodesOnly": "apenas novos episódios", + "NewEpisodes": "Novos episódios", + "NewCollectionHelp": "Coleções permitem criar agrupamentos personalizados de filmes ou de outros conteúdos da biblioteca.", + "BoxSet": "Coleção", + "AlbumArtist": "Artista do Álbum" } From 8d180ac5b2f8385b9b304aaf4635a3c21842af57 Mon Sep 17 00:00:00 2001 From: gersouza Date: Wed, 22 Apr 2020 02:20:20 +0000 Subject: [PATCH 118/128] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index ff4da5610a..f69038ef35 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1363,5 +1363,11 @@ "NewEpisodes": "Novos episódios", "NewCollectionHelp": "Coleções permitem criar agrupamentos personalizados de filmes ou de outros conteúdos da biblioteca.", "BoxSet": "Coleção", - "AlbumArtist": "Artista do Álbum" + "AlbumArtist": "Artista do Álbum", + "Quality": "Qualidade", + "Previous": "Anterior", + "PreferredNotRequired": "Preferível, mas não obrigatório", + "PictureInPicture": "vídeo destacado", + "OptionThumb": "Miniatura", + "OptionRequirePerfectSubtitleMatchHelp": "Solicitar a \"correspondência perfeita\" filtrará as legendas incluindo apenas aquelas que foram testadas com o arquivo de vídeo. Desmarcar isto aumentará a probabilidade de baixar legendas, mas poderá obter legendas incorretas ou não sincronizadas." } From 9107085f256f922a9ad6546a41d117861dfb994a Mon Sep 17 00:00:00 2001 From: gersouza Date: Wed, 22 Apr 2020 02:33:24 +0000 Subject: [PATCH 119/128] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index f69038ef35..290bb1524c 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -113,7 +113,7 @@ "Screenshot": "Captura de Ecrã", "Schedule": "Agendamentos", "ScanForNewAndUpdatedFiles": "Procurar ficheiros novos ou actualizados", - "SaveSubtitlesIntoMediaFoldersHelp": "Guardar ficheiros de legendas junto aos ficheiros vídeo facilita a gestão.", + "SaveSubtitlesIntoMediaFoldersHelp": "Salvar arquivos de legendas junto aos arquivos vídeo facilita o gerenciamento.", "SaveSubtitlesIntoMediaFolders": "Guardar legendas nas pastas multimédia", "Save": "Guardar", "Saturday": "Sábado", @@ -1126,7 +1126,7 @@ "AccessRestrictedTryAgainLater": "O acesso está actualmente restrito. Por favor, tente mais tarde.", "Absolute": "Absoluto", "AlwaysPlaySubtitlesHelp": "Legendas correspondentes à língua preferida serão sempre carregadas, independentemente do idioma do áudio.", - "SearchForMissingMetadata": "Procurar metadados em falta", + "SearchForMissingMetadata": "Procurar metadados ausentes", "ScanLibrary": "Analisar biblioteca", "HeaderDeleteItem": "Remover item", "HeaderDeleteDevice": "Apagar Dispositivo", @@ -1369,5 +1369,22 @@ "PreferredNotRequired": "Preferível, mas não obrigatório", "PictureInPicture": "vídeo destacado", "OptionThumb": "Miniatura", - "OptionRequirePerfectSubtitleMatchHelp": "Solicitar a \"correspondência perfeita\" filtrará as legendas incluindo apenas aquelas que foram testadas com o arquivo de vídeo. Desmarcar isto aumentará a probabilidade de baixar legendas, mas poderá obter legendas incorretas ou não sincronizadas." + "OptionRequirePerfectSubtitleMatchHelp": "Solicitar a \"correspondência perfeita\" filtrará as legendas incluindo apenas aquelas que foram testadas com o arquivo de vídeo. Desmarcar isto aumentará a probabilidade de baixar legendas, mas poderá obter legendas incorretas ou não sincronizadas.", + "StopRecording": "Parar gravação", + "ShowYear": "Exibir ano", + "ShowTitle": "Exibir título", + "SettingsWarning": "Mudar estes valores pode causar instabilidade ou falhas de conexão. Se tiver problemas, recomendamos restaurar os valores originais.", + "ServerNameIsShuttingDown": "Servidor Jellyfin - {0} está desligando.", + "ServerNameIsRestarting": "Servidor Jellyfin - {0} está reiniciando.", + "SeriesYearToPresent": "{0} - Atualmente", + "SeriesCancelled": "Série cancelada.", + "SelectAdminUsername": "Por favor, selecione um usuário para a conta de administrador.", + "Season": "Temporada", + "RepeatEpisodes": "Repetir episódios", + "RepeatAll": "Repetir todos", + "RemoveFromCollection": "Remover da coleção", + "RememberMe": "Lembrar-me", + "ReleaseDate": "Data do lançamento", + "RefreshMetadata": "Atualizar metadados", + "RecentlyWatched": "Visto recentemente" } From 58f86994b95c692eb263cad526ce83c8ecb0b269 Mon Sep 17 00:00:00 2001 From: "Chen-Tai,Peng" Date: Wed, 22 Apr 2020 09:06:41 +0000 Subject: [PATCH 120/128] Translated using Weblate (Chinese (Traditional)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 1f4b2b4d6d..fb6cf88081 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -418,7 +418,7 @@ "CloudSyncFeatureDescription": "將您的媒體備份到雲端當作簡單的備份,收藏和轉檔。", "Collections": "合輯", "Composer": "作曲家", - "ConfigureDateAdded": "調整伺服器怎麼判定媒體褲的「新增日期」", + "ConfigureDateAdded": "調整伺服器怎麼判定媒體庫的「新增日期」", "ConfirmDeleteImage": "刪除圖片?", "ConfirmDeleteItems": "刪除這些項目會將檔案從系統和媒體庫中刪除。你真的要繼續嗎?", "ConfirmEndPlayerSession": "您要在 {0} 秒後將 Jellyfin關機嗎?", From 84bfaba9fe3754a5b6c008d9e2eb2e6a7b182c24 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Wed, 22 Apr 2020 15:50:33 -0400 Subject: [PATCH 121/128] Added feature Zoom in on Photo --- package.json | 2 +- src/components/slideshow/slideshow.js | 5 +++++ src/components/slideshow/style.css | 17 ++++++----------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index bc8089947f..fd7d445d1b 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "screenfull": "^5.0.2", "shaka-player": "^2.5.10", "sortablejs": "^1.10.2", - "swiper": "^5.3.1", + "swiper": "^5.3.7", "webcomponents.js": "^0.7.24", "whatwg-fetch": "^3.0.0" }, diff --git a/src/components/slideshow/slideshow.js b/src/components/slideshow/slideshow.js index d2bf1bb727..48ccee21c8 100644 --- a/src/components/slideshow/slideshow.js +++ b/src/components/slideshow/slideshow.js @@ -258,6 +258,11 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f direction: 'horizontal', // Loop is disabled due to the virtual slides option not supporting it. loop: false, + zoom: { + minRatio: 1, + toggle: true, + containerClass: 'slider-zoom-container' + }, autoplay: !options.interactive, keyboard: { enabled: true diff --git a/src/components/slideshow/style.css b/src/components/slideshow/style.css index 2bea7c9696..876c78510a 100644 --- a/src/components/slideshow/style.css +++ b/src/components/slideshow/style.css @@ -41,17 +41,12 @@ } .swiper-slide-img { - width: auto; - height: auto; - max-width: 100%; - max-height: 100%; - -ms-transform: translate(-50%, -50%); - -webkit-transform: translate(-50%, -50%); - -moz-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - position: absolute; - left: 50%; - top: 50%; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; } .slideshowButtonIcon { From b5705c1c21cc4c4f80d92fc02a9ff427e45060c4 Mon Sep 17 00:00:00 2001 From: samuel9554 Date: Wed, 22 Apr 2020 16:18:09 -0400 Subject: [PATCH 122/128] Zoom in on photo fix CSS --- src/components/slideshow/style.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/components/slideshow/style.css b/src/components/slideshow/style.css index 876c78510a..fc747cf371 100644 --- a/src/components/slideshow/style.css +++ b/src/components/slideshow/style.css @@ -133,3 +133,12 @@ .slideSubtitle { color: #ccc; } + +.swiper-slide { + display: flex; + flex-direction: column; +} + +.slider-zoom-container { + margin: auto; +} From 6f3fcd4478f89d3a3bafb9c461143efb5b2371ea Mon Sep 17 00:00:00 2001 From: kwm1800 Date: Wed, 22 Apr 2020 19:22:47 +0000 Subject: [PATCH 123/128] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index acd07a336b..7e6f36b844 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1265,7 +1265,7 @@ "MediaInfoBitDepth": "비트뎁스", "LabelPostProcessor": "후처리 애플리케이션:", "RefreshQueued": "새로 고침 대기 중", - "NoPluginConfigurationMessage": "", + "NoPluginConfigurationMessage": "이 플러그인은 설정할 것이 없습니다.", "OptionExtractChapterImage": "챕터 이미지 추출 활성화", "RestartPleaseWaitMessage": "Jellyfin 서버가 종료되었다가 다시 시작될 때까지 기다리십시오. 1-2분 정도 걸릴 수 있습니다.", "Up": "위", @@ -1378,24 +1378,36 @@ "LabelDefaultScreen": "기본 화면:", "LabelDateTimeLocale": "날짜/시간 로케일:", "XmlTvPathHelp": "XMLTV 파일을 저장할 경로를 설정합니다. Jellyfin은 이 파일을 읽어 주기적으로 변경 사항을 확인합니다. 파일 생성 및 파일 업데이트는 사용자가 수동으로 해야 합니다.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "다음 미디어 위치가 라이브러리에서 제거:", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "다음과 같은 미디어 장소들을 라이브러리에서 제거합니다:", "MessageReenableUser": "재활성화는 아래를 참조하십시오", "MessagePluginConfigurationRequiresLocalAccess": "이 플러그인을 구성하려면 로컬 서버에 직접 로그인하십시오.", "MessageNoCollectionsAvailable": "컬렉션을 사용하면 영화, 시리즈 및 앨범의 개인화 된 그룹을 즐길 수 있습니다. + 버튼을 클릭하여 컬렉션 만들기를 시작합니다.", - "LabelPlayerDimensions": "플레이어 넓이:", + "LabelPlayerDimensions": "플레이어 화면 크기:", "LabelParentNumber": "부모 번호:", "LabelLineup": "라인업:", - "LabelDroppedFrames": "떨어진 프레임:", + "LabelDroppedFrames": "드롭 프레임:", "LabelDeinterlaceMethod": "디인터레이싱 방법:", - "LabelCustomDeviceDisplayNameHelp": "디바이스에서 보고 한 이름을 사용하려면 사용자 정의 표시 이름을 제공하거나 비워 두십시오.", + "LabelCustomDeviceDisplayNameHelp": "기기에 표시할 이름을 지정하거나 공란으로 두어 등록된 기기 명을 사용합니다.", "Episode": "에피소드", - "EnableColorCodedBackgrounds": "색이 입혀진 배경", + "EnableColorCodedBackgrounds": "컬러코드가 삽입된 배경", "DropShadow": "하단 그림자", - "Depressed": "압축", - "DeinterlaceMethodHelp": "인터레이스 컨텐츠를 트랜스코딩 할 때 사용할 디인터레이싱 방법을 선택하십시오.", + "Depressed": "압축된", + "DeinterlaceMethodHelp": "비월주사식 콘텐츠를 순차주사로 변환할시 사용할 비월제거 방법을 선택하십시오.", "ClientSettings": "클라이언트 설정", "BoxSet": "박스 세트", "Artist": "아티스트", "AlbumArtist": "앨범 아티스트", - "Album": "앨범" + "Album": "앨범", + "NoCreatedLibraries": "라이브러리가 없는 것 같습니다. {0}지금 당장 하나 만드시겠습니까?{1}", + "NewCollectionHelp": "컬렉션을 통해 사용자 정의로 영화와 같은 콘텐츠들을 묶어놓을 수 있습니다.", + "Never": "절대 아님", + "Movie": "영화", + "MoveRight": "오른쪽으로 이동", + "MoveLeft": "왼쪽으로 이동", + "MoreFromValue": "{0} 에서", + "MetadataSettingChangeHelp": "변환된 메타데이터 설정은 새롭게 들어오는 콘텐츠에 적용이 됩니다. 기존의 콘텐츠에도 적용을 하려면 상세 스크린을 열어 새로 고침 버튼을 누르거나 메타데이터 메니저를 통해 대량으로 새로 고침을 하면 됩니다.", + "MessagePluginInstallDisclaimer": "Jellyfin 커뮤니티에서 만들어진 플러그인들은 Jellyfin의 기능들과 편리성을 향상시켜줄 수 있습니다. 하지만 설치하기 전에 이런 플러그인들은 라이브러리 스켄 속도 저하, 추가된 백그라운드 프로세싱 그리고 시스템의 불안정성같은 문제점들을 Jellyfin 서버에 일으킬 수도 있다는 것을 유념하시기 바람니다.", + "LabelLibraryPageSizeHelp": "라이브러리 페이지에 표시될 아이템들의 수를 조절합니다. 0 으로 지정시 페이징을 비활성화 합니다.", + "LabelLibraryPageSize": "라이브러리 페이지 크기:", + "LabelEnableBlastAliveMessages": "서버 활성화 메세지" } From 24760a1158c9575a2a96a7e65aabac12d217dbb9 Mon Sep 17 00:00:00 2001 From: tyaprak Date: Wed, 22 Apr 2020 22:29:48 +0000 Subject: [PATCH 124/128] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index 509c9be86d..5d6772b755 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -317,7 +317,7 @@ "Director": "Yönetmen", "Directors": "Yöneticiler", "Disabled": "Deaktif", - "DisplayModeHelp": "Jellyfin’i çalıştırdığınız ekran türünü seçin.", + "DisplayModeHelp": "Arayüz için kullanılmasını istediğiniz şablonu seçin.", "DoNotRecord": "Kaydetme", "Down": "Aşağı", "Download": "İndir", @@ -365,7 +365,7 @@ "DisplayInMyMedia": "Ana ekranda görüntüleme", "DisplayInOtherHomeScreenSections": "En son medya gibi ana ekran bölümlerinde görüntüleyin ve izlemeye devam edin", "EnableBackdrops": "Arka planında", - "BurnSubtitlesHelp": "Altyazı formatına bağlı olarak video dönüştürülürken sunucunun altyazılarda yazıp yazmayacağını belirler. Altyazılarda yanmaktan kaçınmak, sunucu performansını iyileştirir. Görüntü tabanlı biçimleri (VOBSUB, PGS, SUB / IDX, vb.) Ve bazı ASS / SSA altyazılarını yazmak için Otomatik'i seçin.", + "BurnSubtitlesHelp": "Sunucunun video işlendiği esnada, altyazının görüntüye gömülmesini sağlar. Performansı çok düşürür, zorunda kalmadıkça bu özelliği seçmeyin. Görüntü tabanlı biçimleri (VOBSUB, PGS, SUB / IDX, vb.) Ve bazı ASS / SSA altyazıların görüntüye gömülmesi için Otomatik'i seçin.", "ConfirmDeleteItem": "Bu öğeyi silmek, onu hem dosya sisteminden hem de medya kütüphanenizden siler. Devam etmek istediğinize emin misiniz?", "ValueSpecialEpisodeName": "Özel - {0}", "DeviceAccessHelp": "Bu, yalnızca benzersiz şekilde tanımlanabilen ve tarayıcı erişimini engellemeyen cihazlar için geçerlidir. Kullanıcı cihazlarına erişimin filtrelenmesi, burada onaylanana kadar yeni cihazları kullanmalarını önler.", @@ -663,7 +663,7 @@ "Label3DFormat": "3D Formatı:", "Kids": "Çocuklar", "ItemCount": "{0} nesne", - "InstallingPackage": "Yükleniyor {0}", + "InstallingPackage": "Yükleniyor {0} (versiyon {1})", "Images": "Resimler", "Identify": "Tanımla", "Horizontal": "Yatay", @@ -712,5 +712,28 @@ "HeaderNavigation": "Navigasyon", "AllowFfmpegThrottling": "Video Kodlamasını Limitle", "Artist": "Oyuncu", - "Album": "Albüm" + "Album": "Albüm", + "EveryXMinutes": "Her {0} dakika", + "OnWakeFromSleep": "Uyku modundan çıkılarak uyanıldığında", + "DailyAt": "Her gün {0} 'de", + "LastSeen": "Son görülme {0}", + "WriteAccessRequired": "Jellyfin Sunucusu bu dizine yazma iznine ihtiyaç duymakta. Lütfen yazma izin ayarlarını kontrol edip tekrar deneyiniz.", + "PathNotFound": "Gösterilen yol bulunamadı. Lütfen gösterdiğiniz yolun doğru olduğundan emin olun ve tekrar deneyin.", + "EveryHour": "Her saat", + "EveryXHours": "Her {0} saatte bir", + "OnApplicationStartup": "Uygulama başladığında", + "HttpsRequiresCert": "Güvenli bağlantı kurulabilmesi için, Let's Encrypt gibi güvenilir bir sertifika sağlayıcısından edinilmiş sertifikayı tanıtmanız gerekmektedir. Lütfen bir sertifika tanımlayın ya da güvenli bağlantı seçeneğini devre dışı bırakın.", + "Home": "Anasayfa", + "HideWatchedContentFromLatestMedia": "İzlenmiş içeriği En Son Eklenenler klasöründe gösterme", + "HeaderTypeImageFetchers": "Görüntü İndirici", + "HeaderTracks": "Parçalar", + "HeaderSeriesStatus": "Dizi Durumu", + "HeaderSeriesOptions": "Dizi Seçenekleri", + "Episode": "Bölüm", + "DeinterlaceMethodHelp": "Tarama tipi görüntülerde titreşimi yok etmek için kullanılmasını istediğiniz metodu seçin.", + "ClientSettings": "Kullanıcı Ayarları", + "BoxSet": "Seri Filmler", + "AskAdminToCreateLibrary": "Kütüphane oluşturmak için yöneticiden izin iste.", + "AllowFfmpegThrottlingHelp": "Video dönüşüm işlemleri yeterince ilerlediyse kaynak tüketimini azaltmak için durdur. İleri/geri sarma işlemlerinin az yapıldığı durumlarda çok kullanışlıdır. Oynatım sorunları ile karşılaşırsanız bu özelliği kapatın.", + "AlbumArtist": "Sanatçı" } From a3040a6ac04069bc71e4085186583115905edec4 Mon Sep 17 00:00:00 2001 From: Soleil Date: Thu, 23 Apr 2020 15:58:58 +0000 Subject: [PATCH 125/128] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 35d47979b1..87ad75526d 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1501,5 +1501,6 @@ "DeinterlaceMethodHelp": "Sélectionnes la méthode de désentrelacement à utiliser lors du transcodage de contenu entrelacé.", "LabelLibraryPageSize": "Taille de la page de la médiathèque :", "LabelLibraryPageSizeHelp": "Définit la quantité d'éléments à afficher sur une page de médiathèque. Définir à 0 afin de désactiver la pagination.", - "UnsupportedPlayback": "Jellyfin ne peut pas décoder du contenu protégé par un système de gestion des droits numériques, mais une tentative de lecture sera effectuée sur tout le contenu, y compris les titres protégés. Certains fichiers peuvent apparaître complètement noir, du fait de protections ou de fonctionnalités non supportées, comme les titres interactifs." + "UnsupportedPlayback": "Jellyfin ne peut pas décoder du contenu protégé par un système de gestion des droits numériques, mais une tentative de lecture sera effectuée sur tout le contenu, y compris les titres protégés. Certains fichiers peuvent apparaître complètement noir, du fait de protections ou de fonctionnalités non supportées, comme les titres interactifs.", + "MessageUnauthorizedUser": "Vous n'êtes pas autorisé à accéder au serveur pour le moment. Veuillez contacter l'administrateur de votre serveur pour plus d'informations." } From 5dca6f19dca04c35dee5af332b19d91b34df4d0a Mon Sep 17 00:00:00 2001 From: Adam Bokor Date: Thu, 23 Apr 2020 17:01:05 +0000 Subject: [PATCH 126/128] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 32a30dcd83..a8f35831aa 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1505,5 +1505,6 @@ "UnsupportedPlayback": "Jellyfin nem tud DRM-titkosított tartalmak dekriptálására, ettől függetlenül a lejátszással mindig megpróbálkozik. Néhány fájl emiatt teljesen fekete képernyőt ad, amely vagy a titkosítás miatt van, vagy nem olyan nem támogatott tartalmak miatt, mint az interaktív címek.", "YadifBob": "YADIF Bob", "Yadif": "YADIF", - "ReleaseGroup": "Kiadócsoport" + "ReleaseGroup": "Kiadócsoport", + "MessageUnauthorizedUser": "Jelenleg nincs jogosultságod a szerverhez való hozzáféréshez. Kérjük, lépj kapcsolatba az adminisztrátorral további információkért!" } From ade4ad520bb23e409db5564319637daf7a216a9f Mon Sep 17 00:00:00 2001 From: gersouza Date: Thu, 23 Apr 2020 20:13:10 +0000 Subject: [PATCH 127/128] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 79 +++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 54c300b569..5e307b6532 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -44,13 +44,13 @@ "BirthDateValue": "Nascimento: {0}", "BirthLocation": "Local de nascimento", "BirthPlaceValue": "Local de nascimento: {0}", - "BookLibraryHelp": "Livros de áudio e texto são suportados. Verifique o {0}guia de nomes de livros{1}.", + "BookLibraryHelp": "Livros de áudio e texto são suportados. Revise o {0}Guia de Nomes de Livros no Jellyfin{1}.", "Books": "Livros", "Box": "Caixa", "BoxRear": "Caixa (traseira)", "Browse": "Navegar", "BrowsePluginCatalogMessage": "Navegue pelo nosso catálogo de plugins para ver os plugins disponíveis.", - "BurnSubtitlesHelp": "Determina se o servidor deveria gravar as legendas no vídeo ao convertê-lo, dependendo do formato da legenda. Evitar a gravação da legenda irá melhorar a performance do servidor. Selecione Auto para gravar formatos de legenda baseados em imagem baseado nos formatos (ex. VOBSUB, PGS, SUB/IDX, etc.) e algumas legendas ASS/SSA.", + "BurnSubtitlesHelp": "Determina se o servidor deveria gravar as legendas no vídeo ao convertê-lo, dependendo do formato da legenda. Evitar a gravação da legenda irá melhorar a performance do servidor. Selecione Auto para gravar legendas baseados em imagem dos tipos (ex. VOBSUB, PGS, SUB/IDX, etc.) e algumas legendas ASS/SSA.", "ButtonAdd": "Adicionar", "ButtonAddMediaLibrary": "Adicionar Biblioteca de Mídia", "ButtonAddScheduledTaskTrigger": "Adicionar Disparador", @@ -218,7 +218,7 @@ "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o sintonizador. Por favor, verifique se está acessível e tente novamente.", "ErrorAddingXmlTvFile": "Ocorreu um erro ao acessar o arquivo XmlTV. Por favor, verifique se o arquivo existe e tente novamente.", "ErrorDeletingItem": "Ocorreu um erro ao excluir o item do Servidor Jellyfin. Por favor, verifique se o Servidor Jellyfin possui acesso de gravação na pasta de mídia e tente novamente.", - "ErrorGettingTvLineups": "Ocorreu um erro ao baixar a programação da TV. Por favor, verifique se sua informação está correta e tente novamente.", + "ErrorGettingTvLineups": "Ocorreu um erro ao fazer download da programação de TV. Por favor, certifique-se que sua informação esteja correta e tente novamente.", "ErrorMessageStartHourGreaterThanEnd": "A hora final deve ser maior que a hora inicial.", "ErrorPleaseSelectLineup": "Por favor, selecione a programação e tente novamente. Se não houver programações disponíveis, verifique se o seu nome de usuário, senha e código postal estão corretos.", "ErrorSavingTvProvider": "Um erro ocorreu ao salvar o provedor de TV. Por favor, verifique se está acessível e tente novamente.", @@ -474,7 +474,7 @@ "Images": "Imagens", "ImportFavoriteChannelsHelp": "Se ativado, apenas canais que estão marcados como favoritos no sintonizador serão importados.", "ImportMissingEpisodesHelp": "Se ativado, as informações dos episódios que faltam serão importadas para seu banco de dados do Jellyfin e exibidas dentro das temporadas e séries. Isto pode causar lentidão no rastreamento da biblioteca.", - "InstallingPackage": "Instalando {0}", + "InstallingPackage": "Instalando {0} (versão{1})", "InstantMix": "Mix instântaneo", "ItemCount": "{0} itens", "Items": "itens", @@ -566,7 +566,7 @@ "LabelEmbedAlbumArtDidl": "Arte do álbum incorporada no Didl", "LabelEmbedAlbumArtDidlHelp": "Alguns dispositivos preferem este método para obter a arte do álbum. Outros podem falhar ao reproduzir com esta opção ativada.", "LabelEnableAutomaticPortMap": "Ativar mapeamento automático de portas", - "LabelEnableAutomaticPortMapHelp": "Tentativa de mapear automaticamente a porta pública para a porta local através de UPnP. Isto poderá não funcionar em alguns modelos de roteadores.", + "LabelEnableAutomaticPortMapHelp": "Tentar mapear automaticamente a porta pública para a porta local através de UPnP. Pode não funcionar em alguns modelos de roteadores. As mudanças não serão aplicadas até a reinicialização do servidor.", "LabelEnableBlastAliveMessages": "Mensagens ao vivo", "LabelEnableBlastAliveMessagesHelp": "Ative esta função se o servidor não for detectado por outros dispositivos UPnP em sua rede.", "LabelEnableDlnaClientDiscoveryInterval": "Intervalo para descoberta do cliente (segundos)", @@ -601,7 +601,7 @@ "LabelH264Crf": "CRF de codificação H264:", "LabelEncoderPreset": "Preset de codificação H264:", "LabelHardwareAccelerationType": "Aceleração de hardware:", - "LabelHardwareAccelerationTypeHelp": "Esta é uma função experimental disponível apenas em sistemas suportados.", + "LabelHardwareAccelerationTypeHelp": "Aceleração por hardware requer configurações adicionais.", "LabelHomeNetworkQuality": "Qualidade da rede local:", "LabelHomeScreenSectionValue": "Seção {0} da tela inicial:", "LabelHttpsPort": "Número da porta local de HTTPS:", @@ -637,7 +637,7 @@ "LabelLockItemToPreventChanges": "Bloquear este item para evitar alterações futuras", "LabelLoginDisclaimer": "Aviso legal no login:", "LabelLoginDisclaimerHelp": "Um aviso será exibido na parte inferior da página de login.", - "LabelManufacturer": "Fabricante", + "LabelManufacturer": "Fabricante:", "LabelManufacturerUrl": "URL do fabricante", "LabelMatchType": "Tipo de correspondência:", "LabelMaxBackdropsPerItem": "Número máximo de imagens de fundo por item:", @@ -662,7 +662,7 @@ "LabelMethod": "Método:", "LabelMinBackdropDownloadWidth": "Tamanho mínimo da imagem de fundo para download:", "LabelMinResumeDuration": "Duração mínima para retomar:", - "LabelMinResumeDurationHelp": "A menor duração de vídeo em segundos que salvará o local de reprodução e permitirá que retome.", + "LabelMinResumeDurationHelp": "Tempo mínimo do vídeo em segundos que permitirá continuar a reprodução a partir do ponto que parou.", "LabelMinResumePercentage": "Porcentagem mínima para retomar:", "LabelMinResumePercentageHelp": "Títulos são considerados como não reproduzidos se parados antes deste tempo.", "LabelMinScreenshotDownloadWidth": "Tamanho mínimo da captura de tela para download:", @@ -676,7 +676,7 @@ "LabelMoviePrefixHelp": "Se os títulos dos filmes devem ter um prefixo, digite-o aqui para que o servidor possa usá-lo corretamente.", "LabelMovieRecordingPath": "Local de gravação de filme (opcional):", "LabelMusicStreamingTranscodingBitrate": "Bitrate da transcodificação de músicas:", - "LabelMusicStreamingTranscodingBitrateHelp": "Define o bitrate máximo do streaming de músicas", + "LabelMusicStreamingTranscodingBitrateHelp": "Especifique uma taxa de bits máxima ao transmitir músicas.", "LabelName": "Nome:", "LabelNewName": "Novo nome:", "LabelNewPassword": "Nova senha:", @@ -688,7 +688,7 @@ "LabelNumberOfGuideDays": "Número de dias de dados do guia para baixar:", "LabelNumberOfGuideDaysHelp": "Baixar mais dias do guia da TV permite agendar com maior antecedência e visualizar mais listas, mas também levará mais tempo para baixar. Se selecionar Automático, será escolhido o período baseado no número de canais.", "LabelOptionalNetworkPath": "(Opcional) Pasta compartilhada em rede:", - "LabelOptionalNetworkPathHelp": "Se esta pasta estiver compartilhada em sua rede, fornecendo o local do compartilhamento em rede permitirá que os apps Jellyfin em outros dispositivos acessem arquivos de mídia diretamente.", + "LabelOptionalNetworkPathHelp": "Se esta pasta estiver compartilhada em sua rede, informar o caminho do compartilhamento permitirá que os apps Jellyfin em outros dispositivos acessem arquivos de mídia diretamente.", "LabelOriginalAspectRatio": "Proporção original da tela:", "LabelOriginalTitle": "Título original:", "LabelOverview": "Sinopse:", @@ -725,7 +725,7 @@ "LabelReasonForTranscoding": "Motivo da transcodificação:", "LabelRecord": "Gravar:", "LabelRecordingPath": "Local de gravação padrão:", - "LabelRecordingPathHelp": "Define o local padrão para salvar as gravações. Se deixar em branco, a pasta de dados do programa do servidor será usada.", + "LabelRecordingPathHelp": "Define o local padrão para salvar as gravações. Se deixar não preenchido, a pasta de dados do programa do servidor será usada.", "LabelRefreshMode": "Modo de atualização:", "LabelReleaseDate": "Data do lançamento:", "LabelRemoteClientBitrateLimit": "Limite do bitrate para streaming da internet (Mbps):", @@ -812,7 +812,7 @@ "LabelYoureDone": "Pronto!", "LabelZipCode": "CEP:", "LabelffmpegPath": "Local do FFmpeg:", - "LabelffmpegPathHelp": "O local para o arquivo de aplicação ffmpeg, ou pasta contendo ffmpeg.", + "LabelffmpegPathHelp": "O local para o programa ffmpeg, ou pasta contendo ffmpeg.", "LanNetworksHelp": "Lista separada por vírgula de endereços IP ou entradas IP/máscara de rede para redes que serão consideradas como redes locais ao forçar restrições de banda. Se definida, todos os outros endereços IP serão considerados como estando em uma rede externa e estarão sujeitos a restrições de banda externa. Se deixada em branco, apenas a sub-rede do servidor é considerada como rede local.", "Large": "Grande", "LatestFromLibrary": "Recentes {0}", @@ -867,7 +867,7 @@ "MessageDeleteTaskTrigger": "Deseja realmente excluir este disparador de tarefa?", "MessageDirectoryPickerBSDInstruction": "Para BSD, você precisará configurar o armazenamento dentro de seu Jail do FreeNAS para permitir que o Jellyfin tenha acesso a ele.", "MessageDirectoryPickerInstruction": "Os locais de rede podem ser inseridos manualmente caso o botão de rede falhe em localizar seus dispositivos. Por exemplo, {0} ou {1}.", - "MessageDirectoryPickerLinuxInstruction": "Para Linux no Arch Linux, CentOS, Debian, Fedora, openSUSE ou Ubuntu, você deve permitir que o usuário do serviço tenha ao menos acesso de leitura ao seu armazenamento.", + "MessageDirectoryPickerLinuxInstruction": "Sistemas operacionais Arch Linux, CentOS, Debian, Fedora, openSUSE ou Ubuntu, devem permitir que a conta de serviço tenha ao menos acesso de leitura nos locais de armazenamento.", "MessageDownloadQueued": "Download enfileirado.", "MessageEnablingOptionLongerScans": "Ativar esta opção pode resultar em rastreamentos de biblioteca significativamente mais demorados.", "MessageFileReadError": "Ocorreu um erro ao ler o arquivo. Por favor, tente novamente.", @@ -898,7 +898,7 @@ "MessageYouHaveVersionInstalled": "Você possui a versão {0} instalada.", "Metadata": "Metadados", "MetadataManager": "Gerenciador de Metadados", - "MetadataSettingChangeHelp": "Alterar as configurações dos metadados afetará o novo conteúdo que será adicionado. Para atualizar o conteúdo existente, abra a tela de detalhes e clique no botão de atualizar ou atualize usando o gerenciador de metadados.", + "MetadataSettingChangeHelp": "Alterar as configurações dos metadados afetará o novo conteúdo que será adicionado. Para atualizar o conteúdo existente, abra a tela de detalhes e clique no botão de atualizar, ou atualize usando o gerenciador de metadados.", "MinutesAfter": "minutos após", "MinutesBefore": "minutos antes", "Mobile": "Celular", @@ -924,9 +924,9 @@ "No": "Não", "NoNewDevicesFound": "Nenhum novo dispositivo encontrado. Para adicionar um novo sintonizador, feche esta mensagem e digite as informações do dispositivo manualmente.", "NoNextUpItemsMessage": "Nada encontrado. Comece a assistir suas séries!", - "NoPluginConfigurationMessage": "Este plugin não tem configurações disponíveis.", + "NoPluginConfigurationMessage": "Este plugin não permite alterar configurações.", "NoSubtitleSearchResultsFound": "Nenhum resultado encontrado.", - "NoSubtitles": "Nenhuma legenda", + "NoSubtitles": "Não há legendas", "NoSubtitlesHelp": "Legendas não serão carregadas por padrão. Elas podem ser carregadas manualmente durante a reprodução.", "None": "Nenhum(a)", "NumLocationsValue": "{0} pastas", @@ -949,10 +949,10 @@ "OptionAllowMediaPlaybackTranscodingHelp": "Restringir o acesso à transcodificação pode ocasionar falhas na reprodução nos apps do Jellyfin devido a formatos de mídias não suportados.", "OptionAllowRemoteControlOthers": "Permitir controle remoto de outros usuários", "OptionAllowRemoteSharedDevices": "Permitir controle remoto de dispositivos compartilhados", - "OptionAllowRemoteSharedDevicesHelp": "Dispositivos DLNA são considerados compartilhados até que um usuário comece a controlá-los.", + "OptionAllowRemoteSharedDevicesHelp": "Dispositivos DLNA são autorizados até que um usuário altere as permissões.", "OptionAllowSyncTranscoding": "Permitir download e sincronização de mídia que necessite de transcodificação", "OptionAllowUserToManageServer": "Permitir este usuário administrar o servidor", - "OptionAllowVideoPlaybackRemuxing": "Permitir reprodução de vídeos que requeiram conversão sem re-encodação", + "OptionAllowVideoPlaybackRemuxing": "Permitir reprodução de vídeos que requerem conversão sem recodificar", "OptionAllowVideoPlaybackTranscoding": "Permitir reprodução de vídeo que necessite de transcodificação", "OptionArtist": "Artista", "OptionAscending": "Crescente", @@ -976,15 +976,15 @@ "OptionDescending": "Decrescente", "OptionDisableUser": "Desativar este usuário", "OptionDisableUserHelp": "Se desativado, o servidor não permitirá nenhuma conexão deste usuário. Conexões existentes serão encerradas imediatamente.", - "OptionDislikes": "Não Curtidos", - "OptionDisplayFolderView": "Exibe uma visualização de pasta para exibir pastas de mídias", - "OptionDisplayFolderViewHelp": "Exibe pastas ao lado de suas outras biblioteca de mídia. Isto pode ser útil se quiser uma visualização por pasta.", + "OptionDislikes": "Não gostei", + "OptionDisplayFolderView": "Exibe visualização em pastas para exibir pastas de mídias", + "OptionDisplayFolderViewHelp": "Exibição em pastas ao lado das biblioteca de mídia. Isto pode ser útil para visualizar por pastas.", "OptionDownloadArtImage": "Arte", "OptionDownloadBackImage": "Traseira", "OptionDownloadBoxImage": "Caixa", "OptionDownloadDiscImage": "Disco", "OptionDownloadImagesInAdvance": "Fazer download de imagens antecipadamente", - "OptionDownloadImagesInAdvanceHelp": "Por padrão, a maioria das imagens são baixadas só quando um app Jellyfin solicita. Ativando esta opção, baixará todas as imagens antecipadamente, assim que novas mídias são importadas. Isto pode ocasionar um tempo maior para escanear a biblioteca.", + "OptionDownloadImagesInAdvanceHelp": "Por padrão, a maioria das imagens são baixadas somente quando um app Jellyfin solicita. Ativar esta opção, baixará todas as imagens antecipadamente, ao importar novas mídias. Isto pode ocasionar um tempo maior para escanear a biblioteca.", "OptionDownloadPrimaryImage": "Principal", "OptionDownloadThumbImage": "Miniatura", "OptionDvd": "DVD", @@ -1030,7 +1030,7 @@ "OptionPlainStorageFoldersHelp": "Se ativado, todas as pastas são representadas no DIDL como \"object.container.storageFolder\" ao invés de um tipo mais específico como, por exemplo, \"object.container.person.musicArtist\".", "OptionPlainVideoItems": "Exibir todos os vídeos como itens de vídeo", "OptionPlainVideoItemsHelp": "Se ativado, todos os vídeos são representados no DIDL como \"object.item.videoItem\" ao invés de um tipo mais específico como, por exemplo, \"object.item.videoItem.movie\".", - "OptionPlayCount": "Número de Reproduções", + "OptionPlayCount": "Contagem de Reproduções", "OptionPlayed": "Reproduzido", "OptionPremiereDate": "Data da Estréia", "OptionProfileAudio": "Áudio", @@ -1039,7 +1039,7 @@ "OptionProfileVideoAudio": "Áudio do Vídeo", "OptionReleaseDate": "Data de Lançamento", "OptionReportByteRangeSeekingWhenTranscoding": "Reportar que o servidor suporta busca de byte quando transcodificar", - "OptionReportByteRangeSeekingWhenTranscodingHelp": "Isto é necessário para alguns dispositivos que não buscam o tempo muito bem.", + "OptionReportByteRangeSeekingWhenTranscodingHelp": "Isto é necessário para avançar ou retroceder o tempo em alguns dispositivos.", "OptionRequirePerfectSubtitleMatch": "Fazer download apenas de legendas que correspondam exatamente aos meus arquivos de vídeo", "OptionRequirePerfectSubtitleMatchHelp": "Ao solicitar uma combinação perfeita, filtrará as legendas para incluir somente aquelas que foram testadas e verificadas com o arquivo de vídeo. Ao desmarcar isto, aumentará a quantidade de legendas baixadas, mas aumentará as chances de ter legendas que não estejam sincronizadas.", "OptionResElement": "elemento res", @@ -1063,9 +1063,9 @@ "OptionWeekly": "Semanal", "OriginalAirDateValue": "Data de exibição original: {0}", "Overview": "Sinopse", - "PackageInstallCancelled": "Instalação de {0} cancelada.", - "PackageInstallCompleted": "Instalação de {0} concluída.", - "PackageInstallFailed": "Instalação de {0} falhou.", + "PackageInstallCancelled": "Instalação da versão {0} cancelada.", + "PackageInstallCompleted": "Instalação da versão {0} concluída.", + "PackageInstallFailed": "A Instalação da versão {0} falhou.", "ParentalRating": "Classificação etária", "PasswordMatchError": "A senha e a confirmação da senha devem ser iguais.", "PasswordResetComplete": "A senha foi redefinida.", @@ -1265,7 +1265,7 @@ "Up": "Para cima", "Upload": "Carregar", "UserAgentHelp": "Fornece um cabeçalho HTTP personalizado para o user-agent.", - "UserProfilesIntro": "O Jellyfin inclui suporte para perfis de usuários com configurações precisas de exibição, estado de reprodução e controle dos pais.", + "UserProfilesIntro": "O Jellyfin inclui suporte para perfis de usuário com configurações de exibição granular, estado de reprodução e controle dos pais.", "ValueAlbumCount": "{0} álbuns", "ValueAudioCodec": "Codec de Áudio: {0}", "ValueConditions": "Condições: {0}", @@ -1348,12 +1348,12 @@ "HeaderFavoriteAlbums": "Álbuns Favoritos", "HeaderFavoriteArtists": "Artistas Favoritos", "HeaderFavoriteSongs": "Músicas Favoritas", - "HeaderFavoriteVideos": "Vídeos Favoritos", + "HeaderFavoriteVideos": "Videos favoritos", "HeaderHome": "Inicio", - "HeaderRestartingServer": "Reiniciando Servidor", - "LabelAuthProvider": "Provedor de Autenticação:", + "HeaderRestartingServer": "Reiniciando servidor", + "LabelAuthProvider": "Provedor de autenticação:", "LabelServerName": "Nome do servidor:", - "LabelTranscodePath": "Local de transcodificação:", + "LabelTranscodePath": "Pasta de transcodificação:", "LabelTranscodes": "Transcodificação:", "LabelUserLoginAttemptsBeforeLockout": "Tentativas de login com falha antes que o usuário seja bloqueado:", "DashboardVersionNumber": "Versão: {0}", @@ -1361,7 +1361,7 @@ "DashboardOperatingSystem": "Sistema Operacional: {0}", "DashboardArchitecture": "Arquitetura: {0}", "LabelPasswordResetProvider": "Provedor para Redefinir a Senha:", - "LabelWeb": "Web: ", + "LabelWeb": "Web:", "OptionBluray": "Blu-ray", "LabelProfileContainer": "Formato:", "LabelTranscodingContainer": "Formato:", @@ -1392,7 +1392,7 @@ "OptionIsSD": "SD", "OptionList": "Lista", "OptionLoginAttemptsBeforeLockout": "Determinar quantas tentativas de logins incorretas podem ser feitas antes de ocorrer o bloqueio.", - "OptionLoginAttemptsBeforeLockoutHelp": "Um valor de zero significa herdar o padrão de três tentativas para usuários normais e cinco para administradores. Configurar para -1 desativará o recurso.", + "OptionLoginAttemptsBeforeLockoutHelp": "O valor zero significa herdar o padrão de três tentativas para usuários normais e cinco para administradores. Configurar para -1 desativará o recurso.", "OptionPoster": "Poster", "OptionPosterCard": "Cartaz", "OptionProtocolHls": "Streaming ao Vivo por HTTP", @@ -1463,13 +1463,13 @@ "CopyStreamURLError": "Houve um erro ao copiar a URL.", "ButtonSplit": "Dividir", "AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca.", - "AllowFfmpegThrottling": "Limitar transcodificação", - "PlaybackErrorNoCompatibleStream": "Houve um erro na criação de perfil do cliente e o servidor não está enviando um formato de mídia compatível.", + "AllowFfmpegThrottling": "Ajuste de transcodificação", + "PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com a media e o servidor não está enviando um formato de mídia compatível.", "EnableFastImageFadeInHelp": "Habilitar animações rápidas de aparecimento para imagens carregadas", "LabelDroppedFrames": "Quadros caídos:", "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux estiver suficientemente avançada da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais proveitoso para quando não há avanço ou retrocesso do vídeo com frequência. Desative se tiver problemas de reprodução.", - "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir as informações incorporadas nos arquivos dos episódios ao invés dos nomes", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Isso utiliza as informações dos episódios incorporadas nos metadados dos arquivos se estiverem disponíveis.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir informações dos episódios incorporadas nos arquivos ao invés dos nomes", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Esta opção habilita as informações dos episódios incorporadas nos metadados dos arquivos(se estiverem disponíveis).", "ClientSettings": "Configurações do cliente", "OnApplicationStartup": "Na inicialização do aplicativo", "EveryXHours": "A cada {0} horas", @@ -1500,5 +1500,6 @@ "Artist": "Artista", "AlbumArtist": "Artista do Album", "Album": "Album", - "UnsupportedPlayback": "O Jellyfin não pode descriptografar conteúdo protegido por DRM, porém mesmo assim fará uma tentativa para todo tipo de conteúdo, incluindo títulos protegidos. A imagem de alguns arquivos pode aparecer completamente preta devido a criptografia ou outros recursos não suportados, como títulos interativos." + "UnsupportedPlayback": "O Jellyfin não pode descriptografar conteúdo protegido por DRM, porém mesmo assim fará uma tentativa para todo tipo de conteúdo, incluindo títulos protegidos. A imagem de alguns arquivos pode aparecer completamente preta devido a criptografia ou outros recursos não suportados, como títulos interativos.", + "MessageUnauthorizedUser": "Você não está autorizado a acessar o servidor neste momento. Por favor, contate o administrador do servidor para mais informações." } From ba57841ab021ab39a4eea7be858b78bd0e7fef4c Mon Sep 17 00:00:00 2001 From: gebohh Date: Fri, 24 Apr 2020 10:12:00 +0000 Subject: [PATCH 128/128] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index f50f37033a..5a2ad1ea97 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1248,7 +1248,7 @@ "Descending": "Descendiente", "DirectStreamHelp1": "El tipo de archivo (H.264, AC3, etc.) y la resolución son compatibles con el dispositivo, pero no el contenedor (mkv, avi, wmv, etc.). El vídeo será re-empaquetado al vuelo antes de transmitirlo al dispositivo.", "DirectStreamHelp2": "La transmisión directa del archivo usa muy poco procesamiento sin ninguna pérdida de calidad en el vídeo.", - "Director": "Dirección", + "Director": "Dirección de", "Directors": "Directores", "Display": "Mostrar", "DisplayInMyMedia": "Mostrar en la pantalla de inicio", @@ -1507,5 +1507,6 @@ "LabelLibraryPageSizeHelp": "Establece la cantidad de artículos a mostrar en una página de la biblioteca. Ponlo en 0 para desactivar la paginación.", "UnsupportedPlayback": "No es posible desencriptar contenido protegido mediante DRM; sin embargo se intentará su reproducción. Algunos archivos pueden aparecer completamente negros debido a encriptación u otras características no soportadas, como títulos interactivos.", "YadifBob": "YADIF Bob", - "Yadif": "YADIF" + "Yadif": "YADIF", + "MessageUnauthorizedUser": "No tiene autorización para acceder al servidor en este momento. Póngase en contacto con el administrador del servidor para obtener más información." }