From 594580ec2d50593f599dea02db4d126ffd75dfb3 Mon Sep 17 00:00:00 2001 From: Guilherme Danno Date: Sat, 16 May 2020 00:32:32 -0300 Subject: [PATCH 01/63] move files to scss creating this commit so git don't lose track of the changes --- .../css/{clearbutton.css => clearbutton.scss} | 0 .../css/{detailtable.css => detailtable.scss} | 0 .../css/{flexstyles.css => flexstyles.scss} | 0 src/assets/css/{fonts.css => fonts.scss} | 0 .../css/{fonts.sized.css => fonts.sized.scss} | 0 src/assets/css/{ios.css => ios.scss} | 0 src/assets/css/{livetv.css => livetv.scss} | 0 src/assets/css/{site.css => site.scss} | 63 +++++++++---------- 8 files changed, 29 insertions(+), 34 deletions(-) rename src/assets/css/{clearbutton.css => clearbutton.scss} (100%) rename src/assets/css/{detailtable.css => detailtable.scss} (100%) rename src/assets/css/{flexstyles.css => flexstyles.scss} (100%) rename src/assets/css/{fonts.css => fonts.scss} (100%) rename src/assets/css/{fonts.sized.css => fonts.sized.scss} (100%) rename src/assets/css/{ios.css => ios.scss} (100%) rename src/assets/css/{livetv.css => livetv.scss} (100%) rename src/assets/css/{site.css => site.scss} (76%) diff --git a/src/assets/css/clearbutton.css b/src/assets/css/clearbutton.scss similarity index 100% rename from src/assets/css/clearbutton.css rename to src/assets/css/clearbutton.scss diff --git a/src/assets/css/detailtable.css b/src/assets/css/detailtable.scss similarity index 100% rename from src/assets/css/detailtable.css rename to src/assets/css/detailtable.scss diff --git a/src/assets/css/flexstyles.css b/src/assets/css/flexstyles.scss similarity index 100% rename from src/assets/css/flexstyles.css rename to src/assets/css/flexstyles.scss diff --git a/src/assets/css/fonts.css b/src/assets/css/fonts.scss similarity index 100% rename from src/assets/css/fonts.css rename to src/assets/css/fonts.scss diff --git a/src/assets/css/fonts.sized.css b/src/assets/css/fonts.sized.scss similarity index 100% rename from src/assets/css/fonts.sized.css rename to src/assets/css/fonts.sized.scss diff --git a/src/assets/css/ios.css b/src/assets/css/ios.scss similarity index 100% rename from src/assets/css/ios.css rename to src/assets/css/ios.scss diff --git a/src/assets/css/livetv.css b/src/assets/css/livetv.scss similarity index 100% rename from src/assets/css/livetv.css rename to src/assets/css/livetv.scss diff --git a/src/assets/css/site.css b/src/assets/css/site.scss similarity index 76% rename from src/assets/css/site.css rename to src/assets/css/site.scss index 627145abc1..db179afb2a 100644 --- a/src/assets/css/site.css +++ b/src/assets/css/site.scss @@ -1,19 +1,19 @@ -body, -html { +@mixin fullpage { margin: 0; padding: 0; height: 100%; } -.clipForScreenReader { - clip: rect(1px, 1px, 1px, 1px); - clip-path: inset(50%); - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; +html { + @include fullpage; + line-height: 1.35; +} + +body { + @include fullpage; + overflow-x: hidden; + background-color: transparent !important; + -webkit-font-smoothing: antialiased; } .material-icons { @@ -30,10 +30,6 @@ html { contain: strict; } -html { - line-height: 1.35; -} - .layout-mobile, .layout-tv { -webkit-touch-callout: none; @@ -44,12 +40,6 @@ html { user-select: none; } -body { - overflow-x: hidden; - background-color: transparent !important; - -webkit-font-smoothing: antialiased; -} - .mainAnimatedPage { contain: style size !important; } @@ -62,7 +52,7 @@ body { overflow-y: hidden !important; } -div[data-role=page] { +div[data-role="page"] { outline: 0; } @@ -75,10 +65,10 @@ div[data-role=page] { padding-left: 0.15em; font-weight: 400; white-space: normal !important; -} -.fieldDescription + .fieldDescription { - margin-top: 0.3em; + + .fieldDescription { + margin-top: 0.3em; + } } .content-primary, @@ -89,9 +79,14 @@ div[data-role=page] { padding-bottom: 5em !important; } -@media all and (min-width: 50em) { - .readOnlyContent, - form { +.readOnlyContent { + @media all and (min-width: 50em) { + max-width: 54em; + } +} + +form { + @media all and (min-width: 50em) { max-width: 54em; } } @@ -111,12 +106,12 @@ div[data-role=page] { .headroom { will-change: transform; transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} + &--pinned { + transform: translateY(0%); + } -.headroom--unpinned { - transform: translateY(-100%); + &--unpinned { + transform: translateY(-100%); + } } From 575dcd8334c9b635bb375eaec1b6d80b941ab380 Mon Sep 17 00:00:00 2001 From: Guilherme Danno Date: Sat, 16 May 2020 00:54:46 -0300 Subject: [PATCH 02/63] refactor: use scss features --- src/assets/css/fonts.scss | 23 ++++++++--------- src/assets/css/fonts.sized.scss | 44 ++++++++++++++++----------------- src/assets/css/livetv.scss | 4 +-- src/assets/css/site.scss | 11 +++++++++ 4 files changed, 45 insertions(+), 37 deletions(-) diff --git a/src/assets/css/fonts.scss b/src/assets/css/fonts.scss index cb0da0f80f..abffd3a0d2 100644 --- a/src/assets/css/fonts.scss +++ b/src/assets/css/fonts.scss @@ -1,5 +1,11 @@ -html { +@mixin font($weight: null, $size: null) { font-family: "Noto Sans", sans-serif; + font-weight: $weight; + font-size: $size; +} + +html { + @include font; font-size: 93%; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; @@ -7,25 +13,16 @@ html { text-rendering: optimizeLegibility; } -h1, -h2, -h3 { - font-family: "Noto Sans", sans-serif; -} - h1 { - font-weight: 400; - font-size: 1.8em; + @include font(400, 1.8em); } h2 { - font-weight: 400; - font-size: 1.5em; + @include font(400, 1.5em); } h3 { - font-weight: 400; - font-size: 1.17em; + @include font(400, 1.17em); } .layout-tv { diff --git a/src/assets/css/fonts.sized.scss b/src/assets/css/fonts.sized.scss index f60a94f236..1cec58a4a6 100644 --- a/src/assets/css/fonts.sized.scss +++ b/src/assets/css/fonts.sized.scss @@ -1,31 +1,31 @@ -h1 { +@mixin header-font($size: null) { font-weight: 400; - font-size: 1.8em; + font-size: $size; } -.layout-desktop h1 { - font-size: 2em; -} - -h2 { - font-weight: 400; - font-size: 1.5em; -} - -h3 { - font-weight: 400; - font-size: 1.17em; -} - -@media all and (min-height: 720px) { - html { +html { + @media all and (min-height: 720px) { font-size: 20px; } -} -/* This is supposed to be 1080p, but had to reduce the min height to account for possible browser chrome */ -@media all and (min-height: 1000px) { - html { + /* This is supposed to be 1080p, but had to reduce the min height to account for possible browser chrome */ + @media all and (min-height: 1000px) { font-size: 27px; } } + +h1 { + @include header-font(1.8em); + + .layout-desktop & { + font-size: 2em; + } +} + +h2 { + @include header-font(1.8em); +} + +h3 { + @include header-font(1.17em); +} diff --git a/src/assets/css/livetv.scss b/src/assets/css/livetv.scss index 695adff8c5..032bcddf48 100644 --- a/src/assets/css/livetv.scss +++ b/src/assets/css/livetv.scss @@ -2,8 +2,8 @@ padding-bottom: 15em; } -@media all and (min-width: 62.5em) { - #guideTab { +#guideTab { + @media all and (min-width: 62.5em) { padding-left: 0.5em; } } diff --git a/src/assets/css/site.scss b/src/assets/css/site.scss index db179afb2a..d900a8bb40 100644 --- a/src/assets/css/site.scss +++ b/src/assets/css/site.scss @@ -16,6 +16,17 @@ body { -webkit-font-smoothing: antialiased; } +.clipForScreenReader { + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + height: 1px; + width: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; +} + .material-icons { /* Fix font ligatures on older WebOS versions */ -webkit-font-feature-settings: "liga"; From 108ebc58a60f9df6d3e5c002e8bf34834b343771 Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 1 Sep 2020 22:55:08 +0900 Subject: [PATCH 03/63] add basic pdf reader --- package.json | 2 + src/bundle.js | 5 + src/components/apphost.js | 2 - src/config.template.json | 1 + src/plugins/bookPlayer/plugin.js | 99 +++---- src/plugins/bookPlayer/tableOfContents.js | 19 +- src/plugins/pdfPlayer/plugin.js | 307 ++++++++++++++++++++++ src/plugins/pdfPlayer/style.css | 25 ++ src/scripts/site.js | 1 + webpack.common.js | 3 +- yarn.lock | 5 + 11 files changed, 400 insertions(+), 69 deletions(-) create mode 100644 src/plugins/pdfPlayer/plugin.js create mode 100644 src/plugins/pdfPlayer/style.css diff --git a/package.json b/package.json index 5f092d6630..b40fe54453 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "core-js": "^3.6.5", "date-fns": "^2.16.0", "epubjs": "^0.3.85", + "pdfjs-dist": "^2.4.456", "fast-text-encoding": "^1.0.3", "flv.js": "^1.5.0", "headroom.js": "^0.11.0", @@ -323,6 +324,7 @@ "src/libraries/scroller.js", "src/plugins/backdropScreensaver/plugin.js", "src/plugins/bookPlayer/plugin.js", + "src/plugins/pdfPlayer/plugin.js", "src/plugins/bookPlayer/tableOfContents.js", "src/plugins/chromecastPlayer/chromecastHelper.js", "src/plugins/photoPlayer/plugin.js", diff --git a/src/bundle.js b/src/bundle.js index 25810f58ee..c498016c44 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -101,6 +101,11 @@ _define('epubjs', function () { return epubjs; }); +var pdfjs = require('pdfjs-dist/build/pdf'); +_define('pdfjs', function () { + return pdfjs; +}); + // page.js const page = require('page'); _define('page', function() { diff --git a/src/components/apphost.js b/src/components/apphost.js index 33ca5a0b79..b44c8e621f 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -172,7 +172,6 @@ function supportsCue() { function onAppVisible() { if (isHidden) { isHidden = false; - console.debug('triggering app resume event'); events.trigger(appHost, 'resume'); } } @@ -180,7 +179,6 @@ function onAppVisible() { function onAppHidden() { if (!isHidden) { isHidden = true; - console.debug('app is hidden'); } } diff --git a/src/config.template.json b/src/config.template.json index 0f308ccc11..c999dccb83 100644 --- a/src/config.template.json +++ b/src/config.template.json @@ -32,6 +32,7 @@ "plugins/bookPlayer/plugin", "plugins/youtubePlayer/plugin", "plugins/backdropScreensaver/plugin", + "plugins/pdfPlayer/plugin", "plugins/logoScreensaver/plugin", "plugins/sessionPlayer/plugin", "plugins/chromecastPlayer/plugin" diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index 415bd7b958..f97610caf6 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -20,11 +20,13 @@ export class BookPlayer { this.onDialogClosed = this.onDialogClosed.bind(this); this.openTableOfContents = this.openTableOfContents.bind(this); this.onWindowKeyUp = this.onWindowKeyUp.bind(this); + this.onTouchStart = this.onTouchStart.bind(this); } play(options) { - this._progress = 0; - this._loaded = false; + this.progress = 0; + this.cancellationToken = false; + this.loaded = false; loading.show(); const elem = this.createMediaElement(); @@ -34,35 +36,35 @@ export class BookPlayer { stop() { this.unbindEvents(); - const elem = this._mediaElement; - const tocElement = this._tocElement; - const rendition = this._rendition; + const elem = this.mediaElement; + const tocElement = this.tocElement; + const rendition = this.rendition; if (elem) { dialogHelper.close(elem); - this._mediaElement = null; + this.mediaElement = null; } if (tocElement) { tocElement.destroy(); - this._tocElement = null; + this.tocElement = null; } if (rendition) { rendition.destroy(); } - // Hide loader in case player was not fully loaded yet + // hide loader in case player was not fully loaded yet loading.hide(); - this._cancellationToken.shouldCancel = true; + this.cancellationToken = true; } currentItem() { - return this._currentItem; + return this.item; } currentTime() { - return this._progress * 1000; + return this.progress * 1000; } duration() { @@ -94,12 +96,10 @@ export class BookPlayer { onWindowKeyUp(e) { const key = keyboardnavigation.getKeyName(e); - - // TODO: depending on the event this can be the document or the rendition itself - const rendition = this._rendition || this; + const rendition = this.rendition; const book = rendition.book; - if (this._loaded === false) return; + if (!this.loaded) return; switch (key) { case 'l': case 'ArrowRight': @@ -112,9 +112,9 @@ export class BookPlayer { book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev(); break; case 'Escape': - if (this._tocElement) { + if (this.tocElement) { // Close table of contents on ESC if it is open - this._tocElement.destroy(); + this.tocElement.destroy(); } else { // Otherwise stop the entire book player this.stop(); @@ -124,17 +124,12 @@ export class BookPlayer { } onTouchStart(e) { - // TODO: depending on the event this can be the document or the rendition itself - const rendition = this._rendition || this; + const rendition = this.rendition; const book = rendition.book; - // check that the event is from the book or the document - if (!book || this._loaded === false) return; - // epubjs stores pages off the screen or something for preloading // get the modulus of the touch event to account for the increased width - if (!e.touches || e.touches.length === 0) return; - + if (!this.loaded || !e.touches || e.touches.length === 0) return; const touch = e.touches[0].clientX % dom.getWindowSize().innerWidth; if (touch < dom.getWindowSize().innerWidth / 2) { book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev(); @@ -148,7 +143,7 @@ export class BookPlayer { } bindMediaElementEvents() { - const elem = this._mediaElement; + const elem = this.mediaElement; elem.addEventListener('close', this.onDialogClosed, {once: true}); elem.querySelector('.btnBookplayerExit').addEventListener('click', this.onDialogClosed, {once: true}); @@ -161,13 +156,13 @@ export class BookPlayer { document.addEventListener('keyup', this.onWindowKeyUp); document.addEventListener('touchstart', this.onTouchStart); - // FIXME: I don't really get why document keyup event is not triggered when epub is in focus - this._rendition.on('keyup', this.onWindowKeyUp); - this._rendition.on('touchstart', this.onTouchStart); + // FIXME: document keyup event is not triggered when epub is in focus + this.rendition.on('keyup', this.onWindowKeyUp); + this.rendition.on('touchstart', this.onTouchStart); } unbindMediaElementEvents() { - const elem = this._mediaElement; + const elem = this.mediaElement; elem.removeEventListener('close', this.onDialogClosed); elem.querySelector('.btnBookplayerExit').removeEventListener('click', this.onDialogClosed); @@ -175,27 +170,27 @@ export class BookPlayer { } unbindEvents() { - if (this._mediaElement) { + if (this.mediaElement) { this.unbindMediaElementEvents(); } document.removeEventListener('keyup', this.onWindowKeyUp); document.removeEventListener('touchstart', this.onTouchStart); - if (this._rendition) { - this._rendition.off('keyup', this.onWindowKeyUp); - this._rendition.off('touchstart', this.onTouchStart); + if (this.rendition) { + this.rendition.off('keyup', this.onWindowKeyUp); + this.rendition.off('touchstart', this.onTouchStart); } } openTableOfContents() { - if (this._loaded) { - this._tocElement = new TableOfContents(this); + if (this.loaded) { + this.tocElement = new TableOfContents(this); } } createMediaElement() { - let elem = this._mediaElement; + let elem = this.mediaElement; if (elem) { return elem; } @@ -211,8 +206,6 @@ export class BookPlayer { removeOnClose: true }); - elem.id = 'bookPlayer'; - let html = ''; html += '
'; html += ''; @@ -221,19 +214,19 @@ export class BookPlayer { html += ''; html += '
'; + elem.id = 'bookPlayer'; elem.innerHTML = html; dialogHelper.open(elem); } - this._mediaElement = elem; - + this.mediaElement = elem; return elem; } setCurrentSrc(elem, options) { const item = options.items[0]; - this._currentItem = item; + this.item = item; this.streamInfo = { started: true, ended: false, @@ -249,15 +242,10 @@ export class BookPlayer { import('epubjs').then(({default: epubjs}) => { const downloadHref = apiClient.getItemDownloadUrl(item.Id); const book = epubjs(downloadHref, {openAs: 'epub'}); - const rendition = book.renderTo(elem, {width: '100%', height: '97%'}); + const rendition = book.renderTo(elem, {width: '100%', height: '96%'}); - this._currentSrc = downloadHref; - this._rendition = rendition; - const cancellationToken = { - shouldCancel: false - }; - - this._cancellationToken = cancellationToken; + this.currentSrc = downloadHref; + this.rendition = rendition; return rendition.display().then(() => { const epubElem = document.querySelector('.epub-container'); @@ -265,10 +253,8 @@ export class BookPlayer { this.bindEvents(); - return this._rendition.book.locations.generate(1024).then(async () => { - if (cancellationToken.shouldCancel) { - return reject(); - } + return this.rendition.book.locations.generate(1024).then(async () => { + if (this.cancellationToken) reject(); const percentageTicks = options.startPositionTicks / 10000000; if (percentageTicks !== 0.0) { @@ -276,15 +262,14 @@ export class BookPlayer { await rendition.display(resumeLocation); } - this._loaded = true; + this.loaded = true; epubElem.style.display = 'block'; rendition.on('relocated', (locations) => { - this._progress = book.locations.percentageFromCfi(locations.start.cfi); + this.progress = book.locations.percentageFromCfi(locations.start.cfi); events.trigger(this, 'timeupdate'); }); loading.hide(); - return resolve(); }); }, () => { @@ -300,7 +285,7 @@ export class BookPlayer { } canPlayItem(item) { - if (item.Path && (item.Path.endsWith('epub'))) { + if (item.Path && item.Path.endsWith('epub')) { return true; } diff --git a/src/plugins/bookPlayer/tableOfContents.js b/src/plugins/bookPlayer/tableOfContents.js index a1c5d8f220..165c1fa9ac 100644 --- a/src/plugins/bookPlayer/tableOfContents.js +++ b/src/plugins/bookPlayer/tableOfContents.js @@ -2,8 +2,8 @@ import dialogHelper from 'dialogHelper'; export default class TableOfContents { constructor(bookPlayer) { - this._bookPlayer = bookPlayer; - this._rendition = bookPlayer._rendition; + this.bookPlayer = bookPlayer; + this.rendition = bookPlayer.rendition; this.onDialogClosed = this.onDialogClosed.bind(this); @@ -11,24 +11,24 @@ export default class TableOfContents { } destroy() { - const elem = this._elem; + const elem = this.elem; if (elem) { this.unbindEvents(); dialogHelper.close(elem); } - this._bookPlayer._tocElement = null; + this.bookPlayer.tocElement = null; } bindEvents() { - const elem = this._elem; + const elem = this.elem; elem.addEventListener('close', this.onDialogClosed, {once: true}); elem.querySelector('.btnBookplayerTocClose').addEventListener('click', this.onDialogClosed, {once: true}); } unbindEvents() { - const elem = this._elem; + const elem = this.elem; elem.removeEventListener('close', this.onDialogClosed); elem.querySelector('.btnBookplayerTocClose').removeEventListener('click', this.onDialogClosed); @@ -52,7 +52,7 @@ export default class TableOfContents { } createMediaElement() { - const rendition = this._rendition; + const rendition = this.rendition; const elem = dialogHelper.createDialog({ size: 'small', @@ -68,7 +68,8 @@ export default class TableOfContents { tocHtml += '
    '; rendition.book.navigation.forEach((chapter) => { tocHtml += '
  • '; - // Remove '../' from href + + // remove parent directory reference from href to fix certain books const link = chapter.href.startsWith('../') ? chapter.href.substr(3) : chapter.href; tocHtml += `${chapter.label}`; tocHtml += '
  • '; @@ -83,7 +84,7 @@ export default class TableOfContents { this.destroy(); }); - this._elem = elem; + this.elem = elem; this.bindEvents(); dialogHelper.open(elem); diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js new file mode 100644 index 0000000000..7516fc4b91 --- /dev/null +++ b/src/plugins/pdfPlayer/plugin.js @@ -0,0 +1,307 @@ +import connectionManager from 'connectionManager'; +import loading from 'loading'; +import keyboardnavigation from 'keyboardnavigation'; +import dialogHelper from 'dialogHelper'; +import dom from 'dom'; +import appRouter from 'appRouter'; +import events from 'events'; +import 'css!./style'; +import 'material-icons'; +import 'paper-icon-button-light'; + +export class PdfPlayer { + constructor() { + this.name = 'PDF Player'; + this.type = 'mediaplayer'; + this.id = 'pdfplayer'; + this.priority = 1; + + this.onDialogClosed = this.onDialogClosed.bind(this); + this.onWindowKeyUp = this.onWindowKeyUp.bind(this); + this.onTouchStart = this.onTouchStart.bind(this); + } + + play(options) { + this.progress = 0; + this.loaded = false; + this.cancellationToken = false; + this.pages = {}; + + loading.show(); + + let elem = this.createMediaElement(); + return this.setCurrentSrc(elem, options); + } + + stop() { + this.unbindEvents(); + + let elem = this.mediaElement; + if (elem) { + dialogHelper.close(elem); + this.mediaElement = null; + } + + // hide loading animation + loading.hide(); + + // cancel page render + this.cancellationToken = true; + } + + currentItem() { + return this.item; + } + + currentTime() { + return this.progress; + } + + duration() { + return this.book ? this.book.numPages : 0; + } + + volume() { + return 100; + } + + isMuted() { + return false; + } + + paused() { + return false; + } + + seekable() { + return true; + } + + onWindowKeyUp(e) { + let key = keyboardnavigation.getKeyName(e); + + if (!this.loaded) return; + switch (key) { + case 'l': + case 'ArrowRight': + case 'Right': + this.next(); + break; + case 'j': + case 'ArrowLeft': + case 'Left': + this.previous(); + break; + case 'Escape': + this.stop(); + break; + } + } + + onTouchStart(e) { + if (!this.loaded || !e.touches || e.touches.length === 0) return; + if (e.touches[0].clientX < dom.getWindowSize().innerWidth / 2) { + this.previous(); + } else { + this.next(); + } + } + + onDialogClosed() { + this.stop(); + } + + bindMediaElementEvents() { + let elem = this.mediaElement; + + elem.addEventListener('close', this.onDialogClosed, {once: true}); + elem.querySelector('.btnExit').addEventListener('click', this.onDialogClosed, {once: true}); + } + + bindEvents() { + this.bindMediaElementEvents(); + + document.addEventListener('keyup', this.onWindowKeyUp); + document.addEventListener('touchstart', this.onTouchStart); + } + + unbindMediaElementEvents() { + let elem = this.mediaElement; + + elem.removeEventListener('close', this.onDialogClosed); + elem.querySelector('.btnExit').removeEventListener('click', this.onDialogClosed); + } + + unbindEvents() { + if (this.mediaElement) { + this.unbindMediaElementEvents(); + } + + document.removeEventListener('keyup', this.onWindowKeyUp); + document.removeEventListener('touchstart', this.onTouchStart); + } + + createMediaElement() { + let elem = this.mediaElement; + if (elem) { + return elem; + } + + elem = document.getElementById('pdfPlayer'); + if (!elem) { + elem = dialogHelper.createDialog({ + exitAnimationDuration: 400, + size: 'fullscreen', + autoFocus: false, + scrollY: false, + exitAnimation: 'fadeout', + removeOnClose: true + }); + + let html = ''; + html += ''; + html += '
    '; + html += ''; + html += '
    '; + + elem.id = 'pdfPlayer'; + elem.innerHTML = html; + + dialogHelper.open(elem); + } + + this.mediaElement = elem; + return elem; + } + + setCurrentSrc(elem, options) { + let item = options.items[0]; + + this.item = item; + this.streamInfo = { + started: true, + ended: false, + mediaSource: { + Id: item.Id + } + }; + + let serverId = item.ServerId; + let apiClient = connectionManager.getApiClient(serverId); + + return new Promise((resolve, reject) => { + import('pdfjs').then(({default: pdfjs}) => { + let downloadHref = apiClient.getItemDownloadUrl(item.Id); + + this.bindEvents(); + pdfjs.GlobalWorkerOptions.workerSrc = appRouter.baseUrl() + '/libraries/pdf.worker.js'; + + let downloadTask = pdfjs.getDocument(downloadHref); + downloadTask.promise.then(book => { + if (this.cancellationToken) return; + this.book = book; + this.loaded = true; + + const percentageTicks = options.startPositionTicks / 10000; + if (percentageTicks !== 0) { + this.loadPage(percentageTicks); + this.progress = percentageTicks; + } else { + this.loadPage(1); + } + + return resolve(); + }); + }); + }); + } + + next() { + if (this.progress === this.duration() - 1) return; + this.loadPage(this.progress + 2); + this.progress = this.progress + 1; + } + + previous() { + if (this.progress === 0) return; + this.loadPage(this.progress); + this.progress = this.progress - 1; + } + + replaceCanvas(canvas) { + const old = document.getElementById('canvas'); + + canvas.id = 'canvas'; + old.parentNode.replaceChild(canvas, old); + } + + loadPage(number) { + const prefix = 'page'; + const pad = 2; + + // generate list of cached pages by padding the requested page on both sides + let pages = [prefix + number]; + for (let i = 1; i <= pad; i++) { + if (number - i > 0) pages.push(prefix + (number - i)); + if (number + i < this.duration()) pages.push(prefix + (number + i)); + } + + // load any missing pages in the cache + for (let page of pages) { + if (!this.pages[page]) { + this.pages[page] = document.createElement('canvas'); + this.renderPage(this.pages[page], parseInt(page.substr(4))); + } + } + + // show the requested page + this.replaceCanvas(this.pages[prefix + number], number); + + // delete all pages outside the cache area + for (let page in this.pages) { + if (!pages.includes(page)) { + delete this.pages[page]; + } + } + } + + renderPage(canvas, number) { + this.book.getPage(number).then(page => { + events.trigger(this, 'timeupdate'); + + const original = page.getViewport({ scale: 1 }); + const context = canvas.getContext('2d'); + + const widthRatio = dom.getWindowSize().innerWidth / original.width; + const heightRatio = dom.getWindowSize().innerHeight / original.height; + const scale = Math.min(heightRatio, widthRatio); + const viewport = page.getViewport({ scale: scale }); + + canvas.width = viewport.width; + canvas.height = viewport.height; + var renderContext = { + canvasContext: context, + viewport: viewport + }; + + let renderTask = page.render(renderContext); + renderTask.promise.then(() => { + loading.hide(); + }); + }); + } + + canPlayMediaType(mediaType) { + return (mediaType || '').toLowerCase() === 'book'; + } + + canPlayItem(item) { + if (item.Path && item.Path.endsWith('pdf')) { + return true; + } + + return false; + } +} + +export default PdfPlayer; diff --git a/src/plugins/pdfPlayer/style.css b/src/plugins/pdfPlayer/style.css new file mode 100644 index 0000000000..de426a0c4a --- /dev/null +++ b/src/plugins/pdfPlayer/style.css @@ -0,0 +1,25 @@ +#pdfPlayer { + position: relative; + height: 100%; + width: 100%; + overflow: none; + z-index: 100; + background: #fff; +} + +#canvas { + display: block; + margin: auto; +} + +.actionButtons { + right: 0.5vh; + top: 0.5vh; + z-index: 1002; + position: absolute; +} + +.actionButtonIcon { + color: black; + opacity: 0.7; +} diff --git a/src/scripts/site.js b/src/scripts/site.js index b6bd7b4793..236561b58a 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -503,6 +503,7 @@ function initClient() { 'flvjs', 'jstree', 'epubjs', + 'pdfjs', 'jQuery', 'hlsjs', 'howler', diff --git a/webpack.common.js b/webpack.common.js index fb3a1edc34..f93f816ed6 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -12,7 +12,8 @@ const Assets = [ 'libass-wasm/dist/js/subtitles-octopus-worker.wasm', 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.js', 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.data', - 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.js.mem' + 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.js.mem', + 'pdfjs-dist/build/pdf.worker.js' ]; const LibarchiveWasm = [ diff --git a/yarn.lock b/yarn.lock index 013c06e045..314378f6a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8222,6 +8222,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pdfjs-dist@^2.4.456: + version "2.4.456" + resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.4.456.tgz#0eaad2906cda866bbb393e79a0e5b4e68bd75520" + integrity sha512-yckJEHq3F48hcp6wStEpbN9McOj328Ib09UrBlGAKxvN2k+qYPN5iq6TH6jD1C0pso7zTep+g/CKsYgdrQd5QA== + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" From 9dc9bdcbed75fc861b4620e93f3fa6722408c5c7 Mon Sep 17 00:00:00 2001 From: Andres J Ruiz Torres Date: Sat, 11 Jul 2020 17:08:52 -0400 Subject: [PATCH 04/63] Add basic support for bulk deleting all devices Make it easier to purge all devices from the device list. Api calls are done in parallel, without error handling, but it should be a relatively fast operation Fixes #1435 --- .../dashboard/devices/devices.html | 1 + src/controllers/dashboard/devices/devices.js | 49 +++++++++++++++---- src/strings/en-us.json | 3 ++ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/controllers/dashboard/devices/devices.html b/src/controllers/dashboard/devices/devices.html index 63c348c900..e2504cd3e7 100644 --- a/src/controllers/dashboard/devices/devices.html +++ b/src/controllers/dashboard/devices/devices.html @@ -5,6 +5,7 @@

    ${HeaderDevices}

    ${Help} +
    diff --git a/src/controllers/dashboard/devices/devices.js b/src/controllers/dashboard/devices/devices.js index 1178a0f1bd..58f9fd0901 100644 --- a/src/controllers/dashboard/devices/devices.js +++ b/src/controllers/dashboard/devices/devices.js @@ -10,10 +10,41 @@ import 'cardStyle'; /* eslint-disable indent */ + // Local cache of loaded + let deviceIds = []; + function canDelete(deviceId) { return deviceId !== ApiClient.deviceId(); } + function deleteViaApi(id) { + return ApiClient.ajax({ + type: 'DELETE', + url: ApiClient.getUrl('Devices', { + Id: id + }) + }); + } + + function deleteAllDevices(page) { + let msg = globalize.translate('DeleteDevicesConfirmation'); + + require(['confirm'], async function (confirm) { + await confirm({ + text: msg, + title: globalize.translate('HeaderDeleteDevices'), + confirmText: globalize.translate('ButtonDelete'), + primary: 'delete' + }); + + loading.show(); + await Promise.all( + deviceIds.filter(canDelete).map((id) => deleteViaApi(id)) + ); + loadData(page); + }); + } + function deleteDevice(page, id) { const msg = globalize.translate('DeleteDeviceConfirmation'); @@ -23,16 +54,10 @@ import 'cardStyle'; title: globalize.translate('HeaderDeleteDevice'), confirmText: globalize.translate('Delete'), primary: 'delete' - }).then(function () { + }).then(async () => { loading.show(); - ApiClient.ajax({ - type: 'DELETE', - url: ApiClient.getUrl('Devices', { - Id: id - }) - }).then(function () { - loadData(page); - }); + await deleteViaApi(id); + loadData(page); }); }); } @@ -129,6 +154,7 @@ import 'cardStyle'; loading.show(); ApiClient.getJSON(ApiClient.getUrl('Devices')).then(function (result) { load(page, result.Items); + deviceIds = result.Items.map((device) => device.Id); loading.hide(); }); } @@ -145,6 +171,9 @@ import 'cardStyle'; view.addEventListener('viewshow', function () { loadData(this); }); - } + view.querySelector('#deviceDeleteAll').addEventListener('click', function() { + deleteAllDevices(view); + }); + } /* eslint-enable indent */ diff --git a/src/strings/en-us.json b/src/strings/en-us.json index b3a1579b1e..891c7ccc0a 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -150,6 +150,8 @@ "DefaultSubtitlesHelp": "Subtitles are loaded based on the default and forced flags in the embedded metadata. Language preferences are considered when multiple options are available.", "DeinterlaceMethodHelp": "Select the deinterlacing method to use when software transcoding interlaced content. When hardware acceleration supporting hardware deinterlacing is enabled the hardware deinterlacer will be used instead of this setting.", "Delete": "Delete", + "DeleteAll": "Delete All", + "DeleteDevicesConfirmation": "Are you sure you wish to delete all devices? All other sessions will be logged out. Devices will reappear the next time a user signs in.", "DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.", "DeleteImage": "Delete Image", "DeleteImageConfirmation": "Are you sure you wish to delete this image?", @@ -298,6 +300,7 @@ "HeaderDateIssued": "Date Issued", "HeaderDefaultRecordingSettings": "Default Recording Settings", "HeaderDeleteDevice": "Delete Device", + "HeaderDeleteDevices": "Delete All Devices", "HeaderDeleteItem": "Delete Item", "HeaderDeleteItems": "Delete Items", "HeaderDeleteProvider": "Delete Provider", From dcd324bae57914e24f4edf507b33214d2117a06c Mon Sep 17 00:00:00 2001 From: Andres J Ruiz Torres Date: Sat, 11 Jul 2020 19:21:34 -0400 Subject: [PATCH 05/63] Remove trailing space --- src/controllers/dashboard/devices/devices.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/dashboard/devices/devices.js b/src/controllers/dashboard/devices/devices.js index 58f9fd0901..0a9586bddf 100644 --- a/src/controllers/dashboard/devices/devices.js +++ b/src/controllers/dashboard/devices/devices.js @@ -10,7 +10,7 @@ import 'cardStyle'; /* eslint-disable indent */ - // Local cache of loaded + // Local cache of loaded let deviceIds = []; function canDelete(deviceId) { From d6ef8a1b970e8d356834d989c60c4b9b4099fe30 Mon Sep 17 00:00:00 2001 From: Andres J Ruiz Torres Date: Sat, 17 Oct 2020 22:21:32 -0400 Subject: [PATCH 06/63] Move delete to use new API method --- src/controllers/dashboard/devices/devices.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/controllers/dashboard/devices/devices.js b/src/controllers/dashboard/devices/devices.js index 0a9586bddf..77aca79d0a 100644 --- a/src/controllers/dashboard/devices/devices.js +++ b/src/controllers/dashboard/devices/devices.js @@ -17,15 +17,6 @@ import 'cardStyle'; return deviceId !== ApiClient.deviceId(); } - function deleteViaApi(id) { - return ApiClient.ajax({ - type: 'DELETE', - url: ApiClient.getUrl('Devices', { - Id: id - }) - }); - } - function deleteAllDevices(page) { let msg = globalize.translate('DeleteDevicesConfirmation'); @@ -39,7 +30,7 @@ import 'cardStyle'; loading.show(); await Promise.all( - deviceIds.filter(canDelete).map((id) => deleteViaApi(id)) + deviceIds.filter(canDelete).map((id) => ApiClient.deleteDevice(id)) ); loadData(page); }); @@ -56,7 +47,7 @@ import 'cardStyle'; primary: 'delete' }).then(async () => { loading.show(); - await deleteViaApi(id); + await ApiClient.deleteDevice(id); loadData(page); }); }); From 2bd78f86589708edfa843d6d02b3a95eab0d9d17 Mon Sep 17 00:00:00 2001 From: Andres J Ruiz Torres Date: Sat, 17 Oct 2020 22:21:47 -0400 Subject: [PATCH 07/63] Fix eslint warning --- src/controllers/dashboard/devices/devices.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/dashboard/devices/devices.js b/src/controllers/dashboard/devices/devices.js index 77aca79d0a..c6e7281645 100644 --- a/src/controllers/dashboard/devices/devices.js +++ b/src/controllers/dashboard/devices/devices.js @@ -18,7 +18,7 @@ import 'cardStyle'; } function deleteAllDevices(page) { - let msg = globalize.translate('DeleteDevicesConfirmation'); + const msg = globalize.translate('DeleteDevicesConfirmation'); require(['confirm'], async function (confirm) { await confirm({ From 3f55a79d7417f1ea9b666009eb51fe4306155c89 Mon Sep 17 00:00:00 2001 From: dkanada Date: Wed, 21 Oct 2020 16:00:33 +0900 Subject: [PATCH 08/63] fix minor issues with book players --- package.json | 2 +- src/bundle.js | 2 +- src/plugins/bookPlayer/plugin.js | 1 - src/plugins/pdfPlayer/plugin.js | 3 +-- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 97055cd78a..9dcd6f3afd 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "core-js": "^3.6.5", "date-fns": "^2.16.1", "epubjs": "^0.3.85", - "pdfjs-dist": "^2.4.456", + "pdfjs-dist": "2.4.456", "fast-text-encoding": "^1.0.3", "flv.js": "^1.5.0", "headroom.js": "^0.11.0", diff --git a/src/bundle.js b/src/bundle.js index 7ea1cee45f..3dcb95442e 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -101,7 +101,7 @@ _define('epubjs', function () { return epubjs; }); -var pdfjs = require('pdfjs-dist/build/pdf'); +const pdfjs = require('pdfjs-dist/build/pdf'); _define('pdfjs', function () { return pdfjs; }); diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index 1634018fa2..c56777f378 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -22,7 +22,6 @@ export class BookPlayer { this.prevChapter = this.prevChapter.bind(this); this.nextChapter = this.nextChapter.bind(this); this.onWindowKeyUp = this.onWindowKeyUp.bind(this); - this.onTouchStart = this.onTouchStart.bind(this); } play(options) { diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index 7516fc4b91..1dcb5212f8 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -1,4 +1,3 @@ -import connectionManager from 'connectionManager'; import loading from 'loading'; import keyboardnavigation from 'keyboardnavigation'; import dialogHelper from 'dialogHelper'; @@ -187,7 +186,7 @@ export class PdfPlayer { }; let serverId = item.ServerId; - let apiClient = connectionManager.getApiClient(serverId); + let apiClient = window.connectionManager.getApiClient(serverId); return new Promise((resolve, reject) => { import('pdfjs').then(({default: pdfjs}) => { From aa1f6576d5da5f3d523dc6ffc54abc3492d4a2a8 Mon Sep 17 00:00:00 2001 From: dkanada Date: Wed, 21 Oct 2020 21:31:47 +0900 Subject: [PATCH 09/63] update yarn.lock for azure --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 7b314c7fec..f7eb3d9f6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8446,7 +8446,7 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pdfjs-dist@^2.4.456: +pdfjs-dist@2.4.456: version "2.4.456" resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.4.456.tgz#0eaad2906cda866bbb393e79a0e5b4e68bd75520" integrity sha512-yckJEHq3F48hcp6wStEpbN9McOj328Ib09UrBlGAKxvN2k+qYPN5iq6TH6jD1C0pso7zTep+g/CKsYgdrQd5QA== From b24235f21b0ec331ef58526dfb463acce66ffdcc Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 23 Oct 2020 05:22:03 +0900 Subject: [PATCH 10/63] fix linting issues --- src/plugins/pdfPlayer/plugin.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index 1dcb5212f8..480eb80546 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -28,14 +28,14 @@ export class PdfPlayer { loading.show(); - let elem = this.createMediaElement(); + const elem = this.createMediaElement(); return this.setCurrentSrc(elem, options); } stop() { this.unbindEvents(); - let elem = this.mediaElement; + const elem = this.mediaElement; if (elem) { dialogHelper.close(elem); this.mediaElement = null; @@ -77,7 +77,7 @@ export class PdfPlayer { } onWindowKeyUp(e) { - let key = keyboardnavigation.getKeyName(e); + const key = keyboardnavigation.getKeyName(e); if (!this.loaded) return; switch (key) { @@ -111,7 +111,7 @@ export class PdfPlayer { } bindMediaElementEvents() { - let elem = this.mediaElement; + const elem = this.mediaElement; elem.addEventListener('close', this.onDialogClosed, {once: true}); elem.querySelector('.btnExit').addEventListener('click', this.onDialogClosed, {once: true}); @@ -125,7 +125,7 @@ export class PdfPlayer { } unbindMediaElementEvents() { - let elem = this.mediaElement; + const elem = this.mediaElement; elem.removeEventListener('close', this.onDialogClosed); elem.querySelector('.btnExit').removeEventListener('click', this.onDialogClosed); @@ -174,7 +174,7 @@ export class PdfPlayer { } setCurrentSrc(elem, options) { - let item = options.items[0]; + const item = options.items[0]; this.item = item; this.streamInfo = { @@ -185,17 +185,17 @@ export class PdfPlayer { } }; - let serverId = item.ServerId; - let apiClient = window.connectionManager.getApiClient(serverId); + const serverId = item.ServerId; + const apiClient = window.connectionManager.getApiClient(serverId); return new Promise((resolve, reject) => { import('pdfjs').then(({default: pdfjs}) => { - let downloadHref = apiClient.getItemDownloadUrl(item.Id); + const downloadHref = apiClient.getItemDownloadUrl(item.Id); this.bindEvents(); pdfjs.GlobalWorkerOptions.workerSrc = appRouter.baseUrl() + '/libraries/pdf.worker.js'; - let downloadTask = pdfjs.getDocument(downloadHref); + const downloadTask = pdfjs.getDocument(downloadHref); downloadTask.promise.then(book => { if (this.cancellationToken) return; this.book = book; @@ -239,14 +239,14 @@ export class PdfPlayer { const pad = 2; // generate list of cached pages by padding the requested page on both sides - let pages = [prefix + number]; + const pages = [prefix + number]; for (let i = 1; i <= pad; i++) { if (number - i > 0) pages.push(prefix + (number - i)); if (number + i < this.duration()) pages.push(prefix + (number + i)); } // load any missing pages in the cache - for (let page of pages) { + for (const page of pages) { if (!this.pages[page]) { this.pages[page] = document.createElement('canvas'); this.renderPage(this.pages[page], parseInt(page.substr(4))); @@ -257,7 +257,7 @@ export class PdfPlayer { this.replaceCanvas(this.pages[prefix + number], number); // delete all pages outside the cache area - for (let page in this.pages) { + for (const page in this.pages) { if (!pages.includes(page)) { delete this.pages[page]; } @@ -278,12 +278,12 @@ export class PdfPlayer { canvas.width = viewport.width; canvas.height = viewport.height; - var renderContext = { + const renderContext = { canvasContext: context, viewport: viewport }; - let renderTask = page.render(renderContext); + const renderTask = page.render(renderContext); renderTask.promise.then(() => { loading.hide(); }); From 3bbebdb49b82dfaac78364cffeb0f315c8a162d3 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 25 Oct 2020 20:20:06 +0900 Subject: [PATCH 11/63] pull fonts from official repository --- package.json | 1 - src/bundle.js | 6 ------ src/config.json | 6 ++++++ src/scripts/autoThemes.js | 15 +++++++++++++-- src/scripts/settings/webSettings.js | 9 +++++++++ src/scripts/site.js | 3 +-- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 885ff2505e..04d177c3d2 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,6 @@ "howler": "^2.2.0", "intersection-observer": "^0.11.0", "jellyfin-apiclient": "^1.4.2", - "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jquery": "^3.5.1", "jstree": "^3.3.10", "libarchive.js": "^1.3.0", diff --git a/src/bundle.js b/src/bundle.js index 3d1d600a9f..3bc27b733d 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -90,12 +90,6 @@ _define('material-icons', function() { return materialIcons; }); -// noto font -const noto = require('jellyfin-noto'); -_define('jellyfin-noto', function () { - return noto; -}); - const epubjs = require('epubjs'); _define('epubjs', function () { return epubjs; diff --git a/src/config.json b/src/config.json index 864e1f3656..608a2dae3d 100644 --- a/src/config.json +++ b/src/config.json @@ -22,6 +22,12 @@ "id": "wmc" } ], + "fonts": [ + "https://repo.jellyfin.org/releases/other/fonts/noto-sans.css", + "https://repo.jellyfin.org/releases/other/fonts/noto-sans-kr.css", + "https://repo.jellyfin.org/releases/other/fonts/noto-sans-jp.css", + "https://repo.jellyfin.org/releases/other/fonts/noto-sans-sc.css" + ], "plugins": [ "plugins/playAccessValidation/plugin", "plugins/experimentalWarnings/plugin", diff --git a/src/scripts/autoThemes.js b/src/scripts/autoThemes.js index e278a80dc9..f5797522a6 100644 --- a/src/scripts/autoThemes.js +++ b/src/scripts/autoThemes.js @@ -1,11 +1,22 @@ import * as userSettings from 'userSettings'; +import * as webSettings from 'webSettings'; import skinManager from 'skinManager'; import events from 'events'; -// Set the default theme when loading +// set the default theme when loading skinManager.setTheme(userSettings.theme()); -// Set the user's prefered theme when signing in +// set the saved theme once a user authenticates events.on(window.connectionManager, 'localusersignedin', function (e, user) { skinManager.setTheme(userSettings.theme()); }); + +webSettings.getFonts().then(fonts => { + for (const font of fonts) { + let link = document.createElement('link'); + link.setAttribute('rel', 'stylesheet'); + link.href = font; + + document.getElementsByTagName('head')[0].appendChild(link); + } +}); diff --git a/src/scripts/settings/webSettings.js b/src/scripts/settings/webSettings.js index 80587713bf..cf1dd23d30 100644 --- a/src/scripts/settings/webSettings.js +++ b/src/scripts/settings/webSettings.js @@ -102,3 +102,12 @@ export function getPlugins() { return []; }); } + +export function getFonts() { + return getConfig().then(config => { + return config.fonts; + }).catch(error => { + console.log('cannot get web config:', error); + return []; + }); +} diff --git a/src/scripts/site.js b/src/scripts/site.js index 0dbdcb4c61..445da3140e 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -505,7 +505,6 @@ function initClient() { 'sortable', 'webcomponents', 'material-icons', - 'jellyfin-noto', 'date-fns', 'page', 'polyfill', @@ -528,7 +527,7 @@ function initClient() { }); promise = require(['fetch']) - .then(() => require(['jQuery', 'polyfill', 'fast-text-encoding', 'intersection-observer', 'classlist-polyfill', 'css!assets/css/site', 'jellyfin-noto'], (jQuery) => { + .then(() => require(['jQuery', 'polyfill', 'fast-text-encoding', 'intersection-observer', 'classlist-polyfill', 'css!assets/css/site'], (jQuery) => { // Expose jQuery globally window.$ = jQuery; window.jQuery = jQuery; From e90f2d7cd118157bf8add38bbd16bddc4efba8ec Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 25 Oct 2020 20:24:40 +0900 Subject: [PATCH 12/63] fix linting issue --- src/scripts/autoThemes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/autoThemes.js b/src/scripts/autoThemes.js index f5797522a6..9dffda5d2e 100644 --- a/src/scripts/autoThemes.js +++ b/src/scripts/autoThemes.js @@ -13,7 +13,7 @@ events.on(window.connectionManager, 'localusersignedin', function (e, user) { webSettings.getFonts().then(fonts => { for (const font of fonts) { - let link = document.createElement('link'); + const link = document.createElement('link'); link.setAttribute('rel', 'stylesheet'); link.href = font; From 17bb0491805350f4f8a668011465b91029d1fd76 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 29 Oct 2020 18:22:47 +0900 Subject: [PATCH 13/63] update font locations --- src/config.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config.json b/src/config.json index 608a2dae3d..81e54333fc 100644 --- a/src/config.json +++ b/src/config.json @@ -23,10 +23,10 @@ } ], "fonts": [ - "https://repo.jellyfin.org/releases/other/fonts/noto-sans.css", - "https://repo.jellyfin.org/releases/other/fonts/noto-sans-kr.css", - "https://repo.jellyfin.org/releases/other/fonts/noto-sans-jp.css", - "https://repo.jellyfin.org/releases/other/fonts/noto-sans-sc.css" + "https://repo.jellyfin.org/releases/other/jellyfin-noto/font-faces.css", + "https://repo.jellyfin.org/releases/other/jellyfin-noto/css/KR.css", + "https://repo.jellyfin.org/releases/other/jellyfin-noto/css/JP.css", + "https://repo.jellyfin.org/releases/other/jellyfin-noto/css/SC.css" ], "plugins": [ "plugins/playAccessValidation/plugin", From a412495ba8d5ba3dd531ada4c58376f079641437 Mon Sep 17 00:00:00 2001 From: Tomi Date: Thu, 29 Oct 2020 09:59:25 +0000 Subject: [PATCH 14/63] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 4ecb41fe7c..f46f4232bb 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1185,5 +1185,10 @@ "HeaderTranscodingProfileHelp": "Lisää transkoodausprofiileja osoittamaan, mitä muotoja tulisi käyttää, kun transkoodaus on tarpeen.", "LabelAlbumArtMaxResHelp": "Upnp: albumArtURI -ominaisuuden kautta näytetyn albumikuvan enimmäistarkkuus.", "KnownProxiesHelp": "Pilkuilla erotettu luettelo tunnettujen välityspalvelinten IP-osoitteista, joita käytetään muodostettaessa yhteyttä Jellyfin-palvelusi. Tämä vaaditaan X-Forwarded-For-otsikkojen oikeaan käyttöön. Uudelleenkäynnistys vaaditaan tallennuksen jälkeen.", - "LabelInNetworkSignInWithEasyPasswordHelp": "Kirjaudu helppokäyttöisen PIN-koodin avulla sisään lähiverkon päätteisiin. Normaalia salasanaasi tarvitaan vain, kun kirjaudut sisään etäverkosta. Jos PIN-koodi jätetään tyhjäksi, et tarvitse salasanaa kotiverkossasi." + "LabelInNetworkSignInWithEasyPasswordHelp": "Kirjaudu helppokäyttöisen PIN-koodin avulla sisään lähiverkon päätteisiin. Normaalia salasanaasi tarvitaan vain, kun kirjaudut sisään etäverkosta. Jos PIN-koodi jätetään tyhjäksi, et tarvitse salasanaa kotiverkossasi.", + "LabelDateAddedBehaviorHelp": "Jos metatietoarvo on olemassa, sitä käytetään aina näiden vaihtoehtojen sijaan.", + "LabelCurrentStatus": "Nykyinen tila:", + "LabelCachePathHelp": "Määritä välimuistitiedostojen, kuten kuvien, polku. Jätä tyhjäksi käyttääksesi palvelimen oletusarvoa.", + "LabelBlastMessageIntervalHelp": "Määrittää ajan sekunteina jokaisen \"Olen elossa\" -viestin välillä.", + "LabelBindToLocalNetworkAddressHelp": "Korvaa HTTP-palvelimen paikallinen IP-osoite. Jos se on tyhjä, palvelin linkitetään kaikkiin käytettävissä oleviin osoitteisiin. Tämän arvon muuttaminen edellyttää uudelleenkäynnistystä." } From 633821857281b80d05a735667060b8a2f6597360 Mon Sep 17 00:00:00 2001 From: Tomi Date: Thu, 29 Oct 2020 10:03:02 +0000 Subject: [PATCH 15/63] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index f46f4232bb..dbe4980484 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1190,5 +1190,6 @@ "LabelCurrentStatus": "Nykyinen tila:", "LabelCachePathHelp": "Määritä välimuistitiedostojen, kuten kuvien, polku. Jätä tyhjäksi käyttääksesi palvelimen oletusarvoa.", "LabelBlastMessageIntervalHelp": "Määrittää ajan sekunteina jokaisen \"Olen elossa\" -viestin välillä.", - "LabelBindToLocalNetworkAddressHelp": "Korvaa HTTP-palvelimen paikallinen IP-osoite. Jos se on tyhjä, palvelin linkitetään kaikkiin käytettävissä oleviin osoitteisiin. Tämän arvon muuttaminen edellyttää uudelleenkäynnistystä." + "LabelBindToLocalNetworkAddressHelp": "Korvaa HTTP-palvelimen paikallinen IP-osoite. Jos se on tyhjä, palvelin linkitetään kaikkiin käytettävissä oleviin osoitteisiin. Tämän arvon muuttaminen edellyttää uudelleenkäynnistystä.", + "LabelDefaultUserHelp": "Määrittää käyttäjän kirjaston, joka näytetään liitetyissä laitteissa. Tätä asetusta voidaan muuttaa laitekohtaisesti laiteprofiilin avulla." } From 53c12be19113c9d93450bf092b0987e0aacd4d0f Mon Sep 17 00:00:00 2001 From: karottenbaum Date: Thu, 29 Oct 2020 11:43:30 +0000 Subject: [PATCH 16/63] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 5c57cc19c3..2ad4f3d755 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1356,7 +1356,7 @@ "Subtitle": "Untertitel", "SelectServer": "Server auswählen", "Restart": "Neustarten", - "ResetPassword": "Passwort zurücksetzten", + "ResetPassword": "Passwort zurücksetzen", "Profile": "Profil", "MusicVideos": "Musikvideos", "Image": "Bild", From 994c1b141bf96d6646f65405151e7f1515da4717 Mon Sep 17 00:00:00 2001 From: minobp Date: Thu, 29 Oct 2020 15:28:52 +0000 Subject: [PATCH 17/63] Added loading of Japanese json files --- src/scripts/site.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 0dbdcb4c61..e115e1555e 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -226,7 +226,7 @@ function initClient() { } function loadCoreDictionary(globalize) { - const languages = ['ar', 'be-by', 'bg-bg', 'ca', 'cs', 'da', 'de', 'el', 'en-gb', 'en-us', 'es', 'es-ar', 'es-mx', 'fa', 'fi', 'fr', 'fr-ca', 'gsw', 'he', 'hi-in', 'hr', 'hu', 'id', 'it', 'kk', 'ko', 'lt-lt', 'ms', 'nb', 'nl', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'sk', 'sl-si', 'sv', 'tr', 'uk', 'vi', 'zh-cn', 'zh-hk', 'zh-tw']; + const languages = ['ar', 'be-by', 'bg-bg', 'ca', 'cs', 'da', 'de', 'el', 'en-gb', 'en-us', 'es', 'es-ar', 'es-mx', 'fa', 'fi', 'fr', 'fr-ca', 'gsw', 'he', 'hi-in', 'hr', 'hu', 'id', 'it', 'ja', 'kk', 'ko', 'lt-lt', 'ms', 'nb', 'nl', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'sk', 'sl-si', 'sv', 'tr', 'uk', 'vi', 'zh-cn', 'zh-hk', 'zh-tw']; const translations = languages.map(function (language) { return { lang: language, From 6c1cecbff5282844468f17a71cfce99c735fb055 Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 29 Oct 2020 17:10:26 +0000 Subject: [PATCH 18/63] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index bf094eb171..554f14cbc0 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1412,5 +1412,6 @@ "Authorize": "Авторизация", "LabelUserMaxActiveSessions": "Максимальное количество одновременных пользовательских сессий:", "OptionMaxActiveSessionsHelp": "Значение 0 отключит эту функцию.", - "OptionMaxActiveSessions": "Устанавливает максимальное количество одновременных пользовательских сеансов." + "OptionMaxActiveSessions": "Устанавливает максимальное количество одновременных пользовательских сеансов.", + "OptionAllowContentDownload": "Разрешить загрузку медиафайлов" } From a409576dc1efcc56947a3cf6b734441a5ca77c4e Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 29 Oct 2020 17:47:49 +0000 Subject: [PATCH 19/63] 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 554f14cbc0..08ece12f30 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1413,5 +1413,14 @@ "LabelUserMaxActiveSessions": "Максимальное количество одновременных пользовательских сессий:", "OptionMaxActiveSessionsHelp": "Значение 0 отключит эту функцию.", "OptionMaxActiveSessions": "Устанавливает максимальное количество одновременных пользовательских сеансов.", - "OptionAllowContentDownload": "Разрешить загрузку медиафайлов" + "OptionAllowContentDownload": "Разрешить загрузку медиафайлов", + "LabelMaxMuxingQueueSizeHelp": "Максимальное число пакетов, которое возможно буферизовать при ожидании инициализации всех потоков. Попробуйте увеличить его, если всё ещё встречается ошибка «Too many packets buffered for output stream» (Слишком много пакетов буферизовано для выходного потока) в журналах ffmpeg. Рекомендуемое значение - 2048.", + "LabelTonemappingParamHelp": "Подстройка алгоритма тонкомпрессии. Значение рекомендуемое и по умолчанию - NaN. Обычно оставляйте это поле пустым.", + "LabelTonemappingDesatHelp": "Применяется обесцвечивание для светлых участков, яркость которых превышает этот уровень. Чем выше параметр, тем больше информации о цвете будет сохранено. Этот параметр помогает предотвращать неестественно размытые цвета для сверхсветлых участков, вместо этого (гладко) превращая их в белый. Это делает изображения более естественными за счет сокращения информации о запредельных цветах. Значения рекомендуемое и по умолчанию - 0 и 0.5.", + "LabelTonemappingPeakHelp": "Этим значением перекрывается сигнальный/номинальный/эталонный пик. Полезно, когда встроенная информация о пиках в метаданных дисплея ненадёжна или при тонкомпрессии из узкого диапазона в более широкий. Значение рекомендуемое и по умолчанию - 0.", + "LabelTonemappingThresholdHelp": "Параметры алгоритма тонкомпрессии подстраиваются для каждой сцены. А порог используется, чтобы определить, изменилась ли сцена или нет. Если дистанция между средней яркостью текущего кадра и текущим скользящим средним превышает пороговое значение, мы пересчитаем среднюю и пиковую яркость сцены. Значения рекомендуемое и по умолчанию - 0.8 и 0.2.", + "TonemappingAlgorithmHelp": "Тонкомпрессию можно подстроить. Если вы не уверены с этими параметрами, оставьте значения по умолчанию. Рекомендуемое значение - Reinhard.", + "AllowTonemappingHelp": "Тонкомпрессия может преобразовать динамический диапазон видео из HDR в SDR, сохраняя детали изображения и цвета, которые являются очень важной информацией для представления исходной сцены. В настоящее время работает только при перекодировании видео со встроенными метаданными HDR10 или HLG. Если воспроизведение не плавное или не удаётся, отключите соответствующий аппаратный декодер.", + "LabelOpenclDeviceHelp": "Это устройство OpenCL, которое используется для тонкомпрессии. Слева от точки - номер платформы, а справа - это номер устройства на платформе. Значение по умолчанию - 0.0. Требуется файл приложения ffmpeg, содержащий метод аппаратного ускорения OpenCL.", + "OptionAllowContentDownloadHelp": "Пользователи могут загружать медиафайлы и хранить их на своих устройствах. Это не то же самое, как функция синхронизации. Для правильной работы книжных медиатек это необходимо." } From f175475a62a8383864f1a5b13616125d56d7bd70 Mon Sep 17 00:00:00 2001 From: Oatavandi Date: Thu, 29 Oct 2020 18:35:19 +0000 Subject: [PATCH 20/63] Translated using Weblate (Tamil) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ta/ --- src/strings/ta.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/ta.json b/src/strings/ta.json index a528807553..bdd48423ce 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -1016,7 +1016,7 @@ "OptionAllowLinkSharing": "சமூக ஊடக பகிர்வை அனுமதிக்கவும்", "OptionAllowContentDownloading": "மீடியா பதிவிறக்க மற்றும் ஒத்திசைக்க அனுமதிக்கவும்", "OptionAllowBrowsingLiveTv": "நேரடி தொலைக்காட்சி அணுகலை அனுமதிக்கவும்", - "OptionForceRemoteSourceTranscoding": "தொலைநிலை ஊடக மூலங்களின் டிரான்ஸ்கோடிங்கை கட்டாயப்படுத்தவும் (லைடிவி போன்றவை)", + "OptionForceRemoteSourceTranscoding": "லைவ் டிவி போன்ற தொலைநிலை ஊடக ஆதாரங்களின் டிரான்ஸ்கோடிங்கை கட்டாயப்படுத்துங்கள்", "OptionAllowAudioPlaybackTranscoding": "டிரான்ஸ்கோடிங் தேவைப்படும் ஆடியோ பிளேபேக்கை அனுமதிக்கவும்", "OptionAllUsers": "அனைத்து பயனாளர்கள்", "OptionAdminUsers": "நிர்வாகிகள்", @@ -1435,5 +1435,7 @@ "EnableAutoCast": "இயல்புநிலைக்கு அமை", "OptionMaxActiveSessionsHelp": "0 இன் மதிப்பு அம்சத்தை முடக்கும்.", "OptionMaxActiveSessions": "ஒரே நேரத்தில் பயனர் அமர்வுகளின் அதிகபட்ச எண்ணிக்கையை அமைக்கிறது.", - "LabelUserMaxActiveSessions": "ஒரே நேரத்தில் பயனர் அமர்வுகளின் அதிகபட்ச எண்ணிக்கை:" + "LabelUserMaxActiveSessions": "ஒரே நேரத்தில் பயனர் அமர்வுகளின் அதிகபட்ச எண்ணிக்கை:", + "OptionAllowContentDownloadHelp": "பயனர்கள் மீடியாவை பதிவிறக்கம் செய்து தங்கள் சாதனங்களில் சேமிக்கலாம். இது ஒத்திசைவு அம்சத்திற்கு சமமானதல்ல. புத்தக நூலகங்களுக்கு இது சரியாக இயங்க வேண்டும்.", + "OptionAllowContentDownload": "மீடியா பதிவிறக்கங்களை அனுமதிக்கவும்" } From 786641ceecc73601c1c212ba997fe7940c5ba1be Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 29 Oct 2020 18:58:56 +0000 Subject: [PATCH 21/63] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 08ece12f30..0544ffabb6 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -577,7 +577,7 @@ "LabelMaxResumePercentageHelp": "Произведения предполагаются воспроизведёнными полностью, при остановке с данного момента.", "LabelMaxScreenshotsPerItem": "Макс. число снимков экрана на элемент:", "LabelMaxStreamingBitrate": "Макс. качество трансляции:", - "LabelMaxStreamingBitrateHelp": "Укажите максимальный битрейт трансляции.", + "LabelMaxStreamingBitrateHelp": "Укажите максимальную потоковую скорость трансляции.", "LabelMessageText": "Текст сообщения:", "LabelMessageTitle": "Заголовок сообщения:", "LabelMetadata": "Метаданные:", @@ -605,8 +605,8 @@ "LabelMoviePrefix": "Префикс фильма:", "LabelMoviePrefixHelp": "При применении к названиям фильмов префикса, введите его здесь, чтобы он правильно обрабатывался на сервере.", "LabelMovieRecordingPath": "Путь к записываемым фильмам:", - "LabelMusicStreamingTranscodingBitrate": "Битрейт перекодировки музыки:", - "LabelMusicStreamingTranscodingBitrateHelp": "Укажите максимальный битрейт при трансляции музыки.", + "LabelMusicStreamingTranscodingBitrate": "Поток. ск-ть перекодировки музыки:", + "LabelMusicStreamingTranscodingBitrateHelp": "Укажите максимальный потоковую скорость при трансляции музыки.", "LabelName": "Имя:", "LabelNewName": "Новое название:", "LabelNewPassword": "Новый пароль:", @@ -656,7 +656,7 @@ "LabelRecordingPathHelp": "Укажите стандартное расположение для сохранения записей. Если поле пусто, то используется папка program data сервера.", "LabelRefreshMode": "Режим обновления:", "LabelReleaseDate": "Дата выпуска:", - "LabelRemoteClientBitrateLimit": "Ограничение битрейта интернет-трансляции, Мбит/с:", + "LabelRemoteClientBitrateLimit": "Ограничение потоковой скорости интернет-трансляции, Мбит/с:", "LabelRemoteClientBitrateLimitHelp": "Необязательное ограничение битрейта для каждого из сетевых устройств. Может потребоваться, чтобы не допускать использования устройствами большего битрейта, чем способно пропустить интернет-соединение. Может привести к росту загрузки процессора на вашем сервере, так как потребуется динамическое перекодирование видео для снижения битрейта.", "LabelRuntimeMinutes": "Длительность:", "LabelSaveLocalMetadata": "Сохранять иллюстрации внутри медиапапок", @@ -756,7 +756,7 @@ "MediaInfoAnamorphic": "Анаморфность", "MediaInfoAspectRatio": "Соотношение сторон", "MediaInfoBitDepth": "Глубина цвета", - "MediaInfoBitrate": "Битрейт", + "MediaInfoBitrate": "Поток. ск-ть", "MediaInfoChannels": "Каналы", "MediaInfoCodec": "Кодек", "MediaInfoCodecTag": "Тег кодека", @@ -1219,11 +1219,11 @@ "LabelPlayMethod": "Метод воспроизведения:", "LabelFolder": "Папка:", "LabelBaseUrl": "Базовый URL:", - "LabelBitrate": "Битрейт:", + "LabelBitrate": "Поток. ск-ть:", "LabelAudioSampleRate": "Частота дискретизации аудио:", "LabelAudioCodec": "Аудио кодек:", "LabelAudioChannels": "Аудио каналы:", - "LabelAudioBitrate": "Битрейт аудио:", + "LabelAudioBitrate": "Поток. ск-ть аудио:", "LabelAudioBitDepth": "Битовая глубина аудио:", "CopyStreamURL": "Копировать URL потока", "LabelPleaseRestart": "Изменения вступят в силу после перезагрузки веб-клиента вручную.", From 9281d7607a543506b736491b62ee0c4e4f5a76cd Mon Sep 17 00:00:00 2001 From: WWWesten Date: Thu, 29 Oct 2020 19:16:48 +0000 Subject: [PATCH 22/63] 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 0544ffabb6..a52eb382f8 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -657,7 +657,7 @@ "LabelRefreshMode": "Режим обновления:", "LabelReleaseDate": "Дата выпуска:", "LabelRemoteClientBitrateLimit": "Ограничение потоковой скорости интернет-трансляции, Мбит/с:", - "LabelRemoteClientBitrateLimitHelp": "Необязательное ограничение битрейта для каждого из сетевых устройств. Может потребоваться, чтобы не допускать использования устройствами большего битрейта, чем способно пропустить интернет-соединение. Может привести к росту загрузки процессора на вашем сервере, так как потребуется динамическое перекодирование видео для снижения битрейта.", + "LabelRemoteClientBitrateLimitHelp": "Необязательное ограничение потоковой скорости для любых сетевых устройств. Полезно для предотвращения запроса устройствами большей скорости, чем способно пропустить интернет-соединение. Возможен прирост загрузки процессора на сервере, из-за перекодирования видео в режиме реального времени для понижения скорости.", "LabelRuntimeMinutes": "Длительность:", "LabelSaveLocalMetadata": "Сохранять иллюстрации внутри медиапапок", "LabelSaveLocalMetadataHelp": "При сохранении иллюстраций внутри медиапапок, те помещаются в месте, где их можно легко править.", @@ -1212,7 +1212,7 @@ "LabelPlayer": "Проигрыватель:", "MoreMediaInfo": "О медиаданных", "LabelVideoCodec": "Видео кодек:", - "LabelVideoBitrate": "Битрейт видео:", + "LabelVideoBitrate": "Поток. ск-ть видео:", "LabelTranscodingProgress": "Прогресс перекодировки:", "LabelTranscodingFramerate": "Частота кадров перекодировки:", "LabelSize": "Размер:", From a5225855640aa4e48fce2ccd0346befb65e7e611 Mon Sep 17 00:00:00 2001 From: karottenbaum Date: Thu, 29 Oct 2020 21:27:38 +0000 Subject: [PATCH 23/63] 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 2ad4f3d755..d5f62f0f3d 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -164,12 +164,12 @@ "EnableStreamLoopingHelp": "Aktivieren, wenn Live Streams nur ein paar Sekunden Daten enthalten und ständig angefragt werden müssen. Kann zu Problemen führen wenn aktiviert, obwohl nicht nötig.", "EnableThemeSongsHelp": "Titelmusik wird während des Blätterns durch die Bibliothek im Hintergrund abgespielt.", "EnableThemeVideosHelp": "Titelvideos werden während des Blätterns durch die Bibliothek im Hintergrund abgespielt.", - "Ended": "Beendent", + "Ended": "Beendet", "EndsAtValue": "Endet um {0}", "Episodes": "Episoden", "ErrorAddingListingsToSchedulesDirect": "Ein Fehler trat beim Hinzufügen Ihrer Zusammenstellung zu Ihrem Schedules Direct Konto auf. Schedules Direct erlaubt nur eine begrenzte Anzahl von Zusammenstellungen je Account. Sie sollten sich auf der Website in Ihrem Schedules-Direct Konto einloggen und ein paar Zusammenstellungen von Ihrem Konto löschen bevor Sie fortfahren.", "ErrorAddingMediaPathToVirtualFolder": "Ein Fehler trat beim Hinzufügen eines Medienverzeichnisses auf. Bitte stellen Sie sicher, dass der Pfad gültig ist und Jellyfin die notwendigen Zugriffsrechte besitzt.", - "ErrorAddingTunerDevice": "Es trat ein Fehler beim hinzufügen eines Tuners auf. Bitte stellen Sie sicher das dieser erreichbar ist und versuchen Sie es erneut.", + "ErrorAddingTunerDevice": "Es trat ein Fehler beim Hinzufügen eines Tuners auf. Bitte stellen Sie sicher, dass dieser erreichbar ist und versuchen Sie es erneut.", "ErrorAddingXmlTvFile": "Fehler beim Zugriff auf die XMLTV Datei. Stelle bitte sicher, dass die Datei existiert und versuche es nochmal.", "ErrorDeletingItem": "Fehler beim Löschen des Mediums vom Server. Bitte stelle sicher, dass Jellyfin Schreibzugriff auf den Dateiordner hat und versuche es erneut.", "ErrorGettingTvLineups": "Ein Fehler trat beim Herunterladen des Fernsehprogramms auf. Bitte stellen Sie sicher, dass Ihre Informationen korrekt sind und versuchen Sie es erneut.", From e7aacf8751f54c7eba4dcd599714f3f7e9d8fe27 Mon Sep 17 00:00:00 2001 From: Carlos Romani Date: Fri, 30 Oct 2020 00:58:09 +0000 Subject: [PATCH 24/63] 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index aba872a973..4473116185 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -150,7 +150,7 @@ "DoNotRecord": "Não gravar", "Down": "Baixo", "DrmChannelsNotImported": "Canais com DRM não serão importados.", - "DropShadow": "Sombra", + "DropShadow": "Sombra projetada", "EasyPasswordHelp": "Seu código pin fácil é usado para acesso off-line em clientes suportados e pode ser usado para acesso fácil dentro da rede.", "Edit": "Editar", "EditImages": "Editar imagens", @@ -1420,5 +1420,7 @@ "Bwdif": "BWDIF", "UseDoubleRateDeinterlacingHelp": "Essa configuração utiliza a \"field rate\" ao fazer o processo de \"deinterlacing\", frequentemente chamado de \"bob deinterlacing\", que dobra a taxa de quadros do vídeo para proporcionar um movimento completo similar àquele visto ao ver um vídeo \"interlaçado\" em uma TV.", "OptionMaxActiveSessions": "Estabelece o número máximo de sessões de usuários simultâneas.", - "LabelUserMaxActiveSessions": "Número máximo de sessões de usuários simultâneas:" + "LabelUserMaxActiveSessions": "Número máximo de sessões de usuários simultâneas:", + "OptionAllowContentDownloadHelp": "Os usuários podem baixar mídia e armazená-la em seus dispositivos. Isso não é o mesmo que um recurso de sincronização. Isso exige que a biblioteca de mídia esteja habilitada para funcionar corretamente.", + "OptionAllowContentDownload": "Permitir download de mídia" } From 2fbb62e03b5f995abc6067e6622a9da1a0bacbfa Mon Sep 17 00:00:00 2001 From: Carlos Romani Date: Fri, 30 Oct 2020 00:44:17 +0000 Subject: [PATCH 25/63] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 632e2d5d8c..84e5b4acd7 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1007,7 +1007,7 @@ "Genres": "Géneros", "Genre": "Género", "General": "Geral", - "Fullscreen": "Ecrã inteiro", + "Fullscreen": "Tela inteira", "Friday": "Sexta", "FormatValue": "Formato: {0}", "Folders": "Directórios", From 354d16c69abb206f468d3067fed3d39c99d1777f Mon Sep 17 00:00:00 2001 From: Carlos Romani Date: Fri, 30 Oct 2020 01:45:23 +0000 Subject: [PATCH 26/63] 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 4473116185..cf05c482eb 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1229,7 +1229,7 @@ "ButtonAddImage": "Adicionar Imagem", "OptionRandom": "Aleatório", "SelectAdminUsername": "Por favor selecione um nome de usuário para a conta de administrador.", - "OptionForceRemoteSourceTranscoding": "Forçar transcodificação em fontes de mídia remotas (como LiveTV)", + "OptionForceRemoteSourceTranscoding": "Forçar a transcodificação de fontes de mídia remotas (como LiveTV)", "NoCreatedLibraries": "Parece que você ainda não criou nenhuma biblioteca. {0}Gostaria de criar uma agora?{1}", "MessageConfirmAppExit": "Você quer sair?", "LabelVideoResolution": "Resolução de vídeo:", From 109f8def2919982c83fb0fdba615701e63f65aa5 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Fri, 30 Oct 2020 06:13:58 +0000 Subject: [PATCH 27/63] 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 8ddd4efd05..f5ecb8fd2d 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1237,7 +1237,7 @@ "SelectAdminUsername": "请为管理员账户选择一个用户名。", "HeaderNavigation": "导航", "MessageConfirmAppExit": "你要退出吗?", - "OptionForceRemoteSourceTranscoding": "强制远程转码(像电视直播一样)", + "OptionForceRemoteSourceTranscoding": "强制对直播电视等远程媒体源进行转码", "NoCreatedLibraries": "看上去您还未创建任何资料库。{0} 您想现在创建一个吗? {1}", "AskAdminToCreateLibrary": "请联系管理员以创建一个新的资料库。", "PlaybackErrorNoCompatibleStream": "该客户端与媒体不兼容,服务器未发送兼容的媒体格式。", @@ -1420,5 +1420,7 @@ "EnableAutoCast": "设置为默认", "OptionMaxActiveSessionsHelp": "如果值为0则没有限制。", "OptionMaxActiveSessions": "设置用户同时进行会话的最大数量。", - "LabelUserMaxActiveSessions": "用户同时进行会话的最大数量:" + "LabelUserMaxActiveSessions": "用户同时进行会话的最大数量:", + "OptionAllowContentDownloadHelp": "用户可以下载媒体并将其存储在他们的设备上。 这与同步功能不同。 图书库要求启用此功能才能正常运行。", + "OptionAllowContentDownload": "允许媒体下载" } From 24250bb8b376ce55ca5084cedbee263bb177c487 Mon Sep 17 00:00:00 2001 From: 4d1m Date: Fri, 30 Oct 2020 11:24:16 +0000 Subject: [PATCH 28/63] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index 0a60a4aa45..2d305211e9 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -1237,7 +1237,7 @@ "LabelPlayerDimensions": "Dimensiunile soft redare:", "LabelDroppedFrames": "Cadre abandonate:", "LabelCorruptedFrames": "Cadre corupte:", - "OptionForceRemoteSourceTranscoding": "Forțați transcodarea surselor media distante (cum ar fi LiveTV)", + "OptionForceRemoteSourceTranscoding": "Forțați transcodarea surselor media distante cum ar fi Live TV", "NoCreatedLibraries": "Se pare că nu ați creat încă biblioteci. {0} Doriți să creați una acum? {1}", "AskAdminToCreateLibrary": "Cereți unui administrator să creeze o bibliotecă.", "PlaybackErrorNoCompatibleStream": "Clientul nu este compatibil cu formatul media, iar serverul nu trimite un format media compatibil.", @@ -1418,5 +1418,13 @@ "LabelKnownProxies": "Proxyuri cunoscute:", "LabelCurrentStatus": "Stare curentă:", "KnownProxiesHelp": "Lista separată prin virgulă a adreselor IP ale proxy-urilor cunoscute utilizate la conectarea la instanța dvs. Jellyfin. Acest lucru este necesar pentru a utiliza în mod corespunzător antetele X-Forwarded-For. Necesită o repornire după salvare.", - "EnableAutoCast": "Setați ca implicit" + "EnableAutoCast": "Setați ca implicit", + "OptionMaxActiveSessionsHelp": "O valoare 0 va dezactiva opțiunea.", + "OptionMaxActiveSessions": "Setează numărul maxim de sesiuni simultane per utilizator.", + "OptionAllowContentDownloadHelp": "Utilizatorii pot descărca fișiere media și le pot stoca pe dispozitivele lor. Nu este același lucru cu o caracteristică de sincronizare. Bibliotecile de cărți necesită ca aceasta să fie activată pentru a funcționa corect.", + "OptionAllowContentDownload": "Permiteți descărcările media", + "LabelUserMaxActiveSessions": "Numărul maxim de sesiuni simultane per utilizator:", + "HeaderDeleteDevices": "Șterge Toate Dispozitivele", + "DeleteDevicesConfirmation": "Sigur doriți să ștergeți toate dispozitivele? Toate celelalte sesiuni vor fi deconectate. Dispozitivele vor reapărea data viitoare când un utilizator se conectează.", + "DeleteAll": "Șterge tot" } From b0bbbea400db042fae61cb2aa1e218f14182dd08 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Fri, 30 Oct 2020 11:58:50 +0000 Subject: [PATCH 29/63] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index a52eb382f8..88d1614b32 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1422,5 +1422,8 @@ "TonemappingAlgorithmHelp": "Тонкомпрессию можно подстроить. Если вы не уверены с этими параметрами, оставьте значения по умолчанию. Рекомендуемое значение - Reinhard.", "AllowTonemappingHelp": "Тонкомпрессия может преобразовать динамический диапазон видео из HDR в SDR, сохраняя детали изображения и цвета, которые являются очень важной информацией для представления исходной сцены. В настоящее время работает только при перекодировании видео со встроенными метаданными HDR10 или HLG. Если воспроизведение не плавное или не удаётся, отключите соответствующий аппаратный декодер.", "LabelOpenclDeviceHelp": "Это устройство OpenCL, которое используется для тонкомпрессии. Слева от точки - номер платформы, а справа - это номер устройства на платформе. Значение по умолчанию - 0.0. Требуется файл приложения ffmpeg, содержащий метод аппаратного ускорения OpenCL.", - "OptionAllowContentDownloadHelp": "Пользователи могут загружать медиафайлы и хранить их на своих устройствах. Это не то же самое, как функция синхронизации. Для правильной работы книжных медиатек это необходимо." + "OptionAllowContentDownloadHelp": "Пользователи могут загружать медиафайлы и хранить их на своих устройствах. Это не то же самое, как функция синхронизации. Для правильной работы книжных медиатек это необходимо.", + "HeaderDeleteDevices": "Удалить все устройства", + "DeleteDevicesConfirmation": "Вы уверены, что хотите удалить все устройства? Все остальные сеансы будут отключены. Устройства снова появятся, когда пользователь войдет в систему.", + "DeleteAll": "Удалить все" } From 0112e0c43420439a2e40d11b2ece0722905c119f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 30 Oct 2020 14:09:34 +0000 Subject: [PATCH 30/63] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index af991952ae..f9a75d3054 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1422,5 +1422,8 @@ "OptionMaxActiveSessions": "Nastavuje, kolik uživatelských relací může najednou existovat.", "LabelUserMaxActiveSessions": "Maximální počet uživatelských relací najednou:", "OptionAllowContentDownloadHelp": "Uživatelé si mohou média stáhnout a uložit na svá zařízení. Tato funkce není stejná jako synchronizace. Knihovny s knihami tuto funkci vyžadují ke správnému fungování.", - "OptionAllowContentDownload": "Povolit stahování médií" + "OptionAllowContentDownload": "Povolit stahování médií", + "HeaderDeleteDevices": "Odstranit všechna zařízení", + "DeleteDevicesConfirmation": "Opravdu chcete odstranit všechna zařízení? Souvisejicí relace budou odhlášeny. Zařízení se znovu objeví při dalším přihlášení.", + "DeleteAll": "Odstranit vše" } From 6fbfa78d32e433adf1e54408620ca5569fda035c Mon Sep 17 00:00:00 2001 From: Carlos Romani Date: Fri, 30 Oct 2020 16:24:22 +0000 Subject: [PATCH 31/63] 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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index cf05c482eb..7832887a51 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1421,6 +1421,9 @@ "UseDoubleRateDeinterlacingHelp": "Essa configuração utiliza a \"field rate\" ao fazer o processo de \"deinterlacing\", frequentemente chamado de \"bob deinterlacing\", que dobra a taxa de quadros do vídeo para proporcionar um movimento completo similar àquele visto ao ver um vídeo \"interlaçado\" em uma TV.", "OptionMaxActiveSessions": "Estabelece o número máximo de sessões de usuários simultâneas.", "LabelUserMaxActiveSessions": "Número máximo de sessões de usuários simultâneas:", - "OptionAllowContentDownloadHelp": "Os usuários podem baixar mídia e armazená-la em seus dispositivos. Isso não é o mesmo que um recurso de sincronização. Isso exige que a biblioteca de mídia esteja habilitada para funcionar corretamente.", - "OptionAllowContentDownload": "Permitir download de mídia" + "OptionAllowContentDownloadHelp": "Os usuários podem baixar mídias e armazená-las em seus dispositivos. Isso não é o mesmo que um recurso de sincronização. Para funcionar corretamente isso exige que a biblioteca de mídia esteja habilitada.", + "OptionAllowContentDownload": "Permitir download de mídia", + "HeaderDeleteDevices": "Excluir todos os dispositivos", + "DeleteDevicesConfirmation": "Tem certeza de que deseja excluir todos os dispositivos? Todas as outras sessões serão desconectadas. Os dispositivos reaparecerão na próxima vez que um usuário fizer login.", + "DeleteAll": "Excluir tudo" } From 0712e4c649d27d97d361490bbc720341b747ad57 Mon Sep 17 00:00:00 2001 From: Gubb Jonas Date: Fri, 30 Oct 2020 21:29:02 +0000 Subject: [PATCH 32/63] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index ffd511339c..70567f14fe 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1185,7 +1185,7 @@ "SaveSubtitlesIntoMediaFoldersHelp": "Spara undertexter vid video filer kommer göra det mer enklare att hantera.", "Rewind": "Spola tillbaka", "MessageChangeRecordingPath": "Ändring av din inspelnings mapp kommer inte migrera existerande inspelningar från gamla platsen till den nya. Du behöver flytta dom manuellt om så önskas.", - "PlaybackData": "Uppspelnings Data", + "PlaybackData": "Uppspelningsdata", "PasswordResetProviderHelp": "Välj en tjänst för återställning av lösenord, som används när denna användare begär en lösenordsåterställning.", "OptionSaveMetadataAsHiddenHelp": "Denna ändring påverkar ny metadata som sparas framledes. Existerande metadata-filer kommer att uppdateras nästa gång de sparas av servern.", "OptionResElement": "återskapa element", @@ -1198,7 +1198,7 @@ "OptionIsSD": "SD", "OptionIsHD": "HD", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", - "OptionForceRemoteSourceTranscoding": "Tvinga omkodning på fjärr media källor (som LiveTV)", + "OptionForceRemoteSourceTranscoding": "Tvinga omkodning på utomstående mediakällor, som t.ex. live-TV", "Option3D": "3D", "Normal": "Normal", "NoCreatedLibraries": "Ser ut som du inte har skapat några bibliotek än. {0}Vill du skapa ett nu?{1}", @@ -1389,5 +1389,22 @@ "Restart": "Starta om", "ResetPassword": "Återställ lösenord", "QuickConnectNotActive": "Snabbanslutning är inte aktiverat på denna server", - "QuickConnectNotAvailable": "Be din serveradministratör aktivera snabbanslutning" + "QuickConnectNotAvailable": "Be din serveradministratör aktivera snabbanslutning", + "LabelColorPrimaries": "Färgprimärer:", + "LabelColorTransfer": "Färgöverföring:", + "LabelColorSpace": "Färgrymd:", + "LabelVideoRange": "Video-omfång:", + "MediaInfoColorPrimaries": "Färgprimärer", + "MediaInfoColorTransfer": "Färgöverföring", + "MediaInfoColorSpace": "Färgrymd", + "MediaInfoVideoRange": "Video-omfång", + "Bwdif": "BWDIF", + "VideoAudio": "Video Ljud", + "UseDoubleRateDeinterlacing": "Dubbla frameraten vid deinterlacing", + "PlaybackRate": "Uppspelningshastighet", + "OptionAllowContentDownloadHelp": "Användare kan ladda ner media och lagra på deras enheter. Detta är inte det samma som synkfunktion. Bokbibliotek kräver att detta är påslaget för att fungera korrekt.", + "OptionAllowContentDownload": "Tillåt nedladdning av media", + "HeaderDeleteDevices": "Radera alla enheter", + "DeleteDevicesConfirmation": "Är du säker på att du vill radera alla enheter? Alla andra sessioner kommer loggas ut. Enheter visas igen nästa gång en användare loggar in.", + "DeleteAll": "Radera alla" } From 9eedded595c478dfb54151c597a57d367d382788 Mon Sep 17 00:00:00 2001 From: Franco Castillo Date: Sat, 31 Oct 2020 05:29:17 +0000 Subject: [PATCH 33/63] 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 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/es-ar.json b/src/strings/es-ar.json index c1d8623f3a..ca57b1b5e6 100644 --- a/src/strings/es-ar.json +++ b/src/strings/es-ar.json @@ -1422,5 +1422,8 @@ "OptionMaxActiveSessions": "Establece el número máximo de sesiones de usuario simultáneas.", "LabelUserMaxActiveSessions": "Número máximo de sesiones de usuario simultáneas:", "OptionAllowContentDownloadHelp": "Los usuarios pueden descargar medios y almacenarlos en sus dispositivos. No es lo mismo que una función de sincronización. Las bibliotecas de libros requieren que esta habilitado funcione correctamente.", - "OptionAllowContentDownload": "Permitir descargas de medios" + "OptionAllowContentDownload": "Permitir descargas de medios", + "HeaderDeleteDevices": "Eliminar todos los dispositivos", + "DeleteDevicesConfirmation": "¿Está seguro de que desea eliminar todos los dispositivos? Todas las demás sesiones se cerrarán. Los dispositivos volverán a aparecer la próxima vez que un usuario inicie sesión.", + "DeleteAll": "Eliminar todos" } From 3e4b27195c4dfaa3133ca87743fa174ac749703d Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 31 Oct 2020 03:16:52 +0000 Subject: [PATCH 34/63] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 25efd5ebf1..28c43e329e 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1422,5 +1422,8 @@ "OptionMaxActiveSessions": "Đặt số lượng phiên người dùng đồng thời tối đa.", "LabelUserMaxActiveSessions": "Số lượng phiên người dùng cùng lúc tối đa:", "OptionAllowContentDownloadHelp": "Người dùng có thể tải xuống phương tiện và lưu trữ trên thiết bị của họ. Điều này không giống như một tính năng đồng bộ hóa. Thư viện sách yêu cầu kích hoạt này để hoạt động bình thường.", - "OptionAllowContentDownload": "Cho phép tải xuống phương tiện" + "OptionAllowContentDownload": "Cho phép tải xuống phương tiện", + "HeaderDeleteDevices": "Xóa Tất Cả Thiết Bị", + "DeleteDevicesConfirmation": "Bạn có chắc muốn xóa hết các thiết bị không? Tất cả các phiên khác sẽ được đăng xuất. Thiết bị sẽ xuất hiện lại vào lần tiếp theo khi người dùng đăng nhập.", + "DeleteAll": "Xóa Hết" } From 1f958fc7e82c94409dd2073c64fa19a93d85014c Mon Sep 17 00:00:00 2001 From: lelamamalgache Date: Sat, 31 Oct 2020 07:40:35 +0000 Subject: [PATCH 35/63] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index bb78e18f2d..d90e0443b5 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1231,7 +1231,7 @@ "ButtonSplit": "Séparer", "SelectAdminUsername": "Veuillez choisir un nom d'utilisateur pour le compte administrateur.", "HeaderNavigation": "Navigation", - "OptionForceRemoteSourceTranscoding": "Transcodage forcé pour sources de media à distance (ex: TV en direct)", + "OptionForceRemoteSourceTranscoding": "Forcer le transcodage pour les sources de media distance comme par exemple la TV en direct", "MessageConfirmAppExit": "Voulez-vous quitter ?", "LabelVideoResolution": "Résolution vidéo :", "LabelStreamType": "Type de flux :", @@ -1420,5 +1420,10 @@ "LabelMaxMuxingQueueSize": "Taille maximale de la queue de multiplexage :", "OptionMaxActiveSessionsHelp": "Une valeur à 0 désactive la fonctionnalité.", "OptionMaxActiveSessions": "Défini le nombre maximal de sessions utilisateurs simultanées.", - "LabelUserMaxActiveSessions": "Nombre maximal de sessions utilisateurs simultanées :" + "LabelUserMaxActiveSessions": "Nombre maximal de sessions utilisateurs simultanées :", + "OptionAllowContentDownloadHelp": "Les utilisateurs peuvent télécharger des médias et les stocker sur leurs appareils. Ce n'est pas la même chose qu'une fonction de synchronisation. Les bibliothèques de livres nécessitent cette activation pour fonctionner correctement.", + "OptionAllowContentDownload": "Autoriser les téléchargements de médias", + "HeaderDeleteDevices": "Supprimer tous les appareils", + "DeleteDevicesConfirmation": "Voulez-vous vraiment supprimer tous les appareils ? Toutes les autres sessions seront déconnectées. Les appareils réapparaîtront la prochaine fois qu'un utilisateur se connectera.", + "DeleteAll": "Tout supprimer" } From 6a82956cf46135e44a2a9ad620bcac6118b110f4 Mon Sep 17 00:00:00 2001 From: Gubb Jonas Date: Sat, 31 Oct 2020 07:55:10 +0000 Subject: [PATCH 36/63] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 70567f14fe..3a2c93f95d 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -860,7 +860,7 @@ "OptionPlainStorageFolders": "Visa alla mappar som vanliga lagringsmappar", "OptionPlainStorageFoldersHelp": "Alla mappar representeras i DIDL som \"object.container.storageFolder\" i stället för en mer specifik typ, t.ex. \"object.container.person.musicArtist\".", "OptionPlainVideoItems": "Visa alla videor som objekt utan specifikt format", - "OptionPlainVideoItemsHelp": "Alla videor representeras i DIDL som \"object.item.videoItem\" i stället för en mer specifik typ, t ex \"object.item.videoItem.movie\".", + "OptionPlainVideoItemsHelp": "Alla videor representeras i DIDL som \"object.item.videoItem\" i stället för en mer specifik typ, t ex \"object.item.videoItem.movie\".", "OptionPlayCount": "Antal visningar", "OptionPremiereDate": "Premiärdatum", "OptionProtocolHls": "Live-strömning via Http", @@ -1317,7 +1317,7 @@ "StopPlayback": "Stoppa uppspelning", "ButtonPlayer": "Spelare", "ButtonCast": "Roller", - "EnableBlurHashHelp": "Bilder som fortfarande laddas kommer visas med en suddig platshållare", + "EnableBlurHashHelp": "Bilder som fortfarande laddas kommer visas med en unik platshållare.", "EnableBlurHash": "Aktivera suddiga platshållare för bilder", "Writers": "Skribenter", "ViewAlbumArtist": "Visa albums artist", From b09fd1b0998490109e3f68601abcaceb946a9aa1 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sat, 31 Oct 2020 18:37:24 +0300 Subject: [PATCH 37/63] Remove external link for 'Birth place' --- src/controllers/itemDetails/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index c68fe15feb..c25a147e2c 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -649,7 +649,10 @@ function reloadFromItem(instance, page, params, item, user) { const itemBirthLocation = page.querySelector('#itemBirthLocation'); if (item.Type == 'Person' && item.ProductionLocations && item.ProductionLocations.length) { - const gmap = '' + item.ProductionLocations[0] + ''; + let gmap = item.ProductionLocations[0]; + if (!layoutManager.tv) { + gmap = `${gmap}`; + } itemBirthLocation.classList.remove('hide'); itemBirthLocation.innerHTML = globalize.translate('BirthPlaceValue', gmap); } else { From ed964137fa4bdc5bdd569fd8c2a2987282b3bb69 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sat, 31 Oct 2020 19:05:35 +0300 Subject: [PATCH 38/63] Remove external link in Subtitle Editor --- src/components/subtitleeditor/subtitleeditor.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js index 8697a9a747..0eb455476f 100644 --- a/src/components/subtitleeditor/subtitleeditor.js +++ b/src/components/subtitleeditor/subtitleeditor.js @@ -384,6 +384,9 @@ function showEditorInternal(itemId, serverId, template) { if (layoutManager.tv) { centerFocus(dlg.querySelector('.formDialogContent'), false, true); dlg.querySelector('.btnSearchSubtitles').classList.add('hide'); + + // Don't allow redirection to other websites from the TV layout + dlg.querySelector('.btnHelp').remove(); } else { btnSubmit.classList.add('hide'); } From a8bc8a7e7439b809076511c1608f90233dd777e4 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sat, 31 Oct 2020 19:37:00 +0300 Subject: [PATCH 39/63] Add 'externallinks' feature testing --- src/components/subtitleeditor/subtitleeditor.js | 9 ++++++--- src/controllers/itemDetails/index.js | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js index 0eb455476f..8e6fb497d9 100644 --- a/src/components/subtitleeditor/subtitleeditor.js +++ b/src/components/subtitleeditor/subtitleeditor.js @@ -1,3 +1,4 @@ +import appHost from 'apphost'; import dialogHelper from 'dialogHelper'; import layoutManager from 'layoutManager'; import globalize from 'globalize'; @@ -384,13 +385,15 @@ function showEditorInternal(itemId, serverId, template) { if (layoutManager.tv) { centerFocus(dlg.querySelector('.formDialogContent'), false, true); dlg.querySelector('.btnSearchSubtitles').classList.add('hide'); - - // Don't allow redirection to other websites from the TV layout - dlg.querySelector('.btnHelp').remove(); } else { btnSubmit.classList.add('hide'); } + // Don't allow redirection to other websites from the TV layout + if (layoutManager.tv || !appHost.supports('externallinks')) { + dlg.querySelector('.btnHelp').remove(); + } + const editorContent = dlg.querySelector('.formDialogContent'); dlg.querySelector('.subtitleList').addEventListener('click', onSubtitleListClick); diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index c25a147e2c..ed83d859d1 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -650,7 +650,7 @@ function reloadFromItem(instance, page, params, item, user) { if (item.Type == 'Person' && item.ProductionLocations && item.ProductionLocations.length) { let gmap = item.ProductionLocations[0]; - if (!layoutManager.tv) { + if (!layoutManager.tv && appHost.supports('externallinks')) { gmap = `${gmap}`; } itemBirthLocation.classList.remove('hide'); @@ -1069,7 +1069,7 @@ function renderDetails(page, item, apiClient, context, isStatic) { reloadUserDataButtons(page, item); // Don't allow redirection to other websites from the TV layout - if (!layoutManager.tv) { + if (!layoutManager.tv && appHost.supports('externallinks')) { renderLinks(page, item); } From f19b6f9a2a8b2da7485ae3126079cdc1c1ff89a5 Mon Sep 17 00:00:00 2001 From: Moritz Date: Sat, 31 Oct 2020 12:22:56 +0000 Subject: [PATCH 40/63] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index d5f62f0f3d..3f31d66c0d 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1422,5 +1422,8 @@ "OptionMaxActiveSessions": "Legt die maximale Anzahl gleichzeitiger Benutzer-Sessions fest.", "LabelUserMaxActiveSessions": "Maximale Anzahl von gleichzeitigen Benutzer-Sessions:", "OptionAllowContentDownloadHelp": "Benutzer können Medien herunterladen und auf ihren Geräten speichern. Dies ist nicht dasselbe wie eine Synchronisierungsfunktion. Buchbibliotheken benötigen diese Funktion, um ordnungsgemäß zu funktionieren.", - "OptionAllowContentDownload": "Mediendownloads zulassen" + "OptionAllowContentDownload": "Mediendownloads zulassen", + "HeaderDeleteDevices": "Alle Geräte löschen", + "DeleteDevicesConfirmation": "Sind Sie sicher, dass Sie alle Geräte löschen möchten? Alle anderen Sitzungen werden abgemeldet. Die Geräte erscheinen wieder, wenn sich ein Benutzer das nächste Mal anmeldet.", + "DeleteAll": "Alle löschen" } From 02f3403bbda738794fe1d33e43a6d5ac3d531e9d Mon Sep 17 00:00:00 2001 From: "federico.antoniazzi.000" Date: Sun, 1 Nov 2020 01:38:07 +0000 Subject: [PATCH 41/63] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index d7e51b8cc7..e98f3cdfbb 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1411,5 +1411,10 @@ "LabelColorPrimaries": "Primari colore:", "LabelColorTransfer": "Trasferimento colore:", "MediaInfoColorPrimaries": "Colori primari", - "MediaInfoColorTransfer": "Trasferimento colore" + "MediaInfoColorTransfer": "Trasferimento colore", + "LabelTonemappingThreshold": "Soglia di mappatura dei toni:", + "OptionAllowContentDownload": "Consenti il download dei media", + "HeaderDeleteDevices": "Elimina tutti i dispositivi", + "DeleteDevicesConfirmation": "Sei sicuro di voler eliminare tutti i dispositivi? Tutte le altre sessioni verrano disconnesse. I dispositivi riappariranno appena un utente vi effettuerà il login.", + "DeleteAll": "Elimina tutto" } From b36d8975d851212219953a49f88abb33c5d38837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Fern=C3=A1ndez?= Date: Sun, 1 Nov 2020 10:24:52 +0000 Subject: [PATCH 42/63] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index 634d656af4..0eba14d98d 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1237,7 +1237,7 @@ "EnableFasterAnimations": "Animaciones más rápidas", "AllowFfmpegThrottlingHelp": "Las conversiones se pausarán cuando se adelanten lo suficiente desde la posición en la que se encuentre el reproductor. Puede reducir la carga en el servidor y es útil cuando se reproduce de forma continua, sin saltar entre intervalos de tiempo, pero puede que tengas que desactivarlo si experimentas problemas en la reproducción o cambias de posición frecuentemente mientras reproduces contenido.", "PlaybackErrorNoCompatibleStream": "Este contenido no es compatible con este dispositivo y no se puede reproducir: No se puede obtener del servidor en un formato compatible.", - "OptionForceRemoteSourceTranscoding": "Forzar la conversión para fuentes externas (como la televisión en directo)", + "OptionForceRemoteSourceTranscoding": "Forzar la conversión para fuentes externas como la televisión en directo", "NoCreatedLibraries": "Parece que aún no se han creado librearías. {0}¿Quiere crear una ahora?{1}", "LabelVideoResolution": "Resolución de video:", "LabelStreamType": "Tipo de stream:", @@ -1420,5 +1420,10 @@ "LabelTonemappingThresholdHelp": "Los parámetros del algoritmo de mapeo de tonos se ajustan en cada escena. Se usa un umbral para detectar si la escena ha cambiado o no. Si el brillo promedio se sale del umbral entre el fotograma actual y el próximo, se volveran a calcular los valores de brillo promedio y de pico. Se recomiendan los valores predeterminados 0.8 y 0.2.", "OptionMaxActiveSessionsHelp": "Un valor de 0 desactivará esta característica.", "OptionMaxActiveSessions": "Fija el número máximo de sesiones que puede tener cada usuario.", - "LabelUserMaxActiveSessions": "Número máximo de sesiones simultaneas por usuario:" + "LabelUserMaxActiveSessions": "Número máximo de sesiones simultaneas por usuario:", + "OptionAllowContentDownloadHelp": "Los usuarios pueden descargar los medios y guardarlos en sus dispositivos. Esto no es una función de sincronización. Las bibliotecas de libros requieren que esto esté activado para funcionar correctamente.", + "OptionAllowContentDownload": "Permitir descargas de medios", + "HeaderDeleteDevices": "Borrar todos los dispositivos", + "DeleteDevicesConfirmation": "¿Estás seguro de que quieres borrar todos los dispositivos? Todas las otras sesiones se cerrarán. Los dispositivos reaparecerán la proxima vez que un usuario inicie sesión.", + "DeleteAll": "Borrar todo" } From fd17088014fadc6183cf8535d7d8a07924abe847 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sun, 1 Nov 2020 13:23:48 +0000 Subject: [PATCH 43/63] 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 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index f5ecb8fd2d..d6603c6eb9 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1422,5 +1422,8 @@ "OptionMaxActiveSessions": "设置用户同时进行会话的最大数量。", "LabelUserMaxActiveSessions": "用户同时进行会话的最大数量:", "OptionAllowContentDownloadHelp": "用户可以下载媒体并将其存储在他们的设备上。 这与同步功能不同。 图书库要求启用此功能才能正常运行。", - "OptionAllowContentDownload": "允许媒体下载" + "OptionAllowContentDownload": "允许媒体下载", + "HeaderDeleteDevices": "删除所有设备", + "DeleteDevicesConfirmation": "您确定要删除所有设备吗?所有其他会话将被注销。用户下次登录时,设备会重新出现。", + "DeleteAll": "删除全部" } From 2552e7b10c3fa649c5512f84eac630997f8c7630 Mon Sep 17 00:00:00 2001 From: Afonso Jorge Ramos Date: Sun, 1 Nov 2020 21:51:12 +0000 Subject: [PATCH 44/63] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 84e5b4acd7..28048e640d 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1,7 +1,7 @@ { "HeaderTypeImageFetchers": "{0} Pesquisadores de Imagens", "HeaderSubtitleDownloads": "Transferências de Legendas", - "HeaderKodiMetadataHelp": "Para ativar ou desativar metadados, editar uma biblioteca nas configurações e localizar a seção dos metadados.", + "HeaderKodiMetadataHelp": "Para ativar ou desativar metadados, edite uma biblioteca e localize a seção dos metadados.", "HeaderFetcherSettings": "Definições do Pesquisador", "HeaderCastAndCrew": "Elenco e Pessoal", "HeaderAppearsOn": "Presente em", @@ -484,7 +484,7 @@ "HeaderRecordingPostProcessing": "Pós-Processamento de Gravações", "HeaderRecordingOptions": "Opções de Gravação", "HeaderRecentlyPlayed": "Reproduzido Recentemente", - "HeaderProfileServerSettingsHelp": "Estes valores controlam como o Servidor Jellyfin se apresenta a si mesmo ao dispositivo.", + "HeaderProfileServerSettingsHelp": "Estes campos controlam como o servidor se apresenta aos clientes.", "HeaderProfileInformation": "Informação do Perfil", "HeaderPreferredMetadataLanguage": "Idioma Preferido dos Metadados", "HeaderPluginInstallation": "Instalar Extensão", @@ -733,10 +733,10 @@ "ErrorPleaseSelectLineup": "Por favor selecione a programação e tente novamente. Se não houver programações disponíveis, verifique se o seu nome de utilizador, senha e código postal estão correctos.", "ErrorStartHourGreaterThanEnd": "A hora de fim deve ser superior à hora de início.", "ErrorGettingTvLineups": "Ocorreu um erro ao transferir a programação de TV. Por favor, certifique-se que a sua informação está correcta e tente novamente.", - "ErrorDeletingItem": "Ocorreu um erro ao apagar o item do Servidor Jellyfin. Por favor, verifique o acesso de escrita do Servidor Jellyfin à pasta e tente de novo.", + "ErrorDeletingItem": "Ocorreu um erro ao apagar o item do servidor. Por favor, verifique se o Jellyfin tem accessp de escrita na pasta e tente de novo.", "ErrorAddingXmlTvFile": "Ocorreu um erro ao aceder ao ficheiro XmlTV. Por favor, garanta que o ficheiro está acessível e tente de novo.", "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o dispositivo de sintonização. Por favor, garanta que está acessível e tente de novo.", - "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionar a localização dos seus ficheiros. Por favor, assegure-se que o local é valido e que o processo do Jellyfin Server tenha acesso a essa localização.", + "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionar a localização dos seus ficheiros. Por favor, verifique se o caminho é valido e se o Jellyfin tem acesso à localização.", "Episodes": "Episódios", "EndsAtValue": "Termina às {0}", "EnableThemeVideosHelp": "Reproduzir vídeos do tema em plano de fundo durante a navegação pela Biblioteca.", @@ -977,7 +977,7 @@ "HeaderAudioSettings": "Configurações de Áudio", "HeaderAudioBooks": "Livros de Áudio", "HeaderApp": "Aplicação", - "HeaderApiKeysHelp": "As aplicações externas necessitam de uma chave da API para comunicar com o Jellyfin Server. As chaves são emitidas ao entrar com uma conta Jellyfin ou concedendo manualmente a chave à aplicação.", + "HeaderApiKeysHelp": "As aplicações externas necessitam de uma chave de API para comunicar com o servidor. As chaves são emitidas ao iniciar sessão com uma conta de utilizador normal ou concedendo manualmente a chave à aplicação.", "HeaderApiKeys": "Chaves da API", "HeaderApiKey": "Chave da API", "HeaderAllowMediaDeletionFrom": "Permitir remoção de multimédia a partir de", @@ -1209,5 +1209,9 @@ "EnableQuickConnect": "Ativar conexão rápida neste servidor", "EnableDecodingColorDepth10Vp9": "Habilitar decodificação de hardware de 10 bits para VP9", "EnableDecodingColorDepth10Hevc": "Habilitar decodificação de hardware de 10 bits para HEVC", - "EnableAutoCast": "Definir como padrão" + "EnableAutoCast": "Definir como padrão", + "HeaderDeleteDevices": "Apagar Todos os Dispositivos", + "Other": "Outros", + "DeleteDevicesConfirmation": "Tem a certeza que pretende apagar todos os dispositivos? Todas as sessões serão terminadas e os dispositivos reaparecerão no próximo início de sessão.", + "DeleteAll": "Apagar Tudo" } From cdb52282061fab7197fcc156dc4a67a3e434a86c Mon Sep 17 00:00:00 2001 From: Guilherme Danno Date: Sun, 1 Nov 2020 23:11:27 -0300 Subject: [PATCH 45/63] fix font sizes reapply 45cd976b494596b1e5a3170ed436bbaba71b42c7 --- src/assets/css/fonts.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/assets/css/fonts.scss b/src/assets/css/fonts.scss index 1da3127d62..32dc2e7bd6 100644 --- a/src/assets/css/fonts.scss +++ b/src/assets/css/fonts.scss @@ -6,7 +6,6 @@ html { @include font; - -webkit-text-size-adjust: 100%; text-size-adjust: 100%; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; From 09f6e775defef619e111db163bfbafc2864b8c58 Mon Sep 17 00:00:00 2001 From: cvium Date: Mon, 2 Nov 2020 09:29:57 +0100 Subject: [PATCH 46/63] Fix collectionEditor creation in movies --- src/controllers/movies/moviecollections.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js index 573e5122c5..6aed25f9a8 100644 --- a/src/controllers/movies/moviecollections.js +++ b/src/controllers/movies/moviecollections.js @@ -248,7 +248,7 @@ import 'emby-itemscontainer'; tabContent.querySelector('.btnNewCollection').addEventListener('click', () => { import('collectionEditor').then(({default: collectionEditor}) => { const serverId = ApiClient.serverInfo().Id; - new collectionEditor.showEditor({ + new collectionEditor({ items: [], serverId: serverId }); From 8d1719c409dbc47a13284bdd4bfa9e17be2704fd Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2020 09:15:08 +0000 Subject: [PATCH 47/63] Bump file-loader from 6.1.1 to 6.2.0 Bumps [file-loader](https://github.com/webpack-contrib/file-loader) from 6.1.1 to 6.2.0. - [Release notes](https://github.com/webpack-contrib/file-loader/releases) - [Changelog](https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/file-loader/compare/v6.1.1...v6.2.0) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 490d8a5314..2d195a745a 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-promise": "^4.2.1", - "file-loader": "^6.1.1", + "file-loader": "^6.2.0", "gulp": "^4.0.2", "gulp-babel": "^8.0.0", "gulp-cli": "^2.3.0", diff --git a/yarn.lock b/yarn.lock index 45f7854dc2..4d4314b544 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4481,10 +4481,10 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-loader@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.1.1.tgz#a6f29dfb3f5933a1c350b2dbaa20ac5be0539baa" - integrity sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw== +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -6412,10 +6412,6 @@ jellyfin-apiclient@^1.4.2: resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.2.tgz#0a7ab7b371380cfb1bc9789204439b8dfdcdbafd" integrity sha512-xUvt1G0cDlam6hJgC5Jr6EE5botzdEMGxeer3Vm0+zhM7nb8iFnRmQRmTpVbXtYS8NLiHsiUmK1RLlelgtWDYg== -"jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": - version "1.0.3" - resolved "https://github.com/jellyfin/jellyfin-noto#b784602db063734c721a46563ae5d6577ec2b35d" - jest-worker@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" From e9546f6176d5640c9d099cf9b3a38fbb6f69210e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2020 09:15:48 +0000 Subject: [PATCH 48/63] Bump pdfjs-dist from 2.4.456 to 2.5.207 Bumps [pdfjs-dist](https://github.com/mozilla/pdfjs-dist) from 2.4.456 to 2.5.207. - [Release notes](https://github.com/mozilla/pdfjs-dist/releases) - [Commits](https://github.com/mozilla/pdfjs-dist/compare/v2.4.456...v2.5.207) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 490d8a5314..a9fbe0b1b4 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "core-js": "^3.6.5", "date-fns": "^2.16.1", "epubjs": "^0.3.85", - "pdfjs-dist": "2.4.456", + "pdfjs-dist": "2.5.207", "fast-text-encoding": "^1.0.3", "flv.js": "^1.5.0", "headroom.js": "^0.12.0", diff --git a/yarn.lock b/yarn.lock index 45f7854dc2..520b2dc657 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6412,10 +6412,6 @@ jellyfin-apiclient@^1.4.2: resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.2.tgz#0a7ab7b371380cfb1bc9789204439b8dfdcdbafd" integrity sha512-xUvt1G0cDlam6hJgC5Jr6EE5botzdEMGxeer3Vm0+zhM7nb8iFnRmQRmTpVbXtYS8NLiHsiUmK1RLlelgtWDYg== -"jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": - version "1.0.3" - resolved "https://github.com/jellyfin/jellyfin-noto#b784602db063734c721a46563ae5d6577ec2b35d" - jest-worker@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" @@ -8315,10 +8311,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pdfjs-dist@2.4.456: - version "2.4.456" - resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.4.456.tgz#0eaad2906cda866bbb393e79a0e5b4e68bd75520" - integrity sha512-yckJEHq3F48hcp6wStEpbN9McOj328Ib09UrBlGAKxvN2k+qYPN5iq6TH6jD1C0pso7zTep+g/CKsYgdrQd5QA== +pdfjs-dist@2.5.207: + version "2.5.207" + resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.5.207.tgz#b5e8c19627be64269cd3fb6df3eaaf45ddffe7b6" + integrity sha512-xGDUhnCYPfHy+unMXCLCJtlpZaaZ17Ew3WIL0tnSgKFUZXHAPD49GO9xScyszSsQMoutNDgRb+rfBXIaX/lJbw== pend@~1.2.0: version "1.2.0" From 100ed3506383dc2c44a0db0f410667445124fb2a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2020 09:17:51 +0000 Subject: [PATCH 49/63] Bump swiper from 6.3.4 to 6.3.5 Bumps [swiper](https://github.com/nolimits4web/Swiper) from 6.3.4 to 6.3.5. - [Release notes](https://github.com/nolimits4web/Swiper/releases) - [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md) - [Commits](https://github.com/nolimits4web/Swiper/compare/v6.3.4...v6.3.5) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 490d8a5314..9dc92a2199 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "resize-observer-polyfill": "^1.5.1", "screenfull": "^5.0.2", "sortablejs": "^1.12.0", - "swiper": "^6.3.4", + "swiper": "^6.3.5", "webcomponents.js": "^0.7.24", "whatwg-fetch": "^3.4.1" }, diff --git a/yarn.lock b/yarn.lock index 45f7854dc2..441adba7d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6412,10 +6412,6 @@ jellyfin-apiclient@^1.4.2: resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.2.tgz#0a7ab7b371380cfb1bc9789204439b8dfdcdbafd" integrity sha512-xUvt1G0cDlam6hJgC5Jr6EE5botzdEMGxeer3Vm0+zhM7nb8iFnRmQRmTpVbXtYS8NLiHsiUmK1RLlelgtWDYg== -"jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": - version "1.0.3" - resolved "https://github.com/jellyfin/jellyfin-noto#b784602db063734c721a46563ae5d6577ec2b35d" - jest-worker@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" @@ -11126,10 +11122,10 @@ svgo@^1.0.0, svgo@^1.3.2: unquote "~1.1.1" util.promisify "~1.0.0" -swiper@^6.3.4: - version "6.3.4" - resolved "https://registry.yarnpkg.com/swiper/-/swiper-6.3.4.tgz#94bebb39437825d303afd19d9f28927fa943e5f2" - integrity sha512-6XWBJCAjOTQd3yVVZO9y47B007QPeiCcn/pm9OkueVLpYNWZBAXpoX0P8JaGch/bzcaH3oXteWCj5KC8R3AloA== +swiper@^6.3.5: + version "6.3.5" + resolved "https://registry.yarnpkg.com/swiper/-/swiper-6.3.5.tgz#7444b680d0fdafe84859825ac3559b5b01bd1916" + integrity sha512-MZkkVJ+sXukp6G3Z3BlKayhBjRIQuO1TZaTlH7ooI/0qbH0kkmItFMjFo19nOOsJaDXglA32xqyc9KCtmbJv0w== dependencies: dom7 "^3.0.0-alpha.7" ssr-window "^3.0.0-alpha.4" From 06ded8ec83be39db16f37091be64d84fb4a34b9d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2020 09:19:47 +0000 Subject: [PATCH 50/63] Bump gulp-terser from 1.4.0 to 1.4.1 Bumps [gulp-terser](https://github.com/duan602728596/gulp-terser) from 1.4.0 to 1.4.1. - [Release notes](https://github.com/duan602728596/gulp-terser/releases) - [Commits](https://github.com/duan602728596/gulp-terser/compare/v1.4.0...v1.4.1) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 32 ++++++++++++++------------------ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 490d8a5314..211085cda3 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "gulp-postcss": "^8.0.0", "gulp-sass": "^4.0.2", "gulp-sourcemaps": "^2.6.5", - "gulp-terser": "^1.4.0", + "gulp-terser": "^1.4.1", "html-webpack-plugin": "^4.5.0", "lazypipe": "^1.0.2", "node-sass": "^4.13.1", diff --git a/yarn.lock b/yarn.lock index 45f7854dc2..221429afca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5349,10 +5349,10 @@ gulp-sourcemaps@^2.6.5: strip-bom-string "1.X" through2 "2.X" -gulp-terser@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-1.4.0.tgz#0ac4dfdbed4ab46906007c5b358810c1642b9764" - integrity sha512-7df9leJna3WOmj76tYHxjpn7BSU+vmKVjVSd6bz3uLEyrzCfZI97KPhRcIabrSNzs0UY/UXTt+JwkxPw3sF85w== +gulp-terser@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-1.4.1.tgz#06b30023889b149bdbbdd49fada31b233fe737df" + integrity sha512-VUoKrk24G0ojr7fXqlZ7vA8qDFHRloYAM6doNRyKdJ/LFkj+X3P04f+7LlOp7j05WtdOCEg65oG6nGjSf//78A== dependencies: is-promise "^4.0.0" plugin-error "^1.0.1" @@ -6412,10 +6412,6 @@ jellyfin-apiclient@^1.4.2: resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.2.tgz#0a7ab7b371380cfb1bc9789204439b8dfdcdbafd" integrity sha512-xUvt1G0cDlam6hJgC5Jr6EE5botzdEMGxeer3Vm0+zhM7nb8iFnRmQRmTpVbXtYS8NLiHsiUmK1RLlelgtWDYg== -"jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": - version "1.0.3" - resolved "https://github.com/jellyfin/jellyfin-noto#b784602db063734c721a46563ae5d6577ec2b35d" - jest-worker@^26.6.1: version "26.6.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" @@ -11241,16 +11237,7 @@ terser-webpack-plugin@^5.0.0: source-map "^0.6.1" terser "^5.3.8" -terser@>=4, terser@^4.1.2, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^5.3.8: +terser@>=4, terser@^5.3.8: version "5.3.8" resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.8.tgz#991ae8ba21a3d990579b54aa9af11586197a75dd" integrity sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ== @@ -11259,6 +11246,15 @@ terser@^5.3.8: source-map "~0.7.2" source-map-support "~0.5.19" +terser@^4.1.2, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" From e8364a386ed0c15b7054439732536ea807ce7e74 Mon Sep 17 00:00:00 2001 From: cvium Date: Mon, 2 Nov 2020 11:48:39 +0100 Subject: [PATCH 51/63] Create 1 lazyloader observer per collection type --- src/controllers/itemDetails/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index ed83d859d1..4c2d29538d 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -1727,7 +1727,7 @@ function renderCollectionItemType(page, parentItem, type, items) { html += ''; const collectionItems = page.querySelector('.collectionItems'); collectionItems.insertAdjacentHTML('beforeend', html); - imageLoader.lazyChildren(collectionItems); + imageLoader.lazyChildren(collectionItems.lastChild); } function renderMusicVideos(page, item, user) { From 1402b964674222770750486f801f4e0fa55a6583 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 2 Nov 2020 13:28:56 +0000 Subject: [PATCH 52/63] Bump eslint from 7.12.0 to 7.12.1 Bumps [eslint](https://github.com/eslint/eslint) from 7.12.0 to 7.12.1. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v7.12.0...v7.12.1) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 2d195a745a..efefe98b5e 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "css-loader": "^5.0.0", "cssnano": "^4.1.10", "del": "^6.0.0", - "eslint": "^7.12.0", + "eslint": "^7.12.1", "eslint-plugin-compat": "^3.5.1", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.22.1", diff --git a/yarn.lock b/yarn.lock index 4d4314b544..442855bc94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -861,10 +861,10 @@ resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== -"@eslint/eslintrc@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.0.tgz#bc7e3c4304d4c8720968ccaee793087dfb5fe6b4" - integrity sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ== +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -4108,13 +4108,13 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.12.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.0.tgz#7b6a85f87a9adc239e979bb721cde5ce0dc27da6" - integrity sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA== +eslint@^7.12.1: + version "7.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" + integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== dependencies: "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.2.0" + "@eslint/eslintrc" "^0.2.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" From 05046a9b5756b849f528265d12734131d88452e3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2020 12:21:51 +0000 Subject: [PATCH 53/63] Bump node-sass from 4.14.1 to 5.0.0 Bumps [node-sass](https://github.com/sass/node-sass) from 4.14.1 to 5.0.0. - [Release notes](https://github.com/sass/node-sass/releases) - [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md) - [Commits](https://github.com/sass/node-sass/compare/v4.14.1...v5.0.0) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 132 ++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 105 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 6a271d8130..5601586075 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "gulp-terser": "^1.4.1", "html-webpack-plugin": "^4.5.0", "lazypipe": "^1.0.2", - "node-sass": "^4.13.1", + "node-sass": "^5.0.0", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "style-loader": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index a78a6f3410..c1178156c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2496,6 +2496,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -3005,7 +3010,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3867,6 +3872,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + epubjs@^0.3.85: version "0.3.88" resolved "https://registry.yarnpkg.com/epubjs/-/epubjs-0.3.88.tgz#bc365e7e21893cf2d92717ce10927c1071275347" @@ -4767,6 +4777,13 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -5178,7 +5195,7 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -7368,6 +7385,21 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -7404,6 +7436,11 @@ mixin-deep@^1.2.0: dependencies: minimist "^1.2.5" +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -7542,6 +7579,22 @@ node-gyp@^3.8.0: tar "^2.0.0" which "1" +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -7576,29 +7629,6 @@ node-releases@^1.1.61: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== -node-sass@^4.13.1: - version "4.14.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" - integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash "^4.17.15" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.13.2" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "2.2.5" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - node-sass@^4.8.3: version "4.14.0" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.0.tgz#a8e9d7720f8e15b4a1072719dcf04006f5648eeb" @@ -7622,6 +7652,28 @@ node-sass@^4.8.3: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" +node-sass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-5.0.0.tgz#4e8f39fbef3bac8d2dc72ebe3b539711883a78d2" + integrity sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^7.0.3" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^7.1.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -7629,6 +7681,13 @@ node-sass@^4.8.3: dependencies: abbrev "1" +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7697,7 +7756,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -9785,7 +9844,7 @@ replace-homedir@^1.0.0: is-absolute "^1.0.0" remove-trailing-separator "^1.1.0" -request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -11187,6 +11246,18 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" +tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -12243,7 +12314,7 @@ which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -12385,6 +12456,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" From 6089a108a3f48cb2497ce02558c35e4ee345d11c Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2020 12:21:53 +0000 Subject: [PATCH 54/63] Bump webpack from 5.2.0 to 5.3.2 Bumps [webpack](https://github.com/webpack/webpack) from 5.2.0 to 5.3.2. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.2.0...v5.3.2) Signed-off-by: dependabot-preview[bot] --- package.json | 2 +- yarn.lock | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 6a271d8130..2becfc2de3 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "stylelint-config-rational-order": "^0.1.2", "stylelint-no-browser-hacks": "^1.2.1", "stylelint-order": "^4.1.0", - "webpack": "^5.2.0", + "webpack": "^5.3.2", "webpack-merge": "^4.2.2", "webpack-stream": "^6.1.0", "worker-plugin": "^5.0.0" diff --git a/yarn.lock b/yarn.lock index a78a6f3410..44687e4605 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3842,7 +3842,7 @@ enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@^5.3.0: +enhanced-resolve@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz#3f988d0d7775bdc2d96ede321dc81f8249492f57" integrity sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w== @@ -11225,10 +11225,10 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.1.tgz#b1f02e43d93ca61a0bdd9e870f4e3489e12a6c9b" - integrity sha512-EwUe+XDTFf/2cAlmAlZZ7vRpNKMZUAypX2kIRm0Fmjlz4l7SqbI/VabmgiesNZW2nq/LR0N7ku/wlTQ6ygen0w== +terser-webpack-plugin@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz#ec60542db2421f45735c719d2e17dabfbb2e3e42" + integrity sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ== dependencies: jest-worker "^26.6.1" p-limit "^3.0.2" @@ -12134,10 +12134,10 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.0.1.tgz#1467f6e692ddce91e88b8044c44347b1087bbd4f" - integrity sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw== +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== dependencies: source-list-map "^2.0.1" source-map "^0.6.1" @@ -12186,10 +12186,10 @@ webpack@^4.26.1: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpack@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.2.0.tgz#02f22466b79751a80a50f20f027a716e296b3ef5" - integrity sha512-evtOjOJQq3zaHJIWsJjM4TGtNHtSrNVAIyQ+tdPW/fRd+4PLGbUG6S3xt+N4+QwDBOaCVd0xCWiHd4R6lWO5DQ== +webpack@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.3.2.tgz#f88f6f2c54eaa1f68c8f37d8984657eaf68b00f0" + integrity sha512-DXsfHoI6lQAR3KnQh7+FsRfs9fs+TEvzXCA35UbKv4kVuzslg7QCMAcpFRZNDMjdtm9N/PoO54XEzGN9TeacQg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.45" @@ -12200,7 +12200,7 @@ webpack@^5.2.0: acorn "^8.0.4" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.3.0" + enhanced-resolve "^5.3.1" eslint-scope "^5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -12212,9 +12212,9 @@ webpack@^5.2.0: pkg-dir "^4.2.0" schema-utils "^3.0.0" tapable "^2.0.0" - terser-webpack-plugin "^5.0.0" + terser-webpack-plugin "^5.0.3" watchpack "^2.0.0" - webpack-sources "^2.0.1" + webpack-sources "^2.1.1" webworkify@^1.5.0: version "1.5.0" From bfc0155f1bcc9db581a4774e0b415bbfcc2d2f18 Mon Sep 17 00:00:00 2001 From: Oatavandi Date: Tue, 3 Nov 2020 15:56:57 +0000 Subject: [PATCH 55/63] Translated using Weblate (Tamil) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ta/ --- src/strings/ta.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ta.json b/src/strings/ta.json index bdd48423ce..fb68cbb663 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -1437,5 +1437,8 @@ "OptionMaxActiveSessions": "ஒரே நேரத்தில் பயனர் அமர்வுகளின் அதிகபட்ச எண்ணிக்கையை அமைக்கிறது.", "LabelUserMaxActiveSessions": "ஒரே நேரத்தில் பயனர் அமர்வுகளின் அதிகபட்ச எண்ணிக்கை:", "OptionAllowContentDownloadHelp": "பயனர்கள் மீடியாவை பதிவிறக்கம் செய்து தங்கள் சாதனங்களில் சேமிக்கலாம். இது ஒத்திசைவு அம்சத்திற்கு சமமானதல்ல. புத்தக நூலகங்களுக்கு இது சரியாக இயங்க வேண்டும்.", - "OptionAllowContentDownload": "மீடியா பதிவிறக்கங்களை அனுமதிக்கவும்" + "OptionAllowContentDownload": "மீடியா பதிவிறக்கங்களை அனுமதிக்கவும்", + "HeaderDeleteDevices": "எல்லா சாதனங்களையும் நீக்கு", + "DeleteDevicesConfirmation": "எல்லா சாதனங்களையும் நீக்க விரும்புகிறீர்களா? மற்ற அனைத்து அமர்வுகளும் வெளியேற்றப்படும். ஒரு பயனர் அடுத்த முறை உள்நுழையும்போது சாதனங்கள் மீண்டும் தோன்றும்.", + "DeleteAll": "அனைத்தையும் நீக்கு" } From e558ef80d7fc46095c5f45cd295699f95569c4a8 Mon Sep 17 00:00:00 2001 From: SaddFox Date: Thu, 5 Nov 2020 12:57:14 +0000 Subject: [PATCH 56/63] Translated using Weblate (Slovenian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sl/ --- src/strings/sl-si.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/sl-si.json b/src/strings/sl-si.json index 9311434d1f..aa11563743 100644 --- a/src/strings/sl-si.json +++ b/src/strings/sl-si.json @@ -74,7 +74,7 @@ "Folders": "Mape", "Genres": "Zvrsti", "HeaderAlbumArtists": "Izvajalci albuma", - "HeaderContinueWatching": "Nadaljuj gledanje", + "HeaderContinueWatching": "Nadaljuj z ogledom", "Movies": "Filmi", "AllowedRemoteAddressesHelp": "Z vejico ločen seznam IP naslovov ali IP/maska omrežij, ki jim je dovoljen oddaljeni dostop. Če pustite prazno, bodo dovoljeni vsi oddaljeni naslovi.", "AlwaysPlaySubtitles": "Vedno prikaži", @@ -203,7 +203,7 @@ "CopyStreamURL": "Kopiraj URL pretakanja", "ButtonSubmit": "Pošli", "ButtonAddImage": "Dodaj sliko", - "ValueSpecialEpisodeName": "Poseben - {0}", + "ValueSpecialEpisodeName": "Posebna - {0}", "Shows": "Serije", "DoNotRecord": "Ne snemaj", "DisplayModeHelp": "Izberite želeno razporeditev uporabniškega vmesnika.", From fde6647767afe2014ea666b2e0c4bc91cf8a3ddb Mon Sep 17 00:00:00 2001 From: Federico Antoniazzi Date: Fri, 6 Nov 2020 00:00:22 +0000 Subject: [PATCH 57/63] 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 e98f3cdfbb..da15fb66be 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1416,5 +1416,6 @@ "OptionAllowContentDownload": "Consenti il download dei media", "HeaderDeleteDevices": "Elimina tutti i dispositivi", "DeleteDevicesConfirmation": "Sei sicuro di voler eliminare tutti i dispositivi? Tutte le altre sessioni verrano disconnesse. I dispositivi riappariranno appena un utente vi effettuerà il login.", - "DeleteAll": "Elimina tutto" + "DeleteAll": "Elimina tutto", + "OptionAllowContentDownloadHelp": "Gli utenti possono scaricare contenuti e salvarli nei loro dispositivi. Non è uguale alla sincronizzazione. I libri richiedono che questa proprietà sia attivata per lavorare correttamente." } From e324dd7714613cdc1daeeb2db2d4d453fed6abe0 Mon Sep 17 00:00:00 2001 From: BrunoN17 Date: Fri, 6 Nov 2020 02:49:59 +0000 Subject: [PATCH 58/63] 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 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 2bd7e9c9ce..5e68f2fb10 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1413,5 +1413,6 @@ "LabelTonemappingRange": "Alcance do Tone mapping :", "TonemappingAlgorithmHelp": "O Tone mapping pode ser afinado. Se não está familiarizado com estas opções mantenha os valores padrão. O valor recomendado é Reinhard.", "AllowTonemappingHelp": "O Tone mapping permite transformar o alcance dinâmico de um vídeo de HDR para SDR mantendo as cores e detalhes da imagem, que é informação importante para representar a cena original. Atualmente apenas funciona durante a transcodificação de vídeos com metadados HDR10 ou HLG embutidos. Caso a reprodução não seja suave ou falhe, considere desligar o descodificador de hardware correspondente.", - "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes armazenados em buffer enquanto aguardam que todas a transmissões iniciem. Tente aumentá-lo caso se depare com o seguinte erro nos logs do ffmpeg \"Too many packets buffered for output stream\". O valor recomendado é 2048." + "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes armazenados em buffer enquanto aguardam que todas a transmissões iniciem. Tente aumentá-lo caso se depare com o seguinte erro nos logs do ffmpeg \"Too many packets buffered for output stream\". O valor recomendado é 2048.", + "DeleteAll": "Apagar tudo" } From 2261769eb6194777d635b0d3b44897098f05ca68 Mon Sep 17 00:00:00 2001 From: public_yusuke Date: Fri, 6 Nov 2020 02:52:21 +0000 Subject: [PATCH 59/63] Translated using Weblate (Japanese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/ --- src/strings/ja.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ja.json b/src/strings/ja.json index 1955df4ac2..1d9681184b 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -1422,5 +1422,8 @@ "XmlTvMovieCategoriesHelp": "これらのカテゴリの番組は映画として表示されます。複数の場合は '|' で区切ってください。", "XmlTvKidsCategoriesHelp": "これらのカテゴリの番組は子供向けとして表示されます。複数の場合は '|' で区切ってください。", "OptionAllowContentDownloadHelp": "ユーザーのデバイスにメディアのダウンロードと保存ができます。これは同期機能とは異なります。ブックライブラリが正しく機能するには有効化が必要です。", - "OptionAllowContentDownload": "メディアのダウンロードを許可" + "OptionAllowContentDownload": "メディアのダウンロードを許可", + "HeaderDeleteDevices": "すべてのデバイスの削除", + "DeleteDevicesConfirmation": "すべてのデバイスを削除しますか?他のセッションはすべてログアウトされます。デバイスは次回ログインした際に再度表示されるようになります。", + "DeleteAll": "すべて削除" } From c5b2b0b864f92c5b1f383e8d0f2c0e0800a94eb4 Mon Sep 17 00:00:00 2001 From: artiume Date: Fri, 6 Nov 2020 08:56:08 -0500 Subject: [PATCH 60/63] Sort Movies Suggestions by Random --- src/controllers/movies/moviegenres.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index ca02ede36d..c87282376c 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -17,7 +17,7 @@ import 'emby-button'; if (!pageData) { pageData = data[key] = { query: { - SortBy: 'SortName', + SortBy: 'Random', SortOrder: 'Ascending', IncludeItemTypes: 'Movie', Recursive: true, From 0e530cd2606926667e8cda83235cc4686457b5e4 Mon Sep 17 00:00:00 2001 From: artiume Date: Fri, 6 Nov 2020 09:05:07 -0500 Subject: [PATCH 61/63] Sort Show Suggestions by Random --- src/controllers/shows/tvgenres.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index 3a17fd7997..05dccd3862 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -17,7 +17,7 @@ import 'emby-button'; if (!pageData) { pageData = data[key] = { query: { - SortBy: 'SortName', + SortBy: 'Random', SortOrder: 'Ascending', IncludeItemTypes: 'Series', Recursive: true, From bdf276e76b048526df2142c15f2f7990a8942fd5 Mon Sep 17 00:00:00 2001 From: JB Date: Fri, 6 Nov 2020 19:42:22 +0000 Subject: [PATCH 62/63] Translated using Weblate (Korean) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ko/ --- src/strings/ko.json | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/strings/ko.json b/src/strings/ko.json index a2c65487d9..076273e32e 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -423,7 +423,7 @@ "MessageDeleteTaskTrigger": "이 작업 트리거를 삭제하겠습니까?", "MessageEnablingOptionLongerScans": "이 옵션을 사용하면 라이브러리 스캔이 상당히 길어질 수 있습니다.", "MessageFileReadError": "이 파일을 읽는 데 오류가 발생하였습니다.", - "MessageForgotPasswordFileCreated": "진행 방법이 설명된 다음의 파일이 귀하의 서버에 생성되었습니다.", + "MessageForgotPasswordFileCreated": "진행 방법이 설명된 다음의 파일이 귀하의 서버에 생성되었습니다:", "MessageForgotPasswordInNetworkRequired": "비밀번호 초기화를 진행하려면 귀하의 홈 네트워크에서 다시 시도하세요.", "MessageInvalidForgotPasswordPin": "올바르지 않거나 만료된 PIN 코드입니다. 다시 시도하십시오.", "MessageInvalidUser": "올바르지 않은 사용자명 또는 비밀번호입니다. 다시 시도하세요.", @@ -521,7 +521,7 @@ "PasswordResetComplete": "비밀번호가 재설정되었습니다.", "PasswordResetConfirmation": "비밀번호를 재설정하겠습니까?", "PasswordSaved": "비밀번호가 저장되었습니다.", - "PictureInPicture": "Picture in picture", + "PictureInPicture": "Picture in picture(PIP)", "PinCodeResetComplete": "PIN 코드가 초기화되었습니다.", "PinCodeResetConfirmation": "PIN 코드를 초기화하겠습니까?", "Play": "재생", @@ -749,7 +749,7 @@ "ShowYear": "년도 표시", "ShowTitle": "제목 표시", "ShowAdvancedSettings": "고급 설정 표시", - "ServerUpdateNeeded": "이 서버를 업데이트해야합니다. 최신 버전을 다운로드하려면 {0}을 (를) 방문하십시오.", + "ServerUpdateNeeded": "이 서버를 업데이트해야합니다. 최신 버전을 다운로드하려면 {0}을 (를) 방문하십시오", "ServerRestartNeededAfterPluginInstall": "플러그인을 설치 한 후 Jellyfin을 다시 시작해야합니다.", "ServerNameIsShuttingDown": "{0}의 서버가 종료됩니다.", "ServerNameIsRestarting": "{0}의 서버가 다시 시작됩니다.", @@ -1110,9 +1110,9 @@ "LanNetworksHelp": "대역폭을 강제로 제한할 때 로컬 네트워크로 간주되는 쉼표로 구분된 IP 주소 및 IP/서브넷 마스크 목록입니다. 지정될 경우 모든 다른 IP 주소는 외부 네트워크로 간주되며 외부 대역폭 제한이 적용됩니다. 공백일 경우 서버의 서브넷만이 로컬 네트워크로 간주됩니다.", "LabelffmpegPathHelp": "ffmpeg를 포함하는 ffmpeg 응용 프로그램 파일 또는 폴더의 경로입니다.", "LabelXDlnaDocHelp": "urn:schemas-dlna-org:device-1-0 네임스페이스에 포함된 X_DLNADOC 요소의 내용을 결정합니다.", - "LabelXDlnaDoc": "X-DLNA doc:", + "LabelXDlnaDoc": "X-DLNA 문서:", "LabelXDlnaCapHelp": "urn:schemas-dlna-org:device-1-0 네임스페이스에 포함된 X_DLNACAP 요소의 내용을 결정합니다.", - "LabelXDlnaCap": "X-DLNA cap:", + "LabelXDlnaCap": "X-DLNA 한도:", "LabelVideoResolution": "비디오 해상도:", "LabelTVHomeScreen": "TV 모드 홈 화면:", "LabelStreamType": "스트리밍 유형:", @@ -1219,7 +1219,7 @@ "QuickConnectDeactivated": "로그인 요청이 승인되기 전에 Quick connect가 비활성화되었습니다", "QuickConnectAuthorizeFail": "알수없는 퀵커넥트 코드", "QuickConnectAuthorizeSuccess": "승인 요청", - "QuickConnectAuthorizeCode": "로그인하려면 {0} 코드를 입력하세요.", + "QuickConnectAuthorizeCode": "로그인하려면 {0} 코드를 입력하세요", "QuickConnectActivationSuccessful": "성공적으로 활성화되었습니다", "QuickConnect": "퀵커넥트", "Profile": "프로파일", @@ -1420,5 +1420,10 @@ "LabelUserMaxActiveSessions": "최대 동시 접속 사용자 세션 수:", "EnableAutoCast": "기본값으로 설정", "OptionMaxActiveSessionsHelp": "값이 0이면 이 기능이 비활성화됩니다.", - "OptionMaxActiveSessions": "동시 사용자 세션의 최대 수를 설정하세요." + "OptionMaxActiveSessions": "동시 사용자 세션의 최대값을 설정합니다.", + "OptionAllowContentDownloadHelp": "사용자의 장치에 미디어를 다운로드 할 수 있습니다.이것은 동기화하는 기능이 아닙니다. 라이브러리가 올바르게 작동하려면 동기화가 필요합니다.", + "OptionAllowContentDownload": "영상 다운로드 허용", + "HeaderDeleteDevices": "모든 기기 삭제", + "DeleteDevicesConfirmation": "모든 디바이스를 삭제하시겠습니까?다른 세션은 모두 로그아웃 됩니다.디바이스는 다음 번 로그인 했을 때에 다시 표시되게 됩니다.", + "DeleteAll": "전체삭제" } From 3ddb5b2957b8e1e96ef57b8f348b4209f94c5914 Mon Sep 17 00:00:00 2001 From: tomwaits00 Date: Sat, 7 Nov 2020 01:59:43 +0000 Subject: [PATCH 63/63] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index 9730857ea8..b8c2b5d529 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -177,7 +177,7 @@ "ButtonEditOtherUserPreferences": "Bu kullanıcının profilini, resmini ve kişisel tercihlerini düzenleyin.", "ButtonForgotPassword": "Şifremi unuttum", "ButtonFullscreen": "Tam Ekran", - "Collections": "Koleksiyonlar", + "Collections": "Koleksiyon", "Favorites": "Favoriler", "Folders": "Klasörler", "Genres": "Türler",