From 524ede412b1fd1d7c9b1ee89274c11ce4225c30a Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 4 Aug 2024 12:54:39 +0800 Subject: [PATCH 001/186] Add non-standard multi-value audio tag support --- .../libraryoptionseditor.js | 11 ++++++++ .../libraryoptionseditor.template.html | 26 +++++++++++++++++++ src/strings/en-us.json | 4 +++ 3 files changed, 41 insertions(+) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js index de70c1c1a9..73784097d9 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.js +++ b/src/components/libraryoptionseditor/libraryoptionseditor.js @@ -12,6 +12,7 @@ import dom from '../../scripts/dom'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-select/emby-select'; import '../../elements/emby-input/emby-input'; +import '../../elements/emby-textarea/emby-textarea'; import './style.scss'; import template from './libraryoptionseditor.template.html'; @@ -439,8 +440,10 @@ export function setContentType(parent, contentType) { if (contentType === 'music') { parent.querySelector('.lyricSettingsSection').classList.remove('hide'); + parent.querySelector('.audioTagSettingsSection').classList.remove('hide'); } else { parent.querySelector('.lyricSettingsSection').classList.add('hide'); + parent.querySelector('.audioTagSettingsSection').classList.add('hide'); } parent.querySelector('.chkAutomaticallyAddToCollectionContainer').classList.toggle('hide', contentType !== 'movies' && contentType !== 'mixed'); @@ -550,6 +553,8 @@ export function getLibraryOptions(parent) { SaveLyricsWithMedia: parent.querySelector('#chkSaveLyricsLocally').checked, RequirePerfectSubtitleMatch: parent.querySelector('#chkRequirePerfectMatch').checked, AutomaticallyAddToCollection: parent.querySelector('#chkAutomaticallyAddToCollection').checked, + PreferNonstandardArtistsTag: parent.querySelector('#chkPreferNonstandardArtistsTag').checked, + UseCustomTagDelimiters: parent.querySelector('#chkUseCustomTagDelimiters').checked, MetadataSavers: Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll('.chkMetadataSaver'), elem => { return elem.checked; }), elem => { @@ -566,6 +571,8 @@ export function getLibraryOptions(parent) { }), elem => { return elem.getAttribute('data-lang'); }); + options.CustomTagDelimiters = parent.querySelector('#customTagDelimitersInput').value.split(''); + options.DelimiterWhitelist = parent.querySelector('#tagDelimiterWhitelist').value.split('\n'); setSubtitleFetchersIntoOptions(parent, options); setMetadataFetchersIntoOptions(parent, options); setImageFetchersIntoOptions(parent, options); @@ -612,12 +619,16 @@ export function setLibraryOptions(parent, options) { parent.querySelector('#chkSkipIfAudioTrackPresent').checked = options.SkipSubtitlesIfAudioTrackMatches; parent.querySelector('#chkRequirePerfectMatch').checked = options.RequirePerfectSubtitleMatch; parent.querySelector('#chkAutomaticallyAddToCollection').checked = options.AutomaticallyAddToCollection; + parent.querySelector('#chkPreferNonstandardArtistsTag').checked = options.PreferNonstandardArtistsTag; + parent.querySelector('#chkUseCustomTagDelimiters').checked = options.UseCustomTagDelimiters; Array.prototype.forEach.call(parent.querySelectorAll('.chkMetadataSaver'), elem => { elem.checked = options.MetadataSavers ? options.MetadataSavers.includes(elem.getAttribute('data-pluginname')) : elem.getAttribute('data-defaultenabled') === 'true'; }); Array.prototype.forEach.call(parent.querySelectorAll('.chkSubtitleLanguage'), elem => { elem.checked = !!options.SubtitleDownloadLanguages && options.SubtitleDownloadLanguages.includes(elem.getAttribute('data-lang')); }); + parent.querySelector('#customTagDelimitersInput').value = options.CustomTagDelimiters.join(''); + parent.querySelector('#tagDelimiterWhitelist').value = options.DelimiterWhitelist.join('\n').filter(item => item.trim()); renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || [])); renderMetadataFetchers(parent, parent.availableOptions, options); renderImageFetchers(parent, parent.availableOptions, options); diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index b1d358cc02..28c711cbd3 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -205,3 +205,29 @@
${SaveLyricsIntoMediaFoldersHelp}
+ +
+

Audio Tag settings

+
+ +
${PreferNonstandardArtistsTagHelp}
+
+
+ +
${UseCustomTagDelimitersHelp}
+
+
+ +
${LabelcustomTagDelimitersHelp}
+
+
+ +
${LabelDelimiterWhitelistHelp}
+
+
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 12023468eb..b45c9e6351 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -615,6 +615,7 @@ "LabelCustomCssHelp": "Apply your custom CSS code for theming/branding on the web interface.", "LabelCustomDeviceDisplayNameHelp": "Supply a custom display name or leave empty to use the name reported by the device.", "LabelCustomRating": "Custom rating", + "LabelcustomTagDelimitersHelp": "Characters to be treated as delimiters to separate tags.", "LabelDashboardTheme": "Server Dashboard theme", "LabelDate": "Date", "LabelDateAdded": "Date added", @@ -625,6 +626,7 @@ "LabelDeathDate": "Death date", "LabelDefaultScreen": "Default screen", "LabelDeinterlaceMethod": "Deinterlacing method", + "LabelDelimiterWhitelistHelp": "Items to be excluded from tag splitting. One item per line.", "LabelDeveloper": "Developer", "LabelDisableCustomCss": "Disable custom CSS code for theming/branding provided from the server.", "LabelDiscNumber": "Disc number", @@ -1301,6 +1303,7 @@ "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras often have the same embedded name as the parent, check this to use embedded titles for them anyway.", "PreferEmbeddedTitlesOverFileNames": "Prefer embedded titles over filenames", "PreferEmbeddedTitlesOverFileNamesHelp": "Determine the display title to use when no internet metadata or local metadata is available.", + "PreferNonstandardArtistsTagHelp": "Use the non-standard ARTISTS tag instead of ARTIST tag when available.", "AllowEmbeddedSubtitles": "Disable different types of embedded subtitles", "AllowEmbeddedSubtitlesHelp": "Disable subtitles that are packaged within media containers. Requires a full library refresh.", "AllowEmbeddedSubtitlesAllowAllOption": "Allow All", @@ -1529,6 +1532,7 @@ "UnsupportedPlayback": "Jellyfin cannot decrypt content protected by DRM but all content will be tried regardless, including protected titles. Some files may appear completely black due to encryption or other unsupported features, such as interactive titles.", "Up": "Up", "Upload": "Upload", + "UseCustomTagDelimitersHelp": "Split artist/genre tags with custom characters.", "UseDoubleRateDeinterlacing": "Double the frame rate when deinterlacing", "UseDoubleRateDeinterlacingHelp": "This setting uses the field rate when deinterlacing, often referred to as bob deinterlacing, which doubles the frame rate of the video to provide full motion like what you would see when viewing interlaced video on a TV.", "UseEpisodeImagesInNextUp": "Use episode images in 'Next Up' and 'Continue Watching' sections", From f6c8af1095af7c2e70e7207179e0518fb1c227d3 Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 4 Aug 2024 15:31:43 +0800 Subject: [PATCH 002/186] Make labels translatable --- .../libraryoptionseditor.template.html | 10 +++++----- src/strings/en-us.json | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index 28c711cbd3..e1793fdd1d 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -207,27 +207,27 @@
-

Audio Tag settings

+

${LabelAudioTagSettings}

${PreferNonstandardArtistsTagHelp}
${UseCustomTagDelimitersHelp}
- +
${LabelcustomTagDelimitersHelp}
- +
${LabelDelimiterWhitelistHelp}
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index b45c9e6351..cf68b5591b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -565,6 +565,7 @@ "LabelAudioChannels": "Audio channels", "LabelAudioCodec": "Audio codec", "LabelAudioLanguagePreference": "Preferred audio language", + "LabelAudioTagSettings": "Audio Tag settings", "LabelSelectAudioNormalization": "Audio Normalization", "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferred transcode audio codec in video playback", "LabelAudioSampleRate": "Audio sample rate", @@ -615,6 +616,7 @@ "LabelCustomCssHelp": "Apply your custom CSS code for theming/branding on the web interface.", "LabelCustomDeviceDisplayNameHelp": "Supply a custom display name or leave empty to use the name reported by the device.", "LabelCustomRating": "Custom rating", + "LabelcustomTagDelimiters": "Custom Tag Delimiter", "LabelcustomTagDelimitersHelp": "Characters to be treated as delimiters to separate tags.", "LabelDashboardTheme": "Server Dashboard theme", "LabelDate": "Date", @@ -626,6 +628,7 @@ "LabelDeathDate": "Death date", "LabelDefaultScreen": "Default screen", "LabelDeinterlaceMethod": "Deinterlacing method", + "LabelDelimiterWhitelist": "Delimiter Whitelist", "LabelDelimiterWhitelistHelp": "Items to be excluded from tag splitting. One item per line.", "LabelDeveloper": "Developer", "LabelDisableCustomCss": "Disable custom CSS code for theming/branding provided from the server.", @@ -1303,6 +1306,7 @@ "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras often have the same embedded name as the parent, check this to use embedded titles for them anyway.", "PreferEmbeddedTitlesOverFileNames": "Prefer embedded titles over filenames", "PreferEmbeddedTitlesOverFileNamesHelp": "Determine the display title to use when no internet metadata or local metadata is available.", + "PreferNonstandardArtistsTag": "Prefer ARTISTS tag if available", "PreferNonstandardArtistsTagHelp": "Use the non-standard ARTISTS tag instead of ARTIST tag when available.", "AllowEmbeddedSubtitles": "Disable different types of embedded subtitles", "AllowEmbeddedSubtitlesHelp": "Disable subtitles that are packaged within media containers. Requires a full library refresh.", @@ -1532,6 +1536,7 @@ "UnsupportedPlayback": "Jellyfin cannot decrypt content protected by DRM but all content will be tried regardless, including protected titles. Some files may appear completely black due to encryption or other unsupported features, such as interactive titles.", "Up": "Up", "Upload": "Upload", + "UseCustomTagDelimiters": "Use custom tag delimiter", "UseCustomTagDelimitersHelp": "Split artist/genre tags with custom characters.", "UseDoubleRateDeinterlacing": "Double the frame rate when deinterlacing", "UseDoubleRateDeinterlacingHelp": "This setting uses the field rate when deinterlacing, often referred to as bob deinterlacing, which doubles the frame rate of the video to provide full motion like what you would see when viewing interlaced video on a TV.", From 31b6a43a852d804aaec96450b66d9e3c9794279e Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 4 Aug 2024 15:31:52 +0800 Subject: [PATCH 003/186] Fix filtering for setter and getter --- src/components/libraryoptionseditor/libraryoptionseditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js index 73784097d9..9413a601d6 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.js +++ b/src/components/libraryoptionseditor/libraryoptionseditor.js @@ -572,7 +572,7 @@ export function getLibraryOptions(parent) { return elem.getAttribute('data-lang'); }); options.CustomTagDelimiters = parent.querySelector('#customTagDelimitersInput').value.split(''); - options.DelimiterWhitelist = parent.querySelector('#tagDelimiterWhitelist').value.split('\n'); + options.DelimiterWhitelist = parent.querySelector('#tagDelimiterWhitelist').value.split('\n').filter(item => item.trim()); setSubtitleFetchersIntoOptions(parent, options); setMetadataFetchersIntoOptions(parent, options); setImageFetchersIntoOptions(parent, options); @@ -628,7 +628,7 @@ export function setLibraryOptions(parent, options) { elem.checked = !!options.SubtitleDownloadLanguages && options.SubtitleDownloadLanguages.includes(elem.getAttribute('data-lang')); }); parent.querySelector('#customTagDelimitersInput').value = options.CustomTagDelimiters.join(''); - parent.querySelector('#tagDelimiterWhitelist').value = options.DelimiterWhitelist.join('\n').filter(item => item.trim()); + parent.querySelector('#tagDelimiterWhitelist').value = options.DelimiterWhitelist.filter(item => item.trim()).join('\n'); renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || [])); renderMetadataFetchers(parent, parent.availableOptions, options); renderImageFetchers(parent, parent.availableOptions, options); From 9fb0c4473c6a346ae8bb2add6a1a82100654474d Mon Sep 17 00:00:00 2001 From: gnattu Date: Sun, 4 Aug 2024 19:07:03 +0800 Subject: [PATCH 004/186] PascalCase in string key for uniformity Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- .../libraryoptionseditor/libraryoptionseditor.template.html | 4 ++-- src/strings/en-us.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index e1793fdd1d..f05fd6a451 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -223,8 +223,8 @@
${UseCustomTagDelimitersHelp}
- -
${LabelcustomTagDelimitersHelp}
+ +
${LabelCustomTagDelimitersHelp}
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index cf68b5591b..a0108954e3 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -616,8 +616,8 @@ "LabelCustomCssHelp": "Apply your custom CSS code for theming/branding on the web interface.", "LabelCustomDeviceDisplayNameHelp": "Supply a custom display name or leave empty to use the name reported by the device.", "LabelCustomRating": "Custom rating", - "LabelcustomTagDelimiters": "Custom Tag Delimiter", - "LabelcustomTagDelimitersHelp": "Characters to be treated as delimiters to separate tags.", + "LabelCustomTagDelimiters": "Custom Tag Delimiter", + "LabelCustomTagDelimitersHelp": "Characters to be treated as delimiters to separate tags.", "LabelDashboardTheme": "Server Dashboard theme", "LabelDate": "Date", "LabelDateAdded": "Date added", From fd18c3e60000475d81d9aa23a985b8ab0e962ee9 Mon Sep 17 00:00:00 2001 From: Miroslav Prasil Date: Sun, 25 Aug 2024 10:46:43 +0000 Subject: [PATCH 005/186] Support for Home and Search media keys in TV mode The remote I have has some extra "media" buttons besides the already supported playback controls. This adds support for "Find" button to navigate to search page and "BrowserHome" button to navigate back to main screen. Adding these to the `NavigationKeys` only enables functionality for TV mode which I think is pretty reasonable constraint - on actual desktop people might prefer to use these keys to control the browser rather than Jellyfin interface. --- src/scripts/keyboardNavigation.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/scripts/keyboardNavigation.js b/src/scripts/keyboardNavigation.js index ed13e90415..4ea7d9afff 100644 --- a/src/scripts/keyboardNavigation.js +++ b/src/scripts/keyboardNavigation.js @@ -43,7 +43,7 @@ const KeyNames = { /** * Keys used for keyboard navigation. */ -const NavigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown']; +const NavigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'BrowserHome', 'Find']; /** * Keys used for media playback control. @@ -182,6 +182,13 @@ export function enable() { } break; + case 'Find': + inputManager.handleCommand('search'); + break; + case 'BrowserHome': + inputManager.handleCommand('home'); + break; + case 'MediaPlay': inputManager.handleCommand('play'); break; From 872d71df3dbeb74664793fcd81cf97ffb077f257 Mon Sep 17 00:00:00 2001 From: LJQ Date: Thu, 29 Aug 2024 15:14:57 +0800 Subject: [PATCH 006/186] Allow editing of original title for Season and Episode items --- src/components/metadataEditor/metadataEditor.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index b40a858b6b..42da2b67bf 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -540,8 +540,7 @@ function setFieldVisibilities(context, item) { } else { hideElement('#fldPath', context); } - - if (item.Type === 'Series' || item.Type === 'Movie' || item.Type === 'Trailer' || item.Type === 'Person') { + if (item.Type === 'Series' || item.Type === 'Season' || item.Type === 'Episode' || item.Type === 'Movie' || item.Type === 'Trailer' || item.Type === 'Person') { showElement('#fldOriginalName', context); } else { hideElement('#fldOriginalName', context); From 8d8362158cf1c53e168c08ae566897a1cac7b268 Mon Sep 17 00:00:00 2001 From: LJQ Date: Thu, 29 Aug 2024 15:15:44 +0800 Subject: [PATCH 007/186] restore newline --- src/components/metadataEditor/metadataEditor.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 42da2b67bf..d06a4912e2 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -540,6 +540,7 @@ function setFieldVisibilities(context, item) { } else { hideElement('#fldPath', context); } + if (item.Type === 'Series' || item.Type === 'Season' || item.Type === 'Episode' || item.Type === 'Movie' || item.Type === 'Trailer' || item.Type === 'Person') { showElement('#fldOriginalName', context); } else { From e34c10644e21d3cb3b5410b63959984cfb1d4292 Mon Sep 17 00:00:00 2001 From: LJQ Date: Thu, 29 Aug 2024 15:19:48 +0800 Subject: [PATCH 008/186] Rm Trailing spaces --- src/components/metadataEditor/metadataEditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index d06a4912e2..d9b3aa70c4 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -540,7 +540,7 @@ function setFieldVisibilities(context, item) { } else { hideElement('#fldPath', context); } - + if (item.Type === 'Series' || item.Type === 'Season' || item.Type === 'Episode' || item.Type === 'Movie' || item.Type === 'Trailer' || item.Type === 'Person') { showElement('#fldOriginalName', context); } else { From a077fd21cc279aa2eeac7c8fe868d61e071d3769 Mon Sep 17 00:00:00 2001 From: lostbit Date: Thu, 29 Aug 2024 09:54:12 +0200 Subject: [PATCH 009/186] Add default choice to collection display order --- src/components/metadataEditor/metadataEditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index b40a858b6b..4503e1cf10 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -717,7 +717,7 @@ function setFieldVisibilities(context, item) { showElement('#fldDisplayOrder', context); hideElement('.seriesDisplayOrderDescription', context); - context.querySelector('#selectDisplayOrder').innerHTML = ''; + context.querySelector('#selectDisplayOrder').innerHTML = ''; } else if (item.Type === 'Series') { showElement('#fldDisplayOrder', context); showElement('.seriesDisplayOrderDescription', context); From c02b1e651f0a9aa5f14419f2c752ec5fcf606174 Mon Sep 17 00:00:00 2001 From: LJQ Date: Thu, 5 Sep 2024 01:06:26 +0800 Subject: [PATCH 010/186] Apply suggestion --- src/components/metadataEditor/metadataEditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index d9b3aa70c4..1edd4148eb 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -21,7 +21,7 @@ import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import { appRouter } from '../router/appRouter'; import template from './metadataEditor.template.html'; -import { SeriesStatus } from '@jellyfin/sdk/lib/generated-client'; +import { BaseItemKind, SeriesStatus } from '@jellyfin/sdk/lib/generated-client'; let currentContext; let metadataEditorInfo; @@ -541,7 +541,7 @@ function setFieldVisibilities(context, item) { hideElement('#fldPath', context); } - if (item.Type === 'Series' || item.Type === 'Season' || item.Type === 'Episode' || item.Type === 'Movie' || item.Type === 'Trailer' || item.Type === 'Person') { + if ([BaseItemKind.Series, BaseItemKind.Season, BaseItemKind.Episode, BaseItemKind.Movie, BaseItemKind.Trailer, BaseItemKind.Person].includes(item.Type)) { showElement('#fldOriginalName', context); } else { hideElement('#fldOriginalName', context); From f7fcf44f94c6d71d417d0ef7985a7d76c167f293 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Sun, 8 Sep 2024 20:12:37 +0300 Subject: [PATCH 011/186] Add global Api hooks --- src/hooks/api/libraryHooks/index.ts | 1 + src/hooks/api/libraryHooks/useGetDownload.ts | 38 ++++++++++++++++++ src/hooks/api/liveTvHooks/index.ts | 5 +++ .../api/liveTvHooks/useCancelSeriesTimer.ts | 23 +++++++++++ src/hooks/api/liveTvHooks/useCancelTimer.ts | 23 +++++++++++ src/hooks/api/liveTvHooks/useGetChannel.ts | 40 +++++++++++++++++++ .../api/liveTvHooks/useGetSeriesTimer.ts | 34 ++++++++++++++++ src/hooks/api/liveTvHooks/useGetTimer.ts | 34 ++++++++++++++++ src/hooks/api/videosHooks/index.ts | 1 + .../videosHooks/useDeleteAlternateSources.ts | 23 +++++++++++ 10 files changed, 222 insertions(+) create mode 100644 src/hooks/api/libraryHooks/index.ts create mode 100644 src/hooks/api/libraryHooks/useGetDownload.ts create mode 100644 src/hooks/api/liveTvHooks/index.ts create mode 100644 src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts create mode 100644 src/hooks/api/liveTvHooks/useCancelTimer.ts create mode 100644 src/hooks/api/liveTvHooks/useGetChannel.ts create mode 100644 src/hooks/api/liveTvHooks/useGetSeriesTimer.ts create mode 100644 src/hooks/api/liveTvHooks/useGetTimer.ts create mode 100644 src/hooks/api/videosHooks/index.ts create mode 100644 src/hooks/api/videosHooks/useDeleteAlternateSources.ts diff --git a/src/hooks/api/libraryHooks/index.ts b/src/hooks/api/libraryHooks/index.ts new file mode 100644 index 0000000000..53dadb17fd --- /dev/null +++ b/src/hooks/api/libraryHooks/index.ts @@ -0,0 +1 @@ +export * from './useGetDownload'; diff --git a/src/hooks/api/libraryHooks/useGetDownload.ts b/src/hooks/api/libraryHooks/useGetDownload.ts new file mode 100644 index 0000000000..031e0e49b8 --- /dev/null +++ b/src/hooks/api/libraryHooks/useGetDownload.ts @@ -0,0 +1,38 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LibraryApiGetDownloadRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getDownload = async ( + apiContext: JellyfinApiContext, + params: LibraryApiGetDownloadRequest, + options?: AxiosRequestConfig +) => { + const { api, user } = apiContext; + if (!api) throw new Error('No API instance available'); + if (!user?.Id) throw new Error('No User ID provided'); + + const response = await getLibraryApi(api).getDownload( + params, + options + ); + return response.data; +}; + +export const getDownloadQuery = ( + apiContext: JellyfinApiContext, + params: LibraryApiGetDownloadRequest +) => queryOptions({ + queryKey: ['Download', params.itemId], + queryFn: ({ signal }) => + getDownload(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.itemId +}); + +export const useGetDownload = ( + params: LibraryApiGetDownloadRequest +) => { + const apiContext = useApi(); + return useQuery(getDownloadQuery(apiContext, params)); +}; diff --git a/src/hooks/api/liveTvHooks/index.ts b/src/hooks/api/liveTvHooks/index.ts new file mode 100644 index 0000000000..458bb62e07 --- /dev/null +++ b/src/hooks/api/liveTvHooks/index.ts @@ -0,0 +1,5 @@ +export * from './useCancelSeriesTimer'; +export * from './useCancelTimer'; +export * from './useGetChannel'; +export * from './useGetSeriesTimer'; +export * from './useGetTimer'; diff --git a/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts b/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts new file mode 100644 index 0000000000..85c98b00e5 --- /dev/null +++ b/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts @@ -0,0 +1,23 @@ +import type { LiveTvApiCancelSeriesTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { useMutation } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const cancelSeriesTimer = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiCancelSeriesTimerRequest +) => { + const { api } = apiContext; + if (api) { + const response = await getLiveTvApi(api).cancelSeriesTimer(params); + return response.data; + } +}; + +export const useCancelSeriesTimer = () => { + const apiContext = useApi(); + return useMutation({ + mutationFn: (params: LiveTvApiCancelSeriesTimerRequest) => + cancelSeriesTimer(apiContext, params) + }); +}; diff --git a/src/hooks/api/liveTvHooks/useCancelTimer.ts b/src/hooks/api/liveTvHooks/useCancelTimer.ts new file mode 100644 index 0000000000..7ef8985cba --- /dev/null +++ b/src/hooks/api/liveTvHooks/useCancelTimer.ts @@ -0,0 +1,23 @@ +import type { LiveTvApiCancelTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { useMutation } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const cancelTimer = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiCancelTimerRequest +) => { + const { api } = apiContext; + if (api) { + const response = await getLiveTvApi(api).cancelTimer(params); + return response.data; + } +}; + +export const useCancelTimer = () => { + const apiContext = useApi(); + return useMutation({ + mutationFn: (params: LiveTvApiCancelTimerRequest) => + cancelTimer(apiContext, params) + }); +}; diff --git a/src/hooks/api/liveTvHooks/useGetChannel.ts b/src/hooks/api/liveTvHooks/useGetChannel.ts new file mode 100644 index 0000000000..93e241880c --- /dev/null +++ b/src/hooks/api/liveTvHooks/useGetChannel.ts @@ -0,0 +1,40 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LiveTvApiGetChannelRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getChannel = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetChannelRequest, + options?: AxiosRequestConfig +) => { + const { api, user } = apiContext; + if (!api) throw new Error('No API instance available'); + if (!user?.Id) throw new Error('No User ID provided'); + + const response = await getLiveTvApi(api).getChannel( + { + userId: user.Id, + ...params + }, + options + ); + return response.data; +}; + +export const getChannelQuery = ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetChannelRequest +) => queryOptions({ + queryKey: ['Channel', params.channelId], + queryFn: ({ signal }) => getChannel(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.channelId +}); + +export const useGetChannel = ( + params: LiveTvApiGetChannelRequest +) => { + const apiContext = useApi(); + return useQuery(getChannelQuery(apiContext, params)); +}; diff --git a/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts b/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts new file mode 100644 index 0000000000..d7342902a2 --- /dev/null +++ b/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts @@ -0,0 +1,34 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LiveTvApiGetSeriesTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getSeriesTimer = async ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetSeriesTimerRequest, + options?: AxiosRequestConfig +) => { + const { api } = apiContext; + if (!api) throw new Error('No API instance available'); + const response = await getLiveTvApi(api).getSeriesTimer( + params, + options + ); + + return response.data; +}; + +export const getSeriesTimerQuery = ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetSeriesTimerRequest +) => queryOptions({ + queryKey: ['SeriesTimer', params.timerId], + queryFn: ({ signal }) => getSeriesTimer(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId +}); + +export const useGetSeriesTimer = (requestParameters: LiveTvApiGetSeriesTimerRequest) => { + const apiContext = useApi(); + return useQuery(getSeriesTimerQuery(apiContext, requestParameters)); +}; diff --git a/src/hooks/api/liveTvHooks/useGetTimer.ts b/src/hooks/api/liveTvHooks/useGetTimer.ts new file mode 100644 index 0000000000..f219dea059 --- /dev/null +++ b/src/hooks/api/liveTvHooks/useGetTimer.ts @@ -0,0 +1,34 @@ +import type { AxiosRequestConfig } from 'axios'; +import type { LiveTvApiGetTimerRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const getTimer = async ( + currentApi: JellyfinApiContext, + params: LiveTvApiGetTimerRequest, + options?: AxiosRequestConfig +) => { + const { api } = currentApi; + if (!api) throw new Error('No API instance available'); + const response = await getLiveTvApi(api).getTimer( + params, + options + ); + + return response.data; +}; + +export const getTimerQuery = ( + apiContext: JellyfinApiContext, + params: LiveTvApiGetTimerRequest +) => queryOptions({ + queryKey: ['Timer', params.timerId], + queryFn: ({ signal }) => getTimer(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId +}); + +export const useGetTimer = (requestParameters: LiveTvApiGetTimerRequest) => { + const apiContext = useApi(); + return useQuery(getTimerQuery(apiContext, requestParameters)); +}; diff --git a/src/hooks/api/videosHooks/index.ts b/src/hooks/api/videosHooks/index.ts new file mode 100644 index 0000000000..1c600b2209 --- /dev/null +++ b/src/hooks/api/videosHooks/index.ts @@ -0,0 +1 @@ +export * from './useDeleteAlternateSources'; diff --git a/src/hooks/api/videosHooks/useDeleteAlternateSources.ts b/src/hooks/api/videosHooks/useDeleteAlternateSources.ts new file mode 100644 index 0000000000..c504c1bef9 --- /dev/null +++ b/src/hooks/api/videosHooks/useDeleteAlternateSources.ts @@ -0,0 +1,23 @@ +import type { VideosApiDeleteAlternateSourcesRequest } from '@jellyfin/sdk/lib/generated-client'; +import { getVideosApi } from '@jellyfin/sdk/lib/utils/api/videos-api'; +import { useMutation } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; + +const deleteAlternateSources = async ( + apiContext: JellyfinApiContext, + params: VideosApiDeleteAlternateSourcesRequest +) => { + const { api } = apiContext; + if (api) { + const response = await getVideosApi(api).deleteAlternateSources(params); + return response.data; + } +}; + +export const useDeleteAlternateSources = () => { + const apiContext = useApi(); + return useMutation({ + mutationFn: (params: VideosApiDeleteAlternateSourcesRequest) => + deleteAlternateSources(apiContext, params) + }); +}; From 690b1fbed549d316d09b0cf124269fdd54fa4989 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Sun, 8 Sep 2024 20:15:20 +0300 Subject: [PATCH 012/186] Add detail view buttons --- .../buttons/CancelSeriesTimerButton.tsx | 66 ++++++ .../components/buttons/CancelTimerButton.tsx | 58 +++++ .../components/buttons/DownloadButton.tsx | 42 ++++ .../components/buttons/InstantMixButton.tsx | 28 +++ .../components/buttons/MoreCommandsButton.tsx | 221 ++++++++++++++++++ .../components/buttons/PlayOrResumeButton.tsx | 87 +++++++ .../components/buttons/PlayTrailerButton.tsx | 28 +++ .../components/buttons/ShuffleButton.tsx | 29 +++ .../buttons/SplitVersionsButton.tsx | 65 ++++++ .../details/hooks/api/useGetItemByType.ts | 63 +++++ src/components/itemContextMenu.js | 9 +- 11 files changed, 692 insertions(+), 4 deletions(-) create mode 100644 src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/DownloadButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/InstantMixButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/PlayTrailerButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/ShuffleButton.tsx create mode 100644 src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx create mode 100644 src/apps/experimental/features/details/hooks/api/useGetItemByType.ts diff --git a/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx b/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx new file mode 100644 index 0000000000..7f3acd1678 --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx @@ -0,0 +1,66 @@ +import React, { FC, useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { IconButton } from '@mui/material'; +import DeleteIcon from '@mui/icons-material/Delete'; + +import { useCancelSeriesTimer } from 'hooks/api/liveTvHooks'; +import globalize from 'lib/globalize'; +import loading from 'components/loading/loading'; +import toast from 'components/toast/toast'; +import confirm from 'components/confirm/confirm'; + +interface CancelSeriesTimerButtonProps { + itemId: string; +} + +const CancelSeriesTimerButton: FC = ({ + itemId +}) => { + const navigate = useNavigate(); + const cancelSeriesTimer = useCancelSeriesTimer(); + + const onCancelSeriesTimerClick = useCallback(() => { + confirm({ + text: globalize.translate('MessageConfirmRecordingCancellation'), + primary: 'delete', + confirmText: globalize.translate('HeaderCancelSeries'), + cancelText: globalize.translate('HeaderKeepSeries') + }) + .then(function () { + loading.show(); + cancelSeriesTimer.mutate( + { + timerId: itemId + }, + { + onSuccess: async () => { + toast(globalize.translate('SeriesCancelled')); + loading.hide(); + navigate('/livetv.html'); + }, + onError: (err: unknown) => { + console.error( + '[cancelSeriesTimer] failed to cancel series timer', + err + ); + } + } + ); + }) + .catch(() => { + // confirm dialog closed + }); + }, [cancelSeriesTimer, navigate, itemId]); + + return ( + + + + ); +}; + +export default CancelSeriesTimerButton; diff --git a/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx b/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx new file mode 100644 index 0000000000..0687df7f5d --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx @@ -0,0 +1,58 @@ +import React, { FC, useCallback } from 'react'; +import { IconButton } from '@mui/material'; +import StopIcon from '@mui/icons-material/Stop'; +import { useQueryClient } from '@tanstack/react-query'; +import { useCancelTimer } from 'hooks/api/liveTvHooks'; +import globalize from 'lib/globalize'; +import loading from 'components/loading/loading'; +import toast from 'components/toast/toast'; + +interface CancelTimerButtonProps { + timerId: string; + queryKey?: string[]; +} + +const CancelTimerButton: FC = ({ + timerId, + queryKey +}) => { + const queryClient = useQueryClient(); + const cancelTimer = useCancelTimer(); + + const onCancelTimerClick = useCallback(() => { + loading.show(); + cancelTimer.mutate( + { + timerId: timerId + }, + { + onSuccess: async () => { + toast(globalize.translate('RecordingCancelled')); + loading.hide(); + await queryClient.invalidateQueries({ + queryKey + }); + }, + + onError: (err: unknown) => { + console.error( + '[cancelTimer] failed to cancel timer', + err + ); + } + } + ); + }, [cancelTimer, queryClient, queryKey, timerId]); + + return ( + + + + ); +}; + +export default CancelTimerButton; diff --git a/src/apps/experimental/features/details/components/buttons/DownloadButton.tsx b/src/apps/experimental/features/details/components/buttons/DownloadButton.tsx new file mode 100644 index 0000000000..284984239e --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/DownloadButton.tsx @@ -0,0 +1,42 @@ +import React, { FC, useCallback } from 'react'; +import { IconButton } from '@mui/material'; +import FileDownloadIcon from '@mui/icons-material/FileDownload'; +import { useGetDownload } from 'hooks/api/libraryHooks'; +import globalize from 'lib/globalize'; +import { download } from 'scripts/fileDownloader'; +import type { NullableString } from 'types/base/common/shared/types'; + +interface DownloadButtonProps { + itemId: string; + itemServerId: NullableString, + itemName: NullableString, + itemPath: NullableString, +} + +const DownloadButton: FC = ({ itemId, itemServerId, itemName, itemPath }) => { + const { data: downloadHref } = useGetDownload({ itemId }); + + const onDownloadClick = useCallback(async () => { + download([ + { + url: downloadHref, + itemId: itemId, + serverId: itemServerId, + title: itemName, + filename: itemPath?.replace(/^.*[\\/]/, '') + } + ]); + }, [downloadHref, itemId, itemName, itemPath, itemServerId]); + + return ( + + + + ); +}; + +export default DownloadButton; diff --git a/src/apps/experimental/features/details/components/buttons/InstantMixButton.tsx b/src/apps/experimental/features/details/components/buttons/InstantMixButton.tsx new file mode 100644 index 0000000000..9cb223178f --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/InstantMixButton.tsx @@ -0,0 +1,28 @@ +import React, { FC, useCallback } from 'react'; +import { IconButton } from '@mui/material'; +import ExploreIcon from '@mui/icons-material/Explore'; +import { playbackManager } from 'components/playback/playbackmanager'; +import globalize from 'lib/globalize'; +import type { ItemDto } from 'types/base/models/item-dto'; + +interface InstantMixButtonProps { + item?: ItemDto; +} + +const InstantMixButton: FC = ({ item }) => { + const onInstantMixClick = useCallback(() => { + playbackManager.instantMix(item); + }, [item]); + + return ( + + + + ); +}; + +export default InstantMixButton; diff --git a/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx b/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx new file mode 100644 index 0000000000..e679f9e772 --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx @@ -0,0 +1,221 @@ +import React, { FC, useCallback, useMemo } from 'react'; +import { IconButton } from '@mui/material'; +import MoreVertIcon from '@mui/icons-material/MoreVert'; +import { useQueryClient } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { useGetItemByType } from '../../hooks/api/useGetItemByType'; +import globalize from 'lib/globalize'; +import itemContextMenu from 'components/itemContextMenu'; +import { playbackManager } from 'components/playback/playbackmanager'; +import { appRouter } from 'components/router/appRouter'; + +import { ItemKind } from 'types/base/models/item-kind'; +import type { NullableString } from 'types/base/common/shared/types'; +import type { ItemDto } from 'types/base/models/item-dto'; + +interface PlayAllFromHereOptions { + item: ItemDto; + items: ItemDto[]; + serverId: NullableString; + queue?: boolean; +} + +function playAllFromHere(opts: PlayAllFromHereOptions) { + const { item, items, serverId, queue } = opts; + + const ids = []; + + let foundCard = false; + let startIndex; + + for (let i = 0, length = items?.length; i < length; i++) { + if (items[i] === item) { + foundCard = true; + startIndex = i; + } + if (foundCard || !queue) { + ids.push(items[i].Id); + } + } + + if (!ids.length) { + return; + } + + if (queue) { + return playbackManager.queue({ + ids, + serverId + }); + } else { + return playbackManager.play({ + ids, + serverId, + startIndex + }); + } +} + +export interface ContextMenuOpts { + open?: boolean; + play?: boolean; + playAllFromHere?: boolean; + queueAllFromHere?: boolean; + cancelTimer?: boolean; + record?: boolean; + deleteItem?: boolean; + shuffle?: boolean; + instantMix?: boolean; + share?: boolean; + stopPlayback?: boolean; + clearQueue?: boolean; + queue?: boolean; + playlist?: boolean; + edit?: boolean; + editImages?: boolean; + editSubtitles?: boolean; + identify?: boolean; + moremediainfo?: boolean; + openAlbum?: boolean; + openArtist?: boolean; + openLyrics?: boolean; +} + +interface MoreCommandsButtonProps { + className?: string; + itemType: ItemKind; + selectedItemId?: string; + itemId?: string; + items?: ItemDto[] | null; + collectionId?: NullableString; + playlistId?: NullableString; + canEditPlaylist?: boolean; + itemPlaylistItemId?: NullableString; + contextMenuOpts?: ContextMenuOpts; + queryKey?: string[]; +} + +const MoreCommandsButton: FC = ({ + className, + itemType, + selectedItemId, + itemId, + collectionId, + playlistId, + canEditPlaylist, + itemPlaylistItemId, + contextMenuOpts, + items, + queryKey +}) => { + const { user } = useApi(); + const queryClient = useQueryClient(); + const { data: item } = useGetItemByType({ + itemType, + itemId: selectedItemId || itemId + }); + const parentId = item?.SeasonId || item?.SeriesId || item?.ParentId; + + const playlistItem = useMemo(() => { + let PlaylistItemId: string | null = null; + let PlaylistIndex = -1; + let PlaylistItemCount = 0; + + if (playlistId) { + PlaylistItemId = itemPlaylistItemId || null; + + if (items?.length) { + PlaylistItemCount = items.length; + PlaylistIndex = items.findIndex(listItem => listItem.PlaylistItemId === PlaylistItemId); + } + } + return { PlaylistItemId, PlaylistIndex, PlaylistItemCount }; + }, [itemPlaylistItemId, items, playlistId]); + + const defaultMenuOptions = useMemo(() => { + return { + + item: { + ...item, + ...playlistItem + }, + user: user, + play: true, + queue: true, + playAllFromHere: item?.Type === ItemKind.Season || !item?.IsFolder, + queueAllFromHere: !item?.IsFolder, + canEditPlaylist: canEditPlaylist, + playlistId: playlistId, + collectionId: collectionId, + ...contextMenuOpts + }; + }, [canEditPlaylist, collectionId, contextMenuOpts, item, playlistId, playlistItem, user]); + + const onMoreCommandsClick = useCallback( + async (e: React.MouseEvent) => { + itemContextMenu + .show({ + ...defaultMenuOptions, + positionTo: e.currentTarget + }) + .then(async function (result) { + if (result.command === 'playallfromhere') { + console.log('handleItemClick', { + item, + items: items || [], + serverId: item?.ServerId + }); + playAllFromHere({ + item: item || {}, + items: items || [], + serverId: item?.ServerId + }); + } else if (result.command === 'queueallfromhere') { + playAllFromHere({ + item: item || {}, + items: items || [], + serverId: item?.ServerId, + queue: true + }); + } else if (result.deleted) { + if (result?.itemId !== itemId) { + await queryClient.invalidateQueries({ + queryKey + }); + } else if (parentId) { + appRouter.showItem(parentId, item?.ServerId); + } else { + await appRouter.goHome(); + } + } else if (result.updated) { + await queryClient.invalidateQueries({ + queryKey + }); + } + }) + .catch(() => { + /* no-op */ + }); + }, + [defaultMenuOptions, item, itemId, items, parentId, queryClient, queryKey] + ); + + if ( + item + && itemContextMenu.getCommands(defaultMenuOptions).length + ) { + return ( + + + + ); + } + + return null; +}; + +export default MoreCommandsButton; diff --git a/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx b/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx new file mode 100644 index 0000000000..faed1104cc --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx @@ -0,0 +1,87 @@ +import React, { FC, useCallback, useMemo } from 'react'; +import { IconButton } from '@mui/material'; +import PlayArrowIcon from '@mui/icons-material/PlayArrow'; +import ReplayIcon from '@mui/icons-material/Replay'; +import { useQueryClient } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { getChannelQuery } from 'hooks/api/liveTvHooks/useGetChannel'; +import globalize from 'lib/globalize'; +import { playbackManager } from 'components/playback/playbackmanager'; +import type { ItemDto } from 'types/base/models/item-dto'; +import { ItemKind } from 'types/base/models/item-kind'; +import itemHelper from 'components/itemHelper'; + +interface PlayOrResumeButtonProps { + item: ItemDto; + isResumable?: boolean; + selectedMediaSourceId?: string | null; + selectedAudioTrack?: number; + selectedSubtitleTrack?: number; +} + +const PlayOrResumeButton: FC = ({ + item, + isResumable, + selectedMediaSourceId, + selectedAudioTrack, + selectedSubtitleTrack +}) => { + const apiContext = useApi(); + const queryClient = useQueryClient(); + + const playOptions = useMemo(() => { + if (itemHelper.supportsMediaSourceSelection(item)) { + return { + startPositionTicks: + item.UserData && isResumable ? + item.UserData.PlaybackPositionTicks : + 0, + mediaSourceId: selectedMediaSourceId, + audioStreamIndex: selectedAudioTrack || null, + subtitleStreamIndex: selectedSubtitleTrack + }; + } + }, [ + item, + isResumable, + selectedMediaSourceId, + selectedAudioTrack, + selectedSubtitleTrack + ]); + + const onPlayClick = useCallback(async () => { + if (item.Type === ItemKind.Program && item.ChannelId) { + const channel = await queryClient.fetchQuery( + getChannelQuery(apiContext, { + channelId: item.ChannelId + }) + ); + playbackManager.play({ + items: [channel] + }); + return; + } + + playbackManager.play({ + items: [item], + ...playOptions + }); + }, [apiContext, item, playOptions, queryClient]); + + return ( + + {isResumable ? : } + + ); +}; + +export default PlayOrResumeButton; diff --git a/src/apps/experimental/features/details/components/buttons/PlayTrailerButton.tsx b/src/apps/experimental/features/details/components/buttons/PlayTrailerButton.tsx new file mode 100644 index 0000000000..0c82c06690 --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/PlayTrailerButton.tsx @@ -0,0 +1,28 @@ +import React, { FC, useCallback } from 'react'; +import { IconButton } from '@mui/material'; +import TheatersIcon from '@mui/icons-material/Theaters'; +import { playbackManager } from 'components/playback/playbackmanager'; +import globalize from 'lib/globalize'; +import type { ItemDto } from 'types/base/models/item-dto'; + +interface PlayTrailerButtonProps { + item?: ItemDto; +} + +const PlayTrailerButton: FC = ({ item }) => { + const onPlayTrailerClick = useCallback(async () => { + await playbackManager.playTrailers(item); + }, [item]); + + return ( + + + + ); +}; + +export default PlayTrailerButton; diff --git a/src/apps/experimental/features/details/components/buttons/ShuffleButton.tsx b/src/apps/experimental/features/details/components/buttons/ShuffleButton.tsx new file mode 100644 index 0000000000..258e26fc79 --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/ShuffleButton.tsx @@ -0,0 +1,29 @@ +import React, { FC, useCallback } from 'react'; +import { IconButton } from '@mui/material'; +import ShuffleIcon from '@mui/icons-material/Shuffle'; + +import { playbackManager } from 'components/playback/playbackmanager'; +import globalize from 'lib/globalize'; +import type { ItemDto } from 'types/base/models/item-dto'; + +interface ShuffleButtonProps { + item: ItemDto; +} + +const ShuffleButton: FC = ({ item }) => { + const shuffle = useCallback(() => { + playbackManager.shuffle(item); + }, [item]); + + return ( + + + + ); +}; + +export default ShuffleButton; diff --git a/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx b/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx new file mode 100644 index 0000000000..b7bb101693 --- /dev/null +++ b/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx @@ -0,0 +1,65 @@ +import React, { FC, useCallback } from 'react'; +import { IconButton } from '@mui/material'; +import CallSplitIcon from '@mui/icons-material/CallSplit'; +import { useQueryClient } from '@tanstack/react-query'; +import { useDeleteAlternateSources } from 'hooks/api/videosHooks'; +import globalize from 'lib/globalize'; +import confirm from 'components/confirm/confirm'; +import loading from 'components/loading/loading'; + +interface SplitVersionsButtonProps { + paramId: string; + queryKey?: string[]; +} + +const SplitVersionsButton: FC = ({ + paramId, + queryKey +}) => { + const queryClient = useQueryClient(); + const deleteAlternateSources = useDeleteAlternateSources(); + + const splitVersions = useCallback(() => { + confirm({ + title: globalize.translate('HeaderSplitMediaApart'), + text: globalize.translate('MessageConfirmSplitMediaSources') + }) + .then(function () { + loading.show(); + deleteAlternateSources.mutate( + { + itemId: paramId + }, + { + onSuccess: async () => { + loading.hide(); + await queryClient.invalidateQueries({ + queryKey + }); + }, + onError: (err: unknown) => { + console.error( + '[splitVersions] failed to delete Videos', + err + ); + } + } + ); + }) + .catch(() => { + // confirm dialog closed + }); + }, [deleteAlternateSources, paramId, queryClient, queryKey]); + + return ( + + + + ); +}; + +export default SplitVersionsButton; diff --git a/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts b/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts new file mode 100644 index 0000000000..dc72771b40 --- /dev/null +++ b/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts @@ -0,0 +1,63 @@ +import type { AxiosRequestConfig } from 'axios'; +import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api'; +import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; +import { useQuery } from '@tanstack/react-query'; +import { type JellyfinApiContext, useApi } from 'hooks/useApi'; +import type { ItemDto } from 'types/base/models/item-dto'; +import type{ NullableString } from 'types/base/common/shared/types'; +import { ItemKind } from 'types/base/models/item-kind'; + +const getItemByType = async ( + apiContext: JellyfinApiContext, + itemType: ItemKind, + itemId: NullableString, + options?: AxiosRequestConfig +) => { + const { api, user } = apiContext; + if (!api) throw new Error('No API instance available'); + if (!user?.Id) throw new Error('No User ID provided'); + if (!itemId) throw new Error('No item ID provided'); + + let response; + switch (itemType) { + case ItemKind.Timer: { + response = await getLiveTvApi(api).getTimer( + { timerId: itemId }, + options + ); + break; + } + case ItemKind.SeriesTimer: + response = await getLiveTvApi(api).getSeriesTimer( + { timerId: itemId }, + options + ); + break; + default: { + response = await getUserLibraryApi(api).getItem( + { userId: user.Id, itemId }, + options + ); + break; + } + } + return response.data as ItemDto; +}; + +interface UseGetItemByTypeProps { + itemType: ItemKind; + itemId: NullableString; +} + +export const useGetItemByType = ({ + itemType, + itemId +}: UseGetItemByTypeProps) => { + const apiContext = useApi(); + return useQuery({ + queryKey: ['ItemByType', { itemType, itemId }], + queryFn: ({ signal }) => + getItemByType(apiContext, itemType, itemId, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!itemId + }); +}; diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index ee70af15cf..42b6885fab 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -351,12 +351,13 @@ export function getCommands(options) { return commands; } -function getResolveFunction(resolve, id, changed, deleted) { +function getResolveFunction(resolve, commandId, changed, deleted, itemId) { return function () { resolve({ - command: id, + command: commandId, updated: changed, - deleted: deleted + deleted: deleted, + itemId: itemId }); }; } @@ -533,7 +534,7 @@ function executeCommand(item, id, options) { getResolveFunction(resolve, id)(); break; case 'delete': - deleteItem(apiClient, item).then(getResolveFunction(resolve, id, true, true), getResolveFunction(resolve, id)); + deleteItem(apiClient, item).then(getResolveFunction(resolve, id, true, true, itemId), getResolveFunction(resolve, id)); break; case 'share': navigator.share({ From 49b0ba3071bb77bee9fff31d346c737c0cf70163 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Mon, 9 Sep 2024 02:30:21 +0300 Subject: [PATCH 013/186] apply suggestion Co-authored-by: dmitrylyzo <56478732+dmitrylyzo@users.noreply.github.com> --- .../details/components/buttons/CancelSeriesTimerButton.tsx | 2 ++ .../details/components/buttons/CancelTimerButton.tsx | 2 ++ .../details/components/buttons/MoreCommandsButton.tsx | 6 ++---- .../details/components/buttons/PlayOrResumeButton.tsx | 2 +- .../features/details/components/buttons/ShuffleButton.tsx | 2 +- .../details/components/buttons/SplitVersionsButton.tsx | 5 ++++- .../features/details/hooks/api/useGetItemByType.ts | 6 ++---- src/strings/en-us.json | 3 +++ 8 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx b/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx index 7f3acd1678..2f9cb360b7 100644 --- a/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx +++ b/src/apps/experimental/features/details/components/buttons/CancelSeriesTimerButton.tsx @@ -39,6 +39,8 @@ const CancelSeriesTimerButton: FC = ({ navigate('/livetv.html'); }, onError: (err: unknown) => { + loading.hide(); + toast(globalize.translate('MessageCancelSeriesTimerError')); console.error( '[cancelSeriesTimer] failed to cancel series timer', err diff --git a/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx b/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx index 0687df7f5d..0745bc204e 100644 --- a/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx +++ b/src/apps/experimental/features/details/components/buttons/CancelTimerButton.tsx @@ -35,6 +35,8 @@ const CancelTimerButton: FC = ({ }, onError: (err: unknown) => { + loading.hide(); + toast(globalize.translate('MessageCancelTimerError')); console.error( '[cancelTimer] failed to cancel timer', err diff --git a/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx b/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx index e679f9e772..e767712364 100644 --- a/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx +++ b/src/apps/experimental/features/details/components/buttons/MoreCommandsButton.tsx @@ -82,7 +82,6 @@ export interface ContextMenuOpts { } interface MoreCommandsButtonProps { - className?: string; itemType: ItemKind; selectedItemId?: string; itemId?: string; @@ -96,7 +95,6 @@ interface MoreCommandsButtonProps { } const MoreCommandsButton: FC = ({ - className, itemType, selectedItemId, itemId, @@ -112,7 +110,7 @@ const MoreCommandsButton: FC = ({ const queryClient = useQueryClient(); const { data: item } = useGetItemByType({ itemType, - itemId: selectedItemId || itemId + itemId: selectedItemId || itemId || '' }); const parentId = item?.SeasonId || item?.SeriesId || item?.ParentId; @@ -206,7 +204,7 @@ const MoreCommandsButton: FC = ({ ) { return ( diff --git a/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx b/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx index faed1104cc..a52453656f 100644 --- a/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx +++ b/src/apps/experimental/features/details/components/buttons/PlayOrResumeButton.tsx @@ -70,7 +70,7 @@ const PlayOrResumeButton: FC = ({ return ( = ({ item }) => { return ( diff --git a/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx b/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx index b7bb101693..6754281be0 100644 --- a/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx +++ b/src/apps/experimental/features/details/components/buttons/SplitVersionsButton.tsx @@ -6,6 +6,7 @@ import { useDeleteAlternateSources } from 'hooks/api/videosHooks'; import globalize from 'lib/globalize'; import confirm from 'components/confirm/confirm'; import loading from 'components/loading/loading'; +import toast from 'components/toast/toast'; interface SplitVersionsButtonProps { paramId: string; @@ -38,8 +39,10 @@ const SplitVersionsButton: FC = ({ }); }, onError: (err: unknown) => { + loading.hide(); + toast(globalize.translate('MessageSplitVersionsError')); console.error( - '[splitVersions] failed to delete Videos', + '[splitVersions] failed to split versions', err ); } diff --git a/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts b/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts index dc72771b40..3cb2a9c716 100644 --- a/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts +++ b/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts @@ -4,19 +4,17 @@ import { getLiveTvApi } from '@jellyfin/sdk/lib/utils/api/live-tv-api'; import { useQuery } from '@tanstack/react-query'; import { type JellyfinApiContext, useApi } from 'hooks/useApi'; import type { ItemDto } from 'types/base/models/item-dto'; -import type{ NullableString } from 'types/base/common/shared/types'; import { ItemKind } from 'types/base/models/item-kind'; const getItemByType = async ( apiContext: JellyfinApiContext, itemType: ItemKind, - itemId: NullableString, + itemId: string, options?: AxiosRequestConfig ) => { const { api, user } = apiContext; if (!api) throw new Error('No API instance available'); if (!user?.Id) throw new Error('No User ID provided'); - if (!itemId) throw new Error('No item ID provided'); let response; switch (itemType) { @@ -46,7 +44,7 @@ const getItemByType = async ( interface UseGetItemByTypeProps { itemType: ItemKind; - itemId: NullableString; + itemId: string; } export const useGetItemByType = ({ diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 560b469b90..f75735aa21 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1045,6 +1045,9 @@ "MessageAreYouSureDeleteSubtitles": "Are you sure you wish to delete this subtitle file?", "MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", "MessageBrowsePluginCatalog": "Browse our plugin catalog to view available plugins.", + "MessageCancelSeriesTimerError": "An error occurred while cancel series timer", + "MessageCancelTimerError": "An error occurred while cancel timer", + "MessageSplitVersionsError": "An error occurred while split versions", "MessageChangeRecordingPath": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.", "MessageConfirmAppExit": "Do you want to exit?", "MessageConfirmDeleteGuideProvider": "Are you sure you wish to delete this guide provider?", From 944df7b4335333e15c392c0eaaa0c26866e0646e Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Mon, 9 Sep 2024 21:05:26 +0800 Subject: [PATCH 014/186] Update string for RKMPP support in Trickplay Signed-off-by: nyanmisaka --- src/strings/en-us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 560b469b90..29298f9e0b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1714,7 +1714,7 @@ "Trickplay": "Trickplay", "LabelTrickplayAccel": "Enable hardware decoding", "LabelTrickplayAccelEncoding": "Enable hardware accelerated MJPEG encoding", - "LabelTrickplayAccelEncodingHelp": "Currently only available on QSV, VAAPI and VideoToolbox, this option has no effect on other hardware acceleration methods.", + "LabelTrickplayAccelEncodingHelp": "Currently only available on QSV, VA-API, VideoToolbox and RKMPP, this option has no effect on other hardware acceleration methods.", "LabelTrickplayKeyFrameOnlyExtraction": "Only generate images from key frames", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extract key frames only for significantly faster processing with less accurate timing. If the configured hardware decoder does not support this mode, will use the software decoder instead.", "NonBlockingScan": "Non Blocking - queues generation, then returns", From 1c18fa8fb2e18c277ae38487418096aea15573a6 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Tue, 10 Sep 2024 04:46:48 +0300 Subject: [PATCH 015/186] apply suggestion Co-authored-by: dmitrylyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/strings/en-us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index f75735aa21..eed6dc6722 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1047,7 +1047,6 @@ "MessageBrowsePluginCatalog": "Browse our plugin catalog to view available plugins.", "MessageCancelSeriesTimerError": "An error occurred while cancel series timer", "MessageCancelTimerError": "An error occurred while cancel timer", - "MessageSplitVersionsError": "An error occurred while split versions", "MessageChangeRecordingPath": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.", "MessageConfirmAppExit": "Do you want to exit?", "MessageConfirmDeleteGuideProvider": "Are you sure you wish to delete this guide provider?", @@ -1100,6 +1099,7 @@ "MessageRenameMediaFolder": "Renaming a media library will cause all metadata to be lost, proceed with caution.", "MessageRepositoryInstallDisclaimer": "WARNING: Installing a third party plugin repository carries risks. It may contain unstable or malicious code, and may change at any time. Only install repositories from authors that you trust.", "MessageSent": "Message sent.", + "MessageSplitVersionsError": "An error occurred while split versions", "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", "MessageSyncPlayDisabled": "SyncPlay disabled.", "MessageSyncPlayEnabled": "SyncPlay enabled.", From 3e494a14d952bb6e5754691899725fb3adf2e131 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 17 Sep 2024 12:39:40 -0400 Subject: [PATCH 016/186] Update mixed and collection libraries --- src/apps/experimental/components/LibraryIcon.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/apps/experimental/components/LibraryIcon.tsx b/src/apps/experimental/components/LibraryIcon.tsx index 66975f0556..846e3f887c 100644 --- a/src/apps/experimental/components/LibraryIcon.tsx +++ b/src/apps/experimental/components/LibraryIcon.tsx @@ -1,4 +1,5 @@ import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client'; +import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; import Movie from '@mui/icons-material/Movie'; import MusicNote from '@mui/icons-material/MusicNote'; import Photo from '@mui/icons-material/Photo'; @@ -7,11 +8,11 @@ import Tv from '@mui/icons-material/Tv'; import Theaters from '@mui/icons-material/Theaters'; import MusicVideo from '@mui/icons-material/MusicVideo'; import Book from '@mui/icons-material/Book'; -import Collections from '@mui/icons-material/Collections'; import Queue from '@mui/icons-material/Queue'; +import Quiz from '@mui/icons-material/Quiz'; +import VideoLibrary from '@mui/icons-material/VideoLibrary'; import Folder from '@mui/icons-material/Folder'; import React, { FC } from 'react'; -import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; interface LibraryIconProps { item: BaseItemDto @@ -39,9 +40,11 @@ const LibraryIcon: FC = ({ case CollectionType.Books: return ; case CollectionType.Boxsets: - return ; + return ; case CollectionType.Playlists: return ; + case undefined: + return ; default: return ; } From 414ae943125b258a94483b1052d874118807432e Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 17 Sep 2024 16:30:08 -0400 Subject: [PATCH 017/186] Normalize item icons --- src/components/cardbuilder/cardBuilder.js | 44 ++++++---------------- src/utils/image.ts | 46 ++++++++++++----------- 2 files changed, 36 insertions(+), 54 deletions(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 94d9f613b2..b4b8c77ddc 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -4,6 +4,7 @@ * @module components/cardBuilder/cardBuilder */ +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import { PersonKind } from '@jellyfin/sdk/lib/generated-client/models/person-kind'; import escapeHtml from 'escape-html'; @@ -12,7 +13,7 @@ import datetime from 'scripts/datetime'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; -import imageHelper from 'utils/image'; +import { getItemTypeIcon, getLibraryIcon } from 'utils/image'; import focusManager from '../focusManager'; import imageLoader from '../images/imageLoader'; @@ -1053,7 +1054,7 @@ function buildCard(index, item, apiClient, options) { indicatorsHtml += indicators.getPlayedIndicatorHtml(item); } - if (item.Type === 'CollectionFolder' || item.CollectionType) { + if (item.Type === BaseItemKind.CollectionFolder || item.CollectionType) { const refreshClass = item.RefreshProgress ? '' : ' class="hide"'; indicatorsHtml += '
'; importRefreshIndicator(); @@ -1180,41 +1181,18 @@ function getHoverMenuHtml(item, action) { * @returns {string} HTML markup of the card overlay. */ export function getDefaultText(item, options) { - if (item.CollectionType) { - return ''; + let icon; + + if (item.Type === BaseItemKind.CollectionFolder || item.CollectionType) { + icon = getLibraryIcon(item.CollectionType); } - switch (item.Type) { - case 'MusicAlbum': - return ''; - case 'MusicArtist': - case 'Person': - return ''; - case 'Audio': - return ''; - case 'Movie': - return ''; - case 'Episode': - case 'Series': - return ''; - case 'Program': - return ''; - case 'Book': - return ''; - case 'Folder': - return ''; - case 'BoxSet': - return ''; - case 'Playlist': - return ''; - case 'Photo': - return ''; - case 'PhotoAlbum': - return ''; + if (!icon) { + icon = getItemTypeIcon(item.Type, options?.defaultCardImageIcon); } - if (options?.defaultCardImageIcon) { - return ''; + if (icon) { + return ``; } const defaultName = isUsingLiveTvNaming(item.Type) ? item.Name : itemHelper.getDisplayName(item); diff --git a/src/utils/image.ts b/src/utils/image.ts index dc32e87973..4eafff56a6 100644 --- a/src/utils/image.ts +++ b/src/utils/image.ts @@ -1,3 +1,4 @@ +import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import type { DeviceInfo } from '@jellyfin/sdk/lib/generated-client/models/device-info'; import type { SessionInfo } from '@jellyfin/sdk/lib/generated-client/models/session-info'; @@ -75,36 +76,39 @@ export function getDeviceIcon(info: DeviceInfo | SessionInfo) { } } -export function getLibraryIcon(library: string | null | undefined) { +export function getLibraryIcon(library: CollectionType | string | null | undefined) { switch (library) { - case 'movies': - return 'video_library'; - case 'music': - return 'library_music'; - case 'photos': - return 'photo_library'; - case 'livetv': + case CollectionType.Movies: + return 'movie'; + case CollectionType.Music: + return 'music_note'; + case CollectionType.Homevideos: + case CollectionType.Photos: + return 'photo'; + case CollectionType.Livetv: return 'live_tv'; - case 'tvshows': + case CollectionType.Tvshows: return 'tv'; - case 'trailers': + case CollectionType.Trailers: return 'local_movies'; - case 'homevideos': - return 'photo_library'; - case 'musicvideos': + case CollectionType.Musicvideos: return 'music_video'; - case 'books': - return 'library_books'; + case CollectionType.Books: + return 'book'; + case CollectionType.Boxsets: + return 'video_library'; + case CollectionType.Playlists: + return 'library_add'; case 'channels': return 'videocam'; - case 'playlists': - return 'view_list'; + case undefined: + return 'quiz'; default: return 'folder'; } } -export function getItemTypeIcon(itemType: BaseItemKind | string) { +export function getItemTypeIcon(itemType: BaseItemKind | string, defaultIcon?: string) { switch (itemType) { case BaseItemKind.MusicAlbum: return 'album'; @@ -125,15 +129,15 @@ export function getItemTypeIcon(itemType: BaseItemKind | string) { case BaseItemKind.Folder: return 'folder'; case BaseItemKind.BoxSet: - return 'collections'; + return 'video_library'; case BaseItemKind.Playlist: - return 'view_list'; + return 'library_add'; case BaseItemKind.Photo: return 'photo'; case BaseItemKind.PhotoAlbum: return 'photo_album'; default: - return 'folder'; + return defaultIcon || 'folder'; } } From cd14a6bcffe11c2a5dccf23f92d6c9633e844f8c Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 17 Sep 2024 17:33:44 -0400 Subject: [PATCH 018/186] Use consistent icon names Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/utils/image.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/image.ts b/src/utils/image.ts index 4eafff56a6..bcd3d667ff 100644 --- a/src/utils/image.ts +++ b/src/utils/image.ts @@ -90,7 +90,7 @@ export function getLibraryIcon(library: CollectionType | string | null | undefin case CollectionType.Tvshows: return 'tv'; case CollectionType.Trailers: - return 'local_movies'; + return 'theaters'; case CollectionType.Musicvideos: return 'music_video'; case CollectionType.Books: @@ -98,7 +98,7 @@ export function getLibraryIcon(library: CollectionType | string | null | undefin case CollectionType.Boxsets: return 'video_library'; case CollectionType.Playlists: - return 'library_add'; + return 'queue'; case 'channels': return 'videocam'; case undefined: @@ -131,7 +131,7 @@ export function getItemTypeIcon(itemType: BaseItemKind | string, defaultIcon?: s case BaseItemKind.BoxSet: return 'video_library'; case BaseItemKind.Playlist: - return 'library_add'; + return 'queue'; case BaseItemKind.Photo: return 'photo'; case BaseItemKind.PhotoAlbum: From 2abc648dcfa8e7b00e155151566259c3ccf2b1a1 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 18 Sep 2024 14:37:25 -0400 Subject: [PATCH 019/186] Fix default icon handling and add tests --- src/components/common/DefaultIconText.tsx | 32 ++----- src/utils/image.test.ts | 106 ++++++++++++++++++++++ src/utils/image.ts | 6 +- 3 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 src/utils/image.test.ts diff --git a/src/components/common/DefaultIconText.tsx b/src/components/common/DefaultIconText.tsx index c6ea81b18e..7624a0fd13 100644 --- a/src/components/common/DefaultIconText.tsx +++ b/src/components/common/DefaultIconText.tsx @@ -1,7 +1,7 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import React, { type FC } from 'react'; import Icon from '@mui/material/Icon'; -import imageHelper from 'utils/image'; +import { getItemTypeIcon, getLibraryIcon } from 'utils/image'; import DefaultName from './DefaultName'; import type { ItemDto } from 'types/base/models/item-dto'; @@ -14,38 +14,24 @@ const DefaultIconText: FC = ({ item, defaultCardImageIcon }) => { - if (item.CollectionType) { - return ( - - ); + let icon; + + if (item.Type === BaseItemKind.CollectionFolder || item.CollectionType) { + icon = getLibraryIcon(item.CollectionType); } - if (item.Type && !(item.Type === BaseItemKind.TvChannel || item.Type === BaseItemKind.Studio )) { - return ( - - ); + if (!icon) { + icon = getItemTypeIcon(item.Type, defaultCardImageIcon); } - if (defaultCardImageIcon) { + if (icon) { return ( ); } diff --git a/src/utils/image.test.ts b/src/utils/image.test.ts new file mode 100644 index 0000000000..d8c54a0008 --- /dev/null +++ b/src/utils/image.test.ts @@ -0,0 +1,106 @@ +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; +import { describe, expect, it } from 'vitest'; + +import { getItemTypeIcon, getLibraryIcon } from './image'; +import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; + +const ITEM_ICON_MAP: Record = { + AggregateFolder: undefined, + Audio: 'audiotrack', + AudioBook: undefined, + BasePluginFolder: undefined, + Book: 'book', + BoxSet: 'video_library', + Channel: undefined, + ChannelFolderItem: undefined, + CollectionFolder: undefined, + Episode: 'tv', + Folder: 'folder', + Genre: undefined, + LiveTvChannel: undefined, + LiveTvProgram: undefined, + ManualPlaylistsFolder: undefined, + Movie: 'movie', + MusicAlbum: 'album', + MusicArtist: 'person', + MusicGenre: undefined, + MusicVideo: undefined, + Person: 'person', + Photo: 'photo', + PhotoAlbum: 'photo_album', + Playlist: 'queue', + PlaylistsFolder: undefined, + Program: 'live_tv', + Recording: undefined, + Season: undefined, + Series: 'tv', + Studio: undefined, + Trailer: undefined, + TvChannel: undefined, + TvProgram: undefined, + UserRootFolder: undefined, + UserView: undefined, + Video: undefined, + Year: undefined +}; + +const LIBRARY_ICON_MAP: Record = { + Books: 'book', + Boxsets: 'video_library', + Folders: 'folder', + Homevideos: 'photo', + Livetv: 'live_tv', + Movies: 'movie', + Music: 'music_note', + Musicvideos: 'music_video', + Photos: 'photo', + Playlists: 'queue', + Trailers: 'theaters', + Tvshows: 'tv', + Unknown: 'folder' +}; + +describe('getItemTypeIcon()', () => { + it('Should return the correct icon for item type', () => { + Object.entries(BaseItemKind).forEach(([key, value]) => { + expect(Object.prototype.hasOwnProperty.call(ITEM_ICON_MAP, key)).toBe(true); + expect(`${key}=${getItemTypeIcon(value)}`).toBe(`${key}=${ITEM_ICON_MAP[key]}`); + }); + }); + + it('Should return undefined for undefined type', () => { + expect(getItemTypeIcon(undefined, 'default')) + .toBeUndefined(); + }); + + it('Should return the default icon for unknown type if provided', () => { + expect(getItemTypeIcon('foobar', 'default')) + .toBe('default'); + }); + + it('Should return undefined for unknown type', () => { + expect(getItemTypeIcon('foobar')) + .toBeUndefined(); + }); +}); + +describe('getLibraryIcon()', () => { + it('Should return the correct icon for collection type', () => { + Object.entries(CollectionType).forEach(([key, value]) => { + expect(Object.prototype.hasOwnProperty.call(LIBRARY_ICON_MAP, key)).toBe(true); + expect(`${key}=${getLibraryIcon(value)}`).toBe(`${key}=${LIBRARY_ICON_MAP[key]}`); + }); + }); + + it('Should return the correct icon for nonstandard types', () => { + expect(getLibraryIcon(undefined)) + .toBe('quiz'); + expect(getLibraryIcon('channels')) + .toBe('videocam'); + }); + + it('Should return the default icon for unknown types', () => { + expect(getLibraryIcon('foobar')) + .toBe('folder'); + }); +}); diff --git a/src/utils/image.ts b/src/utils/image.ts index bcd3d667ff..d170122b74 100644 --- a/src/utils/image.ts +++ b/src/utils/image.ts @@ -108,7 +108,7 @@ export function getLibraryIcon(library: CollectionType | string | null | undefin } } -export function getItemTypeIcon(itemType: BaseItemKind | string, defaultIcon?: string) { +export function getItemTypeIcon(itemType: BaseItemKind | string | undefined, defaultIcon?: string) { switch (itemType) { case BaseItemKind.MusicAlbum: return 'album'; @@ -136,8 +136,10 @@ export function getItemTypeIcon(itemType: BaseItemKind | string, defaultIcon?: s return 'photo'; case BaseItemKind.PhotoAlbum: return 'photo_album'; + case undefined: + return; default: - return defaultIcon || 'folder'; + return defaultIcon; } } From 0964ef0d02698ad340f12f1d921b5085c2c8510d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 21:32:42 +0000 Subject: [PATCH 020/186] Update Fonts to v5.1.0 --- package-lock.json | 84 +++++++++++++++++++++++------------------------ package.json | 12 +++---- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3002d10d2f..f1c51a3c96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,12 +11,12 @@ "dependencies": { "@emotion/react": "11.13.3", "@emotion/styled": "11.13.0", - "@fontsource/noto-sans": "5.0.22", - "@fontsource/noto-sans-hk": "5.0.20", - "@fontsource/noto-sans-jp": "5.0.20", - "@fontsource/noto-sans-kr": "5.0.19", - "@fontsource/noto-sans-sc": "5.0.20", - "@fontsource/noto-sans-tc": "5.0.20", + "@fontsource/noto-sans": "5.1.0", + "@fontsource/noto-sans-hk": "5.1.0", + "@fontsource/noto-sans-jp": "5.1.0", + "@fontsource/noto-sans-kr": "5.1.0", + "@fontsource/noto-sans-sc": "5.1.0", + "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.2", "@jellyfin/sdk": "0.0.0-unstable.202409080303", "@mui/icons-material": "5.16.7", @@ -4905,39 +4905,39 @@ } }, "node_modules/@fontsource/noto-sans": { - "version": "5.0.22", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.0.22.tgz", - "integrity": "sha512-PwjvKPGFbgpwfKjWZj1zeUvd7ExUW2AqHE9PF9ysAJ2gOuzIHWE6mEVIlchYif7WC2pQhn+g0w6xooCObVi+4A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.1.0.tgz", + "integrity": "sha512-P6X+ynPOteCsbUHI7rU4UIpRJcuraJ3OllKqPIjKgxPZS0yPtxFyquADb4SmcgZosRrgqDy34/dcSIhio3Qx4Q==", "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-hk": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.0.20.tgz", - "integrity": "sha512-vGTBoSr0S1nNdZAPcilphP/U3yo72ksy6hqv8GXBdlz1x28jUrHUidHWQraXJPxdKwuDPPAKqOPq4N9D4DansA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.1.0.tgz", + "integrity": "sha512-JOyTbyPqvQ3YH/KccUUyJXOw5Fv2X9M/vXLXMYDMz4r5USQy0qChAzKPaMDNIpdWR/njOyqnrnZbPmtt2SR67A==", "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-jp": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.0.20.tgz", - "integrity": "sha512-lngBJltejJmlT2/cm1gkBJ8yj64JRLZ+tk3QxrdM7paSLYdLccmDiWg+vEtixGfcxd7ZJRpZmdRjhhj8mLiZag==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.1.0.tgz", + "integrity": "sha512-i3qKfXM+qLcMRP1KJ3PfvmtP7Iv4ZqalsPWR4TPY5zQ7vCtj3YGL5lvzuimkdo5clV4/6JwRMyK4YOu3ZUhwHw==", "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-kr": { - "version": "5.0.19", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.0.19.tgz", - "integrity": "sha512-YtEG66Upsu6xU75W9DaLW9aUenCqMwDzTuYnk4iDDOegqSFKGqGMCP3+W86eFbtsi3rRZtSwwl8Yq6NHnNKM/Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.1.0.tgz", + "integrity": "sha512-Q0wGdwQm8GQ5D2OeEqssgWOv16FJwEmoTnwwOPeshvVgxGT83Uxak7jEXNbRqmMCLJNoPOdzYXadwYL+hvfx7A==", "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-sc": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.0.20.tgz", - "integrity": "sha512-//s6RoHtdtlbD3tXjGzLj4HdI9xoFbGWfE64pqdrxp1IWwOQJz93pnpOc4vxurDV9ET9vy6wajKBDrPDnE5qBg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.1.0.tgz", + "integrity": "sha512-6Za/beXpkP0nStbyPRJPGRGwvjHwrlP0gbR/73bJKXWyjzsRQA+LF9990R5oPmgm+NmBDb0grad6Q9E7OEzLtw==", "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-tc": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.0.20.tgz", - "integrity": "sha512-zL5DqcrVJcbBIxTTZbmZmlxkp6rMrRjcHGzRJ53noj72uM51nsyvr8o6tuTP7gs3yLyYe9lRPHRNegq0xIYWlQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.1.0.tgz", + "integrity": "sha512-kYthvpBOg0fCgF7ygIaF/mLaZ7kxptJZWWeDaKWnZBd/7DarO3g+QyNe5ur+Vg7Na7kViuyVgPzeqCg5jzzs0w==", "license": "OFL-1.1" }, "node_modules/@humanwhocodes/config-array": { @@ -29243,34 +29243,34 @@ "dev": true }, "@fontsource/noto-sans": { - "version": "5.0.22", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.0.22.tgz", - "integrity": "sha512-PwjvKPGFbgpwfKjWZj1zeUvd7ExUW2AqHE9PF9ysAJ2gOuzIHWE6mEVIlchYif7WC2pQhn+g0w6xooCObVi+4A==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.1.0.tgz", + "integrity": "sha512-P6X+ynPOteCsbUHI7rU4UIpRJcuraJ3OllKqPIjKgxPZS0yPtxFyquADb4SmcgZosRrgqDy34/dcSIhio3Qx4Q==" }, "@fontsource/noto-sans-hk": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.0.20.tgz", - "integrity": "sha512-vGTBoSr0S1nNdZAPcilphP/U3yo72ksy6hqv8GXBdlz1x28jUrHUidHWQraXJPxdKwuDPPAKqOPq4N9D4DansA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.1.0.tgz", + "integrity": "sha512-JOyTbyPqvQ3YH/KccUUyJXOw5Fv2X9M/vXLXMYDMz4r5USQy0qChAzKPaMDNIpdWR/njOyqnrnZbPmtt2SR67A==" }, "@fontsource/noto-sans-jp": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.0.20.tgz", - "integrity": "sha512-lngBJltejJmlT2/cm1gkBJ8yj64JRLZ+tk3QxrdM7paSLYdLccmDiWg+vEtixGfcxd7ZJRpZmdRjhhj8mLiZag==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.1.0.tgz", + "integrity": "sha512-i3qKfXM+qLcMRP1KJ3PfvmtP7Iv4ZqalsPWR4TPY5zQ7vCtj3YGL5lvzuimkdo5clV4/6JwRMyK4YOu3ZUhwHw==" }, "@fontsource/noto-sans-kr": { - "version": "5.0.19", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.0.19.tgz", - "integrity": "sha512-YtEG66Upsu6xU75W9DaLW9aUenCqMwDzTuYnk4iDDOegqSFKGqGMCP3+W86eFbtsi3rRZtSwwl8Yq6NHnNKM/Q==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.1.0.tgz", + "integrity": "sha512-Q0wGdwQm8GQ5D2OeEqssgWOv16FJwEmoTnwwOPeshvVgxGT83Uxak7jEXNbRqmMCLJNoPOdzYXadwYL+hvfx7A==" }, "@fontsource/noto-sans-sc": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.0.20.tgz", - "integrity": "sha512-//s6RoHtdtlbD3tXjGzLj4HdI9xoFbGWfE64pqdrxp1IWwOQJz93pnpOc4vxurDV9ET9vy6wajKBDrPDnE5qBg==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.1.0.tgz", + "integrity": "sha512-6Za/beXpkP0nStbyPRJPGRGwvjHwrlP0gbR/73bJKXWyjzsRQA+LF9990R5oPmgm+NmBDb0grad6Q9E7OEzLtw==" }, "@fontsource/noto-sans-tc": { - "version": "5.0.20", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.0.20.tgz", - "integrity": "sha512-zL5DqcrVJcbBIxTTZbmZmlxkp6rMrRjcHGzRJ53noj72uM51nsyvr8o6tuTP7gs3yLyYe9lRPHRNegq0xIYWlQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.1.0.tgz", + "integrity": "sha512-kYthvpBOg0fCgF7ygIaF/mLaZ7kxptJZWWeDaKWnZBd/7DarO3g+QyNe5ur+Vg7Na7kViuyVgPzeqCg5jzzs0w==" }, "@humanwhocodes/config-array": { "version": "0.11.14", diff --git a/package.json b/package.json index 1033cf2c1e..ac1ae46e97 100644 --- a/package.json +++ b/package.json @@ -72,12 +72,12 @@ "dependencies": { "@emotion/react": "11.13.3", "@emotion/styled": "11.13.0", - "@fontsource/noto-sans": "5.0.22", - "@fontsource/noto-sans-hk": "5.0.20", - "@fontsource/noto-sans-jp": "5.0.20", - "@fontsource/noto-sans-kr": "5.0.19", - "@fontsource/noto-sans-sc": "5.0.20", - "@fontsource/noto-sans-tc": "5.0.20", + "@fontsource/noto-sans": "5.1.0", + "@fontsource/noto-sans-hk": "5.1.0", + "@fontsource/noto-sans-jp": "5.1.0", + "@fontsource/noto-sans-kr": "5.1.0", + "@fontsource/noto-sans-sc": "5.1.0", + "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.2", "@jellyfin/sdk": "0.0.0-unstable.202409080303", "@mui/icons-material": "5.16.7", From 3bd6d4bbd47d24d2422e449e2488a003316f67ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 00:28:38 +0000 Subject: [PATCH 021/186] Update dependency swiper to v11.1.14 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3002d10d2f..6453e1f8e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.3", - "swiper": "11.1.12", + "swiper": "11.1.14", "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" @@ -24144,9 +24144,9 @@ } }, "node_modules/swiper": { - "version": "11.1.12", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.12.tgz", - "integrity": "sha512-PUkCToYAZMB4kP7z+YfPnkMHOMwMO71g8vUhz2o5INGIgIMb6Sb0XiP6cEJFsiFTd7FRDn5XCbg+KVKPDZqXLw==", + "version": "11.1.14", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.14.tgz", + "integrity": "sha512-VbQLQXC04io6AoAjIUWuZwW4MSYozkcP9KjLdrsG/00Q/yiwvhz9RQyt0nHXV10hi9NVnDNy1/wv7Dzq1lkOCQ==", "funding": [ { "type": "patreon", @@ -42680,9 +42680,9 @@ } }, "swiper": { - "version": "11.1.12", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.12.tgz", - "integrity": "sha512-PUkCToYAZMB4kP7z+YfPnkMHOMwMO71g8vUhz2o5INGIgIMb6Sb0XiP6cEJFsiFTd7FRDn5XCbg+KVKPDZqXLw==" + "version": "11.1.14", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.14.tgz", + "integrity": "sha512-VbQLQXC04io6AoAjIUWuZwW4MSYozkcP9KjLdrsG/00Q/yiwvhz9RQyt0nHXV10hi9NVnDNy1/wv7Dzq1lkOCQ==" }, "symbol-tree": { "version": "3.2.4", diff --git a/package.json b/package.json index 1033cf2c1e..32bf9c97df 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.3", - "swiper": "11.1.12", + "swiper": "11.1.14", "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" From 0aab2e0f3f5d0c67dab2533c41deb0df03ab6433 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 14:05:19 +0000 Subject: [PATCH 022/186] Update dependency @mui/x-date-pickers to v7.17.0 --- package-lock.json | 62 +++++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3002d10d2f..97aea973e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@jellyfin/sdk": "0.0.0-unstable.202409080303", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", - "@mui/x-date-pickers": "7.15.0", + "@mui/x-date-pickers": "7.17.0", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.55.4", "@tanstack/react-query-devtools": "5.55.4", @@ -1965,9 +1965,10 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", - "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -5485,13 +5486,14 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/@mui/x-date-pickers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.15.0.tgz", - "integrity": "sha512-YQEQICNxUEFYp/I/yP58cqihA8yhXaXSNZ1/N0JANu2IlCwoJ4Jzi+S0s4RN7RghpiDyoSMFijROBC5HfpTjiw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.17.0.tgz", + "integrity": "sha512-3mIw1uOZU/yKweZsVAo9QnwVFzLHqXgXG1TbGbDJ4AU6FhN2TCUlR9tzKHSlYdAHZ0bEWDS1/bgeGsQC7skXMA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.4", + "@babel/runtime": "^7.25.6", "@mui/utils": "^5.16.6", + "@mui/x-internals": "7.17.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -5549,6 +5551,26 @@ } } }, + "node_modules/@mui/x-internals": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.17.0.tgz", + "integrity": "sha512-FLlAGSJl/vsuaA/8hPGazXFppyzIzxApJJDZMoTS0geUmHd0hyooISV2ltllLmrZ/DGtHhI08m8GGnHL6/vVeg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^5.16.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -28013,9 +28035,9 @@ "dev": true }, "@babel/runtime": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz", - "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -29591,18 +29613,28 @@ } }, "@mui/x-date-pickers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.15.0.tgz", - "integrity": "sha512-YQEQICNxUEFYp/I/yP58cqihA8yhXaXSNZ1/N0JANu2IlCwoJ4Jzi+S0s4RN7RghpiDyoSMFijROBC5HfpTjiw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.17.0.tgz", + "integrity": "sha512-3mIw1uOZU/yKweZsVAo9QnwVFzLHqXgXG1TbGbDJ4AU6FhN2TCUlR9tzKHSlYdAHZ0bEWDS1/bgeGsQC7skXMA==", "requires": { - "@babel/runtime": "^7.25.4", + "@babel/runtime": "^7.25.6", "@mui/utils": "^5.16.6", + "@mui/x-internals": "7.17.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", "react-transition-group": "^4.4.5" } }, + "@mui/x-internals": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.17.0.tgz", + "integrity": "sha512-FLlAGSJl/vsuaA/8hPGazXFppyzIzxApJJDZMoTS0geUmHd0hyooISV2ltllLmrZ/DGtHhI08m8GGnHL6/vVeg==", + "requires": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^5.16.6" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", diff --git a/package.json b/package.json index 1033cf2c1e..484f9b4798 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@jellyfin/sdk": "0.0.0-unstable.202409080303", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", - "@mui/x-date-pickers": "7.15.0", + "@mui/x-date-pickers": "7.17.0", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.55.4", "@tanstack/react-query-devtools": "5.55.4", From f67b34b1170e4aaf35eb8c7e423acc5bf33ee605 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 17:07:23 +0000 Subject: [PATCH 023/186] Update Vitest to v2.1.1 --- package-lock.json | 595 ++++++++++++++++------------------------------ package.json | 4 +- 2 files changed, 203 insertions(+), 396 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3002d10d2f..89af83e7c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,7 +82,7 @@ "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "2.0.5", + "@vitest/coverage-v8": "2.1.1", "autoprefixer": "10.4.20", "babel-loader": "9.1.3", "clean-webpack-plugin": "4.0.0", @@ -121,7 +121,7 @@ "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", "typescript": "5.5.4", - "vitest": "2.0.5", + "vitest": "2.1.1", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", @@ -5109,9 +5109,10 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", @@ -6943,20 +6944,20 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", - "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", + "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.5", + "debug": "^4.3.6", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.10", + "magic-string": "^0.30.11", "magicast": "^0.3.4", "std-env": "^3.7.0", "test-exclude": "^7.0.1", @@ -6966,18 +6967,24 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "2.0.5" + "@vitest/browser": "2.1.1", + "vitest": "2.1.1" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, "node_modules/@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", + "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -6985,10 +6992,38 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", + "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "^2.1.0-beta.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/spy": "2.1.1", + "msw": "^2.3.5", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", + "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6999,13 +7034,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", - "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", + "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.0.5", + "@vitest/utils": "2.1.1", "pathe": "^1.1.2" }, "funding": { @@ -7013,14 +7048,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", - "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", + "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.5", - "magic-string": "^0.30.10", + "@vitest/pretty-format": "2.1.1", + "magic-string": "^0.30.11", "pathe": "^1.1.2" }, "funding": { @@ -7028,9 +7063,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", + "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", "dev": true, "license": "MIT", "dependencies": { @@ -7041,14 +7076,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", + "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", + "@vitest/pretty-format": "2.1.1", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -9695,12 +9729,12 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -15186,21 +15220,15 @@ } }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/magic-string/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, "node_modules/magicast": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", @@ -15793,9 +15821,10 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/nan": { "version": "2.17.0", @@ -20677,12 +20706,6 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -24449,9 +24472,16 @@ "dev": true }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", + "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", "dev": true, "license": "MIT" }, @@ -24476,9 +24506,9 @@ } }, "node_modules/tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "license": "MIT", "engines": { @@ -25504,16 +25534,15 @@ } }, "node_modules/vite-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", - "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", + "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.5", + "debug": "^4.3.6", "pathe": "^1.1.2", - "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -25555,30 +25584,30 @@ } }, "node_modules/vitest": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", - "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", + "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.5", - "@vitest/pretty-format": "^2.0.5", - "@vitest/runner": "2.0.5", - "@vitest/snapshot": "2.0.5", - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/expect": "2.1.1", + "@vitest/mocker": "2.1.1", + "@vitest/pretty-format": "^2.1.1", + "@vitest/runner": "2.1.1", + "@vitest/snapshot": "2.1.1", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", + "debug": "^4.3.6", + "magic-string": "^0.30.11", "pathe": "^1.1.2", "std-env": "^3.7.0", - "tinybench": "^2.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.5", + "vite-node": "2.1.1", "why-is-node-running": "^2.3.0" }, "bin": { @@ -25593,8 +25622,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.5", - "@vitest/ui": "2.0.5", + "@vitest/browser": "2.1.1", + "@vitest/ui": "2.1.1", "happy-dom": "*", "jsdom": "*" }, @@ -25619,150 +25648,6 @@ } } }, - "node_modules/vitest/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/vitest/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vitest/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/vitest/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vitest/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vitest/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vitest/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vitest/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vitest/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vitest/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -29391,9 +29276,9 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "@jridgewell/trace-mapping": { "version": "0.3.25", @@ -30556,19 +30441,19 @@ "dev": true }, "@vitest/coverage-v8": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", - "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", + "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", "dev": true, "requires": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.5", + "debug": "^4.3.6", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.10", + "magic-string": "^0.30.11", "magicast": "^0.3.4", "std-env": "^3.7.0", "test-exclude": "^7.0.1", @@ -30576,64 +30461,74 @@ } }, "@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", + "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", "dev": true, "requires": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" } }, + "@vitest/mocker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", + "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "dev": true, + "requires": { + "@vitest/spy": "^2.1.0-beta.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + } + }, "@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", + "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", "dev": true, "requires": { "tinyrainbow": "^1.2.0" } }, "@vitest/runner": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", - "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", + "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", "dev": true, "requires": { - "@vitest/utils": "2.0.5", + "@vitest/utils": "2.1.1", "pathe": "^1.1.2" } }, "@vitest/snapshot": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", - "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", + "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", "dev": true, "requires": { - "@vitest/pretty-format": "2.0.5", - "magic-string": "^0.30.10", + "@vitest/pretty-format": "2.1.1", + "magic-string": "^0.30.11", "pathe": "^1.1.2" } }, "@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", + "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", "dev": true, "requires": { "tinyspy": "^3.0.0" } }, "@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", + "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", "dev": true, "requires": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", + "@vitest/pretty-format": "2.1.1", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" } @@ -32522,11 +32417,11 @@ "dev": true }, "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -36572,20 +36467,12 @@ } }, "magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - } + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "magicast": { @@ -37006,9 +36893,9 @@ "dev": true }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "nan": { "version": "2.17.0", @@ -40020,12 +39907,6 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -42889,9 +42770,15 @@ "dev": true }, "tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "tinyexec": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", + "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", "dev": true }, "tinypool": { @@ -42907,9 +42794,9 @@ "dev": true }, "tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true }, "to-fast-properties": { @@ -43643,122 +43530,42 @@ } }, "vite-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", - "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", + "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", "dev": true, "requires": { "cac": "^6.7.14", - "debug": "^4.3.5", + "debug": "^4.3.6", "pathe": "^1.1.2", - "tinyrainbow": "^1.2.0", "vite": "^5.0.0" } }, "vitest": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", - "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", + "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", "dev": true, "requires": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.5", - "@vitest/pretty-format": "^2.0.5", - "@vitest/runner": "2.0.5", - "@vitest/snapshot": "2.0.5", - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/expect": "2.1.1", + "@vitest/mocker": "2.1.1", + "@vitest/pretty-format": "^2.1.1", + "@vitest/runner": "2.1.1", + "@vitest/snapshot": "2.1.1", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", + "debug": "^4.3.6", + "magic-string": "^0.30.11", "pathe": "^1.1.2", "std-env": "^3.7.0", - "tinybench": "^2.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.5", + "vite-node": "2.1.1", "why-is-node-running": "^2.3.0" - }, - "dependencies": { - "execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - } - }, - "get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true - }, - "human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - } } }, "w3c-xmlserializer": { diff --git a/package.json b/package.json index 1033cf2c1e..0d92eab9e5 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "2.0.5", + "@vitest/coverage-v8": "2.1.1", "autoprefixer": "10.4.20", "babel-loader": "9.1.3", "clean-webpack-plugin": "4.0.0", @@ -61,7 +61,7 @@ "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", "typescript": "5.5.4", - "vitest": "2.0.5", + "vitest": "2.1.1", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", From f624fa106543048a7a0998d2343727f9335a320d Mon Sep 17 00:00:00 2001 From: LJQ Date: Sat, 21 Sep 2024 02:00:16 +0800 Subject: [PATCH 024/186] Use full path for imports --- src/components/metadataEditor/metadataEditor.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 1edd4148eb..3253cc6873 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -21,7 +21,8 @@ import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import { appRouter } from '../router/appRouter'; import template from './metadataEditor.template.html'; -import { BaseItemKind, SeriesStatus } from '@jellyfin/sdk/lib/generated-client'; +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; +import { SeriesStatus } from '@jellyfin/sdk/lib/generated-client/models/series-status'; let currentContext; let metadataEditorInfo; From 3afa85c218a516afbbc449555e0efe6b4b16d535 Mon Sep 17 00:00:00 2001 From: theguymadmax Date: Fri, 20 Sep 2024 15:52:29 -0400 Subject: [PATCH 025/186] Show year for movies in collection --- 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 b5cd1848e2..937c6a61ad 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -1735,7 +1735,7 @@ function renderCollectionItemType(page, parentItem, type, items) { items: items, shape: shape, showTitle: true, - showYear: type.mediaType === 'Video' || type.type === 'Series', + showYear: type.mediaType === 'Video' || type.type === 'Series' || type.type === 'Movie', centerText: true, lazy: true, showDetailsMenu: true, From f57bda5e02eb1a26d4d366e9c535198145d25a9f Mon Sep 17 00:00:00 2001 From: Nyanmisaka Date: Sat, 21 Sep 2024 04:01:09 +0800 Subject: [PATCH 026/186] Fix the hidden software tonemap options Signed-off-by: nyanmisaka --- src/controllers/dashboard/encodingsettings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/dashboard/encodingsettings.js b/src/controllers/dashboard/encodingsettings.js index 0e942e45d1..f4d23893e5 100644 --- a/src/controllers/dashboard/encodingsettings.js +++ b/src/controllers/dashboard/encodingsettings.js @@ -205,7 +205,7 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { } const isHwaSelected = [ 'amf', 'nvenc', 'qsv', 'vaapi', 'rkmpp', 'videotoolbox' ].includes(this.value); - if (this.value === '' || isHwaSelected) { + if (this.value === 'none' || isHwaSelected) { page.querySelector('.tonemappingOptions').classList.remove('hide'); } else { page.querySelector('.tonemappingOptions').classList.add('hide'); From 9716578f05bbcd47f363a525e1ae17c68e2a5811 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:28:57 +0300 Subject: [PATCH 027/186] fix merge conflict --- src/apps/dashboard/routes/users/access.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/users/access.tsx b/src/apps/dashboard/routes/users/access.tsx index 766747ff3c..44d3179549 100644 --- a/src/apps/dashboard/routes/users/access.tsx +++ b/src/apps/dashboard/routes/users/access.tsx @@ -17,6 +17,7 @@ type ItemsArr = { Name?: string | null; Id?: string | null; AppName?: string | null; + CustomName?: string | null; checkedAttribute?: string }; @@ -112,6 +113,7 @@ const UserLibraryAccess = () => { Id: device.Id, Name: device.Name, AppName: device.AppName, + CustomName: device.CustomName, checkedAttribute: checkedAttribute }); } @@ -307,7 +309,7 @@ const UserLibraryAccess = () => { key={Item.Id} className='chkDevice' itemId={Item.Id} - itemName={Item.Name} + itemName={Item.CustomName || Item.Name} itemAppName={Item.AppName} itemCheckedAttribute={Item.checkedAttribute} /> From fb0d1f8a8ceb248231ba64cf0a386f8113646e73 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 6 Sep 2024 10:05:41 +0300 Subject: [PATCH 028/186] Fix double click to de-select --- src/components/multiSelect/multiSelect.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index ce3d88f934..5431ba259f 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -35,7 +35,6 @@ function onItemSelectionPanelClick(e, itemSelectionPanel) { // toggle the checkbox, if it wasn't clicked on if (!dom.parentWithClass(e.target, 'chkItemSelect')) { const chkItemSelect = itemSelectionPanel.querySelector('.chkItemSelect'); - if (chkItemSelect) { if (chkItemSelect.classList.contains('checkedInitial')) { chkItemSelect.classList.remove('checkedInitial'); @@ -87,7 +86,7 @@ function onSelectionChange() { updateItemSelection(this, this.checked); } -function showSelection(item, isChecked) { +function showSelection(item, isChecked, addInitialCheck) { let itemSelectionPanel = item.querySelector('.itemSelectionPanel'); if (!itemSelectionPanel) { @@ -99,7 +98,7 @@ function showSelection(item, isChecked) { parent.appendChild(itemSelectionPanel); let cssClass = 'chkItemSelect'; - if (isChecked) { + if (isChecked && addInitialCheck) { cssClass += ' checkedInitial'; } const checkedAttribute = isChecked ? ' checked' : ''; @@ -361,11 +360,11 @@ function combineVersions(apiClient, selection) { }); } -function showSelections(initialCard) { +function showSelections(initialCard, addInitialCheck) { import('../../elements/emby-checkbox/emby-checkbox').then(() => { const cards = document.querySelectorAll('.card'); for (let i = 0, length = cards.length; i < length; i++) { - showSelection(cards[i], initialCard === cards[i]); + showSelection(cards[i], initialCard === cards[i], addInitialCheck); } showSelectionCommands(); @@ -402,7 +401,7 @@ export default function (options) { const card = dom.parentWithClass(e.target, 'card'); if (card) { - showSelections(card); + showSelections(card, true); } e.preventDefault(); @@ -500,7 +499,7 @@ export default function (options) { touchTarget = null; if (card) { - showSelections(card); + showSelections(card, true); } } @@ -569,7 +568,7 @@ export default function (options) { } export const startMultiSelect = (card) => { - showSelections(card); + showSelections(card, false); }; export const stopMultiSelect = () => { From b5a252e1043737970a9d45475d70bbecfa947a1f Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 6 Sep 2024 10:06:49 +0300 Subject: [PATCH 029/186] missing newline --- src/components/multiSelect/multiSelect.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index 5431ba259f..fd6768489b 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -35,6 +35,7 @@ function onItemSelectionPanelClick(e, itemSelectionPanel) { // toggle the checkbox, if it wasn't clicked on if (!dom.parentWithClass(e.target, 'chkItemSelect')) { const chkItemSelect = itemSelectionPanel.querySelector('.chkItemSelect'); + if (chkItemSelect) { if (chkItemSelect.classList.contains('checkedInitial')) { chkItemSelect.classList.remove('checkedInitial'); From fb5a7f359cae5f4735d1bf235be838e9a4e1f814 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 20 Sep 2024 20:01:51 +0000 Subject: [PATCH 030/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 37eb784bbb..9008081c37 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1951,5 +1951,6 @@ "LabelAllowStreamSharing": "Streamdelen toestaan", "LabelFallbackMaxStreamingBitrate": "Maximale terugvalbitsnelheid voor streamen (Mbps)", "LabelLyricDownloaders": "Ophalers voor liedteksten", - "LyricDownloadersHelp": "Rangschik je voorkeursophalers voor liedteksten op volgorde van prioritieit." + "LyricDownloadersHelp": "Rangschik je voorkeursophalers voor liedteksten op volgorde van prioritieit.", + "RenderPgsSubtitle": "PGS-ondertiteling weergeven (experimenteel)" } From aa4004a1befb7ebc71e1a21e725446e6b2149e95 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 20 Sep 2024 03:12:51 +0300 Subject: [PATCH 031/186] Allow Dolby Vision fallback layer on Tizen 3+ --- src/scripts/browserDeviceProfile.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 23e27fbd5d..7e2beba125 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -1107,16 +1107,28 @@ export default function (options) { let vp9VideoRangeTypes = 'SDR'; let av1VideoRangeTypes = 'SDR'; + if (browser.tizenVersion >= 3) { + hevcVideoRangeTypes += '|DOVIWithSDR'; + } + if (supportsHdr10(options)) { hevcVideoRangeTypes += '|HDR10'; vp9VideoRangeTypes += '|HDR10'; av1VideoRangeTypes += '|HDR10'; + + if (browser.tizenVersion >= 3) { + hevcVideoRangeTypes += '|DOVIWithHDR10'; + } } if (supportsHlg(options)) { hevcVideoRangeTypes += '|HLG'; vp9VideoRangeTypes += '|HLG'; av1VideoRangeTypes += '|HLG'; + + if (browser.tizenVersion >= 3) { + hevcVideoRangeTypes += '|DOVIWithHLG'; + } } if (supportsDolbyVision(options)) { From 791581bfc23d3cc25eae59cc36e7ff38017fef63 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 20 Sep 2024 21:06:13 +0000 Subject: [PATCH 032/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 9008081c37..99036a497f 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1205,7 +1205,7 @@ "LabelWeb": "Web", "LeaveBlankToNotSetAPassword": "Je kunt dit veld leeg laten om geen wachtwoord in te stellen.", "DashboardServerName": "Server: {0}", - "LabelVideoBitrate": "Beeldbitsnelheid", + "LabelVideoBitrate": "Bitsnelheid beeld", "LabelVideoCodec": "Beeldcodec", "LabelXDlnaCap": "Device Capability-id", "DashboardVersionNumber": "Versie: {0}", @@ -1442,7 +1442,7 @@ "PreferFmp4HlsContainerHelp": "Gebruik fMP4 als de standaardcontainer voor HLS, waardoor direct streamen van HEVC- en AV1-inhoud op ondersteunde apparaten mogelijk wordt.", "PreferFmp4HlsContainer": "fMP4-HLS-mediacontainer verkiezen", "LabelSyncPlayInfo": "SyncPlay-informatie", - "LabelOriginalMediaInfo": "Informatie oorspronkelijke media", + "LabelOriginalMediaInfo": "Oorspronkelijke media-informatie", "LabelRemuxingInfo": "Remux-informatie", "LabelDirectStreamingInfo": "Informatie direct streamen", "LabelTranscodingInfo": "Transcoderingsinformatie", @@ -1952,5 +1952,6 @@ "LabelFallbackMaxStreamingBitrate": "Maximale terugvalbitsnelheid voor streamen (Mbps)", "LabelLyricDownloaders": "Ophalers voor liedteksten", "LyricDownloadersHelp": "Rangschik je voorkeursophalers voor liedteksten op volgorde van prioritieit.", - "RenderPgsSubtitle": "PGS-ondertiteling weergeven (experimenteel)" + "RenderPgsSubtitle": "PGS-ondertiteling weergeven (experimenteel)", + "RenderPgsSubtitleHelp": "Bepaal of de cliënt PGS-ondertiteling zelf moet weergeven in plaats van ingebrande ondertiteling te gebruiken. Dit voorkomt transcoderen aan de serverkant maar kan de weergaveprestaties aan de cliëntkant beïnvloeden." } From 9924f6c82c1f7495d4823406d9ebea4085e342e8 Mon Sep 17 00:00:00 2001 From: Kityn Date: Sat, 21 Sep 2024 05:04:51 +0000 Subject: [PATCH 033/186] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index c715a1ab93..6842466b91 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1950,5 +1950,9 @@ "LabelAllowFmp4TranscodingContainer": "Zezwalaj na kontener transkodowania fMP4", "LabelAllowStreamSharing": "Zezwalaj na udostępnianie strumieniowe", "LabelFallbackMaxStreamingBitrate": "Zastępcze maksimum przepływności strumienia (Mbps)", - "VideoCodecTagNotSupported": "Tag kodeka wideo nie jest obsługiwany" + "VideoCodecTagNotSupported": "Tag kodeka wideo nie jest obsługiwany", + "LabelLyricDownloaders": "Dostawcy słów", + "LyricDownloadersHelp": "Umożliwia aktywowanie i używanie dostawców napisów w preferowanej kolejności.", + "RenderPgsSubtitle": "Eksperymentalne renderowanie napisów PGS", + "RenderPgsSubtitleHelp": "Określ, czy klient powinien renderować napisy PGS zamiast używać wypalonych napisów. Dzięki temu można uniknąć transkodowania po stronie serwera w zamian za wydajność renderowania po stronie klienta." } From 663e48a7a9a1dc5d012578442cdd0297db186eeb Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Sat, 21 Sep 2024 14:07:13 +0800 Subject: [PATCH 034/186] Fix more default values Signed-off-by: nyanmisaka --- src/controllers/dashboard/encodingsettings.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/controllers/dashboard/encodingsettings.js b/src/controllers/dashboard/encodingsettings.js index f4d23893e5..03f5455b65 100644 --- a/src/controllers/dashboard/encodingsettings.js +++ b/src/controllers/dashboard/encodingsettings.js @@ -20,7 +20,7 @@ function loadPage(page, config, systemInfo) { page.querySelector('#chkHardwareEncoding').checked = config.EnableHardwareEncoding; page.querySelector('#chkAllowHevcEncoding').checked = config.AllowHevcEncoding; page.querySelector('#chkAllowAv1Encoding').checked = config.AllowAv1Encoding; - $('#selectVideoDecoder', page).val(config.HardwareAccelerationType); + $('#selectVideoDecoder', page).val(config.HardwareAccelerationType || 'none'); $('#selectThreadCount', page).val(config.EncodingThreadCount); page.querySelector('#chkEnableAudioVbr').checked = config.EnableAudioVbr; $('#txtDownMixAudioBoost', page).val(config.DownMixAudioBoost); @@ -34,18 +34,18 @@ function loadPage(page, config, systemInfo) { page.querySelector('#chkTonemapping').checked = config.EnableTonemapping; page.querySelector('#chkVppTonemapping').checked = config.EnableVppTonemapping; page.querySelector('#chkVideoToolboxTonemapping').checked = config.EnableVideoToolboxTonemapping; - page.querySelector('#selectTonemappingAlgorithm').value = config.TonemappingAlgorithm; - page.querySelector('#selectTonemappingMode').value = config.TonemappingMode; - page.querySelector('#selectTonemappingRange').value = config.TonemappingRange; + page.querySelector('#selectTonemappingAlgorithm').value = config.TonemappingAlgorithm || 'none'; + page.querySelector('#selectTonemappingMode').value = config.TonemappingMode || 'auto'; + page.querySelector('#selectTonemappingRange').value = config.TonemappingRange || 'auto'; page.querySelector('#txtTonemappingDesat').value = config.TonemappingDesat; page.querySelector('#txtTonemappingPeak').value = config.TonemappingPeak; page.querySelector('#txtTonemappingParam').value = config.TonemappingParam || ''; page.querySelector('#txtVppTonemappingBrightness').value = config.VppTonemappingBrightness; page.querySelector('#txtVppTonemappingContrast').value = config.VppTonemappingContrast; - page.querySelector('#selectEncoderPreset').value = config.EncoderPreset || ''; + page.querySelector('#selectEncoderPreset').value = config.EncoderPreset || 'auto'; page.querySelector('#txtH264Crf').value = config.H264Crf || ''; page.querySelector('#txtH265Crf').value = config.H265Crf || ''; - page.querySelector('#selectDeinterlaceMethod').value = config.DeinterlaceMethod || ''; + page.querySelector('#selectDeinterlaceMethod').value = config.DeinterlaceMethod || 'yadif'; page.querySelector('#chkDoubleRateDeinterlacing').checked = config.DeinterlaceDoubleRate; page.querySelector('#chkEnableSubtitleExtraction').checked = config.EnableSubtitleExtraction || false; page.querySelector('#chkEnableThrottling').checked = config.EnableThrottling || false; @@ -139,7 +139,7 @@ function onSubmit() { }); }; - if ($('#selectVideoDecoder', form).val()) { + if ($('#selectVideoDecoder', form).val() !== 'none') { alert({ title: globalize.translate('TitleHardwareAcceleration'), text: globalize.translate('HardwareAccelerationWarning') @@ -245,7 +245,7 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { page.querySelector('.fldEnhancedNvdec').classList.add('hide'); } - if (this.value) { + if (this.value !== 'none') { page.querySelector('.hardwareAccelerationOptions').classList.remove('hide'); } else { page.querySelector('.hardwareAccelerationOptions').classList.add('hide'); From 46c6fd4b85ee7ec92edc8d9582d6c862d106955b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sat, 21 Sep 2024 02:14:07 -0400 Subject: [PATCH 035/186] Always use default item icon --- src/utils/image.test.ts | 5 ----- src/utils/image.ts | 2 -- 2 files changed, 7 deletions(-) diff --git a/src/utils/image.test.ts b/src/utils/image.test.ts index d8c54a0008..8fc5bb36bb 100644 --- a/src/utils/image.test.ts +++ b/src/utils/image.test.ts @@ -68,11 +68,6 @@ describe('getItemTypeIcon()', () => { }); }); - it('Should return undefined for undefined type', () => { - expect(getItemTypeIcon(undefined, 'default')) - .toBeUndefined(); - }); - it('Should return the default icon for unknown type if provided', () => { expect(getItemTypeIcon('foobar', 'default')) .toBe('default'); diff --git a/src/utils/image.ts b/src/utils/image.ts index d170122b74..23ef8081b8 100644 --- a/src/utils/image.ts +++ b/src/utils/image.ts @@ -136,8 +136,6 @@ export function getItemTypeIcon(itemType: BaseItemKind | string | undefined, def return 'photo'; case BaseItemKind.PhotoAlbum: return 'photo_album'; - case undefined: - return; default: return defaultIcon; } From 0b30df2a2662ad9291a33809212ea63c0a712402 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Sep 2024 06:29:34 +0000 Subject: [PATCH 036/186] Update tanstack-query monorepo to v5.56.2 --- package-lock.json | 62 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0aa023a6cd..a168c30246 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,8 +23,8 @@ "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.15.0", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.55.4", - "@tanstack/react-query-devtools": "5.55.4", + "@tanstack/react-query": "5.56.2", + "@tanstack/react-query-devtools": "5.56.2", "@types/react-lazy-load-image-component": "1.6.4", "abortcontroller-polyfill": "1.7.5", "blurhash": "2.0.5", @@ -6134,9 +6134,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.55.4", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.55.4.tgz", - "integrity": "sha512-uoRqNnRfzOH4OMIoxj8E2+Us89UIGXfau981qYJWsNMkFS1GXR4UIyzUTVGq4N7SDLHgFPpo6IOazqUV5gkMZA==", + "version": "5.56.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.56.2.tgz", + "integrity": "sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==", "license": "MIT", "funding": { "type": "github", @@ -6144,9 +6144,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.55.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.55.1.tgz", - "integrity": "sha512-2g0TWQGlkyHs9maHIU5A7lRunG4Rj3Y5lOEenE+fydE4zk7GqRs7rKJBp7F74iqRo/cA9V6t1YYQWqd6YRBmcQ==", + "version": "5.56.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.56.1.tgz", + "integrity": "sha512-xnp9jq/9dHfSCDmmf+A5DjbIjYqbnnUL2ToqlaaviUQGRTapXQ8J+GxusYUu1IG0vZMaWdiVUA4HRGGZYAUU+A==", "license": "MIT", "funding": { "type": "github", @@ -6154,12 +6154,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.55.4", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.55.4.tgz", - "integrity": "sha512-e3uX5XkLD9oTV66/VsVpkYz3Ds/ps/Yk+V5d89xthAbtNIKKBEm4FdNb9yISFzGEGezUzVO68qmfmiSrtScvsg==", + "version": "5.56.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.56.2.tgz", + "integrity": "sha512-SR0GzHVo6yzhN72pnRhkEFRAHMsUo5ZPzAxfTMvUxFIDVS6W9LYUp6nXW3fcHVdg0ZJl8opSH85jqahvm6DSVg==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.55.4" + "@tanstack/query-core": "5.56.2" }, "funding": { "type": "github", @@ -6170,19 +6170,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.55.4", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.55.4.tgz", - "integrity": "sha512-4uXcG95JV6TrlefF6n0NDckgY9QVwNPKVcn81a+MmJyKkZ704otBjtuSgXNznx5zNFnGrWlgH1luoD+bZPASuQ==", + "version": "5.56.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.56.2.tgz", + "integrity": "sha512-7nINJtRZZVwhTTyDdMIcSaXo+EHMLYJu1S2e6FskvvD5prx87LlAXXWZDfU24Qm4HjshEtM5lS3HIOszNGblcw==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.55.1" + "@tanstack/query-devtools": "5.56.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.55.4", + "@tanstack/react-query": "^5.56.2", "react": "^18 || ^19" } }, @@ -29949,29 +29949,29 @@ } }, "@tanstack/query-core": { - "version": "5.55.4", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.55.4.tgz", - "integrity": "sha512-uoRqNnRfzOH4OMIoxj8E2+Us89UIGXfau981qYJWsNMkFS1GXR4UIyzUTVGq4N7SDLHgFPpo6IOazqUV5gkMZA==" + "version": "5.56.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.56.2.tgz", + "integrity": "sha512-gor0RI3/R5rVV3gXfddh1MM+hgl0Z4G7tj6Xxpq6p2I03NGPaJ8dITY9Gz05zYYb/EJq9vPas/T4wn9EaDPd4Q==" }, "@tanstack/query-devtools": { - "version": "5.55.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.55.1.tgz", - "integrity": "sha512-2g0TWQGlkyHs9maHIU5A7lRunG4Rj3Y5lOEenE+fydE4zk7GqRs7rKJBp7F74iqRo/cA9V6t1YYQWqd6YRBmcQ==" + "version": "5.56.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.56.1.tgz", + "integrity": "sha512-xnp9jq/9dHfSCDmmf+A5DjbIjYqbnnUL2ToqlaaviUQGRTapXQ8J+GxusYUu1IG0vZMaWdiVUA4HRGGZYAUU+A==" }, "@tanstack/react-query": { - "version": "5.55.4", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.55.4.tgz", - "integrity": "sha512-e3uX5XkLD9oTV66/VsVpkYz3Ds/ps/Yk+V5d89xthAbtNIKKBEm4FdNb9yISFzGEGezUzVO68qmfmiSrtScvsg==", + "version": "5.56.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.56.2.tgz", + "integrity": "sha512-SR0GzHVo6yzhN72pnRhkEFRAHMsUo5ZPzAxfTMvUxFIDVS6W9LYUp6nXW3fcHVdg0ZJl8opSH85jqahvm6DSVg==", "requires": { - "@tanstack/query-core": "5.55.4" + "@tanstack/query-core": "5.56.2" } }, "@tanstack/react-query-devtools": { - "version": "5.55.4", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.55.4.tgz", - "integrity": "sha512-4uXcG95JV6TrlefF6n0NDckgY9QVwNPKVcn81a+MmJyKkZ704otBjtuSgXNznx5zNFnGrWlgH1luoD+bZPASuQ==", + "version": "5.56.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.56.2.tgz", + "integrity": "sha512-7nINJtRZZVwhTTyDdMIcSaXo+EHMLYJu1S2e6FskvvD5prx87LlAXXWZDfU24Qm4HjshEtM5lS3HIOszNGblcw==", "requires": { - "@tanstack/query-devtools": "5.55.1" + "@tanstack/query-devtools": "5.56.1" } }, "@tanstack/react-table": { diff --git a/package.json b/package.json index aa5d8ecf3e..408d8dfb26 100644 --- a/package.json +++ b/package.json @@ -84,8 +84,8 @@ "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.15.0", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.55.4", - "@tanstack/react-query-devtools": "5.55.4", + "@tanstack/react-query": "5.56.2", + "@tanstack/react-query-devtools": "5.56.2", "@types/react-lazy-load-image-component": "1.6.4", "abortcontroller-polyfill": "1.7.5", "blurhash": "2.0.5", From ccf11ac6ead5d2cd16fd6980258840c861e5af0a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Sep 2024 06:35:18 +0000 Subject: [PATCH 037/186] Update dependency typescript to v5.6.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 18d034923d..4fdf1273e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -121,7 +121,7 @@ "stylelint-order": "6.0.4", "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", - "typescript": "5.5.4", + "typescript": "5.6.2", "vitest": "2.1.1", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", @@ -25008,9 +25008,9 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -43165,9 +43165,9 @@ } }, "typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true }, "uc.micro": { diff --git a/package.json b/package.json index ee27ff0019..47e670ed38 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "stylelint-order": "6.0.4", "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", - "typescript": "5.5.4", + "typescript": "5.6.2", "vitest": "2.1.1", "webpack": "5.94.0", "webpack-bundle-analyzer": "4.10.2", From 32f835c8658c0a12b987ee2f0c76180a1cd6e59c Mon Sep 17 00:00:00 2001 From: David Stensland Date: Sat, 24 Feb 2024 11:32:08 -0800 Subject: [PATCH 038/186] fix LinkButton to prevent default --- src/elements/emby-button/LinkButton.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/elements/emby-button/LinkButton.tsx b/src/elements/emby-button/LinkButton.tsx index 2bce76927c..77bf39a3f0 100644 --- a/src/elements/emby-button/LinkButton.tsx +++ b/src/elements/emby-button/LinkButton.tsx @@ -20,6 +20,7 @@ const LinkButton: React.FC = ({ isAutoHideEnabled, href, target, + onClick, children, ...rest }) => { @@ -41,7 +42,8 @@ const LinkButton: React.FC = ({ } else { e.preventDefault(); } - }, [ href, target ]); + onClick?.(e); + }, [ href, target, onClick ]); if (isAutoHideEnabled === true && !appHost.supports('externallinks')) { return null; From 0d90ac39f1779c1aa03e433857ed4a9402169d57 Mon Sep 17 00:00:00 2001 From: David Stensland Date: Sat, 24 Feb 2024 11:45:48 -0800 Subject: [PATCH 039/186] use LinkButton in dashboard/users/SectionTabs --- .../dashboard/users/SectionTabs.tsx | 77 +++++++++++-------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/src/components/dashboard/users/SectionTabs.tsx b/src/components/dashboard/users/SectionTabs.tsx index 26076390ae..905e477b98 100644 --- a/src/components/dashboard/users/SectionTabs.tsx +++ b/src/components/dashboard/users/SectionTabs.tsx @@ -1,49 +1,60 @@ import React, { FunctionComponent } from 'react'; + import globalize from 'lib/globalize'; +import { navigate } from '../../../utils/dashboard'; +import LinkButton from '../../../elements/emby-button/LinkButton'; type IProps = { activeTab: string; }; -const createLinkElement = (activeTab: string) => ({ - __html: ` - ${globalize.translate('Profile')} - - - ${globalize.translate('TabAccess')} - - - ${globalize.translate('TabParentalControl')} - - - ${globalize.translate('HeaderPassword')} - ` -}); +function useNavigate(url: string): () => void { + return React.useCallback(() => { + navigate(url, true).catch(err => { + console.warn('Error navigating to dashboard url', err); + }); + }, [url]); +} const SectionTabs: FunctionComponent = ({ activeTab }: IProps) => { + const onClickProfile = useNavigate('/dashboard/users/profile'); + const onClickAccess = useNavigate('/dashboard/users/access'); + const onClickParentalControl = useNavigate('/dashboard/users/parentalcontrol'); + const clickPassword = useNavigate('/dashboard/users/password'); return (
+ className='localnav'> + + {globalize.translate('Profile')} + + + {globalize.translate('TabAccess')} + + + {globalize.translate('TabParentalControl')} + + + {globalize.translate('HeaderPassword')} + +
); }; From e2737f5b15ee15649642dd09f2407414ac8e4f73 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sat, 21 Sep 2024 06:38:41 +0000 Subject: [PATCH 040/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 99036a497f..01aa77f9c5 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1859,7 +1859,7 @@ "EnableLibrary": "Bibliotheek inschakelen", "EnableLibraryHelp": "Het uitschakelen van een bibliotheek verbergt deze voor alle gebruikers.", "LabelTrickplayAccelEncoding": "Hardwareversnelde MJPEG-codering inschakelen", - "LabelTrickplayAccelEncodingHelp": "Momenteel enkel beschikbaar op QSV, VAAPI en VideoToolbox; deze optie heeft geen effect bij andere methoden voor hardwareversnelling.", + "LabelTrickplayAccelEncodingHelp": "Momenteel enkel beschikbaar op QSV, VA-API, VideoToolbox en RKMPP; deze optie heeft geen effect bij andere methoden voor hardwareversnelling.", "ViewLyrics": "Liedtekst weergeven", "ErrorDeletingLyrics": "Er is een fout opgetreden bij het verwijderen van de liedtekst van de server. Controleer of Jellyfin schrijfrechten heeft in de mediamap en probeer het opnieuw.", "HeaderDeleteLyrics": "Liedtekst verwijderen", From 8d11c09846239683d2634f1b21f0deaaaccb6bb9 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sat, 21 Sep 2024 07:01:45 +0000 Subject: [PATCH 041/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index c40c078a69..e93458097c 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1862,7 +1862,7 @@ "ErrorDeletingLyrics": "从服务器中删除歌词时出现了错误。请检查Jellyfin是否具有对应媒体文件夹的写入权限,然后重试。", "Lyrics": "歌词", "LabelTrickplayAccelEncoding": "启用硬件加速的 MJPEG 编码", - "LabelTrickplayAccelEncodingHelp": "目前仅适用于 QSV,VA-API 和 VideoToolbox,此选项对其他硬件加速方法不起作用。", + "LabelTrickplayAccelEncodingHelp": "目前仅适用于 QSV,VA-API,VideoToolbox 和 RKMPP,此选项对其他硬件加速方法不起作用。", "ConfirmDeleteLyrics": "删除这些歌词将同时从文件系统和媒体库中删除它们。您确定要继续吗?", "DeleteLyrics": "删除歌词", "HeaderDeleteLyrics": "删除歌词", @@ -1950,5 +1950,9 @@ "LabelAllowFmp4TranscodingContainer": "允许 fMP4 转码容器", "LabelAllowStreamSharing": "允许流共享", "LabelFallbackMaxStreamingBitrate": "回退最大流比特率 (Mbps)", - "VideoCodecTagNotSupported": "不支持视频编解码器标签" + "VideoCodecTagNotSupported": "不支持视频编解码器标签", + "LabelLyricDownloaders": "歌词下载", + "LyricDownloadersHelp": "启用并按优先级顺序排列您喜欢的下载器。", + "RenderPgsSubtitle": "实验性 PGS 字幕渲染", + "RenderPgsSubtitleHelp": "在客户端渲染 PGS 字幕,而不是烧录字幕。这以降低客户端渲染性能为代价来避免服务器端转码。" } From 2ca2b921c192d50f184688ba9e35bfac17019636 Mon Sep 17 00:00:00 2001 From: Ignacio Diaz Date: Sat, 21 Sep 2024 10:48:42 +0000 Subject: [PATCH 042/186] 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, 8 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 6d29a4b216..8c0c6a221f 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1935,5 +1935,12 @@ "AlwaysRemuxMp3AudioFilesHelp": "Si tienes archivos en los que tu navegador calcula incorrectamente las marcas de tiempo, habilita esta opción como solución temporal.", "AllowFmp4TranscodingContainerHelp": "Permitir el contenedor de transcodificación fMP4 para este sintonizador para habilitar contenidos HEVC y HDR. No todos los sintonizadores son compatibles con este contenedor. Deshabilítelo si experimenta problemas de reproducción.", "AllowStreamSharingHelp": "Permitir que Jellyfin duplique la transmisión mpegts del sintonizador y comparta esta transmisión duplicada con sus clientes. Esto es útil cuando el sintonizador tiene un límite en la cantidad total de transmisiones, pero también puede causar problemas de reproducción.", - "AlwaysRemuxFlacAudioFilesHelp": "Si tienes archivos que tu navegador rechaza reproducir o en los que calcula incorrectamente las marcas de tiempo, habilita esta opción como solución temporal." + "AlwaysRemuxFlacAudioFilesHelp": "Si tienes archivos que tu navegador rechaza reproducir o en los que calcula incorrectamente las marcas de tiempo, habilita esta opción como solución temporal.", + "LabelDisableVbrAudioEncoding": "Deshabilitar la codificación de audio VBR", + "LabelAllowStreamSharing": "Permitir compartir transmisión", + "LabelLyricDownloaders": "Descargar letras", + "LyricDownloadersHelp": "Habilite y clasifique sus descargadores de subtítulos preferidos en orden de prioridad.", + "DisableVbrAudioEncodingHelp": "Evitar que el servidor codifique audio con VBR para este cliente.", + "EnableHi10p": "Habilitar perfil H.264 High 10", + "EnableHi10pHelp": "Habilite esta opción para evitar la transcodificación de videos H.264 de 10 bits. Desactive esta opción si el video muestra fotogramas en blanco." } From 15d0530266c6f50d14fa6f9164a120527eddc79d Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 11:57:06 +0000 Subject: [PATCH 043/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index ea3c5a4fce..76b15acfc3 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -627,7 +627,7 @@ "AllowMediaConversionHelp": "Luba või keela meedia teisendamine.", "AllowMediaConversion": "Luba meedia teisendamine", "AllowHWTranscodingHelp": "Luba tuuneril voogesituse ajal transkoodida. See võib aidata vähendada serveri nõutavat transkoodimist.", - "AllowFfmpegThrottlingHelp": "Kui transkoodimine jõuab taasesituskohast ette, peata protsess ressursside säästmiseks. See on kasulik, kui enamasti vaatad filme otsimata. Lülita see välja, kui taasesitusega tekib probleeme.", + "AllowFfmpegThrottlingHelp": "Kui transkodeerimine jõuab taasesituskohast ette, peata protsess ressursside säästmiseks. See on kasulik, kui enamasti vaatad filme otsimata. Kui taasesitusega tekib probleeme siis lülita see välja.", "AllowFfmpegThrottling": "Piira transkoodimist", "AllowedRemoteAddressesHelp": "Komaga eraldatud IP-aadresside loend või IP/võrgumaski kirjed võrkudele, millel on lubatud kaugühendus luua. Kui see tühjaks jäetakse, on kõik kaugaadressid lubatud.", "AgeValue": "({0} aastat vana)", @@ -1695,10 +1695,13 @@ "Editor": "Toimetaja", "EnableTrueHd": "Luba TrueHD", "EnableTrueHdHelp": "Luba TrueHD ainult siis, kui sinu seade või sellega ühendatud audioresiiver seda toetab. Vastasel juhul võib esitlus ebaõnnestuda.", - "AllowContentWithTagsHelp": "Näita ainult meediat, millel on vähemalt üks sisestatud silt", + "AllowContentWithTagsHelp": "Näita ainult meediat, millel on vähemalt üks sisestatud silt.", "ChannelResolutionSD": "SD", "ChannelResolutionSDPAL": "SD (PAL)", "ChannelResolutionHD": "HD", "ChannelResolutionFullHD": "Full HD", - "EnableSmoothScroll": "Luba sujuv kerimine" + "EnableSmoothScroll": "Luba sujuv kerimine", + "AllowFmp4TranscodingContainerHelp": "Luba sellel tuuneril fMP4 transkodeerimise konteiner, et lubada HEVC ja HDR sisu. Kõik tuunerid ei ühildu selle konteineriga kui taasesitusega tekib probleeme siis lülita see välja.", + "AllowStreamSharingHelp": "Luba Jellyfin'il duplikeerida mpegts striim ja jagada seda striimi klientidele. See on kasulik kui tuuneril on piirang striimide hulgale kuid see võib põhjustada probleeme taasesitamisega.", + "AllowTonemappingSoftwareHelp": "Toonikaardistus suudab teisendada dünaamilise HDR sisu SDR'iks säilitades pildi detailid ja värvid mis on oluline et säiliks originaalstseen. Hetkel toimib vaid 10bit HDR10, HLG ja DoVi videotega." } From 823b8d3e346d27efe188e4a4d7072a8458be3026 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 12:19:15 +0000 Subject: [PATCH 044/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 76b15acfc3..3a5a7af286 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1703,5 +1703,8 @@ "EnableSmoothScroll": "Luba sujuv kerimine", "AllowFmp4TranscodingContainerHelp": "Luba sellel tuuneril fMP4 transkodeerimise konteiner, et lubada HEVC ja HDR sisu. Kõik tuunerid ei ühildu selle konteineriga kui taasesitusega tekib probleeme siis lülita see välja.", "AllowStreamSharingHelp": "Luba Jellyfin'il duplikeerida mpegts striim ja jagada seda striimi klientidele. See on kasulik kui tuuneril on piirang striimide hulgale kuid see võib põhjustada probleeme taasesitamisega.", - "AllowTonemappingSoftwareHelp": "Toonikaardistus suudab teisendada dünaamilise HDR sisu SDR'iks säilitades pildi detailid ja värvid mis on oluline et säiliks originaalstseen. Hetkel toimib vaid 10bit HDR10, HLG ja DoVi videotega." + "AllowTonemappingSoftwareHelp": "Toonikaardistus suudab teisendada dünaamilise HDR sisu SDR'iks säilitades pildi detailid ja värvid mis on oluline et säiliks originaalstseen. Hetkel toimib vaid 10bit HDR10, HLG ja DoVi videotega.", + "AlwaysRemuxFlacAudioFilesHelp": "Kui sul on faile mida su brauser et mängi või kus ajatemplid arvutatakse valesti siis lubage see lahenduseks.", + "AlwaysRemuxMp3AudioFilesHelp": "Kui sul on faile kus brauser arvutab ajatemplid valesti siis lubage see lahenduseks.", + "AndOtherArtists": "{0} ja{1} teist artisti." } From 3872f6b2a7616800c6f59ad45c65766d9a7f1b63 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 12:49:41 +0000 Subject: [PATCH 045/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index 3a5a7af286..9b87c88ac6 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -539,7 +539,7 @@ "Categories": "Kategooriad", "CancelSeries": "Tühista sari", "CancelRecording": "Tühista salvestamine", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaveri lõimingu filter(BWDIF)", "ButtonWebsite": "Veebisait", "ButtonUseQuickConnect": "Kasuta kiirühendamist", "ButtonUninstall": "Eemalda", @@ -1584,7 +1584,7 @@ "LabelH264Crf": "H.264 kodeerimise CRF", "LabelAutomaticallyAddToCollectionHelp": "Kui vähemalt kahel filmil on sama kogumiku nimi, lisatakse need automaatselt kogumikku.", "LabelAutomaticallyAddToCollection": "Lisa automaatselt kogumikku", - "H264CrfHelp": "'Constant Rate Factor' (CRF) on x264 ja x265 kodeerija vaikekvaliteediseade. Võimalikud on väärtused vahemikus 0 kuni 51, kus madalamad väärtused tooksid kaasa parema kvaliteedi (suurema failimahu arvelt). Mõistlikud väärtused on vahemikus 18 kuni 28. Vaikeväärtus x264 jaoks on 23 ja x265 jaoks 28, nii et seda saab kasutada lähtepunktina.", + "H264CrfHelp": "'Constant Rate Factor' (CRF) on x264 ja x265 tarkvaralise kodeerija vaikekvaliteediseade. Võimalikud on väärtused vahemikus 0 kuni 51, kus madalamad väärtused tooksid kaasa parema kvaliteedi (suurema failimahu arvelt). Mõistlikud väärtused on vahemikus 18 kuni 28. Vaikeväärtus x264 jaoks on 23 ja x265 jaoks 28, nii et seda saab kasutada lähtepunktina. Riistvaralised kodeerijad ei kasuta seda sätet.", "Cursive": "Kursiiv", "ButtonCast": "Esita seadmes", "ButtonExitApp": "Lahku rakendusest", @@ -1706,5 +1706,28 @@ "AllowTonemappingSoftwareHelp": "Toonikaardistus suudab teisendada dünaamilise HDR sisu SDR'iks säilitades pildi detailid ja värvid mis on oluline et säiliks originaalstseen. Hetkel toimib vaid 10bit HDR10, HLG ja DoVi videotega.", "AlwaysRemuxFlacAudioFilesHelp": "Kui sul on faile mida su brauser et mängi või kus ajatemplid arvutatakse valesti siis lubage see lahenduseks.", "AlwaysRemuxMp3AudioFilesHelp": "Kui sul on faile kus brauser arvutab ajatemplid valesti siis lubage see lahenduseks.", - "AndOtherArtists": "{0} ja{1} teist artisti." + "AndOtherArtists": "{0} ja{1} teist artisti.", + "FallbackMaxStreamingBitrateHelp": "Maksimaalset voogesituse bitikiirust kasutatakse varuvariandina, kui ffprobe ei suuda määrata lähtevoo bitikiirust. See aitab vältida seda, et kliendid küsiksid liiga suurt transkodeerimise bitikiirust, mis võib põhjustada mängija tõrkeid ja kodeerija ülekoormust.", + "EditLyrics": "Muuda lüürikat", + "HeaderNextItem": "Järgmine {0}", + "HeaderPreviewLyrics": "Laulusõnade eelvaade", + "HeaderAddLyrics": "Lisa laulusõnu", + "DisableVbrAudioEncodingHelp": "Keela selle kliendi puhul serveril VBR heli kodeerimine.", + "GoHome": "Mine avalehele", + "HeaderAudioAdvanced": "Täpsemad helisätted", + "Colorist": "Kolorist", + "GridView": "Ruudukujuline vaade", + "HeaderEpisodesStatus": "Episoodide staatus", + "HeaderGuestCast": "Külalisstaarid", + "HeaderDeleteSeries": "Kustuta sari", + "HeaderLyricDownloads": "Laulusõnade allalaadimised", + "HeaderNoLyrics": "Laulusõnu ei leitud", + "EnableHi10p": "Luba H.264 High 10 profiil", + "EnableHi10pHelp": "Luba et takistada H.264 10-bit videofailide transkodeermine. Keela kui näed videodes tühje kaadreid.", + "ErrorAddingListingsToSchedulesDirect": "Tekkis viga koosseisu lisamisel teie Schedules Directi kontole. Schedules Direct lubab ainult piiratud arvu koosseise konto kohta. Võimalik, et peate enne jätkamist Schedules Directi veebisaidile sisse logima ja eemaldama oma kontolt teised koosseisud.", + "HeaderNextItemPlayingInValue": "Järgmine {0} alustab {1}", + "ErrorDeletingLyrics": "Serverist tekstide kustutamisel tekkis viga. Palun kontrollige, et Jellyfinil oleks meedia kausta kirjutamisõigus ja proovige uuesti.", + "HeaderDeleteLyrics": "Kustuta laulusõnad", + "HeaderAllRecordings": "Kõik salvestised", + "HeaderConfirmRepositoryInstallation": "Kinnitage pluginate kataloogi paigaldamine" } From 2725b924b7779c55bce3ea952b428753c09700be Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 12:58:37 +0000 Subject: [PATCH 046/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 9b87c88ac6..12c6a6071a 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1729,5 +1729,17 @@ "ErrorDeletingLyrics": "Serverist tekstide kustutamisel tekkis viga. Palun kontrollige, et Jellyfinil oleks meedia kausta kirjutamisõigus ja proovige uuesti.", "HeaderDeleteLyrics": "Kustuta laulusõnad", "HeaderAllRecordings": "Kõik salvestised", - "HeaderConfirmRepositoryInstallation": "Kinnitage pluginate kataloogi paigaldamine" + "HeaderConfirmRepositoryInstallation": "Kinnitage pluginate kataloogi paigaldamine", + "Inker": "Tintija", + "HeaderVideoAdvanced": "Täpsemad videosätted", + "LabelAllowFmp4TranscodingContainer": "Luba fMP4 transkodeerimise konteiner", + "LabelAllowStreamSharing": "Luba striimi jagamine", + "LabelAlwaysRemuxFlacAudioFiles": "Alati remuxi FLAC audiofailid", + "LabelAlwaysRemuxMp3AudioFiles": "Alati remuxi MP3 failid", + "Illustrator": "Illustreerija", + "LabelAlbumGain": "Albumi helivõimendus", + "LabelAllowContentWithTags": "Lubage siltidega objektid", + "LabelSelectAudioNormalization": "Heli normaliseerimine", + "IgnoreDtsHelp": "Selle valiku väljalülitamine võib lahendada mõned probleemid, nt puuduv heli eraldi heli- ja videovoogudega kanalitel.", + "HeaderUploadLyrics": "Lae laulusõnad üles" } From a8f160f195aa29ee4e73c017b5d2bb3e8f98a62a Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 13:03:20 +0000 Subject: [PATCH 047/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 12c6a6071a..63a079e7f3 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1741,5 +1741,16 @@ "LabelAllowContentWithTags": "Lubage siltidega objektid", "LabelSelectAudioNormalization": "Heli normaliseerimine", "IgnoreDtsHelp": "Selle valiku väljalülitamine võib lahendada mõned probleemid, nt puuduv heli eraldi heli- ja videovoogudega kanalitel.", - "HeaderUploadLyrics": "Lae laulusõnad üles" + "HeaderUploadLyrics": "Lae laulusõnad üles", + "LabelBuildVersion": "Buildi versioon", + "LabelDuration": "Kestus", + "LabelDropLyricsHere": "Tiri laulusõnad siia või vajuta failide valimiseks.", + "LabelDate": "Kuupäev", + "LabelDisableVbrAudioEncoding": "Keela VBR helikodeering", + "LabelBackdropScreensaverInterval": "Taustakuva ekraanisäästja intervall", + "LabelBackdropScreensaverIntervalHelp": "Aeg sekundites erinevate taustapiltide vahel, kui kasutate taustapildi ekraanisäästjat.", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Eelistatud heli transkodeerimise koodek video taasesitamisel", + "LabelStereoDownmixAlgorithm": "Stereo Downmixi algorütm", + "LabelDummyChapterDuration": "Intervall", + "LabelDeveloper": "Arendaja" } From 2d5b0eacffa8ba19aea2399cc46a49496595156e Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 13:07:47 +0000 Subject: [PATCH 048/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 63a079e7f3..ff9b2e8b99 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1752,5 +1752,9 @@ "LabelSelectPreferredTranscodeVideoAudioCodec": "Eelistatud heli transkodeerimise koodek video taasesitamisel", "LabelStereoDownmixAlgorithm": "Stereo Downmixi algorütm", "LabelDummyChapterDuration": "Intervall", - "LabelDeveloper": "Arendaja" + "LabelDeveloper": "Arendaja", + "LabelChapterImageResolution": "Resolutsioon", + "LabelDummyChapterDurationHelp": "Intervall fiktiivsete peatükkide vahel. Seadista 0, et keelata fiktiivsete peatükkide genereerimine. Selle muutmine ei mõjuta olemasolevaid fiktiivseid peatükke.", + "LabelEnableAudioVbr": "Luba VBR helikodeering", + "LabelChapterImageResolutionHelp": "Eraldatud peatükipiltide resolutsioon. Selle muutmine ei mõjuta olemasolevaid fiktiivseid peatükke." } From a269dcbc10248574b24603684377a6ef14d51b4a Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Sat, 21 Sep 2024 15:32:13 +0200 Subject: [PATCH 049/186] Increase amount of home sections from 7 to 10 --- .../homeScreenSettings/homeScreenSettings.js | 11 +++-- .../homeScreenSettings.template.html | 42 +++++++++++++++++++ src/components/homesections/homesections.js | 2 +- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index 338a484dfd..ead15788c5 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -20,7 +20,7 @@ import toast from '../toast/toast'; import template from './homeScreenSettings.template.html'; import { LibraryTab } from '../../types/libraryTab.ts'; -const numConfigurableSections = 7; +const numConfigurableSections = 10; function renderViews(page, user, result) { let folderHtml = ''; @@ -204,15 +204,15 @@ function renderViewOrder(context, user, result) { } function updateHomeSectionValues(context, userSettings) { - for (let i = 1; i <= 7; i++) { + for (let i = 1; i <= numConfigurableSections; i++) { const select = context.querySelector(`#selectHomeSection${i}`); const defaultValue = homeSections.getDefaultSection(i - 1); - const option = select.querySelector(`option[value=${defaultValue}]`) || select.querySelector('option[value=""]'); + const option = select.querySelector(`option[value="${defaultValue}"]`) || select.querySelector('option[value=""]'); const userValue = userSettings.get(`homesection${i - 1}`); - option.value = ''; + if (option) option.value = ''; if (userValue === defaultValue || !userValue) { select.value = ''; @@ -390,6 +390,9 @@ function saveUser(context, user, userSettingsInstance, apiClient) { userSettingsInstance.set('homesection4', context.querySelector('#selectHomeSection5').value); userSettingsInstance.set('homesection5', context.querySelector('#selectHomeSection6').value); userSettingsInstance.set('homesection6', context.querySelector('#selectHomeSection7').value); + userSettingsInstance.set('homesection7', context.querySelector('#selectHomeSection8').value); + userSettingsInstance.set('homesection8', context.querySelector('#selectHomeSection9').value); + userSettingsInstance.set('homesection9', context.querySelector('#selectHomeSection10').value); const selectLandings = context.querySelectorAll('.selectLanding'); for (i = 0, length = selectLandings.length; i < length; i++) { diff --git a/src/components/homeScreenSettings/homeScreenSettings.template.html b/src/components/homeScreenSettings/homeScreenSettings.template.html index d3a9206c33..a46e7327f2 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.template.html +++ b/src/components/homeScreenSettings/homeScreenSettings.template.html @@ -115,6 +115,48 @@
+
+ +
+
+ +
+
+ +
diff --git a/src/components/homesections/homesections.js b/src/components/homesections/homesections.js index 43761d2447..8f1cfd34b8 100644 --- a/src/components/homesections/homesections.js +++ b/src/components/homesections/homesections.js @@ -61,7 +61,7 @@ export function loadSections(elem, apiClient, user, userSettings) { let html = ''; if (userViews.length) { - const userSectionCount = 7; + const userSectionCount = 10; // TV layout can have an extra section to ensure libraries are visible const totalSectionCount = layoutManager.tv ? userSectionCount + 1 : userSectionCount; for (let i = 0; i < totalSectionCount; i++) { From a7032e9eae3c78e3f19a27f187a4bce7fc1e8021 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 13:11:06 +0000 Subject: [PATCH 050/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 76 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index ff9b2e8b99..669546e826 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1100,7 +1100,7 @@ "LeaveBlankToNotSetAPassword": "Parooli määramata jätmiseks võid selle välja tühjaks jätta.", "LearnHowYouCanContribute": "Uuri, kuidas ise panustada.", "LatestFromLibrary": "Uusimad {0}", - "LastSeen": "Viimati nähtud {0}", + "LastSeen": "Viimane tegevus {0}", "Large": "Suur", "LanNetworksHelp": "Komadega eraldatud loend IP aadressidest või IP/võrgumaski kirjetest võrkude jaoks, mida loetakse olevat kohalikus võrgus, ribalaiuse piirangute jõustamisel. Kui see on määratud, loetakse kõik teised IP aadressid välisvõrgus olevateks ja nendele kehtivad välise ribalaiuse piirangud. Kui see tühjaks jätta, loetakse kohalikus võrgus olevaks ainult serveri alamvõrk.", "LabelZipCode": "Postiindeks", @@ -1756,5 +1756,77 @@ "LabelChapterImageResolution": "Resolutsioon", "LabelDummyChapterDurationHelp": "Intervall fiktiivsete peatükkide vahel. Seadista 0, et keelata fiktiivsete peatükkide genereerimine. Selle muutmine ei mõjuta olemasolevaid fiktiivseid peatükke.", "LabelEnableAudioVbr": "Luba VBR helikodeering", - "LabelChapterImageResolutionHelp": "Eraldatud peatükipiltide resolutsioon. Selle muutmine ei mõjuta olemasolevaid fiktiivseid peatükke." + "LabelChapterImageResolutionHelp": "Eraldatud peatükipiltide resolutsioon. Selle muutmine ei mõjuta olemasolevaid fiktiivseid peatükke.", + "LabelEnableLUFSScanHelp": "Kliendid saavad normaliseerida heli taasesituse, et saavutada võrdne helitugevus kõigis lugudes. See muudab meediakogu skaneerimise aeglasemaks ja kasutab rohkem ressursse.", + "LibraryScanFanoutConcurrencyHelp": "Paralleelsete tööde maksimaalne arv raamatukogu skaneerimise ajal. Selle väärtuse 0'ks seadmine valib piirangu, mis põhineb teie süsteemi tuumade arvul. HOIATUS: Selle arvu liiga suureks seadmine võib põhjustada probleeme võrgu failisüsteemidega (NFS, Samba); kui teil tekib probleeme, vähendage seda arvu.", + "PreferEmbeddedExtrasTitlesOverFileNames": "Eelistage lisade sisseehitatud pealkirju failinimede asemel", + "LabelEnableAudioVbrHelp": "Muutuv bitikiirus pakub paremat kvaliteedi ja keskmise bitikiiruse suhet, kuid võib põhjustada puhverdamis- ja ühilduvusprobleeme.", + "LabelIsSynced": "Sünkroniseeritud", + "LabelSystem": "Süsteem", + "LogLevel.Information": "Information", + "LogLevel.Error": "Error", + "LabelRepository": "Hoidla", + "LogoScreensaver": "Ekraanisäästja logo", + "MenuOpen": "Ava menüü", + "LabelFallbackMaxStreamingBitrate": "Maksimaalne striimi voogedastuse kiiruse varuvariant (Mbps)", + "LabelNoChangelog": "Selle versiooni kohta pole muudatustelogi.", + "LabelWebVersion": "Veebi versioon", + "LogLevel.Trace": "Trace", + "LabelSelectPreferredTranscodeVideoCodec": "Eelistatud transkodeerimise videokoodek", + "LogLevel.Debug": "Debug", + "NoLyricsSearchResultsFound": "Laulusõnu ei leitud.", + "Penciller": "Joonistaja", + "PlaybackError.ASS_RENDER_ERROR": "ASS/SSA subtiitrite renderijas ilmnes viga.", + "MoveToBottom": "Liiguta viimaseks", + "PlaybackError.RateLimitExceeded": "Seda meediat ei saa hetkel mängida kiirusepiirangute tõttu.", + "Letterer": "Kirjutaja", + "SaveLyricsIntoMediaFoldersHelp": "Laulusõnade salvestamine helifailide kõrvale võimaldab neid hõlpsamini hallata.", + "LogLevel.Warning": "Warning", + "LogLevel.None": "None", + "LibraryInvalidItemIdError": "Meediakogu on vigases olekus ja seda ei saa muuta. Võimalik, et tegemist on veaga: andmebaasis olev asukoht ei ole toimiv viide failisüsteemis.", + "PluginLoadRepoError": "Tekkis viga plugina andmete hankimisel.", + "PluginUninstallError": "Plugina eemaldamisel tekkis viga.", + "MenuClose": "Sulge menüü", + "PleaseConfirmRepositoryInstallation": "Palun klõpsake OK, et kinnitada, et olete ülaltoodut lugenud ja soovite jätkata pluginate repositooriumi paigaldamist.", + "LogLevel.Critical": "Critical", + "LabelLyricDownloaders": "Laulusõnade allalaadijad", + "LyricDownloadersHelp": "Lubage ja järjestage oma subtiitrite allalaadimisprogrammide eelistuse järjekord.", + "MoveToTop": "Liiguta esimeseks", + "PlaybackError.NotAllowed": "Selle meedia taasesitamine ei ole lubatud.", + "LabelEnableLUFSScan": "Luba LUFS skaneerimine", + "LabelInstalled": "Installitud", + "LabelNotInstalled": "Installimata", + "MediaInfoRotation": "Rotatsioon", + "PasswordRequiredForAdmin": "Admin kasutajatel peab olema parool.", + "PasswordMissingSaveError": "Uus parool ei tohi olla tühi.", + "PlaybackError.MEDIA_DECODE_ERROR": "Taasesitus ebaõnnestus meedia dekodeerimise vea tõttu.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Taasesitus ebaõnnestus, sest see klient ei toeta seda meediatüüpi.", + "PlaybackError.NETWORK_ERROR": "Taasesitus ebaõnnestus võrguvea tõttu.", + "PlaybackError.PLAYER_ERROR": "Taasesitus ebaõnnestus fataalse pleierivea tõttu.", + "PlaylistError.CreateFailed": "Viga esitusloendi loomisel", + "PlaylistError.AddFailed": "Viga esitusloendisse lisamisel", + "PluginDisableError": "Plugina väljalülitamisel tekkis viga.", + "PluginEnableError": "Plugina sisselülitamisel tekkis viga.", + "PluginLoadConfigError": "Plugina konfiguratsioonilehtede kättesaamisel tekkis viga.", + "LabelLevel": "Tase", + "LabelServerVersion": "Serveri versioon", + "LabelSyncPlayNoGroups": "Gruppe pole", + "LibraryScanFanoutConcurrency": "Paralleelsete meediakogu skaneerimiste piirang", + "LimitSupportedVideoResolutionHelp": "Kasutage 'Piirake maksimaalset toetatud videoresolutsiooni' kui maksimaalne toetatud video resolutsioon.", + "ListView": "Listivaade", + "MessageRepositoryInstallDisclaimer": "HOIATUS: Kolmanda osapoole pluginate hoidla paigaldamisega kaasnevad riskid. See võib sisaldada ebastabiilset või pahatahtlikku koodi ning võib igal ajal muutuda. Installige ainult nende autorite repositooriume, keda te usaldate.", + "LabelMediaDetails": "Meediadetailid", + "LabelParallelImageEncodingLimit": "Paralleelne pildi kodeerimise piirang", + "LabelParallelImageEncodingLimitHelp": "Maksimaalne arv pildi kodeeringuid, mida on lubatud paralleelselt käivitada. Selle väärtuse 0'ks seadmine valib piirangu, mis põhineb teie süsteemi tuumade arvul.", + "Lyrics": "Laulusõnad", + "Lyric": "Laulusõna", + "PlaybackError.SERVER_ERROR": "Taasesitus ebaõnnestus serveri vea tõttu.", + "LabelEnablePlugin": "Luba plugin", + "PlaybackError.NO_MEDIA_ERROR": "Ei leia mängimiseks sobivat meediafaili.", + "LabelSaveTrickplayLocally": "Salvesta trickplay pildid videofailide juurde", + "LabelSaveTrickplayLocallyHelp": "Trickplay piltide salvestamine meediakogu kausta võimaldab neid hõlpsamini hallata.", + "PlaybackError.FATAL_HLS_ERROR": "HLS-striimis ilmnes fataalne viga.", + "PlaylistPublic": "Luba avalik juurdepääs", + "PlaylistPublicDescription": "Lubage seda esitusloendit vaadata kõigil sisselogitud kasutajatel.", + "LimitSupportedVideoResolution": "Piirake maksimaalset toetatud videoresolutsiooni" } From 6fe3e1814f5f3071b5614b256c6fae000d5a2095 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sat, 21 Sep 2024 13:45:57 +0000 Subject: [PATCH 051/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 669546e826..ad97b93378 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1828,5 +1828,25 @@ "PlaybackError.FATAL_HLS_ERROR": "HLS-striimis ilmnes fataalne viga.", "PlaylistPublic": "Luba avalik juurdepääs", "PlaylistPublicDescription": "Lubage seda esitusloendit vaadata kõigil sisselogitud kasutajatel.", - "LimitSupportedVideoResolution": "Piirake maksimaalset toetatud videoresolutsiooni" + "LimitSupportedVideoResolution": "Piirake maksimaalset toetatud videoresolutsiooni", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Lisadel on sageli sama sisseehitatud nimi kui originaalil, lubage, et kasutada nende jaoks ikkagi sisseehitatud.", + "SaveRecordingNFOHelp": "Salvesta EPG pakkuja poolt saadud metaandmed meedia kõrvale.", + "ReplaceTrickplayImages": "Asendage olemasolevad trickplay pildid", + "SaveLyricsIntoMediaFolders": "Salvesta laulusõnad meediakaustadesse", + "SearchResultsEmpty": "Vabandame! Ei leidnud vastet otsingule \"{0}\"", + "Remixer": "Remixija", + "SavePassword": "Salvesta parool", + "SecondarySubtitles": "Teisesed subtiitrid", + "Reset": "Lähtesta", + "SearchForLyrics": "Otsi laulusõnu", + "SaveRecordingNFO": "Salvesta salvestuse EPG metaandmed NFO-sse", + "SaveRecordingImages": "Salvesta salvestise EPG pildid", + "SaveRecordingImagesHelp": "Salvesta EPG pakkuja poolt saadud pildid meedia kõrvale.", + "PreviewLyrics": "Laulusõnade eelvaade", + "ResolutionMatchSource": "Vaste algallikas", + "Regional": "Regionaalne", + "RenderPgsSubtitle": "Eksperimentaalne PGS subtiitrite esitamine", + "RenderPgsSubtitleHelp": "Määrake, kas klient peaks PGS-subtiitreid renderdama, selle asemel et kasutada sissepõletatud subtiitreid. Sellega saab vältida serveri poolset transkodeerimist, et saavutada tulemuslikum kliendipoolne renderdamine.", + "Production": "Toodang", + "ReleaseGroup": "Väljaandja rühmitus" } From c64bfcaa271560d87008e170afe851f740c48459 Mon Sep 17 00:00:00 2001 From: Kityn Date: Sun, 22 Sep 2024 05:06:25 +0000 Subject: [PATCH 052/186] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 6842466b91..736b13d243 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1859,7 +1859,7 @@ "EncodingFormatHelp": "Wybierz kodowanie wideo, którym Jellyfin powinien transkodować. Jellyfin użyje kodowania programowego, gdy akceleracja sprzętowa dla wybranego formatu nie jest dostępna. Kodowanie H264 będzie zawsze włączone.", "EnableLibrary": "Włącz bibliotekę", "EnableLibraryHelp": "Wyłączenie biblioteki spowoduje ukrycie jej przed wszystkimi widokami użytkowników.", - "LabelTrickplayAccelEncodingHelp": "Opcja ta jest obecnie dostępna tylko przy użyciu QSV, VAAPI i VideoToolbox, nie ma wpływu na inne metody akceleracji sprzętowej.", + "LabelTrickplayAccelEncodingHelp": "Opcja ta jest obecnie dostępna tylko przy użyciu QSV, VA-API, VideoToolbox i RKMPP, nie ma wpływu na inne metody akceleracji sprzętowej.", "LabelTrickplayAccelEncoding": "Włącz kodowanie MJPEG z akceleracją sprzętową", "ConfirmDeleteLyrics": "Usunięcie tych słów spowoduje ich usunięcie zarówno z systemu plików, jak i biblioteki multimediów. Czy na pewno chcesz kontynuować?", "HeaderNoLyrics": "Nie znaleziono słów", From 9cfaa194330c0386f17f7fb38cfe35ccc1f6af6d Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sun, 22 Sep 2024 06:31:20 +0000 Subject: [PATCH 053/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index e93458097c..5df522e456 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1950,7 +1950,7 @@ "LabelAllowFmp4TranscodingContainer": "允许 fMP4 转码容器", "LabelAllowStreamSharing": "允许流共享", "LabelFallbackMaxStreamingBitrate": "回退最大流比特率 (Mbps)", - "VideoCodecTagNotSupported": "不支持视频编解码器标签", + "VideoCodecTagNotSupported": "视频编码标签不支持", "LabelLyricDownloaders": "歌词下载", "LyricDownloadersHelp": "启用并按优先级顺序排列您喜欢的下载器。", "RenderPgsSubtitle": "实验性 PGS 字幕渲染", From 19704d9b1709cac8a07dc5c0900bca320d5f53f0 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sun, 22 Sep 2024 06:43:14 +0000 Subject: [PATCH 054/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index ad97b93378..6080bcae4c 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1848,5 +1848,22 @@ "RenderPgsSubtitle": "Eksperimentaalne PGS subtiitrite esitamine", "RenderPgsSubtitleHelp": "Määrake, kas klient peaks PGS-subtiitreid renderdama, selle asemel et kasutada sissepõletatud subtiitreid. Sellega saab vältida serveri poolset transkodeerimist, et saavutada tulemuslikum kliendipoolne renderdamine.", "Production": "Toodang", - "ReleaseGroup": "Väljaandja rühmitus" + "ReleaseGroup": "Väljaandja rühmitus", + "SubtitleGreen": "Roheline", + "SubtitleBlue": "Sinine", + "SubtitleCyan": "Tsüüan", + "Translator": "Tõlkija", + "SubtitleWhite": "Valge", + "SubtitleYellow": "Kollane", + "UnknownError": "Tekkis tundmatu viga.", + "SubtitleLightGray": "Helehall", + "SubtitleBlack": "Must", + "SubtitleGray": "Hall", + "StereoDownmixAlgorithmHelp": "Algoritm, mida kasutatakse mitme kanaliga heli allasegamiseks stereoks.", + "StoryArc": "Narratiiv", + "SubtitleMagenta": "Magenta", + "SelectPreferredTranscodeVideoCodecHelp": "Vali transkodeerimiseks eelistatud videokoodek. Kui eelisatud koodek pole toetatud kasutab server järgmist saadaolevat koodekit.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Vali videofailide transkodeerimiseks eelistatud audiokoodek. Kui eelisatud koodek pole toetatud kasutab server järgmist saadaolevat koodekit.", + "Studio": "Stuudio", + "SubtitleRed": "Punane" } From 8d8e54cfb97ecf0b9acabccf24d471a4c0ba0ba2 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sun, 22 Sep 2024 06:47:57 +0000 Subject: [PATCH 055/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 47 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index 6080bcae4c..93e10d8340 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1497,7 +1497,7 @@ "HeaderSelectFallbackFontPath": "Vali varufondi kausta rada", "Yesterday": "Eile", "Yes": "Jah", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "XmlTvSportsCategoriesHelp": "Nende kategooriatega saateid kuvatakse spordisaadetena. Eralda mitu märgiga '|'.", "XmlTvPathHelp": "XMLTV-faili rada. Jellyfin loeb seda faili ja kontrollib perioodiliselt värskendusi. Sinu vastutada on faili loomine ja värskendamine.", "XmlTvNewsCategoriesHelp": "Nende kategooriatega saateid kuvatakse uudistena. Eralda mitu märgiga '|'.", @@ -1865,5 +1865,48 @@ "SelectPreferredTranscodeVideoCodecHelp": "Vali transkodeerimiseks eelistatud videokoodek. Kui eelisatud koodek pole toetatud kasutab server järgmist saadaolevat koodekit.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Vali videofailide transkodeerimiseks eelistatud audiokoodek. Kui eelisatud koodek pole toetatud kasutab server järgmist saadaolevat koodekit.", "Studio": "Stuudio", - "SubtitleRed": "Punane" + "SubtitleRed": "Punane", + "UseDoubleRateDeinterlacingHelp": "See seadistus kasutab lahti põimimise puhul välissagedust, mida sageli nimetatakse \"bob deinterlacing'iks\", mis kahekordistab video kaadrisageduse, et pakkuda täielikku liikumist, nagu seda näeksite põimitud video vaatamisel telerist.", + "HearingImpairedShort": "HI/SDH", + "LabelTrickplayAccel": "Luba riistvaraline dekodeerimine", + "LabelTrickplayKeyFrameOnlyExtraction": "Looge pilte ainult võtmekaadritest", + "UserMenu": "Kasutajamenüü", + "LabelTrackGain": "Loo võimendus", + "EnableEnhancedNvdecDecoderHelp": "Täiustatud NVDEC implementatsioon, lülitage see valik välja, et kasutada CUVIDi, kui teil esineb dekodeerimisvigu.", + "LabelTonemappingMode": "Toonikaardistamise režiim", + "VideoCodecTagNotSupported": "Videokoodeksi silt ei ole toetatud", + "Featurette": "Peatükk", + "MediaInfoElPresentFlag": "DV el eelseadistuse lipuke", + "Short": "Lühifilm", + "LabelVppTonemappingBrightnessHelp": "Rakendage heleduse võimendust VPP toonikaardistamisel. Soovituslikud ja vaikimisi väärtused on 16 ja 0.", + "MediaInfoDoViTitle": "DV nimetus", + "MediaInfoDvVersionMajor": "DV peamine versioon", + "MediaInfoDvVersionMinor": "DV alamversioon", + "Unknown": "Tundmatu", + "LabelIsHearingImpaired": "Vaegkuuljate jaoks (SDH)", + "ViewLyrics": "Vaata laulusõnu", + "AllowVideoToolboxTonemappingHelp": "VideoToolboxi poolt pakutav riistvaraline toonikaardistamine. See töötab enamiku HDR-formaatidega, sealhulgas HDR10, HDR10+ ja HLG, kuid ei tööta Dolby Vision Profile 5ga. See on võrreldes teise Metali rakendusega kõrgema prioriteediga.", + "LabelEncodingFormatOptions": "Kodeerimisformaadi valikud", + "UnknownVideoStreamInfo": "Videovoo info on tundmatu", + "UnknownAudioStreamInfo": "Audiovoo info on tundmatu", + "LabelTrickplayAccelEncoding": "Luba riistvaraliselt kiirendatud MJPEG-kodeering", + "LabelTrickplayAccelEncodingHelp": "Praegu saadaval ainult QSV, VA-API, VideoToolbox ja RKMPP puhul, see valik ei mõjuta teisi riistvarakiirenduse meetodeid.", + "Clip": "Klipp", + "LabelVppTonemappingBrightness": "VPP toonikaardistamise heleduse võimendus", + "EnableVideoToolboxTonemapping": "Luba VideoToolbox toonide kaardistamine", + "EncodingFormatHelp": "Valige videokodeering, milliseks Jellyfin peaks transkodeerima. Jellyfin kasutab tarkvaralist kodeerimist, kui valitud formaadi jaoks ei ole riistvaraline kiirendus saadaval. H264 kodeerimine on alati lubatud.", + "DirectPlayError": "Otsese taasesituse käivitamisel tekkis viga", + "MediaInfoBlPresentFlag": "DV bl eelseadistuse lipuke", + "MediaInfoDvBlSignalCompatibilityId": "DV bl signaali ühilduvuse id", + "TonemappingModeHelp": "Valige toonikaardistamise režiim. Kui teil on eredalt esilekerkinud heledad kohad, proovige kasutada RGB-režiimi.", + "AllowAv1Encoding": "Luba kodeerimine AV1-vormingus", + "EnableIntelLowPowerHevcHwEncoder": "Inteli madala enegiakasutusega HEVC riistvaralise kodeerija lubamine", + "LabelHardwareEncodingOptions": "Riistvaralise kodeerimise valikud", + "Trickplay": "Trickplay", + "AiTranslated": "AI tõlgitud", + "MachineTranslated": "Masintõlgitud", + "ForeignPartsOnly": "Ainult sunnitud/võõrosad", + "LabelVppTonemappingContrast": "VPP toonikaardistamise kontrasti võimendus", + "LabelVppTonemappingContrastHelp": "Rakendage VPP toonikaardistamisel kontrasti võimendust. Nii soovitatud kui ka vaikimisi väärtus on 1.", + "MediaInfoRpuPresentFlag": "DV rpu eelseadistuse lipuke" } From 9b65a5e33dbfe27c73858cbaf5dc59fbbce40dde Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sun, 22 Sep 2024 07:05:27 +0000 Subject: [PATCH 056/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 93e10d8340..9aca7680d7 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1908,5 +1908,9 @@ "ForeignPartsOnly": "Ainult sunnitud/võõrosad", "LabelVppTonemappingContrast": "VPP toonikaardistamise kontrasti võimendus", "LabelVppTonemappingContrastHelp": "Rakendage VPP toonikaardistamisel kontrasti võimendust. Nii soovitatud kui ka vaikimisi väärtus on 1.", - "MediaInfoRpuPresentFlag": "DV rpu eelseadistuse lipuke" + "MediaInfoRpuPresentFlag": "DV rpu eelseadistuse lipuke", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Eralda ainult põhikaadrid oluliselt kiiremaks töötlemiseks, vähem täpse ajastusega. Kui seadistatud riistvaraline dekooder seda režiimi ei toeta kasutatakse selle asemel tarkvaralist dekooderit.", + "LabelScanBehavior": "Skaneerimise käitumine", + "NonBlockingScan": "Mitteblokeeriv - ootab genereerimist, seejärel naaseb", + "BlockingScan": "Blokeeriv - järjekorras genereerimine, blokeerib skaneerimise kuni selle lõpetamiseni" } From 9dc397c4ce1f573fddb6f67b57658ef3c429d088 Mon Sep 17 00:00:00 2001 From: millallo Date: Sun, 22 Sep 2024 07:33:37 +0000 Subject: [PATCH 057/186] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 8d56066e6a..7da27be2d9 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1860,7 +1860,7 @@ "LabelWidthResolutionsHelp": "Elenco separato da virgole delle larghezze (px) con cui saranno generate le immagini di Trickplay. Tutte le immagini devono essere generate in modo proporzionale alla sorgente, quindi una larghezza di 320 su un video 16:9 finisce per essere circa 320x180.", "LabelTileHeight": "Altezza Riquadro", "LabelTrickplayAccelEncoding": "Abilita l'accelerazione hardware della codifica MJPEG", - "LabelTrickplayAccelEncodingHelp": "Disponibile solo per QSV, VAAPI e VideoToolbox. Questa opzione non ha alcun effetto sugli altri metodi di accelerazione hardware.", + "LabelTrickplayAccelEncodingHelp": "Disponibile solo per QSV, VAAPI, VideoToolbox e RKMPP. Questa opzione non ha alcun effetto sugli altri metodi di accelerazione hardware.", "ConfirmDeleteLyrics": "Cancellare questi testi li rimuoverà sia dalle cartelle del sistema che dalla tua libreria multimediale. Sei sicuro di continuare?", "DeleteLyrics": "Cancella testi", "ErrorDeletingLyrics": "C'è stato un errore nel cancellare i testi dal server. Perfavore controlla che Jellyfin abbia accesso alla scrittura della cartella dei media e riprova.", From 4278046e775b948401460464ab3435f07cca763d Mon Sep 17 00:00:00 2001 From: l00d3r Date: Sun, 22 Sep 2024 07:09:44 +0000 Subject: [PATCH 058/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index 9aca7680d7..415d720b98 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1694,7 +1694,7 @@ "DeleteEpisode": "Kustuta episood", "Editor": "Toimetaja", "EnableTrueHd": "Luba TrueHD", - "EnableTrueHdHelp": "Luba TrueHD ainult siis, kui sinu seade või sellega ühendatud audioresiiver seda toetab. Vastasel juhul võib esitlus ebaõnnestuda.", + "EnableTrueHdHelp": "Luba TrueHD ainult siis, kui sinu seade või sellega ühendatud audioresiiver seda toetab. Vastasel juhul võib see põhjustada esitluse ebaõnnestumist.", "AllowContentWithTagsHelp": "Näita ainult meediat, millel on vähemalt üks sisestatud silt.", "ChannelResolutionSD": "SD", "ChannelResolutionSDPAL": "SD (PAL)", @@ -1912,5 +1912,31 @@ "LabelTrickplayKeyFrameOnlyExtractionHelp": "Eralda ainult põhikaadrid oluliselt kiiremaks töötlemiseks, vähem täpse ajastusega. Kui seadistatud riistvaraline dekooder seda režiimi ei toeta kasutatakse selle asemel tarkvaralist dekooderit.", "LabelScanBehavior": "Skaneerimise käitumine", "NonBlockingScan": "Mitteblokeeriv - ootab genereerimist, seejärel naaseb", - "BlockingScan": "Blokeeriv - järjekorras genereerimine, blokeerib skaneerimise kuni selle lõpetamiseni" + "BlockingScan": "Blokeeriv - järjekorras genereerimine, blokeerib skaneerimise kuni selle lõpetamiseni", + "LabelScanBehaviorHelp": "Vaikimisi käitumine on mitteblokeeriv, see lisab meedia meediakogusse enne trickplay failide genereerimist. Blokeerimine tagab, et trickplay failid genereeritakse enne meedia meediakogusse lisamist, kuid teeb skaneerimise oluliselt aeglasemaks.", + "LabelTileWidth": "Ruudu laius", + "LabelProcessPriorityHelp": "Selle madalamaks või kõrgemaks seadistamine määrab kuidas CPU prioritiseerib trickplay piltide genereerimise. Kui märkad trickplay piltide genereerimise aeglustumist aga tahad seda ikka kasutada siis proovi lisaks selle alandamisele ka lõimesid vähendada.", + "LabelTileHeight": "Ruudu kõrgus", + "LabelTrickplayThreads": "FFmpeg lõimed", + "LabelWidthResolutions": "Laiuseraldused", + "LabelJpegQuality": "JPEG kvaliteet", + "LabelProcessPriority": "Protsessi prioriteet", + "LabelTileHeightHelp": "Piltide maksimaalne arv ühe ruudu kohta Y-suunas.", + "LabelJpegQualityHelp": "JPEG-kompressiooni kvaliteet trickplay piltide puhul.", + "LabelTrickplayThreadsHelp": "Lõimede arv, mis antakse üle ffmpeg'i argumendile '-threads'.", + "LabelImageInterval": "Pildiintervall", + "LabelQscale": "Qscale", + "LabelQscaleHelp": "ffmpeg'i poolt väljastatavate piltide kvaliteediskaala, kus 2 on kõrgeima kvaliteediga ja 31 madalaima kvaliteediga.", + "PriorityHigh": "Kõrge", + "PriorityBelowNormal": "Alla normaalväärtuse", + "LabelExtractTrickplayDuringLibraryScanHelp": "Genereeri trickplay pildid meediakogu skaneerimise ajal vastasel korral genereeritakse need trickplay piltide ajastatud ülesannete raames. Kui genereerimine on seaditatud mitteblokeerivaks ei mõjuta see meediakogu skaneerimisele kuluvat aega.", + "LabelWidthResolutionsHelp": "Komadega eraldatud loetelu laiustest (px), millega trickplay-pildid genereeritakse. Kõik pildid peaksid olema proportsioonis allikaga, nii et laius 320 16:9 videol on umbes 320x180.", + "OptionExtractTrickplayImage": "Luba trickplay piltide genereerimine", + "LabelExtractTrickplayDuringLibraryScan": "Genereeri trickplay pildid meediakogu skaneerimise ajal", + "PriorityIdle": "Vaba", + "LabelImageIntervalHelp": "Ajavahemik (ms) iga uue trickplay pildi vahel.", + "PriorityNormal": "Normaalväärtus", + "PriorityAboveNormal": "Üle normaalväärtuse", + "LabelTileWidthHelp": "Piltide maksimaalne arv ühe ruudu kohta X-suunas.", + "ExtractTrickplayImagesHelp": "Trickplay-pildid on sarnased peatükkide piltidega, kuid need hõlmavad kogu sisu. Neid kasutatakse videote skriinimisel eelvaate kuvamiseks." } From 6ad7de321101594f5b66d9fcb3e7d8fba7da374c Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Sun, 22 Sep 2024 10:28:59 +0000 Subject: [PATCH 059/186] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 84a691f706..86c4828460 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1846,7 +1846,7 @@ "LabelAllowContentWithTags": "Allow items with tags", "EnableSmoothScroll": "Enable smooth scroll", "EncodingFormatHelp": "Select the video encoding that Jellyfin should transcode to. Jellyfin will use software encoding when hardware acceleration for the selected format is not available. H264 encoding will always be enabled.", - "LabelTrickplayAccelEncodingHelp": "Currently only available on QSV, VAAPI and VideoToolbox, this option has no effect on other hardware acceleration methods.", + "LabelTrickplayAccelEncodingHelp": "Currently only available on QSV, VA-API, VideoToolbox and RKMPP, this option has no effect on other hardware acceleration methods.", "LabelEncodingFormatOptions": "Encoding format options", "LabelTrickplayAccelEncoding": "Enable hardware accelerated MJPEG encoding", "LimitSupportedVideoResolutionHelp": "Use 'Maximum Allowed Video Transcoding Resolution' as maximum supported video resolution.", @@ -1950,5 +1950,9 @@ "VideoCodecTagNotSupported": "The video codec tag is not supported", "LabelSaveTrickplayLocally": "Save trickplay images next to media", "LabelSaveTrickplayLocallyHelp": "Saving trickplay images into media folders will put them next to your media for easy migration and access.", - "ReplaceTrickplayImages": "Replace existing trickplay images" + "ReplaceTrickplayImages": "Replace existing trickplay images", + "RenderPgsSubtitle": "Experimental PGS subtitle rendering", + "RenderPgsSubtitleHelp": "Determine if the client should render PGS subtitles instead of using burned in subtitles. This can avoid server-side transcoding in exchange of client-side rendering performance.", + "LabelLyricDownloaders": "Lyric downloaders", + "LyricDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority." } From 161b11cb79594ed8250b657290f9e2a0aec99a8d Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sun, 22 Sep 2024 18:10:06 +0000 Subject: [PATCH 060/186] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 4534d98481..0419ddbd3a 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1875,7 +1875,7 @@ "HeaderNextItemPlayingInValue": "Kế tiếp {0} Đang phát trong {1}", "PluginLoadRepoError": "Đã xảy ra lỗi khi tải thông tin chi tiết tính năng mở rộng từ kho lưu trữ.", "HeaderNextItem": "Kế tiếp {0}", - "AirPlay": "Phát qua AirPlay", + "AirPlay": "AirPlay", "Featurette": "Quảng Bá", "LabelSelectPreferredTranscodeVideoCodec": "Bộ mã hóa video chuyển mã ưa thích", "Trickplay": "Tua nhanh", @@ -1915,7 +1915,7 @@ "ChannelResolutionFullHD": "Full HD", "ChannelResolutionSD": "SD", "ChannelResolutionHD": "HD", - "AllowTonemappingSoftwareHelp": "Tone-mapping có thể chuyển đổi dải động của video từ HDR sang SDR trong khi vẫn giữ được chi tiết hình ảnh và màu sắc, đây là những thông tin rất quan trọng để thể hiện cảnh gốc. Hiện tại, tính năng này chỉ hoạt động với video 10bit HDR10, HLG và HLGDoVi.", + "AllowTonemappingSoftwareHelp": "Tone-mapping có thể chuyển đổi dải động của video từ HDR sang SDR trong khi vẫn giữ được chi tiết hình ảnh và màu sắc, đây là những thông tin rất quan trọng để thể hiện cảnh gốc. Hiện chỉ hoạt động với video 10bit HDR10, HLG và DoVi.", "MediaInfoRotation": "Xoay", "LabelTrickplayKeyFrameOnlyExtraction": "Chỉ tạo hình ảnh từ các khung hình chính", "ForeignPartsOnly": "Chỉ phần Ngoài/Bắt buộc", @@ -1930,5 +1930,11 @@ "LabelTrickplayKeyFrameOnlyExtractionHelp": "Chỉ trích xuất các khung hình chính để xử lý nhanh hơn đáng kể với thời gian kém chính xác hơn. Nếu bộ giải mã phần cứng được cấu hình không hỗ trợ chế độ này, thay vào đó sẽ sử dụng bộ giải mã phần mềm.", "LibraryInvalidItemIdError": "Thư viện đang ở trạng thái không hợp lệ và không thể chỉnh sửa. Bạn có thể đang gặp phải lỗi: đường dẫn trong cơ sở dữ liệu không khớp với đường dẫn trên hệ thống tệp.", "EnableHi10pHelp": "Bật để tránh chuyển mã video H.264 10-bit. Tắt tùy chọn này nếu video hiển thị khung hình trống.", - "EnableHi10p": "Kích hoạt cấu hình H.264 High 10" + "EnableHi10p": "Kích hoạt cấu hình H.264 High 10", + "AllowFmp4TranscodingContainerHelp": "Cho phép bộ chứa chuyển mã fMP4 cho bộ điều chỉnh này để bật nội dung HEVC và HDR. Không phải tất cả các bộ chỉnh đều tương thích với vùng chứa này. Tắt tính năng này nếu bạn gặp sự cố phát lại.", + "AllowStreamSharingHelp": "Cho phép Jellyfin sao chép luồng mpegts từ bộ dò sóng và chia sẻ luồng trùng lặp này với các máy khách của nó. Điều này hữu ích khi bộ dò có tổng giới hạn số lượng luồng nhưng cũng có thể gây ra sự cố phát lại.", + "FallbackMaxStreamingBitrateHelp": "Tốc độ bit phát trực tuyến tối đa được sử dụng làm dự phòng khi ffprobe không thể xác định tốc độ bit của luồng nguồn. Điều này giúp ngăn khách hàng yêu cầu tốc độ bit chuyển mã quá cao, điều này có thể khiến trình phát bị lỗi và khiến bộ mã hóa bị quá tải.", + "AlwaysRemuxFlacAudioFilesHelp": "Nếu bạn có các tệp mà trình duyệt của bạn từ chối phát hoặc nơi nó tính toán dấu thời gian không chính xác, hãy bật tính năng này như một giải pháp thay thế.", + "AlwaysRemuxMp3AudioFilesHelp": "Nếu bạn có các tệp mà trình duyệt của bạn tính toán dấu thời gian không chính xác, hãy kích hoạt tính năng này như một giải pháp thay thế.", + "DisableVbrAudioEncodingHelp": "Ngăn máy chủ mã hóa âm thanh bằng VBR cho máy khách này." } From 8db562bf5a3ab177c4886a513716b4a67286c919 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sun, 22 Sep 2024 18:15:48 +0000 Subject: [PATCH 061/186] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 0419ddbd3a..67ab63db1a 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1403,7 +1403,7 @@ "EnableAutoCast": "Đặt mặc định", "Studios": "Hãng Phim", "Bwdif": "Bộ Lọc Khử Xen Kẽ Bob Weaver (BWDIF)", - "Yadif": "Bộ lọc giải giao điểm khác (YADIF): là bộ lọc giải giao điểm giúp chuyển đổi video giao điểm thành video toàn màn hình, cải thiện chất lượng hình ảnh bằng cách loại bỏ các dòng giao điểm và làm mịn video.", + "Yadif": "Một bộ lọc khử xen kẽ khác (YADIF)", "Writers": "Người viết", "Writer": "Người viết", "Video": "Video", @@ -1796,7 +1796,7 @@ "Lyric": "Lời bài hát", "HeaderLyricDownloads": "Tải Xuống Lời Bài Hát", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bộ giải mã âm thanh chuyển mã ưa thích khi phát lại video", - "LibraryScanFanoutConcurrency": "Giới hạn số lượng tác vụ quét thư viện song song", + "LibraryScanFanoutConcurrency": "Giới hạn nhiệm vụ quét thư viện song song", "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ song song tối đa trong quá trình quét thư viện. Đặt giá trị này thành 0 sẽ chọn một giới hạn dựa trên số lõi của hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này.", "Lyrics": "Lời bài hát", "PlaybackError.ASS_RENDER_ERROR": "Đã xảy ra lỗi trong trình kết xuất phụ đề ASS/SSA.", @@ -1838,7 +1838,7 @@ "LabelScanBehaviorHelp": "Hành vi mặc định là không chặn, thao tác này sẽ thêm phương tiện vào thư viện trước khi quá trình tạo trò lừa được thực hiện. Việc chặn sẽ đảm bảo các tệp đánh lừa được tạo trước khi phương tiện được thêm vào thư viện nhưng sẽ khiến quá trình quét mất nhiều thời gian hơn.", "LabelProcessPriorityHelp": "Việc đặt mức này thấp hơn hoặc cao hơn sẽ xác định cách CPU ưu tiên quá trình tạo trò chơi lừa ffmpeg so với các quy trình khác. Nếu bạn nhận thấy sự chậm lại trong khi tạo hình ảnh đánh lừa nhưng không muốn dừng hoàn toàn quá trình tạo hình ảnh, hãy thử giảm tốc độ này cũng như số lượng chuỗi.", "LabelWidthResolutionsHelp": "Danh sách chiều rộng (px) được phân tách bằng dấu phẩy mà hình ảnh đánh lừa sẽ được tạo tại đó. Tất cả hình ảnh phải được tạo theo tỷ lệ với nguồn, do đó chiều rộng 320 trên video 16:9 sẽ có kích thước khoảng 320x180.", - "LabelTrickplayThreads": "Số lượng luồng FFmpeg: được sử dụng khi mã hóa hoặc giải mã video bằng FFmpeg, giúp cải thiện hiệu suất xử lý", + "LabelTrickplayThreads": "Luồng FFmpeg", "SelectPreferredTranscodeVideoAudioCodecHelp": "Chọn mã hóa âm thanh ưa thích để chuyển mã nội dung video. Nếu bộ mã hóa ưu tiên không được hỗ trợ, máy chủ sẽ sử dụng bộ mã hóa tốt nhất hiện có tiếp theo.", "LabelEncodingFormatOptions": "Tùy chọn định dạng mã hóa", "LabelTrickplayAccelEncoding": "Bật mã hóa MJPEG được tăng tốc phần cứng", @@ -1859,7 +1859,7 @@ "ExtractTrickplayImagesHelp": "Hình ảnh Trickplay tương tự như hình ảnh chương, ngoại trừ việc chúng kéo dài toàn bộ nội dung và được dùng để hiển thị bản xem trước khi xem qua video.", "LabelTileHeightHelp": "Số lượng hình ảnh tối đa trên mỗi ô theo hướng Y.", "LabelTrickplayAccel": "Kích hoạt giải mã phần cứng", - "LabelTrickplayAccelEncodingHelp": "Hiện chỉ có trên QSV, VAAPI và VideoToolbox, tùy chọn này không có tác dụng với các loại tăng tốc phần cứng khác.", + "LabelTrickplayAccelEncodingHelp": "Hiện chỉ có trên QSV, VA-API, VideoToolbox và RKMPP, tùy chọn này vô dụng với các loại tăng tốc phần cứng khác.", "LabelImageInterval": "Khoảng Cách Ảnh", "OptionExtractTrickplayImage": "Bật trích xuất hình ảnh đánh lừa", "EnableVideoToolboxTonemapping": "Bật ánh xạ tông màu VideoToolbox", @@ -1926,7 +1926,7 @@ "HearingImpairedShort": "HI/SDH", "LabelTileHeight": "Chiều Cao Ô", "Clip": "Clip", - "LabelQscale": "Chỉ số chất lượng (Qscale)", + "LabelQscale": "Qscale", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Chỉ trích xuất các khung hình chính để xử lý nhanh hơn đáng kể với thời gian kém chính xác hơn. Nếu bộ giải mã phần cứng được cấu hình không hỗ trợ chế độ này, thay vào đó sẽ sử dụng bộ giải mã phần mềm.", "LibraryInvalidItemIdError": "Thư viện đang ở trạng thái không hợp lệ và không thể chỉnh sửa. Bạn có thể đang gặp phải lỗi: đường dẫn trong cơ sở dữ liệu không khớp với đường dẫn trên hệ thống tệp.", "EnableHi10pHelp": "Bật để tránh chuyển mã video H.264 10-bit. Tắt tùy chọn này nếu video hiển thị khung hình trống.", @@ -1936,5 +1936,15 @@ "FallbackMaxStreamingBitrateHelp": "Tốc độ bit phát trực tuyến tối đa được sử dụng làm dự phòng khi ffprobe không thể xác định tốc độ bit của luồng nguồn. Điều này giúp ngăn khách hàng yêu cầu tốc độ bit chuyển mã quá cao, điều này có thể khiến trình phát bị lỗi và khiến bộ mã hóa bị quá tải.", "AlwaysRemuxFlacAudioFilesHelp": "Nếu bạn có các tệp mà trình duyệt của bạn từ chối phát hoặc nơi nó tính toán dấu thời gian không chính xác, hãy bật tính năng này như một giải pháp thay thế.", "AlwaysRemuxMp3AudioFilesHelp": "Nếu bạn có các tệp mà trình duyệt của bạn tính toán dấu thời gian không chính xác, hãy kích hoạt tính năng này như một giải pháp thay thế.", - "DisableVbrAudioEncodingHelp": "Ngăn máy chủ mã hóa âm thanh bằng VBR cho máy khách này." + "DisableVbrAudioEncodingHelp": "Ngăn máy chủ mã hóa âm thanh bằng VBR cho máy khách này.", + "LyricDownloadersHelp": "Kích hoạt và xếp hạng các trình tải xuống phụ đề ưa thích của bạn theo thứ tự ưu tiên.", + "RenderPgsSubtitle": "Kết xuất phụ đề PGS thử nghiệm", + "RenderPgsSubtitleHelp": "Xác định xem khách hàng có nên hiển thị phụ đề PGS thay vì sử dụng phụ đề ghi sẵn hay không. Điều này có thể tránh việc chuyển mã phía máy chủ để đổi lấy hiệu suất hiển thị phía máy khách.", + "LabelLyricDownloaders": "Trình tải lời bài hát", + "LabelAllowFmp4TranscodingContainer": "Cho phép vùng chứa chuyển mã fMP4", + "LabelAllowStreamSharing": "Cho phép chia sẻ luồng", + "LabelFallbackMaxStreamingBitrate": "Tốc độ bit luồng tối đa dự phòng (Mbps)", + "HeaderAudioAdvanced": "Âm Thanh Nâng Cao", + "LabelAlwaysRemuxFlacAudioFiles": "Luôn làm lại các tập tin âm thanh FLAC", + "LabelDisableVbrAudioEncoding": "Tắt mã hóa âm thanh VBR" } From 15fa3cd03c052b2b45745ee7233c35036988472e Mon Sep 17 00:00:00 2001 From: firebird76 Date: Sun, 22 Sep 2024 19:41:46 +0000 Subject: [PATCH 062/186] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index d9208b2290..fc7d68a372 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1860,7 +1860,7 @@ "NonBlockingScan": "Non Blocking - reiht Erstellung ein, kehrt dann zurück", "BlockingScan": "Blocking - reiht Erstellung ein, blockiert Scan bis fertig", "LabelTrickplayAccelEncoding": "Hardwarebeschleunigte MJPEG-Enkodierung aktivieren", - "LabelTrickplayAccelEncodingHelp": "Momentan nur für QSV und VAAPI verfügbar. Diese Option hat für andere Methoden keine Auswirkungen.", + "LabelTrickplayAccelEncodingHelp": "Derzeit nur auf QSV, VA-API, VideoToolbox und RKMPP verfügbar, diese Option hat keine Auswirkungen auf andere Methoden zur Hardwarebeschleunigung.", "Lyrics": "Songtexte", "ConfirmDeleteLyrics": "Das Löschen dieses Songtextes löscht die Datei vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", "DeleteLyrics": "Songtexte löschen", @@ -1940,5 +1940,19 @@ "DisableVbrAudioEncodingHelp": "Verhindern Sie, dass der Server Audio mit VBR für diesen Client kodiert.", "HeaderAudioAdvanced": "Erweiterter Ton", "LabelAlwaysRemuxFlacAudioFiles": "FLAC-Audiodateien immer wieder neu mischen", - "LabelAlwaysRemuxMp3AudioFiles": "MP3-Audiodateien immer wieder neu mischen" + "LabelAlwaysRemuxMp3AudioFiles": "MP3-Audiodateien immer wieder neu mischen", + "LabelAllowFmp4TranscodingContainer": "fMP4-Transkodierungscontainer zulassen", + "FallbackMaxStreamingBitrateHelp": "Die maximale Streaming-Bitrate wird als Fallback verwendet, wenn ffprobe die Bitrate des Quellstreams nicht ermitteln kann. Dadurch wird verhindert, dass Clients eine zu hohe Transcodierungs-Bitrate anfordern, was zu einem Ausfall des Players und einer Überlastung des Encoders führen könnte.", + "AllowFmp4TranscodingContainerHelp": "Erlauben Sie den fMP4-Transcodierungscontainer für diesen Tuner, um HEVC- und HDR-Inhalte zu aktivieren. Nicht alle Tuner sind mit diesem Container kompatibel. Deaktivieren Sie dies, wenn bei der Wiedergabe Probleme auftreten.", + "AllowStreamSharingHelp": "Erlauben Sie Jellyfin, den MPEG-Stream vom Tuner zu duplizieren und diesen duplizierten Stream an seine Clients weiterzugeben. Dies ist nützlich, wenn der Tuner eine Gesamtstreamanzahlbegrenzung hat, kann aber auch zu Wiedergabeproblemen führen.", + "RenderPgsSubtitleHelp": "Legen Sie fest, ob der Client PGS-Untertitel rendern soll, anstatt eingebaute Untertitel zu verwenden. Dadurch kann eine serverseitige Transkodierung vermieden und die clientseitige Rendering-Leistung verbessert werden.", + "LabelAllowStreamSharing": "Stream-Sharing zulassen", + "LabelFallbackMaxStreamingBitrate": "Maximale Fallback-Stream-Bitrate (Mbps)", + "VideoCodecTagNotSupported": "Das Video-Codec-Tag wird nicht unterstützt", + "LabelLyricDownloaders": "Songtext-Downloader", + "LyricDownloadersHelp": "Aktivieren und ordnen Sie Ihre bevorzugten Untertitel-Downloader nach der Priorität.", + "ReplaceTrickplayImages": "Ersetzen vorhandener Trickplay-Bilder", + "LabelSaveTrickplayLocally": "Trickplay-Bilder bei den Medien speichern", + "LabelSaveTrickplayLocallyHelp": "Wenn Sie Trickplay-Bilder in Medienordnern speichern, werden sie bei Ihren Medien abgelegt und ermöglichen so eine einfache Migration und den Zugriff.", + "RenderPgsSubtitle": "Experimentelles PGS-Untertitel-Rendering" } From ef936ccfb3b4ed86e010e23e4b0088dc02ad7a6f Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sun, 22 Sep 2024 19:46:22 +0000 Subject: [PATCH 063/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 5df522e456..941e33138a 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1802,28 +1802,28 @@ "AllowMjpegEncoding": "允许以 MJPEG 格式编码(用于生成特技播放预览图)", "LabelTrickplayAccelHelp": "如果您的硬件支持,请确保在转码中启用“允许 MJPEG 格式编码”。", "NonBlockingScan": "非阻塞 - 将预览图生成添加到任务队列,然后返回", - "Trickplay": "特技播放", + "Trickplay": "进度条预览图", "LabelTrickplayAccel": "启用硬件解码", "BlockingScan": "阻塞 - 将预览图生成添加到任务队列,阻塞扫描直至完成", "LabelScanBehavior": "扫描方式", - "LabelScanBehaviorHelp": "默认行为是非阻塞,即在生成特技播放预览图之前将媒体添加到库中。阻塞将确保在将媒体添加到库中之前生成特技播放预览图文件,但会使扫描时间明显变长。", + "LabelScanBehaviorHelp": "默认行为是非阻塞,即在生成进度条预览图之前将媒体添加到库中。阻塞将确保在将媒体添加到库中之前生成进度条预览图,但会使扫描时间明显变长。", "PriorityHigh": "高", "PriorityAboveNormal": "高于正常", "PriorityNormal": "正常", "PriorityBelowNormal": "低于正常", "PriorityIdle": "闲时", "LabelProcessPriority": "进程优先级", - "LabelProcessPriorityHelp": "将此值设置得更低或更高将决定 CPU 如何优先处理 FFmpeg 特技播放预览图生成过程与其他过程的关系。如果您在生成特技播放图像时发现运行缓慢,但又不想完全停止生成,请尝试降低此值以及线程数。", + "LabelProcessPriorityHelp": "将此值设置得更低或更高将决定 CPU 如何优先处理 FFmpeg 进度条预览图生成过程与其他过程的关系。如果您在生成预览图时发现运行缓慢,但又不想完全停止生成,请尝试降低此值以及线程数。", "LabelImageInterval": "图像间隔", - "LabelImageIntervalHelp": "每个新的特技播放预览图之间的时间间隔(毫秒)。", + "LabelImageIntervalHelp": "每个新的进度条预览图之间的时间间隔(毫秒)。", "LabelWidthResolutions": "宽度分辨率", - "LabelWidthResolutionsHelp": "以逗号分隔的列表,列出将生成特技播放预览图的宽度 (以像素为单位)。所有图像都应按源比例生成,因此 16:9 视频的宽度 320 最终约为 320x180。", + "LabelWidthResolutionsHelp": "以逗号分隔的列表,列出将生成的进度条预览图的宽度 (以像素为单位)。所有图像都应按源比例生成,因此 16:9 视频的宽度 320 最终约为 320x180。", "LabelTrickplayThreadsHelp": "传递给 FFmpeg 的“-threads”参数的线程数。", - "OptionExtractTrickplayImage": "启用特技播放预览图提取", - "ExtractTrickplayImagesHelp": "特技播放预览图与章节图像类似,不同之处在于它们跨越整个内容的长度并用于在浏览视频时显示预览。", + "OptionExtractTrickplayImage": "启用进度条预览图提取", + "ExtractTrickplayImagesHelp": "进度条预览图与章节图像类似,不同之处在于它们跨越整个内容的长度并用于在浏览视频时显示预览。", "LabelTileHeightHelp": "Y 方向上每个图块的最大图像数量。", "LabelJpegQuality": "JPEG 质量", - "LabelJpegQualityHelp": "特技播放预览图的 JPEG 压缩质量。", + "LabelJpegQualityHelp": "进度条预览图的 JPEG 压缩质量。", "LabelQscale": "质量因数(Qscale)", "LabelQscaleHelp": "FFmpeg 输出图片的质量等级,2 为最高品质,31 为最低品质。", "LabelTrickplayThreads": "FFmpeg 线程数", @@ -1834,9 +1834,9 @@ "LabelTileWidthHelp": "X 方向上每个图块的最大图像数量。", "LabelTileWidth": "图块宽度", "LabelTileHeight": "图块高度", - "LabelExtractTrickplayDuringLibraryScan": "在媒体库扫描期间提取特技播放预览图", + "LabelExtractTrickplayDuringLibraryScan": "在媒体库扫描期间提取进度条预览图", "ConfirmDeleteSeries": "删除此系列将从文件系统和媒体库中删除共计 {0} 集。您确定要继续吗?", - "LabelExtractTrickplayDuringLibraryScanHelp": "在媒体库扫描期间导入视频时生成特技播放预览图。否则,它们将在特技播放预览图计划任务期间被提取。如果生成设置为非阻塞,则不会影响库扫描完成所需的时间。", + "LabelExtractTrickplayDuringLibraryScanHelp": "在媒体库扫描期间导入视频时生成进度条预览图。否则,它们将在进度条预览图的计划任务期间被提取。如果生成设置为非阻塞,则不会影响库扫描完成所需的时间。", "Lyric": "歌词", "PlaybackError.RateLimitExceeded": "由于速率限制,该媒体目前无法播放。", "PlaybackError.ASS_RENDER_ERROR": "ASS/SSA 字幕渲染器遇到错误。", @@ -1941,9 +1941,9 @@ "LabelAlwaysRemuxMp3AudioFiles": "总是重新混合 MP3 音频文件", "LabelAlwaysRemuxFlacAudioFiles": "总是重新混合 FLAC 音频文件", "LabelDisableVbrAudioEncoding": "禁用 VBR 音频编码", - "LabelSaveTrickplayLocally": "将特技播放图像保存在媒体旁边", - "LabelSaveTrickplayLocallyHelp": "将特技播放图像保存到媒体文件夹中会将它们放在媒体旁边,以便于迁移和访问。", - "ReplaceTrickplayImages": "替换现有的特技图像", + "LabelSaveTrickplayLocally": "将进度条预览图保存在媒体旁边", + "LabelSaveTrickplayLocallyHelp": "将进度条预览图保存到媒体文件夹中会将它们放在媒体旁边,以便于迁移和访问。", + "ReplaceTrickplayImages": "替换现有的进度条预览图", "AllowFmp4TranscodingContainerHelp": "允许此调谐器使用 fMP4 转码容器来启用 HEVC 和 HDR 内容。并非所有调谐器都兼容此容器。如果您遇到播放问题,请禁用此功能。", "AllowStreamSharingHelp": "允许 Jellyfin 复制调谐器中的 mpegts 流并将此复制的流共享给其客户端。当调谐器的总流数有限制时,这很有用,但也可能导致播放问题。", "FallbackMaxStreamingBitrateHelp": "当 ffprobe 无法确定源流比特率时,最大流比特率将用作后备。这有助于防止客户端请求过高的转码比特率,这可能会导致播放器失败并使编码器过载。", From b05b444b3823d3d46c4544fbca4702a552ffa410 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Mon, 23 Sep 2024 06:27:47 +0000 Subject: [PATCH 064/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/strings/et.json b/src/strings/et.json index 415d720b98..0dbf9fbfbc 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -285,7 +285,7 @@ "CustomDlnaProfilesHelp": "Loo kohandatud profiil uue seadme jaoks või tühista süsteemi profiil.", "ConfigureDateAdded": "Seadista, kuidas lisamise kuupäev kuvatakse juhtpaneeli meediakogu seadetes", "Banner": "Bänner", - "AllowTonemappingHelp": "Värvikaardistus võib muuta video dünaamilise ulatuse HDR -st SDR -ks, säilitades samal ajal pildi üksikasjad ja värvid, mis on algse stseeni kujutamisel väga oluline teave. Praegu töötab ainult 10-bitise HDR10, HLG ja DoVi videotega. See vajab vastavat GPGPU käitusaega.", + "AllowTonemappingHelp": "Värvikaardistus võib muuta video dünaamilise ulatuse HDR -st SDR -ks, säilitades samal ajal pildi üksikasjad ja värvid, mis on algse stseeni kujutamisel väga oluline teave. Praegu töötab ainult 10-bitise HDR10, HLG ja DoVi videotega. See vajab vastavat GPGPU rakendust.", "HeaderDirectPlayProfile": "Otse-esituse profiil", "HeaderContainerProfileHelp": "Konteineri profiilid näitavad seadme piiranguid teatud vormingute esitamisel. Kui kehtib piirang, meedium transkooditakse, isegi kui vorming on seadistatud otse-esituseks.", "HeaderCodecProfileHelp": "Koodeki profiilid näitavad seadme piiranguid konkreetsete koodekite esitamisel. Kui kehtivad piirangud, transkooditakse meedia, isegi kui koodek on seadistatud otse-esituseks.", @@ -624,9 +624,9 @@ "AllowRemoteAccess": "Luba kaugühendused selle serveriga", "AllowOnTheFlySubtitleExtractionHelp": "Manustatud subtiitreid saab videost eraldada ja klientidele lihttekstina edastada, et vältida video transkoodimist. Mõnes süsteemis võib see võtta kaua aega ja põhjustada video taasesituse seiskumise eraldamise ajal. Keela see, et manustatud subtiitrid põletataks video transkoodimisel sisse, kui klientseade ei toeta subtiitreid.", "AllowOnTheFlySubtitleExtraction": "Luba subtiitrite eraldamine lennult", - "AllowMediaConversionHelp": "Luba või keela meedia teisendamine.", + "AllowMediaConversionHelp": "Luba või keela ligipääs meedia teisendamine featuurile.", "AllowMediaConversion": "Luba meedia teisendamine", - "AllowHWTranscodingHelp": "Luba tuuneril voogesituse ajal transkoodida. See võib aidata vähendada serveri nõutavat transkoodimist.", + "AllowHWTranscodingHelp": "Luba tuuneril voogesituse ajal striime transkoodeerida. See võib aidata vähendada serveri nõutavat transkoodimist.", "AllowFfmpegThrottlingHelp": "Kui transkodeerimine jõuab taasesituskohast ette, peata protsess ressursside säästmiseks. See on kasulik, kui enamasti vaatad filme otsimata. Kui taasesitusega tekib probleeme siis lülita see välja.", "AllowFfmpegThrottling": "Piira transkoodimist", "AllowedRemoteAddressesHelp": "Komaga eraldatud IP-aadresside loend või IP/võrgumaski kirjed võrkudele, millel on lubatud kaugühendus luua. Kui see tühjaks jäetakse, on kõik kaugaadressid lubatud.", @@ -1656,7 +1656,7 @@ "Select": "Vali", "EnableIntelLowPowerH264HwEncoder": "Luba Intel Low-Power H.264 riistvara kodeerija", "HeaderDummyChapter": "Peatükipildid", - "LabelSegmentKeepSecondsHelp": "Aeg sekundites, kui kaua segmente tuleks hoida, peale seda kui need on kliendi poolt alla laetud. Töötab ainult siis, kui segmendi kustutamine on lubatud.", + "LabelSegmentKeepSecondsHelp": "Aeg sekundites, kui kaua segmente tuleks hoida, peale seda kui need on kliendi poolt alla laetud. Töötab ainult siis, kui segmentide kustutamine on lubatud.", "DeinterlaceMethodHelp": "Valige lahtipõimitud sisu tarkvara ümberkodeerimisel kasutatav lahtipõimimis meetod. Kui riistvaralist lahtipõimimist toetav riistvarakiirendus on lubatud, kasutatakse selle sätte asemel riistvaralist lahtipõimijat.", "EnableRewatchingNextUp": "Luba uuesti vaatamine Järgmises", "IntelLowPowerEncHelp": "Madala võimsusega kodeering võib hoida tarbetut CPU-GPU sünkroonimist. Linuxis tuleb need keelata, kui i915 HuC püsivara pole konfigureeritud.", @@ -1666,10 +1666,10 @@ "PreferSystemNativeHwDecoder": "Eelistage OS-i DXVA või VA-API riistvaradekoodereid", "AllowCollectionManagement": "Luba sellel kasutajal kogusid hallata", "AllowSegmentDeletion": "Kustuta segmendid", - "AllowSegmentDeletionHelp": "Kustuta vanad segmendid pärast nende alla laadimist kliendi poolt. See hoiab ära kogu ümberkodeeritud faili kettale salvestamise. Lülita see välja, kui taasesitusega tekib probleeme.", - "LabelThrottleDelaySeconds": "Drossel pärast", - "LabelThrottleDelaySecondsHelp": "Aeg sekundites, mille järel transkooder pidurdatakse. Peab olema piisavalt suur, et klient säilitaks terve puhvri. Töötab ainult siis, kui drossel on lubatud.", - "LabelSegmentKeepSeconds": "Aeg hoida segmente", + "AllowSegmentDeletionHelp": "Kustuta vanad segmendid peale kliendipoolset allalaadimist. See hoiab ära kogu ümberkodeeritud faili kettale salvestamise. Lülita see välja, kui taasesitusega tekib probleeme.", + "LabelThrottleDelaySeconds": "Aeglusta peale", + "LabelThrottleDelaySecondsHelp": "Aeg sekundites, mille järel transkooder pidurdatakse. Peab olema piisavalt suur, et klient säilitaks terve puhvri. Töötab ainult siis, kui piiramine on lubatud.", + "LabelSegmentKeepSeconds": "Segmentide eluiga", "Author": "Autor", "BlockContentWithTagsHelp": "Peida meedia, millel on vähemalt üks antud silt.", "ButtonEditUser": "Redigeeri kasutajat", @@ -1701,7 +1701,7 @@ "ChannelResolutionHD": "HD", "ChannelResolutionFullHD": "Full HD", "EnableSmoothScroll": "Luba sujuv kerimine", - "AllowFmp4TranscodingContainerHelp": "Luba sellel tuuneril fMP4 transkodeerimise konteiner, et lubada HEVC ja HDR sisu. Kõik tuunerid ei ühildu selle konteineriga kui taasesitusega tekib probleeme siis lülita see välja.", + "AllowFmp4TranscodingContainerHelp": "Luba sellel tuuneril fMP4 transkodeerimise konteiner, et lubada HEVC ja HDR sisu. Kõik tuunerid ei ühildu selle konteineriga, kui taasesitusega tekib probleeme siis lülita see välja.", "AllowStreamSharingHelp": "Luba Jellyfin'il duplikeerida mpegts striim ja jagada seda striimi klientidele. See on kasulik kui tuuneril on piirang striimide hulgale kuid see võib põhjustada probleeme taasesitamisega.", "AllowTonemappingSoftwareHelp": "Toonikaardistus suudab teisendada dünaamilise HDR sisu SDR'iks säilitades pildi detailid ja värvid mis on oluline et säiliks originaalstseen. Hetkel toimib vaid 10bit HDR10, HLG ja DoVi videotega.", "AlwaysRemuxFlacAudioFilesHelp": "Kui sul on faile mida su brauser et mängi või kus ajatemplid arvutatakse valesti siis lubage see lahenduseks.", From f85c14e13da6545bd4fda101e14a432b7fd2da4f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:17:50 +0000 Subject: [PATCH 065/186] Update dependency @types/react to v18.3.6 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c255c18b2e..4d7c58acbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.5", + "@types/react": "18.3.6", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -6544,9 +6544,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", - "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", + "version": "18.3.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.6.tgz", + "integrity": "sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -30177,9 +30177,9 @@ "dev": true }, "@types/react": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", - "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", + "version": "18.3.6", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.6.tgz", + "integrity": "sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/package.json b/package.json index c8765f66d6..20a138d1b1 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.5", + "@types/react": "18.3.6", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", From f4a13efed7d5c1e4948ab95f4ee37187a8e3802a Mon Sep 17 00:00:00 2001 From: Bromteque Date: Mon, 23 Sep 2024 11:56:02 +0000 Subject: [PATCH 066/186] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index fcc1a5e8dc..cdda531ddd 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1901,5 +1901,6 @@ "FallbackMaxStreamingBitrateHelp": "Den maksimale strømmingbitraten brukes som en fallback når ffprobe ikke klarer å bestemme kildestrømmens bitrate. Dette bidrar til å forhindre at klienter ber om en for høy transkodingsbitrate, noe som kan føre til at spilleren mislykkes og overbelaste enkoderen.", "LabelAllowFmp4TranscodingContainer": "Tillat fMP4 omkoderbeholder", "LabelAllowStreamSharing": "Tillat strømdeling", - "LabelFallbackMaxStreamingBitrate": "Fallback maksimum strømbitrate (Mb/s)" + "LabelFallbackMaxStreamingBitrate": "Fallback maksimum strømbitrate (Mb/s)", + "LabelLyricDownloaders": "Sangtekstnedlasetere" } From 0244f200fd2ca8070b1a7cd7fb790d4114693ae5 Mon Sep 17 00:00:00 2001 From: Bromteque Date: Mon, 23 Sep 2024 11:57:48 +0000 Subject: [PATCH 067/186] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index cdda531ddd..89e6a94a7c 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1902,5 +1902,39 @@ "LabelAllowFmp4TranscodingContainer": "Tillat fMP4 omkoderbeholder", "LabelAllowStreamSharing": "Tillat strømdeling", "LabelFallbackMaxStreamingBitrate": "Fallback maksimum strømbitrate (Mb/s)", - "LabelLyricDownloaders": "Sangtekstnedlasetere" + "LabelLyricDownloaders": "Sangtekstnedlasetere", + "LibraryScanFanoutConcurrencyHelp": "Maksimalt antall parallelle oppgaver under bibliotekskanning. Hvis du setter dette til 0, velges en grense basert på antall kjerner i systemet. ADVARSEL: Hvis du setter dette tallet for høyt, kan det føre til problemer med nettverksfilsystemer. Hvis du støter på problemer, senk dette tallet.", + "RenderPgsSubtitle": "Eksperimentell PGS-undertekstgjengivelse", + "RenderPgsSubtitleHelp": "Bestem om klienten skal gjengi PGS-undertekster i stedet for å bruke innbrente undertekster. Dette kan unngå transkoding på tjenersiden i bytte mot gjengivelsesytelse på klientsiden.", + "PlaybackError.NO_MEDIA_ERROR": "Kan ikke finne en gyldig mediekilde å spille av.", + "LyricDownloadersHelp": "Aktiver og ranger dine foretrukne undertekstnedlastere i prioritert rekkefølge.", + "PlaylistPublic": "Tillat allmenntilgang", + "PluginEnableError": "Det oppstod en feil under aktivering av pluginen.", + "PluginDisableError": "Det oppstod en feil under deaktivering av pluginen.", + "PluginLoadConfigError": "Det oppsto en feil under henting av konfigurasjonssidene for pluginen.", + "PluginUninstallError": "Det oppstod en feil under avinstallering av pluginen.", + "PlaybackError.RateLimitExceeded": "Dette mediet kan ikke spilles av på dette tidspunktet på grunn av hastighetsbegrensninger.", + "SelectPreferredTranscodeVideoCodecHelp": "Velg den foretrukne videokodeken å transkode til. Hvis den foretrukne kodeken ikke støttes, bruker serveren den nest beste tilgjengelige kodeken.", + "PlaybackError.SERVER_ERROR": "Avspilling mislyktes på grunn av en tjenerfeil.", + "VideoCodecTagNotSupported": "Videokodek-taggen støttes ikke", + "LibraryInvalidItemIdError": "Biblioteket er i en ugyldig tilstand og kan ikke redigeres. Du støter muligens på en feil: banen i databasen er ikke den riktige banen på filsystemet.", + "LimitSupportedVideoResolutionHelp": "Bruk 'Maksimal tillatt videoomkodingsoppløsning' som maksimal støttet videooppløsning.", + "AllowVideoToolboxTonemappingHelp": "Maskinvare-akselerert tone-mapping levert av VideoToolbox. Den fungerer med de fleste HDR-formater, inkludert HDR10, HDR10+, og HLG, men fungerer ikke med Dolby Vision Profile 5. Dette har høyere prioritet sammenlignet med en annen Metal-implementering.", + "PlaybackError.ASS_RENDER_ERROR": "Det oppsto en feil i ASS/SSA-undertekstgjengivelsen.", + "PlaybackError.MEDIA_DECODE_ERROR": "Avspilling mislyktes på grunn av en feil ved dekoding av mediet.", + "PluginLoadRepoError": "Det oppstop en feil under henting av repo-detaljer for pluginen.", + "EnableVideoToolboxTonemapping": "Aktiver VideoToolbox-tonemapping", + "LabelSaveTrickplayLocallyHelp": "Lagring av trickplay-bilder i mediemapper vil plassere dem ved siden av mediene dine for enkel migrering og tilgang.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Trekk ut nøkkelrammer bare for betydelig raskere behandling med mindre nøyaktig timing. Hvis den konfigurerte maskinvaredekoderen ikke støtter denne modusen, vil programvaredekoderen brukes i stedet.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Avspilling mislyktes fordi media ikke støttes av denne klienten.", + "PlaybackError.PLAYER_ERROR": "Avspilling mislyktes på grunn av en fatal feil i avspilleren.", + "PlaybackError.NotAllowed": "Avspilling av dette media er ikke tillatt.", + "PlaylistError.AddFailed": "Feil ved tilføying til spilleliste", + "PlaylistError.CreateFailed": "Feil ved opprettelse av spilleliste", + "PlaylistPublicDescription": "Tillat denne spillelisten å bli sett av alle påloggede brukere.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Velg den foretrukne lydkodeken som skal transkodes til for videoinnhold. Hvis den foretrukne kodeken ikke støttes, bruker tjeneren den nest beste tilgjengelige kodeken.", + "EncodingFormatHelp": "Velg videokodingen som Jellyfin skal omkode til. Jellyfin bruker programvarekoding når maskinvareakselerasjon for valgt format ikke er tilgjengelig. H264-koding vil alltid være aktivert.", + "LabelTrickplayAccelEncodingHelp": "Foreløpig kun tilgjengelig på QSV, VA-API, VideoToolbox og RKMPP, dette alternativet har ingen effekt på andre maskinvareakselerasjonsmetoder.", + "NonBlockingScan": "Non Blocking - køgenerering, og returnerer deretter", + "BlockingScan": "Blocking - generering settes i kø, blokker skanning til den er fullført" } From ca2d4592b1298bc1254db7ecf2058c4b08b93d34 Mon Sep 17 00:00:00 2001 From: Bromteque Date: Mon, 23 Sep 2024 12:35:36 +0000 Subject: [PATCH 068/186] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 89e6a94a7c..b110b6275c 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1936,5 +1936,8 @@ "EncodingFormatHelp": "Velg videokodingen som Jellyfin skal omkode til. Jellyfin bruker programvarekoding når maskinvareakselerasjon for valgt format ikke er tilgjengelig. H264-koding vil alltid være aktivert.", "LabelTrickplayAccelEncodingHelp": "Foreløpig kun tilgjengelig på QSV, VA-API, VideoToolbox og RKMPP, dette alternativet har ingen effekt på andre maskinvareakselerasjonsmetoder.", "NonBlockingScan": "Non Blocking - køgenerering, og returnerer deretter", - "BlockingScan": "Blocking - generering settes i kø, blokker skanning til den er fullført" + "BlockingScan": "Blocking - generering settes i kø, blokker skanning til den er fullført", + "LabelProcessPriorityHelp": "Å sette denne lavere eller høyere vil avgjøre hvordan prosessoren prioriterer ffmpeg trickplay generasjonsprosessen i forhold til andre prosesser. Hvis du legger merke til nedgang mens du genererer trickplay-bilder, men ikke ønsker å stoppe generasjonen deres, kan du prøve å senke dette samt antall tråder.", + "LabelScanBehaviorHelp": "Standardoppførselen er non-blocking, som vil legge til media til biblioteket før trickplay-generering er ferdig. Blocking vil sikre at trickplay-filer genereres før media legges til biblioteket, men vil gjøre skanningene betydelig lengre.", + "LabelImageIntervalHelp": "Tidsintervall (ms) mellom hvert nytt trickplay-bilde." } From 68a515c54e0e3584af9b261d8075fff841e3b1be Mon Sep 17 00:00:00 2001 From: Bromteque Date: Mon, 23 Sep 2024 12:39:37 +0000 Subject: [PATCH 069/186] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index b110b6275c..fd3d328087 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1939,5 +1939,15 @@ "BlockingScan": "Blocking - generering settes i kø, blokker skanning til den er fullført", "LabelProcessPriorityHelp": "Å sette denne lavere eller høyere vil avgjøre hvordan prosessoren prioriterer ffmpeg trickplay generasjonsprosessen i forhold til andre prosesser. Hvis du legger merke til nedgang mens du genererer trickplay-bilder, men ikke ønsker å stoppe generasjonen deres, kan du prøve å senke dette samt antall tråder.", "LabelScanBehaviorHelp": "Standardoppførselen er non-blocking, som vil legge til media til biblioteket før trickplay-generering er ferdig. Blocking vil sikre at trickplay-filer genereres før media legges til biblioteket, men vil gjøre skanningene betydelig lengre.", - "LabelImageIntervalHelp": "Tidsintervall (ms) mellom hvert nytt trickplay-bilde." + "LabelImageIntervalHelp": "Tidsintervall (ms) mellom hvert nytt trickplay-bilde.", + "LabelTrickplayThreadsHelp": "Antall tråder som skal passeres til '-threads'-argumentet til ffmpeg.", + "ExtractTrickplayImagesHelp": "Trickplay-bilder ligner på kapittelbilder, bortsett fra at de spenner over hele lengden av innholdet og brukes til å vise en forhåndsvisning når du scrubber gjennom videoer.", + "LabelExtractTrickplayDuringLibraryScanHelp": "Generer trickplay-bilder når videoer importeres under biblioteksskanningen. Ellers vil de bli trukket ut under den planlagte oppgaven med trickplay-bilder. Hvis generering er satt til non-blocking, vil dette ikke påvirke tiden det tar å fullføre en bibliotekskanning.", + "LabelQscaleHelp": "Kvalitetsskalaen til bilder som sendes ut av ffmpeg, med 2 som høyeste kvalitet og 31 er den laveste.", + "LabelExtractTrickplayDuringLibraryScan": "Trekk ut trickplay-bilder under skanningen av biblioteket", + "OptionExtractTrickplayImage": "Aktiver uttrekking av trickplay-bilde", + "LabelWidthResolutionsHelp": "Kommaseparert liste over breddene (px) som trickplay-bilder vil bli generert med. Alle bilder skal genereres proporsjonalt med kilden, så en bredde på 320 på en 16:9-video ender opp på rundt 320x180.", + "LabelTileWidthHelp": "Maksimalt antall bilder per rad i X-retningen.", + "LabelTileHeightHelp": "Maksimalt antall bilder per kolonne i Y-retningen.", + "LabelJpegQualityHelp": "JPEG-komprimeringskvaliteten for trickplay-bilder." } From b27b559d214d47cfcaa0d680a04e13ae8cfa49e8 Mon Sep 17 00:00:00 2001 From: David Stensland Date: Sat, 24 Feb 2024 11:59:17 -0800 Subject: [PATCH 070/186] replace LinkEditUserPreferences with LinkButton --- src/apps/dashboard/routes/users/profile.tsx | 17 +++++------ .../users/LinkEditUserPreferences.tsx | 30 ------------------- 2 files changed, 7 insertions(+), 40 deletions(-) delete mode 100644 src/components/dashboard/users/LinkEditUserPreferences.tsx diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 9ba89001a7..92ef21cf5d 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -9,7 +9,7 @@ import LibraryMenu from '../../../../scripts/libraryMenu'; import ButtonElement from '../../../../elements/ButtonElement'; import CheckBoxElement from '../../../../elements/CheckBoxElement'; import InputElement from '../../../../elements/InputElement'; -import LinkEditUserPreferences from '../../../../components/dashboard/users/LinkEditUserPreferences'; +import LinkButton from '../../../../elements/emby-button/LinkButton'; import SectionTitleContainer from '../../../../elements/SectionTitleContainer'; import SectionTabs from '../../../../components/dashboard/users/SectionTabs'; import loading from '../../../../components/loading/loading'; @@ -38,7 +38,7 @@ function onSaveComplete() { const UserEdit = () => { const [ searchParams ] = useSearchParams(); const userId = searchParams.get('userId'); - const [ userName, setUserName ] = useState(''); + const [ userDto, setUserDto ] = useState(); const [ deleteFoldersAccess, setDeleteFoldersAccess ] = useState([]); const [ authProviders, setAuthProviders ] = useState([]); const [ passwordResetProviders, setPasswordResetProviders ] = useState([]); @@ -147,10 +147,8 @@ const UserEdit = () => { txtUserName.disabled = false; txtUserName.removeAttribute('disabled'); - const lnkEditUserPreferences = page.querySelector('.lnkEditUserPreferences') as HTMLDivElement; - lnkEditUserPreferences.setAttribute('href', 'mypreferencesmenu.html?userId=' + user.Id); LibraryMenu.setTitle(user.Name); - setUserName(user.Name || ''); + setUserDto(user); (page.querySelector('#txtUserName') as HTMLInputElement).value = user.Name || ''; (page.querySelector('.chkIsAdmin') as HTMLInputElement).checked = !!user.Policy?.IsAdministrator; (page.querySelector('.chkDisabled') as HTMLInputElement).checked = !!user.Policy?.IsDisabled; @@ -292,7 +290,7 @@ const UserEdit = () => {
@@ -302,10 +300,9 @@ const UserEdit = () => { className='lnkEditUserPreferencesContainer' style={{ paddingBottom: '1em' }} > - + + {globalize.translate('ButtonEditOtherUserPreferences')} +
diff --git a/src/components/dashboard/users/LinkEditUserPreferences.tsx b/src/components/dashboard/users/LinkEditUserPreferences.tsx deleted file mode 100644 index bc44f458f3..0000000000 --- a/src/components/dashboard/users/LinkEditUserPreferences.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React, { FunctionComponent } from 'react'; -import globalize from 'lib/globalize'; - -type IProps = { - title?: string; - className?: string; -}; - -const createLinkElement = ({ className, title }: IProps) => ({ - __html: ` - ${title} - ` -}); - -const LinkEditUserPreferences: FunctionComponent = ({ className, title }: IProps) => { - return ( -
- ); -}; - -export default LinkEditUserPreferences; From 6eb6d7579730155961a86e26912acd565bbf8e8f Mon Sep 17 00:00:00 2001 From: David Stensland Date: Sat, 24 Feb 2024 12:11:20 -0800 Subject: [PATCH 071/186] use LinkButton in UserCardBox --- .../dashboard/users/UserCardBox.tsx | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/components/dashboard/users/UserCardBox.tsx b/src/components/dashboard/users/UserCardBox.tsx index 3f0897672a..0575dfdac1 100644 --- a/src/components/dashboard/users/UserCardBox.tsx +++ b/src/components/dashboard/users/UserCardBox.tsx @@ -4,19 +4,10 @@ import { formatDistanceToNow } from 'date-fns'; import { getLocaleWithSuffix } from '../../../utils/dateFnsLocale'; import globalize from '../../../lib/globalize'; import IconButtonElement from '../../../elements/IconButtonElement'; +import LinkButton from '../../../elements/emby-button/LinkButton'; import escapeHTML from 'escape-html'; import { getDefaultBackgroundClass } from '../../cardbuilder/cardBuilderUtils'; -const createLinkElement = ({ user, renderImgUrl }: { user: UserDto, renderImgUrl: string }) => ({ - __html: ` - ${renderImgUrl} - ` -}); - type IProps = { user?: UserDto; }; @@ -55,22 +46,21 @@ const UserCardBox: FunctionComponent = ({ user = {} }: IProps) => { const lastSeen = getLastSeenText(user.LastActivityDate); const renderImgUrl = imgUrl ? - `
` : - `
- -
`; +
: +
+ +
; return (
-
+ + {renderImgUrl} +
Date: Sat, 24 Feb 2024 12:12:09 -0800 Subject: [PATCH 072/186] remove unnecessary escapeHTML in UserCardBox --- src/components/dashboard/users/UserCardBox.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/dashboard/users/UserCardBox.tsx b/src/components/dashboard/users/UserCardBox.tsx index 0575dfdac1..22814d4435 100644 --- a/src/components/dashboard/users/UserCardBox.tsx +++ b/src/components/dashboard/users/UserCardBox.tsx @@ -5,7 +5,6 @@ import { getLocaleWithSuffix } from '../../../utils/dateFnsLocale'; import globalize from '../../../lib/globalize'; import IconButtonElement from '../../../elements/IconButtonElement'; import LinkButton from '../../../elements/emby-button/LinkButton'; -import escapeHTML from 'escape-html'; import { getDefaultBackgroundClass } from '../../cardbuilder/cardBuilderUtils'; type IProps = { @@ -73,7 +72,7 @@ const UserCardBox: FunctionComponent = ({ user = {} }: IProps) => { />
- {escapeHTML(user.Name)} + {user.Name}
{lastSeen != '' ? lastSeen : ''} From 7011d09b4b40038daa74a986588eb6f8f7ec67ec Mon Sep 17 00:00:00 2001 From: David Stensland Date: Sat, 24 Feb 2024 12:18:10 -0800 Subject: [PATCH 073/186] use LinkButton in SearchSuggestions --- src/components/search/SearchSuggestions.tsx | 40 ++++++++++----------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/components/search/SearchSuggestions.tsx b/src/components/search/SearchSuggestions.tsx index fb9c8ac5d9..b8e63bd42a 100644 --- a/src/components/search/SearchSuggestions.tsx +++ b/src/components/search/SearchSuggestions.tsx @@ -1,17 +1,19 @@ -import React, { type FC } from 'react'; -import { useSearchSuggestions } from 'hooks/searchHook'; +import React, { FunctionComponent, useEffect, useState } from 'react'; + import Loading from 'components/loading/LoadingComponent'; import { appRouter } from '../router/appRouter'; -import globalize from '../../lib/globalize'; -import LinkButton from 'elements/emby-button/LinkButton'; +import { useSearchSuggestions } from 'hooks/searchHook/useSearchSuggestions'; +import globalize from 'lib/globalize'; +import LinkButton from '../../elements/emby-button/LinkButton'; + import '../../elements/emby-button/emby-button'; -interface SearchSuggestionsProps { - parentId?: string; -} +type SearchSuggestionsProps = { + parentId?: string | null; +}; -const SearchSuggestions: FC = ({ parentId }) => { - const { isLoading, data: suggestions } = useSearchSuggestions(parentId); +const SearchSuggestions: FunctionComponent = ({ parentId }) => { + const { isLoading, data: suggestions } = useSearchSuggestions(parentId || undefined); if (isLoading) return ; @@ -27,19 +29,13 @@ const SearchSuggestions: FC = ({ parentId }) => {
- {suggestions?.map((item) => ( -
- - {item.Name} - -
+ {suggestions?.map(item => ( + + {item.Name} + ))}
From 30bce48c2385b4960a4b94355b29fbf48ffdbce7 Mon Sep 17 00:00:00 2001 From: David Stensland Date: Sat, 24 Feb 2024 12:27:37 -0800 Subject: [PATCH 074/186] use LinkButton in SectionTitleContainer --- src/elements/SectionTitleContainer.tsx | 13 +++++---- src/elements/SectionTitleLinkElement.tsx | 35 ------------------------ 2 files changed, 8 insertions(+), 40 deletions(-) delete mode 100644 src/elements/SectionTitleLinkElement.tsx diff --git a/src/elements/SectionTitleContainer.tsx b/src/elements/SectionTitleContainer.tsx index 88aa01c26c..d60d8bbcb4 100644 --- a/src/elements/SectionTitleContainer.tsx +++ b/src/elements/SectionTitleContainer.tsx @@ -1,6 +1,7 @@ import React, { FunctionComponent } from 'react'; import IconButtonElement from './IconButtonElement'; -import SectionTitleLinkElement from './SectionTitleLinkElement'; +import LinkButton from './emby-button/LinkButton'; +import globalize from '../scripts/globalize'; type IProps = { SectionClassName?: string; @@ -28,11 +29,13 @@ const SectionTitleContainer: FunctionComponent = ({ SectionClassName, ti icon={btnIcon} />} - {isLinkVisible && } + target='_blank' + rel='noopener noreferrer' + href={url}> + {globalize.translate('Help')} + }
); diff --git a/src/elements/SectionTitleLinkElement.tsx b/src/elements/SectionTitleLinkElement.tsx deleted file mode 100644 index 8fd661fc9c..0000000000 --- a/src/elements/SectionTitleLinkElement.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { FunctionComponent } from 'react'; - -import globalize from 'lib/globalize'; - -const createLinkElement = ({ className, title, href }: { className?: string, title?: string, href?: string }) => ({ - __html: ` - ${title} - ` -}); - -type IProps = { - title?: string; - className?: string; - url?: string -}; - -const SectionTitleLinkElement: FunctionComponent = ({ className, title, url }: IProps) => { - return ( -
- ); -}; - -export default SectionTitleLinkElement; From e3fd25cfbdf1c823763ea0eb0b4290882a2b2ddc Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 23 Sep 2024 12:00:22 -0400 Subject: [PATCH 075/186] Fix broken import --- src/elements/SectionTitleContainer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements/SectionTitleContainer.tsx b/src/elements/SectionTitleContainer.tsx index d60d8bbcb4..933dd1e8f0 100644 --- a/src/elements/SectionTitleContainer.tsx +++ b/src/elements/SectionTitleContainer.tsx @@ -1,7 +1,7 @@ import React, { FunctionComponent } from 'react'; import IconButtonElement from './IconButtonElement'; import LinkButton from './emby-button/LinkButton'; -import globalize from '../scripts/globalize'; +import globalize from 'lib/globalize'; type IProps = { SectionClassName?: string; From fbbc8a85f3bb988180e83db436c9cb56cfabb4ec Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 23 Sep 2024 12:01:38 -0400 Subject: [PATCH 076/186] Revert search suggestion layout change --- src/components/search/SearchSuggestions.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/search/SearchSuggestions.tsx b/src/components/search/SearchSuggestions.tsx index b8e63bd42a..25b9f4c25b 100644 --- a/src/components/search/SearchSuggestions.tsx +++ b/src/components/search/SearchSuggestions.tsx @@ -30,12 +30,15 @@ const SearchSuggestions: FunctionComponent = ({ parentId
{suggestions?.map(item => ( - - {item.Name} - +
+ + {item.Name} + +
))}
From 76bde38e22d1efa4b763764b9241fa6a17f5601d Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 23 Sep 2024 12:09:25 -0400 Subject: [PATCH 077/186] Remove unused imports --- src/components/search/SearchSuggestions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/search/SearchSuggestions.tsx b/src/components/search/SearchSuggestions.tsx index 25b9f4c25b..809ad29444 100644 --- a/src/components/search/SearchSuggestions.tsx +++ b/src/components/search/SearchSuggestions.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent, useEffect, useState } from 'react'; +import React, { FunctionComponent } from 'react'; import Loading from 'components/loading/LoadingComponent'; import { appRouter } from '../router/appRouter'; From 4cdda6048c4646f136f6c9380b30ec3b858d5226 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:28:57 +0000 Subject: [PATCH 078/186] Update dependency eslint to v8.57.1 --- package-lock.json | 96 ++++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 62 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index c255c18b2e..8ef6b9b07a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,7 +93,7 @@ "css-loader": "7.1.2", "cssnano": "7.0.6", "es-check": "7.2.1", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-plugin-compat": "4.2.0", "eslint-plugin-import": "2.30.0", "eslint-plugin-jsx-a11y": "6.10.0", @@ -4898,10 +4898,11 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -4943,12 +4944,14 @@ "license": "OFL-1.1" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -4970,10 +4973,12 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -10690,16 +10695,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -11126,6 +11132,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11142,6 +11149,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11156,13 +11164,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11179,6 +11189,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11190,13 +11201,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11209,6 +11222,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -11225,6 +11239,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -11234,6 +11249,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11250,6 +11266,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -11262,6 +11279,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -11277,6 +11295,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11286,6 +11305,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11295,6 +11315,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -11306,13 +11327,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -11328,6 +11351,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -11343,6 +11367,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -11358,6 +11383,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -29151,9 +29177,9 @@ } }, "@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true }, "@fontsource/noto-sans": { @@ -29187,12 +29213,12 @@ "integrity": "sha512-kYthvpBOg0fCgF7ygIaF/mLaZ7kxptJZWWeDaKWnZBd/7DarO3g+QyNe5ur+Vg7Na7kViuyVgPzeqCg5jzzs0w==" }, "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } @@ -29204,9 +29230,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@isaacs/cliui": { @@ -33186,16 +33212,16 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", diff --git a/package.json b/package.json index c8765f66d6..48ad0d1645 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "css-loader": "7.1.2", "cssnano": "7.0.6", "es-check": "7.2.1", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-plugin-compat": "4.2.0", "eslint-plugin-import": "2.30.0", "eslint-plugin-jsx-a11y": "6.10.0", From b122fc92a2c2395062b27c63142b330e25227d26 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:29:13 +0000 Subject: [PATCH 079/186] Update dependency babel-loader to v9.2.1 --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c255c18b2e..497269f1c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,7 +85,7 @@ "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "2.1.1", "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", "confusing-browser-globals": "1.0.11", "copy-webpack-plugin": "12.0.2", @@ -7921,10 +7921,11 @@ } }, "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", "dev": true, + "license": "MIT", "dependencies": { "find-cache-dir": "^4.0.0", "schema-utils": "^4.0.0" @@ -31172,9 +31173,9 @@ "dev": true }, "babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", "dev": true, "requires": { "find-cache-dir": "^4.0.0", diff --git a/package.json b/package.json index c8765f66d6..1863367a9a 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "2.1.1", "autoprefixer": "10.4.20", - "babel-loader": "9.1.3", + "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", "confusing-browser-globals": "1.0.11", "copy-webpack-plugin": "12.0.2", From e3383946b91a361556127dcf05b6f8e300057699 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sat, 7 Sep 2024 02:15:27 -0400 Subject: [PATCH 080/186] Update behavior of expanding drawer sections --- .../drawer/sections/ServerDrawerSection.tsx | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx index d362d872ac..062b453b37 100644 --- a/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/ServerDrawerSection.tsx @@ -2,10 +2,11 @@ import { Dashboard, ExpandLess, ExpandMore, LibraryAdd, People, PlayCircle, Sett import Collapse from '@mui/material/Collapse'; import List from '@mui/material/List'; import ListItem from '@mui/material/ListItem'; +import ListItemButton from '@mui/material/ListItemButton/ListItemButton'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import ListSubheader from '@mui/material/ListSubheader'; -import React from 'react'; +import React, { useCallback, useState } from 'react'; import { useLocation } from 'react-router-dom'; import ListItemLink from 'components/ListItemLink'; @@ -28,8 +29,16 @@ const PLAYBACK_PATHS = [ const ServerDrawerSection = () => { const location = useLocation(); - const isLibrarySectionOpen = LIBRARY_PATHS.includes(location.pathname); - const isPlaybackSectionOpen = PLAYBACK_PATHS.includes(location.pathname); + const [ isLibrarySectionOpen, setIsLibrarySectionOpen ] = useState(LIBRARY_PATHS.includes(location.pathname)); + const [ isPlaybackSectionOpen, setIsPlaybackSectionOpen ] = useState(PLAYBACK_PATHS.includes(location.pathname)); + + const onLibrarySectionClick = useCallback(() => { + setIsLibrarySectionOpen(isOpen => !isOpen); + }, []); + + const onPlaybackSectionClick = useCallback(() => { + setIsPlaybackSectionOpen(isOpen => !isOpen); + }, []); return ( { - + {isLibrarySectionOpen ? : } - + @@ -90,13 +99,13 @@ const ServerDrawerSection = () => { - + {isPlaybackSectionOpen ? : } - + From af1ec35c9e6c9b1adb2aa070cd8eb3926beaac3a Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:01:36 +0000 Subject: [PATCH 081/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 01aa77f9c5..877b9191a1 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1182,7 +1182,7 @@ "ValueCodec": "Codec: {0}", "ValueContainer": "Container: {0}", "ValueVideoCodec": "Videocodec: {0}", - "Whitelist": "Whitelist", + "Whitelist": "Positieflijst", "MediaInfoCodec": "Codec", "Menu": "Menu", "LabelTranscodingFramerate": "Verversingssnelheid transcoderen", @@ -1953,5 +1953,14 @@ "LabelLyricDownloaders": "Ophalers voor liedteksten", "LyricDownloadersHelp": "Rangschik je voorkeursophalers voor liedteksten op volgorde van prioritieit.", "RenderPgsSubtitle": "PGS-ondertiteling weergeven (experimenteel)", - "RenderPgsSubtitleHelp": "Bepaal of de cliënt PGS-ondertiteling zelf moet weergeven in plaats van ingebrande ondertiteling te gebruiken. Dit voorkomt transcoderen aan de serverkant maar kan de weergaveprestaties aan de cliëntkant beïnvloeden." + "RenderPgsSubtitleHelp": "Bepaal of de cliënt PGS-ondertiteling zelf moet weergeven in plaats van ingebrande ondertiteling te gebruiken. Dit voorkomt transcoderen aan de serverkant maar kan de weergaveprestaties aan de cliëntkant beïnvloeden.", + "LabelAudioTagSettings": "Instellingen voor geluidstags", + "LabelCustomTagDelimiters": "Aangepast scheidingsteken voor tags", + "LabelCustomTagDelimitersHelp": "Tekens die als scheidingsteken worden gezien om tags van elkaar te scheiden.", + "LabelDelimiterWhitelist": "Positieflijst scheidingstekens", + "LabelDelimiterWhitelistHelp": "Items die worden uitgesloten van het splitsen van tags. Eén item per regel.", + "UseCustomTagDelimiters": "Aangepast scheidingsteken voor tags gebruiken", + "UseCustomTagDelimitersHelp": "Artiest- en genre-tags splitsen met aangepaste tekens.", + "PreferNonstandardArtistsTagHelp": "Gebruik de incourante ARTISTS-tag in plaats van de ARTIST-tag indien beschikbaar.", + "PreferNonstandardArtistsTag": "ARTISTS-tag verkiezen indien beschikbaar" } From e5c7aa8802110548d0e98bd18d4a35d39e1084af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 18:29:06 +0000 Subject: [PATCH 082/186] Update dependency @jellyfin/libass-wasm to v4.2.3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76eaf909a3..f07a7d2f8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@fontsource/noto-sans-kr": "5.1.0", "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", - "@jellyfin/libass-wasm": "4.2.2", + "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202409080303", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", @@ -5062,9 +5062,9 @@ } }, "node_modules/@jellyfin/libass-wasm": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@jellyfin/libass-wasm/-/libass-wasm-4.2.2.tgz", - "integrity": "sha512-ZPMAhtg6+U4G43WoB0AH2jGoxUTx8Q4O4EwyMc0ZIikbZX6sX5+FDtkCG+x3arQPhEPdCttOL6CwNfxjj2KyCQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@jellyfin/libass-wasm/-/libass-wasm-4.2.3.tgz", + "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==", "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { @@ -29291,9 +29291,9 @@ "dev": true }, "@jellyfin/libass-wasm": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@jellyfin/libass-wasm/-/libass-wasm-4.2.2.tgz", - "integrity": "sha512-ZPMAhtg6+U4G43WoB0AH2jGoxUTx8Q4O4EwyMc0ZIikbZX6sX5+FDtkCG+x3arQPhEPdCttOL6CwNfxjj2KyCQ==" + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@jellyfin/libass-wasm/-/libass-wasm-4.2.3.tgz", + "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { "version": "0.0.0-unstable.202409080303", diff --git a/package.json b/package.json index 9d5c177513..95bf8da864 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@fontsource/noto-sans-kr": "5.1.0", "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", - "@jellyfin/libass-wasm": "4.2.2", + "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202409080303", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", From 6487a00b70c8f1c6dcad7dadaadb18b28236d54d Mon Sep 17 00:00:00 2001 From: Jonas Anderberg Date: Mon, 23 Sep 2024 19:27:37 +0000 Subject: [PATCH 083/186] 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 258038f3a8..cb021c681d 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1890,9 +1890,9 @@ "LabelImageIntervalHelp": "Intervall av tid (ms) mellan varje ny trickplay-bild.", "LabelQscale": "qscale", "HeaderLyricDownloads": "Låttextnedladdningar", - "AlternateDVD": "Växla DVD", + "AlternateDVD": "Alternativ DVD", "Regional": "Regional", - "Alternate": "Växla", + "Alternate": "Alternativ", "LabelInstalled": "Installerad", "LabelEnablePlugin": "Aktivera tillägg", "LabelNoChangelog": "Ingen versionshistorik har tillhandahållits för denna version.", From 2a63186fcbd7d121398e4c30d6345ada78b5399c Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Mon, 23 Sep 2024 20:03:56 +0000 Subject: [PATCH 084/186] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 7bed3a3148..5c004e36bd 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1925,5 +1925,8 @@ "PreviewLyrics": "Prévisualiser les paroles", "SearchForLyrics": "Chercher les paroles", "NoLyricsSearchResultsFound": "Pas de paroles trouvées.", - "HeaderUploadLyrics": "Téléverser des paroles" + "HeaderUploadLyrics": "Téléverser des paroles", + "DisableVbrAudioEncodingHelp": "Empêche le serveur d'encoder l'audio avec VBR pour ce client.", + "EnableHi10p": "Active le profil H.264 High 10", + "EnableHi10pHelp": "Activer pour éviter l'encodage des vidéos H.264 10-bits. Désactiver cette option si la vidéo affiche des images vides." } From 27173e90aeef223652718ffd37e403963f82876a Mon Sep 17 00:00:00 2001 From: Jonas Anderberg Date: Mon, 23 Sep 2024 19:54:21 +0000 Subject: [PATCH 085/186] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index cb021c681d..d1b508d6c9 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1933,5 +1933,10 @@ "LabelDisableVbrAudioEncoding": "Inaktivera VBR-ljudkodning", "AlwaysRemuxFlacAudioFilesHelp": "Om du har filer som din webbläsare vägrar att spela upp eller där den beräknar tidsstämplar felaktigt, aktivera detta som en lösning.", "AlwaysRemuxMp3AudioFilesHelp": "Om du har filer som din webbläsare beräknar tidsstämplar felaktigt, aktivera detta som en lösning.", - "DisableVbrAudioEncodingHelp": "Förhindra servern från att koda ljud med VBR för den här klienten." + "DisableVbrAudioEncodingHelp": "Förhindra servern från att koda ljud med VBR för den här klienten.", + "RenderPgsSubtitle": "Experimental PGS-textrendering", + "FallbackMaxStreamingBitrateHelp": "Den högsta uppspelningsbithastigheten används ifall ffprobe inte lyckas fastställa källans bithastighet. Detta gör så att klienter inte efterfrågar en för hög omkodningsbithastighet, vilket kan resultera i att mediespelaren kraschar och överbelastar omkodaren.", + "LabelAllowFmp4TranscodingContainer": "Tillåt fMP4 omkodningscontainer", + "LabelAlwaysRemuxMp3AudioFiles": "Remux:a alltid MP3-ljudfiler", + "LabelAlwaysRemuxFlacAudioFiles": "Remux:a alltid FLAC-ljudfiler" } From c5bbd5bca9fbf54e6bb035fa7c85b0b1b01ac159 Mon Sep 17 00:00:00 2001 From: grafixeyehero Date: Tue, 24 Sep 2024 04:15:12 +0300 Subject: [PATCH 086/186] apply suggestion Co-authored-by: Bill Thornton --- .../details/hooks/api/useGetItemByType.ts | 5 ++-- src/hooks/api/libraryHooks/useGetDownload.ts | 26 ++++++++----------- .../api/liveTvHooks/useCancelSeriesTimer.ts | 9 ++++--- src/hooks/api/liveTvHooks/useCancelTimer.ts | 9 ++++--- src/hooks/api/liveTvHooks/useGetChannel.ts | 21 ++++++++------- .../api/liveTvHooks/useGetSeriesTimer.ts | 23 ++++++++-------- src/hooks/api/liveTvHooks/useGetTimer.ts | 19 +++++++------- .../videosHooks/useDeleteAlternateSources.ts | 9 ++++--- src/strings/en-us.json | 6 ++--- 9 files changed, 64 insertions(+), 63 deletions(-) diff --git a/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts b/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts index 3cb2a9c716..c2966e97d4 100644 --- a/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts +++ b/src/apps/experimental/features/details/hooks/api/useGetItemByType.ts @@ -13,8 +13,9 @@ const getItemByType = async ( options?: AxiosRequestConfig ) => { const { api, user } = apiContext; - if (!api) throw new Error('No API instance available'); - if (!user?.Id) throw new Error('No User ID provided'); + + if (!api) throw new Error('[getItemByType] No API instance available'); + if (!user?.Id) throw new Error('[getItemByType] No User ID provided'); let response; switch (itemType) { diff --git a/src/hooks/api/libraryHooks/useGetDownload.ts b/src/hooks/api/libraryHooks/useGetDownload.ts index 031e0e49b8..a57b7b4c01 100644 --- a/src/hooks/api/libraryHooks/useGetDownload.ts +++ b/src/hooks/api/libraryHooks/useGetDownload.ts @@ -10,29 +10,25 @@ const getDownload = async ( options?: AxiosRequestConfig ) => { const { api, user } = apiContext; - if (!api) throw new Error('No API instance available'); - if (!user?.Id) throw new Error('No User ID provided'); - const response = await getLibraryApi(api).getDownload( - params, - options - ); + if (!api) throw new Error('[getDownload] No API instance available'); + if (!user?.Id) throw new Error('[getDownload] No User ID provided'); + + const response = await getLibraryApi(api).getDownload(params, options); return response.data; }; export const getDownloadQuery = ( apiContext: JellyfinApiContext, params: LibraryApiGetDownloadRequest -) => queryOptions({ - queryKey: ['Download', params.itemId], - queryFn: ({ signal }) => - getDownload(apiContext, params, { signal }), - enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.itemId -}); +) => + queryOptions({ + queryKey: ['Download', params.itemId], + queryFn: ({ signal }) => getDownload(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.itemId + }); -export const useGetDownload = ( - params: LibraryApiGetDownloadRequest -) => { +export const useGetDownload = (params: LibraryApiGetDownloadRequest) => { const apiContext = useApi(); return useQuery(getDownloadQuery(apiContext, params)); }; diff --git a/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts b/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts index 85c98b00e5..20747299ea 100644 --- a/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts +++ b/src/hooks/api/liveTvHooks/useCancelSeriesTimer.ts @@ -8,10 +8,11 @@ const cancelSeriesTimer = async ( params: LiveTvApiCancelSeriesTimerRequest ) => { const { api } = apiContext; - if (api) { - const response = await getLiveTvApi(api).cancelSeriesTimer(params); - return response.data; - } + + if (!api) throw new Error('[cancelSeriesTimer] No API instance available'); + + const response = await getLiveTvApi(api).cancelSeriesTimer(params); + return response.data; }; export const useCancelSeriesTimer = () => { diff --git a/src/hooks/api/liveTvHooks/useCancelTimer.ts b/src/hooks/api/liveTvHooks/useCancelTimer.ts index 7ef8985cba..ed5b7846bf 100644 --- a/src/hooks/api/liveTvHooks/useCancelTimer.ts +++ b/src/hooks/api/liveTvHooks/useCancelTimer.ts @@ -8,10 +8,11 @@ const cancelTimer = async ( params: LiveTvApiCancelTimerRequest ) => { const { api } = apiContext; - if (api) { - const response = await getLiveTvApi(api).cancelTimer(params); - return response.data; - } + + if (!api) throw new Error('[cancelTimer] No API instance available'); + + const response = await getLiveTvApi(api).cancelTimer(params); + return response.data; }; export const useCancelTimer = () => { diff --git a/src/hooks/api/liveTvHooks/useGetChannel.ts b/src/hooks/api/liveTvHooks/useGetChannel.ts index 93e241880c..53b119d485 100644 --- a/src/hooks/api/liveTvHooks/useGetChannel.ts +++ b/src/hooks/api/liveTvHooks/useGetChannel.ts @@ -10,8 +10,9 @@ const getChannel = async ( options?: AxiosRequestConfig ) => { const { api, user } = apiContext; - if (!api) throw new Error('No API instance available'); - if (!user?.Id) throw new Error('No User ID provided'); + + if (!api) throw new Error('[getChannel] No API instance available'); + if (!user?.Id) throw new Error('[getChannel] No User ID provided'); const response = await getLiveTvApi(api).getChannel( { @@ -26,15 +27,15 @@ const getChannel = async ( export const getChannelQuery = ( apiContext: JellyfinApiContext, params: LiveTvApiGetChannelRequest -) => queryOptions({ - queryKey: ['Channel', params.channelId], - queryFn: ({ signal }) => getChannel(apiContext, params, { signal }), - enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.channelId -}); +) => + queryOptions({ + queryKey: ['Channel', params.channelId], + queryFn: ({ signal }) => getChannel(apiContext, params, { signal }), + enabled: + !!apiContext.api && !!apiContext.user?.Id && !!params.channelId + }); -export const useGetChannel = ( - params: LiveTvApiGetChannelRequest -) => { +export const useGetChannel = (params: LiveTvApiGetChannelRequest) => { const apiContext = useApi(); return useQuery(getChannelQuery(apiContext, params)); }; diff --git a/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts b/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts index d7342902a2..91e43baf72 100644 --- a/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts +++ b/src/hooks/api/liveTvHooks/useGetSeriesTimer.ts @@ -10,25 +10,26 @@ const getSeriesTimer = async ( options?: AxiosRequestConfig ) => { const { api } = apiContext; - if (!api) throw new Error('No API instance available'); - const response = await getLiveTvApi(api).getSeriesTimer( - params, - options - ); + if (!api) throw new Error('[getSeriesTimer] No API instance available'); + + const response = await getLiveTvApi(api).getSeriesTimer(params, options); return response.data; }; export const getSeriesTimerQuery = ( apiContext: JellyfinApiContext, params: LiveTvApiGetSeriesTimerRequest -) => queryOptions({ - queryKey: ['SeriesTimer', params.timerId], - queryFn: ({ signal }) => getSeriesTimer(apiContext, params, { signal }), - enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId -}); +) => + queryOptions({ + queryKey: ['SeriesTimer', params.timerId], + queryFn: ({ signal }) => getSeriesTimer(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId + }); -export const useGetSeriesTimer = (requestParameters: LiveTvApiGetSeriesTimerRequest) => { +export const useGetSeriesTimer = ( + requestParameters: LiveTvApiGetSeriesTimerRequest +) => { const apiContext = useApi(); return useQuery(getSeriesTimerQuery(apiContext, requestParameters)); }; diff --git a/src/hooks/api/liveTvHooks/useGetTimer.ts b/src/hooks/api/liveTvHooks/useGetTimer.ts index f219dea059..f328ebfd7a 100644 --- a/src/hooks/api/liveTvHooks/useGetTimer.ts +++ b/src/hooks/api/liveTvHooks/useGetTimer.ts @@ -10,23 +10,22 @@ const getTimer = async ( options?: AxiosRequestConfig ) => { const { api } = currentApi; - if (!api) throw new Error('No API instance available'); - const response = await getLiveTvApi(api).getTimer( - params, - options - ); + if (!api) throw new Error('[getTimer] No API instance available'); + + const response = await getLiveTvApi(api).getTimer(params, options); return response.data; }; export const getTimerQuery = ( apiContext: JellyfinApiContext, params: LiveTvApiGetTimerRequest -) => queryOptions({ - queryKey: ['Timer', params.timerId], - queryFn: ({ signal }) => getTimer(apiContext, params, { signal }), - enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId -}); +) => + queryOptions({ + queryKey: ['Timer', params.timerId], + queryFn: ({ signal }) => getTimer(apiContext, params, { signal }), + enabled: !!apiContext.api && !!apiContext.user?.Id && !!params.timerId + }); export const useGetTimer = (requestParameters: LiveTvApiGetTimerRequest) => { const apiContext = useApi(); diff --git a/src/hooks/api/videosHooks/useDeleteAlternateSources.ts b/src/hooks/api/videosHooks/useDeleteAlternateSources.ts index c504c1bef9..6378a236a9 100644 --- a/src/hooks/api/videosHooks/useDeleteAlternateSources.ts +++ b/src/hooks/api/videosHooks/useDeleteAlternateSources.ts @@ -8,10 +8,11 @@ const deleteAlternateSources = async ( params: VideosApiDeleteAlternateSourcesRequest ) => { const { api } = apiContext; - if (api) { - const response = await getVideosApi(api).deleteAlternateSources(params); - return response.data; - } + + if (!api) throw new Error('[deleteAlternateSources] No API instance available'); + + const response = await getVideosApi(api).deleteAlternateSources(params); + return response.data; }; export const useDeleteAlternateSources = () => { diff --git a/src/strings/en-us.json b/src/strings/en-us.json index eed6dc6722..a707b0a3c8 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1045,8 +1045,8 @@ "MessageAreYouSureDeleteSubtitles": "Are you sure you wish to delete this subtitle file?", "MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", "MessageBrowsePluginCatalog": "Browse our plugin catalog to view available plugins.", - "MessageCancelSeriesTimerError": "An error occurred while cancel series timer", - "MessageCancelTimerError": "An error occurred while cancel timer", + "MessageCancelSeriesTimerError": "An error occurred while canceling the series timer", + "MessageCancelTimerError": "An error occurred while canceling the timer", "MessageChangeRecordingPath": "Changing your recording folder will not migrate existing recordings from the old location to the new. You'll need to move them manually if desired.", "MessageConfirmAppExit": "Do you want to exit?", "MessageConfirmDeleteGuideProvider": "Are you sure you wish to delete this guide provider?", @@ -1099,7 +1099,7 @@ "MessageRenameMediaFolder": "Renaming a media library will cause all metadata to be lost, proceed with caution.", "MessageRepositoryInstallDisclaimer": "WARNING: Installing a third party plugin repository carries risks. It may contain unstable or malicious code, and may change at any time. Only install repositories from authors that you trust.", "MessageSent": "Message sent.", - "MessageSplitVersionsError": "An error occurred while split versions", + "MessageSplitVersionsError": "An error occurred while splitting versions", "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", "MessageSyncPlayDisabled": "SyncPlay disabled.", "MessageSyncPlayEnabled": "SyncPlay enabled.", From abd38b779557d28782ac229836d9713327cf0b14 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 24 Sep 2024 02:16:32 +0000 Subject: [PATCH 087/186] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 67ab63db1a..ddd7bd5b73 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1269,7 +1269,7 @@ "TvLibraryHelp": "Xem lại {0} hướng dẫn đặt tên TV {1}.", "Tuesday": "Thứ ba", "Transcoding": "Chuyển mã", - "Trailers": "Đoạn giới thiệu", + "Trailers": "Trailers", "TabAccess": "Truy cập", "SystemDlnaProfilesHelp": "Cấu hình hệ thống là chỉ đọc. Thay đổi cấu hình hệ thống sẽ được lưu vào cấu hình tùy chỉnh mới.", "Sports": "Thể thao", @@ -1829,15 +1829,15 @@ "DeleteLyrics": "Xóa lời bài hát", "ErrorDeletingLyrics": "Đã xảy ra lỗi khi xóa lời bài hát khỏi máy chủ. Vui lòng kiểm tra xem Jellyfin có quyền ghi vào thư mục phương tiện hay không và thử lại.", "HeaderNoLyrics": "Không tìm thấy lời bài hát", - "LabelExtractTrickplayDuringLibraryScan": "Trích xuất hình ảnh đánh lừa trong quá trình quét thư viện", + "LabelExtractTrickplayDuringLibraryScan": "Trích xuất ảnh tua nhanh trong quá trình quét thư viện", "HeaderVideoAdvanced": "Video Nâng Cao", - "LabelExtractTrickplayDuringLibraryScanHelp": "Tạo hình ảnh đánh lừa khi video được nhập trong quá trình quét thư viện. Nếu không, chúng sẽ được trích xuất trong quá trình thực hiện nhiệm vụ theo lịch trình hình ảnh đánh lừa. Nếu việc tạo được đặt thành không chặn thì điều này sẽ không ảnh hưởng đến thời gian hoàn tất quá trình quét thư viện.", + "LabelExtractTrickplayDuringLibraryScanHelp": "Tạo ảnh tua nhanh khi video được nhập trong quá trình quét thư viện. Nếu không, nó sẽ được trích xuất trong khi chạy theo lịch trình hình ảnh tua nhanh. Nếu việc tạo được đặt là không chặn thì điều này sẽ không ảnh hưởng đến thời gian hoàn tất quá trình quét thư viện.", "EnableTrueHd": "Bật TrueHD", "EnableDts": "Bật DTS (DCA)", "EncodingFormatHelp": "Chọn mã hóa video mà Jellyfin sẽ chuyển mã sang. Jellyfin sẽ sử dụng mã hóa phần mềm khi không thể tăng tốc phần cứng cho định dạng đã chọn. Mã hóa H264 sẽ luôn được bật.", - "LabelScanBehaviorHelp": "Hành vi mặc định là không chặn, thao tác này sẽ thêm phương tiện vào thư viện trước khi quá trình tạo trò lừa được thực hiện. Việc chặn sẽ đảm bảo các tệp đánh lừa được tạo trước khi phương tiện được thêm vào thư viện nhưng sẽ khiến quá trình quét mất nhiều thời gian hơn.", - "LabelProcessPriorityHelp": "Việc đặt mức này thấp hơn hoặc cao hơn sẽ xác định cách CPU ưu tiên quá trình tạo trò chơi lừa ffmpeg so với các quy trình khác. Nếu bạn nhận thấy sự chậm lại trong khi tạo hình ảnh đánh lừa nhưng không muốn dừng hoàn toàn quá trình tạo hình ảnh, hãy thử giảm tốc độ này cũng như số lượng chuỗi.", - "LabelWidthResolutionsHelp": "Danh sách chiều rộng (px) được phân tách bằng dấu phẩy mà hình ảnh đánh lừa sẽ được tạo tại đó. Tất cả hình ảnh phải được tạo theo tỷ lệ với nguồn, do đó chiều rộng 320 trên video 16:9 sẽ có kích thước khoảng 320x180.", + "LabelScanBehaviorHelp": "Mặc định là không chặn, thao tác này sẽ thêm phương tiện vào thư viện trước khi quá trình tạo ảnh tua nhanh được thực hiện. Việc chặn sẽ đảm bảo các tệp ảnh tua nhanh được tạo trước khi phương tiện được thêm vào thư viện nhưng sẽ khiến quá trình quét mất nhiều thời gian hơn.", + "LabelProcessPriorityHelp": "Đặt mức này thấp hoặc cao hơn sẽ xác định cách CPU ưu tiên quá trình tạo ảnh tua nhanh ffmpeg so với các quy trình khác. Nếu bạn thấy chậm trong khi tạo ảnh tua nhanh nhưng không muốn dừng hoàn toàn, hãy thử giảm tốc độ này cũng như số lượng luồng.", + "LabelWidthResolutionsHelp": "Danh sách chiều rộng (px) được phân tách bằng dấu phẩy mà hình ảnh tua nhanh sẽ được tạo tại đó. Tất cả hình ảnh phải được tạo theo tỷ lệ với nguồn, do đó chiều rộng 320 trên video 16:9 sẽ có kích thước khoảng 320x180.", "LabelTrickplayThreads": "Luồng FFmpeg", "SelectPreferredTranscodeVideoAudioCodecHelp": "Chọn mã hóa âm thanh ưa thích để chuyển mã nội dung video. Nếu bộ mã hóa ưu tiên không được hỗ trợ, máy chủ sẽ sử dụng bộ mã hóa tốt nhất hiện có tiếp theo.", "LabelEncodingFormatOptions": "Tùy chọn định dạng mã hóa", @@ -1850,18 +1850,18 @@ "PriorityNormal": "Bình Thường", "PriorityBelowNormal": "Dưới Bình Thường", "LabelProcessPriority": "Quá Trình Ưu Tiên", - "LabelImageIntervalHelp": "Khoảng thời gian (ms) giữa mỗi hình ảnh đánh lừa mới.", + "LabelImageIntervalHelp": "Khoảng thời gian (ms) giữa mỗi hình ảnh tua nhanh mới.", "LabelWidthResolutions": "Độ Phân Giải Chiều Rộng", "LabelTileWidthHelp": "Số lượng hình ảnh tối đa trên mỗi ô theo hướng X.", "LabelJpegQuality": "Chất lượng JPEG", - "LabelJpegQualityHelp": "Chất lượng nén JPEG cho hình ảnh đánh lừa.", + "LabelJpegQualityHelp": "Chất lượng nén JPEG cho hình ảnh tua nhanh.", "LabelTrickplayThreadsHelp": "Số lượng luồng cần chuyển tới đối số '-threads' của ffmpeg.", - "ExtractTrickplayImagesHelp": "Hình ảnh Trickplay tương tự như hình ảnh chương, ngoại trừ việc chúng kéo dài toàn bộ nội dung và được dùng để hiển thị bản xem trước khi xem qua video.", + "ExtractTrickplayImagesHelp": "Hình ảnh Tua Nhanh tương tự như hình ảnh chương, ngoại trừ việc chúng kéo dài toàn bộ nội dung và được dùng để hiển thị bản xem trước khi xem qua video.", "LabelTileHeightHelp": "Số lượng hình ảnh tối đa trên mỗi ô theo hướng Y.", "LabelTrickplayAccel": "Kích hoạt giải mã phần cứng", "LabelTrickplayAccelEncodingHelp": "Hiện chỉ có trên QSV, VA-API, VideoToolbox và RKMPP, tùy chọn này vô dụng với các loại tăng tốc phần cứng khác.", "LabelImageInterval": "Khoảng Cách Ảnh", - "OptionExtractTrickplayImage": "Bật trích xuất hình ảnh đánh lừa", + "OptionExtractTrickplayImage": "Bật trích xuất hình ảnh tua nhanh", "EnableVideoToolboxTonemapping": "Bật ánh xạ tông màu VideoToolbox", "AllowVideoToolboxTonemappingHelp": "Ánh xạ tông màu được tăng tốc phần cứng do VideoToolbox cung cấp. Nó hoạt động với hầu hết các định dạng HDR, bao gồm HDR10, HDR10+ và HLG, nhưng không hoạt động với Dolby Vision Profile 5. Định dạng này có mức độ ưu tiên cao hơn so với triển khai Metal khác.", "Translator": "Người phiên dịch", @@ -1878,7 +1878,7 @@ "AirPlay": "AirPlay", "Featurette": "Quảng Bá", "LabelSelectPreferredTranscodeVideoCodec": "Bộ mã hóa video chuyển mã ưa thích", - "Trickplay": "Tua nhanh", + "Trickplay": "Ảnh Tua Nhanh", "LabelEnablePlugin": "Bật Tính Năng Mở Rộng", "LabelInstalled": "Đã cài đặt", "LabelNoChangelog": "Không có nhật ký thay đổi nào được cung cấp cho phiên bản này.", @@ -1946,5 +1946,19 @@ "LabelFallbackMaxStreamingBitrate": "Tốc độ bit luồng tối đa dự phòng (Mbps)", "HeaderAudioAdvanced": "Âm Thanh Nâng Cao", "LabelAlwaysRemuxFlacAudioFiles": "Luôn làm lại các tập tin âm thanh FLAC", - "LabelDisableVbrAudioEncoding": "Tắt mã hóa âm thanh VBR" + "LabelDisableVbrAudioEncoding": "Tắt mã hóa âm thanh VBR", + "VideoCodecTagNotSupported": "Thẻ mã hóa video không được hỗ trợ", + "LabelAudioTagSettings": "Cài Đặt Thẻ Âm Thanh", + "LabelCustomTagDelimiters": "Dấu Phân Cách Thẻ Tùy Chỉnh", + "LabelCustomTagDelimitersHelp": "Các ký tự được coi là dấu phân cách để phân tách các thẻ.", + "LabelDelimiterWhitelist": "Danh Sách Trắng Phân Cách", + "LabelDelimiterWhitelistHelp": "Các mục được loại trừ khỏi việc chia thẻ. Một mục trên mỗi dòng.", + "PreferNonstandardArtistsTagHelp": "Sử dụng thẻ ARTISTS không chuẩn thay vì thẻ ARTIST khi có sẵn.", + "PreferNonstandardArtistsTag": "Ưu tiên thẻ ARTISTS nếu có", + "UseCustomTagDelimiters": "Sử dụng dấu phân cách thẻ tùy chỉnh", + "UseCustomTagDelimitersHelp": "Tách thẻ nghệ sĩ/thể loại với các ký tự tùy chỉnh.", + "ReplaceTrickplayImages": "Thay thế ảnh tua nhanh hiện có", + "LabelAlwaysRemuxMp3AudioFiles": "Luôn làm lại các tập tin âm thanh MP3", + "LabelSaveTrickplayLocally": "Lưu ảnh tua nhanh bên cạnh phương tiện", + "LabelSaveTrickplayLocallyHelp": "Việc lưu ảnh tua anh vào thư mục phương tiện sẽ đặt chúng kế bên phương tiện của bạn để dễ di chuyển và truy cập." } From 8d710e08ea7b098848252a0c18256b3383f77590 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 05:02:14 +0000 Subject: [PATCH 088/186] Bump rollup from 4.21.3 to 4.22.4 Bumps [rollup](https://github.com/rollup/rollup) from 4.21.3 to 4.22.4. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.21.3...v4.22.4) --- updated-dependencies: - dependency-name: rollup dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 268 +++++++++++++++++++++++----------------------- 1 file changed, 134 insertions(+), 134 deletions(-) diff --git a/package-lock.json b/package-lock.json index f07a7d2f8c..5a28596058 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5678,9 +5678,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz", - "integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -5691,9 +5691,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz", - "integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -5704,9 +5704,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz", - "integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -5717,9 +5717,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz", - "integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -5730,9 +5730,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz", - "integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -5743,9 +5743,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz", - "integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -5756,9 +5756,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz", - "integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -5769,9 +5769,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz", - "integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -5782,9 +5782,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz", - "integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -5795,9 +5795,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz", - "integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -5808,9 +5808,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz", - "integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -5821,9 +5821,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz", - "integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -5834,9 +5834,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz", - "integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -5847,9 +5847,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz", - "integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -5860,9 +5860,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz", - "integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -5873,9 +5873,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz", - "integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -20030,9 +20030,9 @@ } }, "node_modules/rollup": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz", - "integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -20045,22 +20045,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.3", - "@rollup/rollup-android-arm64": "4.21.3", - "@rollup/rollup-darwin-arm64": "4.21.3", - "@rollup/rollup-darwin-x64": "4.21.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.3", - "@rollup/rollup-linux-arm-musleabihf": "4.21.3", - "@rollup/rollup-linux-arm64-gnu": "4.21.3", - "@rollup/rollup-linux-arm64-musl": "4.21.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.3", - "@rollup/rollup-linux-riscv64-gnu": "4.21.3", - "@rollup/rollup-linux-s390x-gnu": "4.21.3", - "@rollup/rollup-linux-x64-gnu": "4.21.3", - "@rollup/rollup-linux-x64-musl": "4.21.3", - "@rollup/rollup-win32-arm64-msvc": "4.21.3", - "@rollup/rollup-win32-ia32-msvc": "4.21.3", - "@rollup/rollup-win32-x64-msvc": "4.21.3", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -29625,114 +29625,114 @@ "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==" }, "@rollup/rollup-android-arm-eabi": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz", - "integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz", - "integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz", - "integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz", - "integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz", - "integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz", - "integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz", - "integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz", - "integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "dev": true, "optional": true }, "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz", - "integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz", - "integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "dev": true, "optional": true }, "@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz", - "integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz", - "integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz", - "integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz", - "integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz", - "integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz", - "integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "dev": true, "optional": true }, @@ -39575,27 +39575,27 @@ } }, "rollup": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz", - "integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "requires": { - "@rollup/rollup-android-arm-eabi": "4.21.3", - "@rollup/rollup-android-arm64": "4.21.3", - "@rollup/rollup-darwin-arm64": "4.21.3", - "@rollup/rollup-darwin-x64": "4.21.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.3", - "@rollup/rollup-linux-arm-musleabihf": "4.21.3", - "@rollup/rollup-linux-arm64-gnu": "4.21.3", - "@rollup/rollup-linux-arm64-musl": "4.21.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.3", - "@rollup/rollup-linux-riscv64-gnu": "4.21.3", - "@rollup/rollup-linux-s390x-gnu": "4.21.3", - "@rollup/rollup-linux-x64-gnu": "4.21.3", - "@rollup/rollup-linux-x64-musl": "4.21.3", - "@rollup/rollup-win32-arm64-msvc": "4.21.3", - "@rollup/rollup-win32-ia32-msvc": "4.21.3", - "@rollup/rollup-win32-x64-msvc": "4.21.3", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "@types/estree": "1.0.5", "fsevents": "~2.3.2" } From e25e7fc8e57ec58977d8532f903368af92c91909 Mon Sep 17 00:00:00 2001 From: Kityn Date: Tue, 24 Sep 2024 05:38:18 +0000 Subject: [PATCH 089/186] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 736b13d243..79adcc28b3 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1954,5 +1954,14 @@ "LabelLyricDownloaders": "Dostawcy słów", "LyricDownloadersHelp": "Umożliwia aktywowanie i używanie dostawców napisów w preferowanej kolejności.", "RenderPgsSubtitle": "Eksperymentalne renderowanie napisów PGS", - "RenderPgsSubtitleHelp": "Określ, czy klient powinien renderować napisy PGS zamiast używać wypalonych napisów. Dzięki temu można uniknąć transkodowania po stronie serwera w zamian za wydajność renderowania po stronie klienta." + "RenderPgsSubtitleHelp": "Określ, czy klient powinien renderować napisy PGS zamiast używać wypalonych napisów. Dzięki temu można uniknąć transkodowania po stronie serwera w zamian za wydajność renderowania po stronie klienta.", + "LabelAudioTagSettings": "Ustawienia tagów audio", + "LabelDelimiterWhitelist": "Biała lista ograniczników", + "LabelDelimiterWhitelistHelp": "Elementy, które należy wykluczyć z podziału tagów. Jeden element w wierszu.", + "PreferNonstandardArtistsTag": "Preferuj tag WYKONAWCY, jeśli jest dostępny", + "UseCustomTagDelimiters": "Użyj niestandardowego ogranicznika tagów", + "LabelCustomTagDelimitersHelp": "Znaki, które należy traktować jako ograniczniki oddzielające tagi.", + "PreferNonstandardArtistsTagHelp": "Jeśli jest dostępny, użyj niestandardowego tagu WYKONAWCY zamiast tagu WYKONAWCA.", + "UseCustomTagDelimitersHelp": "Podziel tagi wykonawcy/gatunku za pomocą niestandardowych znaków.", + "LabelCustomTagDelimiters": "Niestandardowy ogranicznik tagów" } From 9474a483ce790c4f1c75978453253b92db3816d0 Mon Sep 17 00:00:00 2001 From: jellyfin-bot Date: Tue, 24 Sep 2024 07:05:31 +0000 Subject: [PATCH 090/186] Update @jellyfin/sdk to 0.0.0-unstable.202409240640 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f07a7d2f8c..8c67009957 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409080303", + "@jellyfin/sdk": "0.0.0-unstable.202409240640", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.17.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202409080303", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409080303.tgz", - "integrity": "sha512-+rExmu89WtfwnEWcnei2bEbUBB9Oz166eKQQp0arPH7nvgcviDkQJK/lx8D7acCk1AixYKKqUzKrYhZeSfkUTQ==", + "version": "0.0.0-unstable.202409240640", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409240640.tgz", + "integrity": "sha512-/dupW8DItNFcQWHnSAjxebI7Ghi3MLi+tWFGi3JN3XfJbS+xvq9XQbHuoaY9Qhck3vBqqxHdnlNem96VytZwQQ==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29296,9 +29296,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202409080303", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409080303.tgz", - "integrity": "sha512-+rExmu89WtfwnEWcnei2bEbUBB9Oz166eKQQp0arPH7nvgcviDkQJK/lx8D7acCk1AixYKKqUzKrYhZeSfkUTQ==", + "version": "0.0.0-unstable.202409240640", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409240640.tgz", + "integrity": "sha512-/dupW8DItNFcQWHnSAjxebI7Ghi3MLi+tWFGi3JN3XfJbS+xvq9XQbHuoaY9Qhck3vBqqxHdnlNem96VytZwQQ==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 95bf8da864..85240b231f 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409080303", + "@jellyfin/sdk": "0.0.0-unstable.202409240640", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.17.0", From 697c083176e6ecaa317c4c8b2743bbec8123f18d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=B6=9B?= <1210204130@zust.edu.cn> Date: Tue, 24 Sep 2024 08:10:03 +0000 Subject: [PATCH 091/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 941e33138a..fd7a9a85d1 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1954,5 +1954,10 @@ "LabelLyricDownloaders": "歌词下载", "LyricDownloadersHelp": "启用并按优先级顺序排列您喜欢的下载器。", "RenderPgsSubtitle": "实验性 PGS 字幕渲染", - "RenderPgsSubtitleHelp": "在客户端渲染 PGS 字幕,而不是烧录字幕。这以降低客户端渲染性能为代价来避免服务器端转码。" + "RenderPgsSubtitleHelp": "在客户端渲染 PGS 字幕,而不是烧录字幕。这以降低客户端渲染性能为代价来避免服务器端转码。", + "LabelAudioTagSettings": "音频标签设置", + "LabelCustomTagDelimiters": "自定义标签分隔符", + "LabelCustomTagDelimitersHelp": "作为标签分隔符的字符。", + "LabelDelimiterWhitelist": "分隔符白名单", + "UseCustomTagDelimiters": "使用自定义标签分隔符" } From 6543606b1654dea6c23813c4a6acc48636bdffc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=B6=9B?= <1210204130@zust.edu.cn> Date: Tue, 24 Sep 2024 08:29:02 +0000 Subject: [PATCH 092/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index fd7a9a85d1..9de2ea7460 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1957,7 +1957,11 @@ "RenderPgsSubtitleHelp": "在客户端渲染 PGS 字幕,而不是烧录字幕。这以降低客户端渲染性能为代价来避免服务器端转码。", "LabelAudioTagSettings": "音频标签设置", "LabelCustomTagDelimiters": "自定义标签分隔符", - "LabelCustomTagDelimitersHelp": "作为标签分隔符的字符。", + "LabelCustomTagDelimitersHelp": "作为分隔符来分隔标签的字符。", "LabelDelimiterWhitelist": "分隔符白名单", - "UseCustomTagDelimiters": "使用自定义标签分隔符" + "UseCustomTagDelimiters": "使用自定义标签分隔符", + "LabelDelimiterWhitelistHelp": "从标签分隔中排除的项目。每行一项。", + "PreferNonstandardArtistsTag": "可用时首选的艺术家标签", + "PreferNonstandardArtistsTagHelp": "如果可用,使用非标准的艺术家标签代替艺术家标签。", + "UseCustomTagDelimitersHelp": "使用自定义字符分割\"艺术家/类型\"标签。" } From 28d13a51778a02b8ab531a0658735c34dce0a0f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:30:42 +0000 Subject: [PATCH 093/186] Update dependency @types/react to v18.3.7 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f07a7d2f8c..6d0235a28f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.6", + "@types/react": "18.3.7", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -6549,9 +6549,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.6.tgz", - "integrity": "sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", + "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -30204,9 +30204,9 @@ "dev": true }, "@types/react": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.6.tgz", - "integrity": "sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", + "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/package.json b/package.json index 95bf8da864..7bfa14d405 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.6", + "@types/react": "18.3.7", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", From d7a85e7e2af0c13dc489af51565d8d50dcb2e31d Mon Sep 17 00:00:00 2001 From: stanol Date: Tue, 24 Sep 2024 12:54:10 +0000 Subject: [PATCH 094/186] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 45b7f0f330..95d08ab6c4 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1947,5 +1947,12 @@ "LabelAllowStreamSharing": "Дозволити спільний доступ до потоку", "LabelFallbackMaxStreamingBitrate": "Резервна максимальна швидкість потоку (Мбіт/с)", "VideoCodecTagNotSupported": "Тег відеокодека не підтримується", - "HeaderAudioAdvanced": "Розширене аудіо" + "HeaderAudioAdvanced": "Розширене аудіо", + "LabelLyricDownloaders": "Завантажувачі текстів пісень", + "LabelAudioTagSettings": "Налаштування аудіотегів", + "LabelCustomTagDelimiters": "Користувацький роздільник тегів", + "LabelCustomTagDelimitersHelp": "Символи, які слід розглядати як роздільники для розділення тегів.", + "LabelDelimiterWhitelist": "Білий список роздільників", + "LabelDelimiterWhitelistHelp": "Елементи, які слід виключити з розбиття тегів. По одному елементу в рядку.", + "LyricDownloadersHelp": "Увімкніть та розташуйте бажані програми для завантаження субтитрів у порядку пріоритету." } From 157c90090d73f44dceb8c5a53c1182e623e02394 Mon Sep 17 00:00:00 2001 From: stanol Date: Tue, 24 Sep 2024 12:56:15 +0000 Subject: [PATCH 095/186] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 95d08ab6c4..b34ef8960a 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1857,7 +1857,7 @@ "EnableLibrary": "Увімкнути медіатеку", "EnableLibraryHelp": "Якщо вимкнути бібліотеку, її буде приховано від усіх користувачів.", "LabelTrickplayAccelEncoding": "Увімкнути апаратне прискорення кодування MJPEG", - "LabelTrickplayAccelEncodingHelp": "Наразі ця опція доступна лише для QSV, VAAPI та VideoToolbox, вона не впливає на інші методи апаратного прискорення.", + "LabelTrickplayAccelEncodingHelp": "Наразі ця опція доступна лише для QSV, VA-API, VideoToolbox та RKMPP, вона не впливає на інші методи апаратного прискорення.", "DeleteLyrics": "Видалити текст пісні", "ConfirmDeleteLyrics": "Видалення цих текстів пісні призведе до видалення їх як з файлової системи, так і з вашої медіатеки. Ви впевнені, що хочете продовжити?", "ErrorDeletingLyrics": "Виникла помилка при видаленні тексту пісні з сервера. Будь ласка, перевірте, чи має Jellyfin доступ на запис до теки з медіафайлами, і спробуйте ще раз.", @@ -1954,5 +1954,11 @@ "LabelCustomTagDelimitersHelp": "Символи, які слід розглядати як роздільники для розділення тегів.", "LabelDelimiterWhitelist": "Білий список роздільників", "LabelDelimiterWhitelistHelp": "Елементи, які слід виключити з розбиття тегів. По одному елементу в рядку.", - "LyricDownloadersHelp": "Увімкніть та розташуйте бажані програми для завантаження субтитрів у порядку пріоритету." + "LyricDownloadersHelp": "Увімкніть та розташуйте бажані програми для завантаження субтитрів у порядку пріоритету.", + "RenderPgsSubtitleHelp": "Визначає, чи повинен клієнт відтворювати субтитри PGS замість записаних субтитрів. Це дозволить уникнути перекодування на стороні сервера в обмін на продуктивність рендерингу на стороні клієнта.", + "RenderPgsSubtitle": "Експериментальне відображення субтитрів PGS", + "PreferNonstandardArtistsTag": "Надавати перевагу тегу ARTISTS, якщо він доступний", + "PreferNonstandardArtistsTagHelp": "Використовувати нестандартний тег ARTISTS замість тега ARTIST, якщо він доступний.", + "UseCustomTagDelimiters": "Використовувати власний роздільник тегів", + "UseCustomTagDelimitersHelp": "Розділіть теги виконавця/жанру за допомогою спеціальних символів." } From 29642e0aa947277ed7c7bb573234f21aa2e317fa Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 24 Sep 2024 11:57:53 -0400 Subject: [PATCH 096/186] Fix DeviceInfo to DeviceInfoDto type change --- src/apps/dashboard/routes/users/access.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/routes/users/access.tsx b/src/apps/dashboard/routes/users/access.tsx index 44d3179549..25489d2d65 100644 --- a/src/apps/dashboard/routes/users/access.tsx +++ b/src/apps/dashboard/routes/users/access.tsx @@ -1,4 +1,4 @@ -import type { BaseItemDto, DeviceInfo, UserDto } from '@jellyfin/sdk/lib/generated-client'; +import type { BaseItemDto, DeviceInfoDto, UserDto } from '@jellyfin/sdk/lib/generated-client'; import React, { useCallback, useEffect, useState, useRef } from 'react'; import { useSearchParams } from 'react-router-dom'; @@ -96,7 +96,7 @@ const UserLibraryAccess = () => { triggerChange(chkEnableAllChannels); }, []); - const loadDevices = useCallback((user: UserDto, devices: DeviceInfo[]) => { + const loadDevices = useCallback((user: UserDto, devices: DeviceInfoDto[]) => { const page = element.current; if (!page) { @@ -131,7 +131,7 @@ const UserLibraryAccess = () => { } }, []); - const loadUser = useCallback((user: UserDto, mediaFolders: BaseItemDto[], channels: BaseItemDto[], devices: DeviceInfo[]) => { + const loadUser = useCallback((user: UserDto, mediaFolders: BaseItemDto[], channels: BaseItemDto[], devices: DeviceInfoDto[]) => { setUserName(user.Name || ''); libraryMenu.setTitle(user.Name); loadChannels(user, channels); From f6d62f0decc4dc9d89f3a7ff7c6ba8723e4ddd10 Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Tue, 24 Sep 2024 21:36:34 +0000 Subject: [PATCH 097/186] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 86c4828460..92fa5b43a8 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1954,5 +1954,14 @@ "RenderPgsSubtitle": "Experimental PGS subtitle rendering", "RenderPgsSubtitleHelp": "Determine if the client should render PGS subtitles instead of using burned in subtitles. This can avoid server-side transcoding in exchange of client-side rendering performance.", "LabelLyricDownloaders": "Lyric downloaders", - "LyricDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority." + "LyricDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority.", + "LabelAudioTagSettings": "Audio Tag settings", + "LabelCustomTagDelimiters": "Custom Tag Delimiter", + "LabelCustomTagDelimitersHelp": "Characters to be treated as delimiters to separate tags.", + "LabelDelimiterWhitelist": "Delimiter Whitelist", + "LabelDelimiterWhitelistHelp": "Items to be excluded from tag splitting. One item per line.", + "PreferNonstandardArtistsTag": "Prefer ARTISTS tag if available", + "PreferNonstandardArtistsTagHelp": "Use the non-standard ARTISTS tag instead of ARTIST tag when available.", + "UseCustomTagDelimiters": "Use custom tag delimiter", + "UseCustomTagDelimitersHelp": "Split artist/genre tags with custom characters." } From 6b2441ac8546c41e53496ba9f29881d0ca44d16a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 01:29:13 +0000 Subject: [PATCH 098/186] Update dependency sass to v1.79.1 --- package-lock.json | 65 ++++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78fc869499..b96c84dbd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.78.0", + "sass": "1.79.1", "sass-loader": "16.0.1", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -20188,13 +20188,13 @@ "dev": true }, "node_modules/sass": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", - "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.1.tgz", + "integrity": "sha512-+mA7svoNKeL0DiJqZGeR/ZGUu8he4I8o3jyUcOFyo4eBJrwNgIMmAEwCMo/N2Y3wdjOBcRzoNxZIOtrtMX8EXg==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", + "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, @@ -20635,6 +20635,36 @@ } } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", + "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -39688,14 +39718,31 @@ "dev": true }, "sass": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", - "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.1.tgz", + "integrity": "sha512-+mA7svoNKeL0DiJqZGeR/ZGUu8he4I8o3jyUcOFyo4eBJrwNgIMmAEwCMo/N2Y3wdjOBcRzoNxZIOtrtMX8EXg==", "dev": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0", + "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" + }, + "dependencies": { + "chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "readdirp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", + "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "dev": true + } } }, "sass-embedded": { diff --git a/package.json b/package.json index 09694b9eb6..597f111a17 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.78.0", + "sass": "1.79.1", "sass-loader": "16.0.1", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", From 47e2730bc419828da7476e5bca011bd9f7f6fd77 Mon Sep 17 00:00:00 2001 From: jellyfin-bot Date: Wed, 25 Sep 2024 07:13:15 +0000 Subject: [PATCH 099/186] Update @jellyfin/sdk to 0.0.0-unstable.202409250605 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78fc869499..deea0bc715 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409240640", + "@jellyfin/sdk": "0.0.0-unstable.202409250605", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.17.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202409240640", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409240640.tgz", - "integrity": "sha512-/dupW8DItNFcQWHnSAjxebI7Ghi3MLi+tWFGi3JN3XfJbS+xvq9XQbHuoaY9Qhck3vBqqxHdnlNem96VytZwQQ==", + "version": "0.0.0-unstable.202409250605", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409250605.tgz", + "integrity": "sha512-gHJCTYDFHuG9qPfGmPG4baiB4hmzBvGIhjz56p8+IDM4LEUU0dXSPTcUOT7AOGogt1X+xP4vD6lQ7TrvFjGt7w==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29296,9 +29296,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202409240640", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409240640.tgz", - "integrity": "sha512-/dupW8DItNFcQWHnSAjxebI7Ghi3MLi+tWFGi3JN3XfJbS+xvq9XQbHuoaY9Qhck3vBqqxHdnlNem96VytZwQQ==", + "version": "0.0.0-unstable.202409250605", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409250605.tgz", + "integrity": "sha512-gHJCTYDFHuG9qPfGmPG4baiB4hmzBvGIhjz56p8+IDM4LEUU0dXSPTcUOT7AOGogt1X+xP4vD6lQ7TrvFjGt7w==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 09694b9eb6..f92d805948 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409240640", + "@jellyfin/sdk": "0.0.0-unstable.202409250605", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.17.0", From 20d903906b309cd5c92fb4a32e1bd22b21c16bfe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:28:14 +0000 Subject: [PATCH 100/186] Update dependency postcss to v8.4.41 [SECURITY] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78fc869499..11c0ad9c0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -106,7 +106,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "25.0.0", "mini-css-extract-plugin": "2.9.1", - "postcss": "8.4.40", + "postcss": "8.4.41", "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", @@ -16831,9 +16831,9 @@ } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", "dev": true, "funding": [ { @@ -37683,9 +37683,9 @@ "dev": true }, "postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", "dev": true, "requires": { "nanoid": "^3.3.7", diff --git a/package.json b/package.json index 09694b9eb6..7b1d0f7f25 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "25.0.0", "mini-css-extract-plugin": "2.9.1", - "postcss": "8.4.40", + "postcss": "8.4.41", "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", From 318166b40cc4e8171df5e7cd2e7ba77ead8cfb9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:55:41 +0000 Subject: [PATCH 101/186] Update dependency postcss to v8.4.42 [SECURITY] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f0d0c20b78..22d77864b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -106,7 +106,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "25.0.0", "mini-css-extract-plugin": "2.9.1", - "postcss": "8.4.41", + "postcss": "8.4.42", "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", @@ -16831,9 +16831,9 @@ } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.42", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.42.tgz", + "integrity": "sha512-hywKUQB9Ra4dR1mGhldy5Aj1X3MWDSIA1cEi+Uy0CjheLvP6Ual5RlwMCh8i/X121yEDLDIKBsrCQ8ba3FDMfQ==", "dev": true, "funding": [ { @@ -37683,9 +37683,9 @@ "dev": true }, "postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.42", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.42.tgz", + "integrity": "sha512-hywKUQB9Ra4dR1mGhldy5Aj1X3MWDSIA1cEi+Uy0CjheLvP6Ual5RlwMCh8i/X121yEDLDIKBsrCQ8ba3FDMfQ==", "dev": true, "requires": { "nanoid": "^3.3.7", diff --git a/package.json b/package.json index e7a389737c..b4d9a36a9f 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "25.0.0", "mini-css-extract-plugin": "2.9.1", - "postcss": "8.4.41", + "postcss": "8.4.42", "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", From 68596089e6b228c00f3e4386140724a1eaa44c3f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:30:04 +0000 Subject: [PATCH 102/186] Update dependency sass-embedded to v1.79.1 --- package-lock.json | 365 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 191 insertions(+), 176 deletions(-) diff --git a/package-lock.json b/package-lock.json index dcb6c05582..234ecbab36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.78.0" + "sass-embedded": "1.79.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2030,9 +2030,9 @@ "dev": true }, "node_modules/@bufbuild/protobuf": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.1.0.tgz", + "integrity": "sha512-+2Mx67Y3skJ4NCD/qNSdBJNWtu6x6Qr53jeNg+QcwiL6mt0wK+3jwHH2x1p7xaYH6Ve2JKOVn0OxU35WsmqI9A==", "license": "(Apache-2.0 AND BSD-3-Clause)", "optional": true }, @@ -8883,6 +8883,13 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "license": "MIT", + "optional": true + }, "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -20206,14 +20213,15 @@ } }, "node_modules/sass-embedded": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.78.0.tgz", - "integrity": "sha512-NR2kvhWVFABmBm0AqgFw9OweQycs0Qs+/teJ9Su+BUY7up+f8S5F/Zi+7QtAqJlewsQyUNfzm1vRuM+20lBwRQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.1.tgz", + "integrity": "sha512-UIgG9sHZZ1fT28bxOGi6RUTyvuNvnNQ5nUCdeDGOiS+pGhxLNMdoSFd1cwF8cF5+JUfS6PK8TVAc+aNX4Q3ZGQ==", "license": "MIT", "optional": true, "dependencies": { - "@bufbuild/protobuf": "^1.0.0", + "@bufbuild/protobuf": "^2.0.0", "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", "immutable": "^4.0.0", "rxjs": "^7.4.0", "supports-color": "^8.1.1", @@ -20226,32 +20234,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.78.0", - "sass-embedded-android-arm64": "1.78.0", - "sass-embedded-android-ia32": "1.78.0", - "sass-embedded-android-riscv64": "1.78.0", - "sass-embedded-android-x64": "1.78.0", - "sass-embedded-darwin-arm64": "1.78.0", - "sass-embedded-darwin-x64": "1.78.0", - "sass-embedded-linux-arm": "1.78.0", - "sass-embedded-linux-arm64": "1.78.0", - "sass-embedded-linux-ia32": "1.78.0", - "sass-embedded-linux-musl-arm": "1.78.0", - "sass-embedded-linux-musl-arm64": "1.78.0", - "sass-embedded-linux-musl-ia32": "1.78.0", - "sass-embedded-linux-musl-riscv64": "1.78.0", - "sass-embedded-linux-musl-x64": "1.78.0", - "sass-embedded-linux-riscv64": "1.78.0", - "sass-embedded-linux-x64": "1.78.0", - "sass-embedded-win32-arm64": "1.78.0", - "sass-embedded-win32-ia32": "1.78.0", - "sass-embedded-win32-x64": "1.78.0" + "sass-embedded-android-arm": "1.79.1", + "sass-embedded-android-arm64": "1.79.1", + "sass-embedded-android-ia32": "1.79.1", + "sass-embedded-android-riscv64": "1.79.1", + "sass-embedded-android-x64": "1.79.1", + "sass-embedded-darwin-arm64": "1.79.1", + "sass-embedded-darwin-x64": "1.79.1", + "sass-embedded-linux-arm": "1.79.1", + "sass-embedded-linux-arm64": "1.79.1", + "sass-embedded-linux-ia32": "1.79.1", + "sass-embedded-linux-musl-arm": "1.79.1", + "sass-embedded-linux-musl-arm64": "1.79.1", + "sass-embedded-linux-musl-ia32": "1.79.1", + "sass-embedded-linux-musl-riscv64": "1.79.1", + "sass-embedded-linux-musl-x64": "1.79.1", + "sass-embedded-linux-riscv64": "1.79.1", + "sass-embedded-linux-x64": "1.79.1", + "sass-embedded-win32-arm64": "1.79.1", + "sass-embedded-win32-ia32": "1.79.1", + "sass-embedded-win32-x64": "1.79.1" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.78.0.tgz", - "integrity": "sha512-YM6nrmKsj+ImaSTd96F+jzbWSbhPkRN4kedbLgIJ5FsILNa9NAqhmrCQz9pdcjuAhyfxWImdUACsT23CPGENZQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.1.tgz", + "integrity": "sha512-p6TaAOFUDx3DjK3i8Y3c4rNXnSJZcivYL+CojMefHZgJNm7PS0mrpzr4a0kkD25saZO208r+Fa258ax1+GzEvA==", "cpu": [ "arm" ], @@ -20265,9 +20273,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.78.0.tgz", - "integrity": "sha512-2sAr11EgwPudAuyk4Ite+fWGYJspiFSiZDU2D8/vjjI7BaB9FG6ksYqww3svoMMnjPUWBCjKPDELpZTxViLJbw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.1.tgz", + "integrity": "sha512-q+Q1GdLCTVazpfX/vKJGRQJTjZwSkcViUThzSOtCDwNK6vMbJB3x6CHmHmKWYnjceA2y73QRgs9kR+NDLZoPLQ==", "cpu": [ "arm64" ], @@ -20281,9 +20289,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.78.0.tgz", - "integrity": "sha512-TyJOo4TgnHpOfC/PfqCBqd+jGRanWoRd4Br/0KAfIvaIFjTGIPdk26vUyDVugV1J8QUEY4INGE8EXAuDeRldUQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.1.tgz", + "integrity": "sha512-bp4x5gjv1Wq5cAur8iKYZShfG27XUS/nrhqJU0PN2EGqu+YTklYR4ouoR4yZDFXjNA7RKmqqzJE+8Jks5cVnGA==", "cpu": [ "ia32" ], @@ -20297,9 +20305,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.78.0.tgz", - "integrity": "sha512-wwajpsVRuhb7ixrkA3Yu60V2LtROYn45PIYeda30/MrMJi9k3xEqHLhodTexFm6wZoKclGSDZ6L9U5q0XyRKiQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.1.tgz", + "integrity": "sha512-1BJT4XtWvQeCjFUzNg1+Xa8RtIP8p2odBF5ly4i7ON6pHHYknjbpHTXIXFkz5sgLReFue9q/bsKIgvSPHMgkIg==", "cpu": [ "riscv64" ], @@ -20313,9 +20321,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.78.0.tgz", - "integrity": "sha512-k5l66PO0LgSHMDbDzAQ/vqrXMlJ3r42ZHJA8MJvUbA6sQxTzDS381V7L+EhOATwyI225j2FhEeTHW6rr4WBQzA==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.1.tgz", + "integrity": "sha512-eqqDI9hOLNpbdEtBG7uJoAnim5xvscjlUTqHsqGlkddTdnXjwgcUDeqmc3z4iFr1wq7bZpb+xz6FM3MJxeLa7g==", "cpu": [ "x64" ], @@ -20329,9 +20337,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.78.0.tgz", - "integrity": "sha512-3JaxceFSR6N+a22hPYYkj1p45eBaWTt/M8MPTbfzU3TGZrU9bmRX7WlUVtXTo1yYI2iMf22nCv0PQ5ExFF3FMQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.1.tgz", + "integrity": "sha512-6co9oRwPmyvEC9I5SyW+NHOQKLmVfQZVbYWvFQl3EPLsUCTQ88dVteQwPdpm+3MY0GNjLjjVppeyAsmWHjUmjQ==", "cpu": [ "arm64" ], @@ -20345,9 +20353,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.78.0.tgz", - "integrity": "sha512-UMTijqE3fJ8vEaaD7GPG7G3GsHuPKOdpS8vuA2v2uwO3BPFp/rEKah66atvGqvGO+0JYApkSv0YTnnexSrkHIQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.1.tgz", + "integrity": "sha512-9rFlxTj5gxtxA1EBkO3dJ1W70Zebpw28wHUs/wByrT1FqR6+uPnyLOWwt5WJLc4AoS1LLQz/ZeknxL/mKI+GrA==", "cpu": [ "x64" ], @@ -20361,9 +20369,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.78.0.tgz", - "integrity": "sha512-JafT+Co0RK8oO3g9TfVRuG7tkYeh35yDGTgqCFxLrktnkiw5pmIagCfpjxk5GBcSfJMOzhCgclTCDJWAuHGuMQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.1.tgz", + "integrity": "sha512-Qdc94coLXxQ4NNS9DT+V9RtJ7TnttRhaNFR79ZU8RtZ1jHTWLnnC1rEDm1Br3btOy7op3eplFpJahfNZPRFKug==", "cpu": [ "arm" ], @@ -20377,9 +20385,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.78.0.tgz", - "integrity": "sha512-juMIMpp3DIAiQ842y+boqh0u2SjN4m3mDKrDfMuBznj8DSQoy9J/3e4hLh3g+p0/j83WuROu5nNoYxm2Xz8rww==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.1.tgz", + "integrity": "sha512-7LyLZ9XJU/9CAzCrWWFhqGEK620tYoNxMIpqX1yfNUiDGoolXfs1WDpxEiXqQaw4DmcPeAkqqAs8tg7qekDXBg==", "cpu": [ "arm64" ], @@ -20393,9 +20401,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.78.0.tgz", - "integrity": "sha512-Gy8GW5g6WX9t8CT2Dto5AL6ikB+pG7aAXWXvfu3RFHktixSwSbyy6CeGqSk1t0xyJCFkQQA/V8HU9bNdeHiBxg==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.1.tgz", + "integrity": "sha512-9ZsVRSZJvUT6gNL1wS54cRdNqGfpi32zGh4q/Q62AKbAqmNb+BvuQT4TsBLuIEMDaR75Z1xvj1iArguD/LX00A==", "cpu": [ "ia32" ], @@ -20409,9 +20417,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.78.0.tgz", - "integrity": "sha512-DUVXtcsfsiOJ2Zwp4Y3T6KZWX8h0gWpzmFUrx+gSIbg67vV8Ww2DWMjWRwqLe7HOLTYBegMBYpMgMgZiPtXhIA==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.1.tgz", + "integrity": "sha512-4MBu1aFvGE45CYii6dbdce3nPNc8CKcQ0spf7r6DeEn19NWJ0dNkYMTIa8Xy+TwZ1uS92g8E+M/aXmwQlRXQCA==", "cpu": [ "arm" ], @@ -20425,9 +20433,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.78.0.tgz", - "integrity": "sha512-Lu/TlRHbe9aJY7B7PwWCJz7pTT5Rc50VkApWEmPiU/nu0mGbSpg0Xwar6pNeG8+98ubgKKdRb01N3bvclf5a4A==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.1.tgz", + "integrity": "sha512-4iNhJgeyyZrsBA/RwSiTRaxPSsHpvjr8I+oN6E0OpEzyY62QIxhQGGf1A73fOs6tJLw58ba14tAm/bblGefLFQ==", "cpu": [ "arm64" ], @@ -20441,9 +20449,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.78.0.tgz", - "integrity": "sha512-1E5ywUnq6MRPAecr2r/vDOBr93wXyculEmfyF5JRG8mUufMaxGIhfx64OQE6Drjs+EDURcYZ+Qcg6/ubJWqhcw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.1.tgz", + "integrity": "sha512-5CF4mrbrnrtpKcoxuJnF6SryOqjyCdXyPJ6U6PjOUYEA1T1Cd/sE0cB+wswTQRgPVrYQO1d9c0eSEY1gZijp0g==", "cpu": [ "ia32" ], @@ -20457,9 +20465,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.78.0.tgz", - "integrity": "sha512-YvQEvX7ctn5BwC79+HBagDYIciEkwcl2NLgoydmEsBO/0+ncMKSGnjsn/iRzErbq1KJNyjGEni8eSHlrtQI1vQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.1.tgz", + "integrity": "sha512-ZOVpi6c0vfD0vBBtmQqwd4+gGbrnsKnuyrh2ghoNbwg4oMHo85S0rCUR/3Uny6oFDKnTTJkWjamig3gy6ygzYQ==", "cpu": [ "riscv64" ], @@ -20473,9 +20481,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.78.0.tgz", - "integrity": "sha512-azdUcZZvZmtUBslIKr2/l4aQrTX7BvO96TD0GLdWz9vuXZrokYm09AJZEnb5j6Pk5I4Xr0yM6BG1Vgcbzqi5Zg==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.1.tgz", + "integrity": "sha512-0lcQZ7hZ6/gBoJ/Od7BX33Q3jr9oGaQxJfYZ0wmCK4qSu3S06UoBTELy9Njv51h+JaWJFUwzROay8bGWrEVuLQ==", "cpu": [ "x64" ], @@ -20489,9 +20497,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.78.0.tgz", - "integrity": "sha512-g8M6vqHMjZUoH9C1WJsgwu+qmwdJAAMDaJTM1emeAScUZMTaQGzm+Q6C5oSGnAGR3XLT/drgbHhbmruXDgkdeQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.1.tgz", + "integrity": "sha512-KQED61FrdYvW0YEMncBsak/PshpGkdPpzLLGXjdUqKqe6Tiv8/zqrlD8GC8CIvSBRxZs7ybyFMPi1KyjnvtUdQ==", "cpu": [ "riscv64" ], @@ -20505,9 +20513,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.78.0.tgz", - "integrity": "sha512-m997ThzpMwql4u6LzZCoHPIQkgK6bbLPLc7ydemo2Wusqzh6j8XAGxVT5oANp6s2Dmj+yh49pKDozal+tzEX9w==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.1.tgz", + "integrity": "sha512-s4QSuvdNrQq00XB2t3Dt+B05rc5cvONnveHijaXtqS+yb98tvNvDiozVfS20k4k1eklhoBC8FBm165RAXDGEuA==", "cpu": [ "x64" ], @@ -20521,9 +20529,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.78.0.tgz", - "integrity": "sha512-qTLIIC5URYRmeuYYllfoL0K1cHSUd+f3sFHAA6fjtdgf288usd6ToCbWpuFb0BtVceEfGQX8lEp+teOG7n7Quw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.1.tgz", + "integrity": "sha512-S7gzwMAvevFEJGZaWNltfJtvi8LCceWNs94b8uHQhmq8F/YFRy/iNPVAVB3SvnvBrIk8Iy2X6AXWoneLHFsNfg==", "cpu": [ "arm64" ], @@ -20537,9 +20545,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.78.0.tgz", - "integrity": "sha512-BrOWh18T6Y9xgCokGXElEnd8j03fO4W83bwJ9wHRRkrQWaeHtHs3XWW0fX1j2brngWUTjU+jcYUijWF1Z60krw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.1.tgz", + "integrity": "sha512-UjxQ6KtO3UthJMvjlVaE3QiO76wRXLcM/gejSp2cgYUVRHYXFr88z0XjQiZc9mJEuvHi69BvvmpCjN4iptKO5A==", "cpu": [ "ia32" ], @@ -20553,9 +20561,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.78.0.tgz", - "integrity": "sha512-C14iFDJd7oGhmQehRiEL7GtzMmLwubcDqsBarQ+u9LbHoDlUQfIPd7y8mVtNgtxJCdrAO/jc5qR4C+85yE3xPQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.1.tgz", + "integrity": "sha512-hN9fO2Z5c5YhvF/p31PM4861y6wglwc11/K5vTaGwDKkhfVrKoT2iMGC9r0GshsP9D/LV8s+StoFe3NLYYp8Qg==", "cpu": [ "x64" ], @@ -28032,9 +28040,9 @@ "dev": true }, "@bufbuild/protobuf": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.1.0.tgz", + "integrity": "sha512-+2Mx67Y3skJ4NCD/qNSdBJNWtu6x6Qr53jeNg+QcwiL6mt0wK+3jwHH2x1p7xaYH6Ve2JKOVn0OxU35WsmqI9A==", "optional": true }, "@colors/colors": { @@ -31934,6 +31942,12 @@ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, + "colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "optional": true + }, "colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -39746,35 +39760,36 @@ } }, "sass-embedded": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.78.0.tgz", - "integrity": "sha512-NR2kvhWVFABmBm0AqgFw9OweQycs0Qs+/teJ9Su+BUY7up+f8S5F/Zi+7QtAqJlewsQyUNfzm1vRuM+20lBwRQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.1.tgz", + "integrity": "sha512-UIgG9sHZZ1fT28bxOGi6RUTyvuNvnNQ5nUCdeDGOiS+pGhxLNMdoSFd1cwF8cF5+JUfS6PK8TVAc+aNX4Q3ZGQ==", "optional": true, "requires": { - "@bufbuild/protobuf": "^1.0.0", + "@bufbuild/protobuf": "^2.0.0", "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", "immutable": "^4.0.0", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.78.0", - "sass-embedded-android-arm64": "1.78.0", - "sass-embedded-android-ia32": "1.78.0", - "sass-embedded-android-riscv64": "1.78.0", - "sass-embedded-android-x64": "1.78.0", - "sass-embedded-darwin-arm64": "1.78.0", - "sass-embedded-darwin-x64": "1.78.0", - "sass-embedded-linux-arm": "1.78.0", - "sass-embedded-linux-arm64": "1.78.0", - "sass-embedded-linux-ia32": "1.78.0", - "sass-embedded-linux-musl-arm": "1.78.0", - "sass-embedded-linux-musl-arm64": "1.78.0", - "sass-embedded-linux-musl-ia32": "1.78.0", - "sass-embedded-linux-musl-riscv64": "1.78.0", - "sass-embedded-linux-musl-x64": "1.78.0", - "sass-embedded-linux-riscv64": "1.78.0", - "sass-embedded-linux-x64": "1.78.0", - "sass-embedded-win32-arm64": "1.78.0", - "sass-embedded-win32-ia32": "1.78.0", - "sass-embedded-win32-x64": "1.78.0", + "sass-embedded-android-arm": "1.79.1", + "sass-embedded-android-arm64": "1.79.1", + "sass-embedded-android-ia32": "1.79.1", + "sass-embedded-android-riscv64": "1.79.1", + "sass-embedded-android-x64": "1.79.1", + "sass-embedded-darwin-arm64": "1.79.1", + "sass-embedded-darwin-x64": "1.79.1", + "sass-embedded-linux-arm": "1.79.1", + "sass-embedded-linux-arm64": "1.79.1", + "sass-embedded-linux-ia32": "1.79.1", + "sass-embedded-linux-musl-arm": "1.79.1", + "sass-embedded-linux-musl-arm64": "1.79.1", + "sass-embedded-linux-musl-ia32": "1.79.1", + "sass-embedded-linux-musl-riscv64": "1.79.1", + "sass-embedded-linux-musl-x64": "1.79.1", + "sass-embedded-linux-riscv64": "1.79.1", + "sass-embedded-linux-x64": "1.79.1", + "sass-embedded-win32-arm64": "1.79.1", + "sass-embedded-win32-ia32": "1.79.1", + "sass-embedded-win32-x64": "1.79.1", "supports-color": "^8.1.1", "varint": "^6.0.0" }, @@ -39797,123 +39812,123 @@ } }, "sass-embedded-android-arm": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.78.0.tgz", - "integrity": "sha512-YM6nrmKsj+ImaSTd96F+jzbWSbhPkRN4kedbLgIJ5FsILNa9NAqhmrCQz9pdcjuAhyfxWImdUACsT23CPGENZQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.1.tgz", + "integrity": "sha512-p6TaAOFUDx3DjK3i8Y3c4rNXnSJZcivYL+CojMefHZgJNm7PS0mrpzr4a0kkD25saZO208r+Fa258ax1+GzEvA==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.78.0.tgz", - "integrity": "sha512-2sAr11EgwPudAuyk4Ite+fWGYJspiFSiZDU2D8/vjjI7BaB9FG6ksYqww3svoMMnjPUWBCjKPDELpZTxViLJbw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.1.tgz", + "integrity": "sha512-q+Q1GdLCTVazpfX/vKJGRQJTjZwSkcViUThzSOtCDwNK6vMbJB3x6CHmHmKWYnjceA2y73QRgs9kR+NDLZoPLQ==", "optional": true }, "sass-embedded-android-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.78.0.tgz", - "integrity": "sha512-TyJOo4TgnHpOfC/PfqCBqd+jGRanWoRd4Br/0KAfIvaIFjTGIPdk26vUyDVugV1J8QUEY4INGE8EXAuDeRldUQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.1.tgz", + "integrity": "sha512-bp4x5gjv1Wq5cAur8iKYZShfG27XUS/nrhqJU0PN2EGqu+YTklYR4ouoR4yZDFXjNA7RKmqqzJE+8Jks5cVnGA==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.78.0.tgz", - "integrity": "sha512-wwajpsVRuhb7ixrkA3Yu60V2LtROYn45PIYeda30/MrMJi9k3xEqHLhodTexFm6wZoKclGSDZ6L9U5q0XyRKiQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.1.tgz", + "integrity": "sha512-1BJT4XtWvQeCjFUzNg1+Xa8RtIP8p2odBF5ly4i7ON6pHHYknjbpHTXIXFkz5sgLReFue9q/bsKIgvSPHMgkIg==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.78.0.tgz", - "integrity": "sha512-k5l66PO0LgSHMDbDzAQ/vqrXMlJ3r42ZHJA8MJvUbA6sQxTzDS381V7L+EhOATwyI225j2FhEeTHW6rr4WBQzA==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.1.tgz", + "integrity": "sha512-eqqDI9hOLNpbdEtBG7uJoAnim5xvscjlUTqHsqGlkddTdnXjwgcUDeqmc3z4iFr1wq7bZpb+xz6FM3MJxeLa7g==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.78.0.tgz", - "integrity": "sha512-3JaxceFSR6N+a22hPYYkj1p45eBaWTt/M8MPTbfzU3TGZrU9bmRX7WlUVtXTo1yYI2iMf22nCv0PQ5ExFF3FMQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.1.tgz", + "integrity": "sha512-6co9oRwPmyvEC9I5SyW+NHOQKLmVfQZVbYWvFQl3EPLsUCTQ88dVteQwPdpm+3MY0GNjLjjVppeyAsmWHjUmjQ==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.78.0.tgz", - "integrity": "sha512-UMTijqE3fJ8vEaaD7GPG7G3GsHuPKOdpS8vuA2v2uwO3BPFp/rEKah66atvGqvGO+0JYApkSv0YTnnexSrkHIQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.1.tgz", + "integrity": "sha512-9rFlxTj5gxtxA1EBkO3dJ1W70Zebpw28wHUs/wByrT1FqR6+uPnyLOWwt5WJLc4AoS1LLQz/ZeknxL/mKI+GrA==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.78.0.tgz", - "integrity": "sha512-JafT+Co0RK8oO3g9TfVRuG7tkYeh35yDGTgqCFxLrktnkiw5pmIagCfpjxk5GBcSfJMOzhCgclTCDJWAuHGuMQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.1.tgz", + "integrity": "sha512-Qdc94coLXxQ4NNS9DT+V9RtJ7TnttRhaNFR79ZU8RtZ1jHTWLnnC1rEDm1Br3btOy7op3eplFpJahfNZPRFKug==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.78.0.tgz", - "integrity": "sha512-juMIMpp3DIAiQ842y+boqh0u2SjN4m3mDKrDfMuBznj8DSQoy9J/3e4hLh3g+p0/j83WuROu5nNoYxm2Xz8rww==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.1.tgz", + "integrity": "sha512-7LyLZ9XJU/9CAzCrWWFhqGEK620tYoNxMIpqX1yfNUiDGoolXfs1WDpxEiXqQaw4DmcPeAkqqAs8tg7qekDXBg==", "optional": true }, "sass-embedded-linux-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.78.0.tgz", - "integrity": "sha512-Gy8GW5g6WX9t8CT2Dto5AL6ikB+pG7aAXWXvfu3RFHktixSwSbyy6CeGqSk1t0xyJCFkQQA/V8HU9bNdeHiBxg==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.1.tgz", + "integrity": "sha512-9ZsVRSZJvUT6gNL1wS54cRdNqGfpi32zGh4q/Q62AKbAqmNb+BvuQT4TsBLuIEMDaR75Z1xvj1iArguD/LX00A==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.78.0.tgz", - "integrity": "sha512-DUVXtcsfsiOJ2Zwp4Y3T6KZWX8h0gWpzmFUrx+gSIbg67vV8Ww2DWMjWRwqLe7HOLTYBegMBYpMgMgZiPtXhIA==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.1.tgz", + "integrity": "sha512-4MBu1aFvGE45CYii6dbdce3nPNc8CKcQ0spf7r6DeEn19NWJ0dNkYMTIa8Xy+TwZ1uS92g8E+M/aXmwQlRXQCA==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.78.0.tgz", - "integrity": "sha512-Lu/TlRHbe9aJY7B7PwWCJz7pTT5Rc50VkApWEmPiU/nu0mGbSpg0Xwar6pNeG8+98ubgKKdRb01N3bvclf5a4A==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.1.tgz", + "integrity": "sha512-4iNhJgeyyZrsBA/RwSiTRaxPSsHpvjr8I+oN6E0OpEzyY62QIxhQGGf1A73fOs6tJLw58ba14tAm/bblGefLFQ==", "optional": true }, "sass-embedded-linux-musl-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.78.0.tgz", - "integrity": "sha512-1E5ywUnq6MRPAecr2r/vDOBr93wXyculEmfyF5JRG8mUufMaxGIhfx64OQE6Drjs+EDURcYZ+Qcg6/ubJWqhcw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.1.tgz", + "integrity": "sha512-5CF4mrbrnrtpKcoxuJnF6SryOqjyCdXyPJ6U6PjOUYEA1T1Cd/sE0cB+wswTQRgPVrYQO1d9c0eSEY1gZijp0g==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.78.0.tgz", - "integrity": "sha512-YvQEvX7ctn5BwC79+HBagDYIciEkwcl2NLgoydmEsBO/0+ncMKSGnjsn/iRzErbq1KJNyjGEni8eSHlrtQI1vQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.1.tgz", + "integrity": "sha512-ZOVpi6c0vfD0vBBtmQqwd4+gGbrnsKnuyrh2ghoNbwg4oMHo85S0rCUR/3Uny6oFDKnTTJkWjamig3gy6ygzYQ==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.78.0.tgz", - "integrity": "sha512-azdUcZZvZmtUBslIKr2/l4aQrTX7BvO96TD0GLdWz9vuXZrokYm09AJZEnb5j6Pk5I4Xr0yM6BG1Vgcbzqi5Zg==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.1.tgz", + "integrity": "sha512-0lcQZ7hZ6/gBoJ/Od7BX33Q3jr9oGaQxJfYZ0wmCK4qSu3S06UoBTELy9Njv51h+JaWJFUwzROay8bGWrEVuLQ==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.78.0.tgz", - "integrity": "sha512-g8M6vqHMjZUoH9C1WJsgwu+qmwdJAAMDaJTM1emeAScUZMTaQGzm+Q6C5oSGnAGR3XLT/drgbHhbmruXDgkdeQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.1.tgz", + "integrity": "sha512-KQED61FrdYvW0YEMncBsak/PshpGkdPpzLLGXjdUqKqe6Tiv8/zqrlD8GC8CIvSBRxZs7ybyFMPi1KyjnvtUdQ==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.78.0.tgz", - "integrity": "sha512-m997ThzpMwql4u6LzZCoHPIQkgK6bbLPLc7ydemo2Wusqzh6j8XAGxVT5oANp6s2Dmj+yh49pKDozal+tzEX9w==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.1.tgz", + "integrity": "sha512-s4QSuvdNrQq00XB2t3Dt+B05rc5cvONnveHijaXtqS+yb98tvNvDiozVfS20k4k1eklhoBC8FBm165RAXDGEuA==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.78.0.tgz", - "integrity": "sha512-qTLIIC5URYRmeuYYllfoL0K1cHSUd+f3sFHAA6fjtdgf288usd6ToCbWpuFb0BtVceEfGQX8lEp+teOG7n7Quw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.1.tgz", + "integrity": "sha512-S7gzwMAvevFEJGZaWNltfJtvi8LCceWNs94b8uHQhmq8F/YFRy/iNPVAVB3SvnvBrIk8Iy2X6AXWoneLHFsNfg==", "optional": true }, "sass-embedded-win32-ia32": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.78.0.tgz", - "integrity": "sha512-BrOWh18T6Y9xgCokGXElEnd8j03fO4W83bwJ9wHRRkrQWaeHtHs3XWW0fX1j2brngWUTjU+jcYUijWF1Z60krw==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.1.tgz", + "integrity": "sha512-UjxQ6KtO3UthJMvjlVaE3QiO76wRXLcM/gejSp2cgYUVRHYXFr88z0XjQiZc9mJEuvHi69BvvmpCjN4iptKO5A==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.78.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.78.0.tgz", - "integrity": "sha512-C14iFDJd7oGhmQehRiEL7GtzMmLwubcDqsBarQ+u9LbHoDlUQfIPd7y8mVtNgtxJCdrAO/jc5qR4C+85yE3xPQ==", + "version": "1.79.1", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.1.tgz", + "integrity": "sha512-hN9fO2Z5c5YhvF/p31PM4861y6wglwc11/K5vTaGwDKkhfVrKoT2iMGC9r0GshsP9D/LV8s+StoFe3NLYYp8Qg==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index 1fd3420a76..089b2526fe 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.78.0" + "sass-embedded": "1.79.1" }, "browserslist": [ "last 2 Firefox versions", From 6272091fdd4c1e9ca37dec110a53a59acb30b520 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 25 Sep 2024 16:19:40 +0000 Subject: [PATCH 103/186] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index b56340b306..1665391d9f 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1821,7 +1821,7 @@ "EnableLibraryHelp": "Se desativares a biblioteca, ela será ocultada de todas as visualizações do utilizador.", "EnableLibrary": "Ativar a biblioteca", "LabelTrickplayAccelEncoding": "Ativar a codificação MJPEG acelerada por hardware", - "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV e VAAPI, esta opção não tem efeito noutros métodos de aceleração de hardware.", + "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito noutros métodos de aceleração de hardware.", "ChannelResolutionUHD4K": "UHD (4K)", "Lyrics": "Letras", "DeleteLyrics": "Eliminar letras", From ec75d31a643ee4a07b540e97948ea8bb02c8f38d Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 25 Sep 2024 16:19:52 +0000 Subject: [PATCH 104/186] 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 0c68673962..7fe71f14bf 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1823,7 +1823,7 @@ "LimitSupportedVideoResolutionHelp": "Utiliza 'Resolução máxima permitida para transcodificação de vídeo' como resolução máxima de vídeo suportada.", "EnableLibraryHelp": "Se desativares a biblioteca, ela será ocultada de todas as visualizações do utilizador.", "EnableLibrary": "Ativar a biblioteca", - "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV e VAAPI, esta opção não tem efeito noutros métodos de aceleração de hardware.", + "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito noutros métodos de aceleração de hardware.", "LabelTrickplayAccelEncoding": "Ativar a codificação MJPEG acelerada por hardware", "ConfirmDeleteLyrics": "A eliminação destas letras irá apagá-las do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ChannelResolutionFullHD": "Full HD", From 74c735dbd0327d67927ffb99413368ce953ba55a Mon Sep 17 00:00:00 2001 From: David Murdoch <187813+davidmurdoch@users.noreply.github.com> Date: Wed, 24 May 2023 15:50:09 -0400 Subject: [PATCH 105/186] Fix movies Shuffle button --- src/controllers/movies/movies.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 717d197e74..ea71569e35 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -31,11 +31,11 @@ export default function (view, params, tabContent, options) { } function shuffle() { - ApiClient.getItem( - ApiClient.getCurrentUserId(), - params.topParentId - ).then((item) => { - playbackManager.shuffle(item); + isLoading = true; + loading.show(); + const newQuery = { ...query, SortBy: 'Random' }; + return ApiClient.getItems(ApiClient.getCurrentUserId(), newQuery).then(({ Items }) => { + playbackManager.shuffle(Items[0]); }); } From f52ac7a96dd6c633674ada9579197a26e3ea7760 Mon Sep 17 00:00:00 2001 From: David Murdoch <187813+davidmurdoch@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:43:23 -0400 Subject: [PATCH 106/186] Limit number of results returned since we only use 1 --- src/controllers/movies/movies.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index ea71569e35..889a95ffb1 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -33,7 +33,7 @@ export default function (view, params, tabContent, options) { function shuffle() { isLoading = true; loading.show(); - const newQuery = { ...query, SortBy: 'Random' }; + const newQuery = { ...query, SortBy: 'Random', Limit: 1 }; return ApiClient.getItems(ApiClient.getCurrentUserId(), newQuery).then(({ Items }) => { playbackManager.shuffle(Items[0]); }); From bb78451102cffdedaa98a2281c6461ae8bf59307 Mon Sep 17 00:00:00 2001 From: David Murdoch <187813+davidmurdoch@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:49:41 -0400 Subject: [PATCH 107/186] Update src/controllers/movies/movies.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/controllers/movies/movies.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 889a95ffb1..42da3a7142 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -36,6 +36,8 @@ export default function (view, params, tabContent, options) { const newQuery = { ...query, SortBy: 'Random', Limit: 1 }; return ApiClient.getItems(ApiClient.getCurrentUserId(), newQuery).then(({ Items }) => { playbackManager.shuffle(Items[0]); + }).finally(() => { + isLoading = false; }); } From 5eeb29ae973d32af9a72c2a8b382572eba3a0b7e Mon Sep 17 00:00:00 2001 From: jellyfin-bot Date: Thu, 26 Sep 2024 07:05:37 +0000 Subject: [PATCH 108/186] Update @jellyfin/sdk to 0.0.0-unstable.202409260501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 234ecbab36..d86bc72eb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409250605", + "@jellyfin/sdk": "0.0.0-unstable.202409260501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.17.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202409250605", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409250605.tgz", - "integrity": "sha512-gHJCTYDFHuG9qPfGmPG4baiB4hmzBvGIhjz56p8+IDM4LEUU0dXSPTcUOT7AOGogt1X+xP4vD6lQ7TrvFjGt7w==", + "version": "0.0.0-unstable.202409260501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409260501.tgz", + "integrity": "sha512-3W/J15A/jELTMJPrPiGvfkO8xsUaxKh4P/f+kVAxOSCYkPp+vvZxmRCGV7M1+1947O19iJ/l7ypD08L3YVf39g==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29334,9 +29334,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202409250605", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409250605.tgz", - "integrity": "sha512-gHJCTYDFHuG9qPfGmPG4baiB4hmzBvGIhjz56p8+IDM4LEUU0dXSPTcUOT7AOGogt1X+xP4vD6lQ7TrvFjGt7w==", + "version": "0.0.0-unstable.202409260501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409260501.tgz", + "integrity": "sha512-3W/J15A/jELTMJPrPiGvfkO8xsUaxKh4P/f+kVAxOSCYkPp+vvZxmRCGV7M1+1947O19iJ/l7ypD08L3YVf39g==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 089b2526fe..2dad1c0a5f 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409250605", + "@jellyfin/sdk": "0.0.0-unstable.202409260501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.17.0", From 6b14f2531ba215154f8453586525d55407292e63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:49:34 +0000 Subject: [PATCH 109/186] Update dependency @types/react to v18.3.8 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d86bc72eb3..932b580334 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.7", + "@types/react": "18.3.8", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -6549,9 +6549,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", - "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", + "version": "18.3.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz", + "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -30242,9 +30242,9 @@ "dev": true }, "@types/react": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.7.tgz", - "integrity": "sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==", + "version": "18.3.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz", + "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/package.json b/package.json index 2dad1c0a5f..ae579c41df 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.7", + "@types/react": "18.3.8", "@types/react-dom": "18.3.0", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", From b32290c92d9ec21dd74b84032345c03722e93e1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:49:45 +0000 Subject: [PATCH 110/186] Update dependency postcss to v8.4.47 --- package-lock.json | 63 +++++++++-------------------------------------- package.json | 2 +- 2 files changed, 12 insertions(+), 53 deletions(-) diff --git a/package-lock.json b/package-lock.json index d86bc72eb3..66e1d6efe9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -106,7 +106,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "25.0.0", "mini-css-extract-plugin": "2.9.1", - "postcss": "8.4.42", + "postcss": "8.4.47", "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", @@ -16838,9 +16838,9 @@ } }, "node_modules/postcss": { - "version": "8.4.42", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.42.tgz", - "integrity": "sha512-hywKUQB9Ra4dR1mGhldy5Aj1X3MWDSIA1cEi+Uy0CjheLvP6Ual5RlwMCh8i/X121yEDLDIKBsrCQ8ba3FDMfQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -16859,8 +16859,8 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -25649,34 +25649,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite/node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/vitest": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", @@ -37727,14 +37699,14 @@ "dev": true }, "postcss": { - "version": "8.4.42", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.42.tgz", - "integrity": "sha512-hywKUQB9Ra4dR1mGhldy5Aj1X3MWDSIA1cEi+Uy0CjheLvP6Ual5RlwMCh8i/X121yEDLDIKBsrCQ8ba3FDMfQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "requires": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" } }, "postcss-attribute-case-insensitive": { @@ -43647,19 +43619,6 @@ "fsevents": "~2.3.3", "postcss": "^8.4.43", "rollup": "^4.20.0" - }, - "dependencies": { - "postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - } - } } }, "vite-node": { diff --git a/package.json b/package.json index 2dad1c0a5f..8f290d4c17 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "html-webpack-plugin": "5.6.0", "jsdom": "25.0.0", "mini-css-extract-plugin": "2.9.1", - "postcss": "8.4.42", + "postcss": "8.4.47", "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", From ce4aded6545752fb2a34b7cef23b4f62cfb533d8 Mon Sep 17 00:00:00 2001 From: David Murdoch <187813+davidmurdoch@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:15:18 -0400 Subject: [PATCH 111/186] Update src/controllers/movies/movies.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/controllers/movies/movies.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 42da3a7142..a8eabfce2b 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -33,9 +33,12 @@ export default function (view, params, tabContent, options) { function shuffle() { isLoading = true; loading.show(); - const newQuery = { ...query, SortBy: 'Random', Limit: 1 }; + const newQuery = { ...query, SortBy: 'Random', StartIndex: 0, Limit: 300 }; return ApiClient.getItems(ApiClient.getCurrentUserId(), newQuery).then(({ Items }) => { - playbackManager.shuffle(Items[0]); + playbackManager.play({ + items: Items, + autoplay: true + }); }).finally(() => { isLoading = false; }); From f2b9f8e9f7163fb1807b1bc96492f00ecb5e63a0 Mon Sep 17 00:00:00 2001 From: BromTeque Date: Thu, 26 Sep 2024 19:47:53 +0000 Subject: [PATCH 112/186] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index fd3d328087..d0e1dee15d 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1011,7 +1011,7 @@ "Filters": "Filtre", "HeaderExternalIds": "Eksterne IDer", "HeaderFetcherSettings": "Henteinnstillinger", - "TabServer": "Server", + "TabServer": "Tjener", "TabStreaming": "Strømming", "TagsValue": "Tagger: {0}", "ThemeSongs": "Temamusikk", @@ -1949,5 +1949,14 @@ "LabelWidthResolutionsHelp": "Kommaseparert liste over breddene (px) som trickplay-bilder vil bli generert med. Alle bilder skal genereres proporsjonalt med kilden, så en bredde på 320 på en 16:9-video ender opp på rundt 320x180.", "LabelTileWidthHelp": "Maksimalt antall bilder per rad i X-retningen.", "LabelTileHeightHelp": "Maksimalt antall bilder per kolonne i Y-retningen.", - "LabelJpegQualityHelp": "JPEG-komprimeringskvaliteten for trickplay-bilder." + "LabelJpegQualityHelp": "JPEG-komprimeringskvaliteten for trickplay-bilder.", + "LabelAudioTagSettings": "Innstillinger for lydtager", + "LabelCustomTagDelimiters": "Egendefinert skilletegn for tagger", + "LabelCustomTagDelimitersHelp": "Tegn som skal behandles som skilletegn for å separere tagger.", + "LabelDelimiterWhitelist": "Hviteliste for skilletegn", + "LabelDelimiterWhitelistHelp": "Objekter som skal ekskluderes fra tagdeling. Ett objekt per linje.", + "PreferNonstandardArtistsTag": "Foretrekk ARTISTER-tag om tilgjengelig", + "PreferNonstandardArtistsTagHelp": "Bruk ikke-standard ARTISTS-taggen istedenfor ARTIST-taggen når den er tilgjengelig.", + "UseCustomTagDelimiters": "Bruk egendefinert skilletegn for tagger", + "UseCustomTagDelimitersHelp": "Del artist- og sjanger-tagger med egendefinert tegn." } From 15fc00cf435955a52e05831d32e9a0a15f0090cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 00:35:17 +0000 Subject: [PATCH 113/186] Update dependency sass to v1.79.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d86bc72eb3..200a7d8355 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.79.1", + "sass": "1.79.2", "sass-loader": "16.0.1", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -20195,9 +20195,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.1.tgz", - "integrity": "sha512-+mA7svoNKeL0DiJqZGeR/ZGUu8he4I8o3jyUcOFyo4eBJrwNgIMmAEwCMo/N2Y3wdjOBcRzoNxZIOtrtMX8EXg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz", + "integrity": "sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==", "dev": true, "license": "MIT", "dependencies": { @@ -39732,9 +39732,9 @@ "dev": true }, "sass": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.1.tgz", - "integrity": "sha512-+mA7svoNKeL0DiJqZGeR/ZGUu8he4I8o3jyUcOFyo4eBJrwNgIMmAEwCMo/N2Y3wdjOBcRzoNxZIOtrtMX8EXg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz", + "integrity": "sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==", "dev": true, "requires": { "chokidar": "^4.0.0", diff --git a/package.json b/package.json index 2dad1c0a5f..d9990d28db 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.79.1", + "sass": "1.79.2", "sass-loader": "16.0.1", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", From f4e2402fbc56a9a1b447f3daf4ba54dca80d3dc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 04:33:27 +0000 Subject: [PATCH 114/186] Update dependency sass-embedded to v1.79.2 --- package-lock.json | 334 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 168 insertions(+), 168 deletions(-) diff --git a/package-lock.json b/package-lock.json index 932b580334..8f44310bd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.79.1" + "sass-embedded": "1.79.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -20213,9 +20213,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.1.tgz", - "integrity": "sha512-UIgG9sHZZ1fT28bxOGi6RUTyvuNvnNQ5nUCdeDGOiS+pGhxLNMdoSFd1cwF8cF5+JUfS6PK8TVAc+aNX4Q3ZGQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.2.tgz", + "integrity": "sha512-PYnPJJJcZ79NBLhC72MfZ+EWLkTIA2pizTEiNTtxXjLmqtKNkXO+TL9qXgTmot4F72ERVZqjQjBQUcfkNbXg/w==", "license": "MIT", "optional": true, "dependencies": { @@ -20234,32 +20234,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.79.1", - "sass-embedded-android-arm64": "1.79.1", - "sass-embedded-android-ia32": "1.79.1", - "sass-embedded-android-riscv64": "1.79.1", - "sass-embedded-android-x64": "1.79.1", - "sass-embedded-darwin-arm64": "1.79.1", - "sass-embedded-darwin-x64": "1.79.1", - "sass-embedded-linux-arm": "1.79.1", - "sass-embedded-linux-arm64": "1.79.1", - "sass-embedded-linux-ia32": "1.79.1", - "sass-embedded-linux-musl-arm": "1.79.1", - "sass-embedded-linux-musl-arm64": "1.79.1", - "sass-embedded-linux-musl-ia32": "1.79.1", - "sass-embedded-linux-musl-riscv64": "1.79.1", - "sass-embedded-linux-musl-x64": "1.79.1", - "sass-embedded-linux-riscv64": "1.79.1", - "sass-embedded-linux-x64": "1.79.1", - "sass-embedded-win32-arm64": "1.79.1", - "sass-embedded-win32-ia32": "1.79.1", - "sass-embedded-win32-x64": "1.79.1" + "sass-embedded-android-arm": "1.79.2", + "sass-embedded-android-arm64": "1.79.2", + "sass-embedded-android-ia32": "1.79.2", + "sass-embedded-android-riscv64": "1.79.2", + "sass-embedded-android-x64": "1.79.2", + "sass-embedded-darwin-arm64": "1.79.2", + "sass-embedded-darwin-x64": "1.79.2", + "sass-embedded-linux-arm": "1.79.2", + "sass-embedded-linux-arm64": "1.79.2", + "sass-embedded-linux-ia32": "1.79.2", + "sass-embedded-linux-musl-arm": "1.79.2", + "sass-embedded-linux-musl-arm64": "1.79.2", + "sass-embedded-linux-musl-ia32": "1.79.2", + "sass-embedded-linux-musl-riscv64": "1.79.2", + "sass-embedded-linux-musl-x64": "1.79.2", + "sass-embedded-linux-riscv64": "1.79.2", + "sass-embedded-linux-x64": "1.79.2", + "sass-embedded-win32-arm64": "1.79.2", + "sass-embedded-win32-ia32": "1.79.2", + "sass-embedded-win32-x64": "1.79.2" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.1.tgz", - "integrity": "sha512-p6TaAOFUDx3DjK3i8Y3c4rNXnSJZcivYL+CojMefHZgJNm7PS0mrpzr4a0kkD25saZO208r+Fa258ax1+GzEvA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.2.tgz", + "integrity": "sha512-oBy6lRjCHvNThNbXJ8/P02tZQYnvaI3sR0aZ86DoHiMGMFaijwvXrzwkZWJZ6LxysuBXlfRh0nRWQuwWBCIt/A==", "cpu": [ "arm" ], @@ -20273,9 +20273,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.1.tgz", - "integrity": "sha512-q+Q1GdLCTVazpfX/vKJGRQJTjZwSkcViUThzSOtCDwNK6vMbJB3x6CHmHmKWYnjceA2y73QRgs9kR+NDLZoPLQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.2.tgz", + "integrity": "sha512-msFtFD9QGPKH3wnrgj8bc/UMCpKGBUHpCTzMz1JSUDZapD3T/sSJSqkuywu3smawqd77tBKkr+34HX+ot9jNew==", "cpu": [ "arm64" ], @@ -20289,9 +20289,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.1.tgz", - "integrity": "sha512-bp4x5gjv1Wq5cAur8iKYZShfG27XUS/nrhqJU0PN2EGqu+YTklYR4ouoR4yZDFXjNA7RKmqqzJE+8Jks5cVnGA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.2.tgz", + "integrity": "sha512-dtIAVmRdx+rMq0Bk4MG6AbcD/YfDfz2UIljzxnKp1kmZcU9vxcYbtx8c9T68qF3/JZx0rX6KSKwVRXjfLIxmVg==", "cpu": [ "ia32" ], @@ -20305,9 +20305,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.1.tgz", - "integrity": "sha512-1BJT4XtWvQeCjFUzNg1+Xa8RtIP8p2odBF5ly4i7ON6pHHYknjbpHTXIXFkz5sgLReFue9q/bsKIgvSPHMgkIg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.2.tgz", + "integrity": "sha512-XHe+ft67aeLdwyRId14NhJYQT6GdsGQdX2rH31HSJw2z8Xdzl2kbESw3QRPYpoIw+nPCt9ItJV6BoTaDszOc2A==", "cpu": [ "riscv64" ], @@ -20321,9 +20321,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.1.tgz", - "integrity": "sha512-eqqDI9hOLNpbdEtBG7uJoAnim5xvscjlUTqHsqGlkddTdnXjwgcUDeqmc3z4iFr1wq7bZpb+xz6FM3MJxeLa7g==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.2.tgz", + "integrity": "sha512-1Es9PhGVCgT7BuXLMwxHv1h/Z6Oku5oN/zP2gkKycLgQwXRdz6c3jjvnveLpMgM8IhyWm1M4ELAYZ+3Agby0zg==", "cpu": [ "x64" ], @@ -20337,9 +20337,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.1.tgz", - "integrity": "sha512-6co9oRwPmyvEC9I5SyW+NHOQKLmVfQZVbYWvFQl3EPLsUCTQ88dVteQwPdpm+3MY0GNjLjjVppeyAsmWHjUmjQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.2.tgz", + "integrity": "sha512-89Oe60sneLTjqw7HwgDRdgQp3XFOe96GxM7HoQUFupl0a/xwOechDDTIIKqjZlx3CTwG4gijTufw4TlA2nROsw==", "cpu": [ "arm64" ], @@ -20353,9 +20353,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.1.tgz", - "integrity": "sha512-9rFlxTj5gxtxA1EBkO3dJ1W70Zebpw28wHUs/wByrT1FqR6+uPnyLOWwt5WJLc4AoS1LLQz/ZeknxL/mKI+GrA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.2.tgz", + "integrity": "sha512-b7jL2tcRFowuQU1VsPbktYJgaOy2I7xOf4PT0kv0okvgAzlr1lWCrWBJd1Ef1etu3jkkR713WkE08Jdr6jb37w==", "cpu": [ "x64" ], @@ -20369,9 +20369,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.1.tgz", - "integrity": "sha512-Qdc94coLXxQ4NNS9DT+V9RtJ7TnttRhaNFR79ZU8RtZ1jHTWLnnC1rEDm1Br3btOy7op3eplFpJahfNZPRFKug==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.2.tgz", + "integrity": "sha512-fW3E1OZDy6AXRjcW1Rx6AEHquNNF7TbtJjfU/IkJdS3hRUuJK03vvJduDYD3zCjr4EqKyuok+E+nYEnuIdyYrQ==", "cpu": [ "arm" ], @@ -20385,9 +20385,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.1.tgz", - "integrity": "sha512-7LyLZ9XJU/9CAzCrWWFhqGEK620tYoNxMIpqX1yfNUiDGoolXfs1WDpxEiXqQaw4DmcPeAkqqAs8tg7qekDXBg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.2.tgz", + "integrity": "sha512-t4RoNDnvTlvMO+UjTiuKJef4MiGyzO2YBVxb0k5Vsc82SFdCaNeqVsb1TlWcsmZA1uREmN+4XUPk25TTYYH92w==", "cpu": [ "arm64" ], @@ -20401,9 +20401,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.1.tgz", - "integrity": "sha512-9ZsVRSZJvUT6gNL1wS54cRdNqGfpi32zGh4q/Q62AKbAqmNb+BvuQT4TsBLuIEMDaR75Z1xvj1iArguD/LX00A==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.2.tgz", + "integrity": "sha512-RXNqN4kKwQAELRTzVZe4KGAyZgRNZaZ5pslsPIPa2sJUCHnbGyhN+4NZBR/vZWWyb2q3Ps2kpM9FvOhYh72vgg==", "cpu": [ "ia32" ], @@ -20417,9 +20417,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.1.tgz", - "integrity": "sha512-4MBu1aFvGE45CYii6dbdce3nPNc8CKcQ0spf7r6DeEn19NWJ0dNkYMTIa8Xy+TwZ1uS92g8E+M/aXmwQlRXQCA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.2.tgz", + "integrity": "sha512-3IJ6L3UnLTVx4eheKqU9CcjwKyobTfSn9F3WdlWzxOH4SXSf7EYbfKpvwNHyZ8QJ7mRcndJOWU5Efuak12fl0w==", "cpu": [ "arm" ], @@ -20433,9 +20433,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.1.tgz", - "integrity": "sha512-4iNhJgeyyZrsBA/RwSiTRaxPSsHpvjr8I+oN6E0OpEzyY62QIxhQGGf1A73fOs6tJLw58ba14tAm/bblGefLFQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.2.tgz", + "integrity": "sha512-/5wZ4skLIfhjei8WQ1HbOxXIrHHyW5ZBvD3Bay5k+YOH9chWqU3IVOl3q3ZY/MK+Exz99IBAV3/6ei11l6igoA==", "cpu": [ "arm64" ], @@ -20449,9 +20449,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.1.tgz", - "integrity": "sha512-5CF4mrbrnrtpKcoxuJnF6SryOqjyCdXyPJ6U6PjOUYEA1T1Cd/sE0cB+wswTQRgPVrYQO1d9c0eSEY1gZijp0g==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.2.tgz", + "integrity": "sha512-6Edl93bBC0l8+/WaxisBocEQI6fe3Buce9ZiUy2yF6fLTuX2vZn4zx6T2/sb5+EbD0K2ZFuDkDeNwWWZvz4H4g==", "cpu": [ "ia32" ], @@ -20465,9 +20465,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.1.tgz", - "integrity": "sha512-ZOVpi6c0vfD0vBBtmQqwd4+gGbrnsKnuyrh2ghoNbwg4oMHo85S0rCUR/3Uny6oFDKnTTJkWjamig3gy6ygzYQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.2.tgz", + "integrity": "sha512-r/++4Cwsr56qXlcqc5/2W7PqjQGOSLhz7Lf1BBBNqesMjTjBc1ZTBEQaIs+uHCNCAkl2BvVRHsR4UigzSQyz+A==", "cpu": [ "riscv64" ], @@ -20481,9 +20481,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.1.tgz", - "integrity": "sha512-0lcQZ7hZ6/gBoJ/Od7BX33Q3jr9oGaQxJfYZ0wmCK4qSu3S06UoBTELy9Njv51h+JaWJFUwzROay8bGWrEVuLQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.2.tgz", + "integrity": "sha512-A9hSRjRrioxmiVgwt5UVqgWJPsO0YK5DJZTzkAotHGIAp84/xYy1MSsT596vyjj0IFx2VEfHtPHi0+wGW9nEoQ==", "cpu": [ "x64" ], @@ -20497,9 +20497,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.1.tgz", - "integrity": "sha512-KQED61FrdYvW0YEMncBsak/PshpGkdPpzLLGXjdUqKqe6Tiv8/zqrlD8GC8CIvSBRxZs7ybyFMPi1KyjnvtUdQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.2.tgz", + "integrity": "sha512-beffwiBsw25kOYSKhEZNmmh2x7c9yAIXolD+wLWAc59nuOPYziDDh4mMa1z8P90ffyHPf13QeTom+Sv5vQve4w==", "cpu": [ "riscv64" ], @@ -20513,9 +20513,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.1.tgz", - "integrity": "sha512-s4QSuvdNrQq00XB2t3Dt+B05rc5cvONnveHijaXtqS+yb98tvNvDiozVfS20k4k1eklhoBC8FBm165RAXDGEuA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.2.tgz", + "integrity": "sha512-EsbuwjzVnKihisZp0a+fVFhzUFfS/pesfhReElalzXHKeKHiHQhnY5+cRJuNi/4u03kroVXDUrcpI2FsVVIxfw==", "cpu": [ "x64" ], @@ -20529,9 +20529,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.1.tgz", - "integrity": "sha512-S7gzwMAvevFEJGZaWNltfJtvi8LCceWNs94b8uHQhmq8F/YFRy/iNPVAVB3SvnvBrIk8Iy2X6AXWoneLHFsNfg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.2.tgz", + "integrity": "sha512-b6v4cFEgp/DtoDt+OKO6dd4NtuuemAGuI70RQ+R1iIqEioe3AWNi4i6c4uHWfj3eJwWXD9IX1iCPCGPILoQwUw==", "cpu": [ "arm64" ], @@ -20545,9 +20545,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.1.tgz", - "integrity": "sha512-UjxQ6KtO3UthJMvjlVaE3QiO76wRXLcM/gejSp2cgYUVRHYXFr88z0XjQiZc9mJEuvHi69BvvmpCjN4iptKO5A==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.2.tgz", + "integrity": "sha512-WxPytzrV3D3wD6CMy+4XWfQhQ7zHuJHw9n0z4dvA6w26v0VUSIEGWO/f0Zb6f3ddVZWCv44PBfmMVVCxm32etw==", "cpu": [ "ia32" ], @@ -20561,9 +20561,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.1.tgz", - "integrity": "sha512-hN9fO2Z5c5YhvF/p31PM4861y6wglwc11/K5vTaGwDKkhfVrKoT2iMGC9r0GshsP9D/LV8s+StoFe3NLYYp8Qg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.2.tgz", + "integrity": "sha512-47KA0lXz11MuQeAjclua5FM7o2ebVz+YHmaQs4zZ13daec76IAMGexoe+KodkueDlGpMbWdhgfcyJVT6aGqQgQ==", "cpu": [ "x64" ], @@ -39760,9 +39760,9 @@ } }, "sass-embedded": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.1.tgz", - "integrity": "sha512-UIgG9sHZZ1fT28bxOGi6RUTyvuNvnNQ5nUCdeDGOiS+pGhxLNMdoSFd1cwF8cF5+JUfS6PK8TVAc+aNX4Q3ZGQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.2.tgz", + "integrity": "sha512-PYnPJJJcZ79NBLhC72MfZ+EWLkTIA2pizTEiNTtxXjLmqtKNkXO+TL9qXgTmot4F72ERVZqjQjBQUcfkNbXg/w==", "optional": true, "requires": { "@bufbuild/protobuf": "^2.0.0", @@ -39770,26 +39770,26 @@ "colorjs.io": "^0.5.0", "immutable": "^4.0.0", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.79.1", - "sass-embedded-android-arm64": "1.79.1", - "sass-embedded-android-ia32": "1.79.1", - "sass-embedded-android-riscv64": "1.79.1", - "sass-embedded-android-x64": "1.79.1", - "sass-embedded-darwin-arm64": "1.79.1", - "sass-embedded-darwin-x64": "1.79.1", - "sass-embedded-linux-arm": "1.79.1", - "sass-embedded-linux-arm64": "1.79.1", - "sass-embedded-linux-ia32": "1.79.1", - "sass-embedded-linux-musl-arm": "1.79.1", - "sass-embedded-linux-musl-arm64": "1.79.1", - "sass-embedded-linux-musl-ia32": "1.79.1", - "sass-embedded-linux-musl-riscv64": "1.79.1", - "sass-embedded-linux-musl-x64": "1.79.1", - "sass-embedded-linux-riscv64": "1.79.1", - "sass-embedded-linux-x64": "1.79.1", - "sass-embedded-win32-arm64": "1.79.1", - "sass-embedded-win32-ia32": "1.79.1", - "sass-embedded-win32-x64": "1.79.1", + "sass-embedded-android-arm": "1.79.2", + "sass-embedded-android-arm64": "1.79.2", + "sass-embedded-android-ia32": "1.79.2", + "sass-embedded-android-riscv64": "1.79.2", + "sass-embedded-android-x64": "1.79.2", + "sass-embedded-darwin-arm64": "1.79.2", + "sass-embedded-darwin-x64": "1.79.2", + "sass-embedded-linux-arm": "1.79.2", + "sass-embedded-linux-arm64": "1.79.2", + "sass-embedded-linux-ia32": "1.79.2", + "sass-embedded-linux-musl-arm": "1.79.2", + "sass-embedded-linux-musl-arm64": "1.79.2", + "sass-embedded-linux-musl-ia32": "1.79.2", + "sass-embedded-linux-musl-riscv64": "1.79.2", + "sass-embedded-linux-musl-x64": "1.79.2", + "sass-embedded-linux-riscv64": "1.79.2", + "sass-embedded-linux-x64": "1.79.2", + "sass-embedded-win32-arm64": "1.79.2", + "sass-embedded-win32-ia32": "1.79.2", + "sass-embedded-win32-x64": "1.79.2", "supports-color": "^8.1.1", "varint": "^6.0.0" }, @@ -39812,123 +39812,123 @@ } }, "sass-embedded-android-arm": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.1.tgz", - "integrity": "sha512-p6TaAOFUDx3DjK3i8Y3c4rNXnSJZcivYL+CojMefHZgJNm7PS0mrpzr4a0kkD25saZO208r+Fa258ax1+GzEvA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.2.tgz", + "integrity": "sha512-oBy6lRjCHvNThNbXJ8/P02tZQYnvaI3sR0aZ86DoHiMGMFaijwvXrzwkZWJZ6LxysuBXlfRh0nRWQuwWBCIt/A==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.1.tgz", - "integrity": "sha512-q+Q1GdLCTVazpfX/vKJGRQJTjZwSkcViUThzSOtCDwNK6vMbJB3x6CHmHmKWYnjceA2y73QRgs9kR+NDLZoPLQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.2.tgz", + "integrity": "sha512-msFtFD9QGPKH3wnrgj8bc/UMCpKGBUHpCTzMz1JSUDZapD3T/sSJSqkuywu3smawqd77tBKkr+34HX+ot9jNew==", "optional": true }, "sass-embedded-android-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.1.tgz", - "integrity": "sha512-bp4x5gjv1Wq5cAur8iKYZShfG27XUS/nrhqJU0PN2EGqu+YTklYR4ouoR4yZDFXjNA7RKmqqzJE+8Jks5cVnGA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.2.tgz", + "integrity": "sha512-dtIAVmRdx+rMq0Bk4MG6AbcD/YfDfz2UIljzxnKp1kmZcU9vxcYbtx8c9T68qF3/JZx0rX6KSKwVRXjfLIxmVg==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.1.tgz", - "integrity": "sha512-1BJT4XtWvQeCjFUzNg1+Xa8RtIP8p2odBF5ly4i7ON6pHHYknjbpHTXIXFkz5sgLReFue9q/bsKIgvSPHMgkIg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.2.tgz", + "integrity": "sha512-XHe+ft67aeLdwyRId14NhJYQT6GdsGQdX2rH31HSJw2z8Xdzl2kbESw3QRPYpoIw+nPCt9ItJV6BoTaDszOc2A==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.1.tgz", - "integrity": "sha512-eqqDI9hOLNpbdEtBG7uJoAnim5xvscjlUTqHsqGlkddTdnXjwgcUDeqmc3z4iFr1wq7bZpb+xz6FM3MJxeLa7g==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.2.tgz", + "integrity": "sha512-1Es9PhGVCgT7BuXLMwxHv1h/Z6Oku5oN/zP2gkKycLgQwXRdz6c3jjvnveLpMgM8IhyWm1M4ELAYZ+3Agby0zg==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.1.tgz", - "integrity": "sha512-6co9oRwPmyvEC9I5SyW+NHOQKLmVfQZVbYWvFQl3EPLsUCTQ88dVteQwPdpm+3MY0GNjLjjVppeyAsmWHjUmjQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.2.tgz", + "integrity": "sha512-89Oe60sneLTjqw7HwgDRdgQp3XFOe96GxM7HoQUFupl0a/xwOechDDTIIKqjZlx3CTwG4gijTufw4TlA2nROsw==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.1.tgz", - "integrity": "sha512-9rFlxTj5gxtxA1EBkO3dJ1W70Zebpw28wHUs/wByrT1FqR6+uPnyLOWwt5WJLc4AoS1LLQz/ZeknxL/mKI+GrA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.2.tgz", + "integrity": "sha512-b7jL2tcRFowuQU1VsPbktYJgaOy2I7xOf4PT0kv0okvgAzlr1lWCrWBJd1Ef1etu3jkkR713WkE08Jdr6jb37w==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.1.tgz", - "integrity": "sha512-Qdc94coLXxQ4NNS9DT+V9RtJ7TnttRhaNFR79ZU8RtZ1jHTWLnnC1rEDm1Br3btOy7op3eplFpJahfNZPRFKug==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.2.tgz", + "integrity": "sha512-fW3E1OZDy6AXRjcW1Rx6AEHquNNF7TbtJjfU/IkJdS3hRUuJK03vvJduDYD3zCjr4EqKyuok+E+nYEnuIdyYrQ==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.1.tgz", - "integrity": "sha512-7LyLZ9XJU/9CAzCrWWFhqGEK620tYoNxMIpqX1yfNUiDGoolXfs1WDpxEiXqQaw4DmcPeAkqqAs8tg7qekDXBg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.2.tgz", + "integrity": "sha512-t4RoNDnvTlvMO+UjTiuKJef4MiGyzO2YBVxb0k5Vsc82SFdCaNeqVsb1TlWcsmZA1uREmN+4XUPk25TTYYH92w==", "optional": true }, "sass-embedded-linux-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.1.tgz", - "integrity": "sha512-9ZsVRSZJvUT6gNL1wS54cRdNqGfpi32zGh4q/Q62AKbAqmNb+BvuQT4TsBLuIEMDaR75Z1xvj1iArguD/LX00A==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.2.tgz", + "integrity": "sha512-RXNqN4kKwQAELRTzVZe4KGAyZgRNZaZ5pslsPIPa2sJUCHnbGyhN+4NZBR/vZWWyb2q3Ps2kpM9FvOhYh72vgg==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.1.tgz", - "integrity": "sha512-4MBu1aFvGE45CYii6dbdce3nPNc8CKcQ0spf7r6DeEn19NWJ0dNkYMTIa8Xy+TwZ1uS92g8E+M/aXmwQlRXQCA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.2.tgz", + "integrity": "sha512-3IJ6L3UnLTVx4eheKqU9CcjwKyobTfSn9F3WdlWzxOH4SXSf7EYbfKpvwNHyZ8QJ7mRcndJOWU5Efuak12fl0w==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.1.tgz", - "integrity": "sha512-4iNhJgeyyZrsBA/RwSiTRaxPSsHpvjr8I+oN6E0OpEzyY62QIxhQGGf1A73fOs6tJLw58ba14tAm/bblGefLFQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.2.tgz", + "integrity": "sha512-/5wZ4skLIfhjei8WQ1HbOxXIrHHyW5ZBvD3Bay5k+YOH9chWqU3IVOl3q3ZY/MK+Exz99IBAV3/6ei11l6igoA==", "optional": true }, "sass-embedded-linux-musl-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.1.tgz", - "integrity": "sha512-5CF4mrbrnrtpKcoxuJnF6SryOqjyCdXyPJ6U6PjOUYEA1T1Cd/sE0cB+wswTQRgPVrYQO1d9c0eSEY1gZijp0g==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.2.tgz", + "integrity": "sha512-6Edl93bBC0l8+/WaxisBocEQI6fe3Buce9ZiUy2yF6fLTuX2vZn4zx6T2/sb5+EbD0K2ZFuDkDeNwWWZvz4H4g==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.1.tgz", - "integrity": "sha512-ZOVpi6c0vfD0vBBtmQqwd4+gGbrnsKnuyrh2ghoNbwg4oMHo85S0rCUR/3Uny6oFDKnTTJkWjamig3gy6ygzYQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.2.tgz", + "integrity": "sha512-r/++4Cwsr56qXlcqc5/2W7PqjQGOSLhz7Lf1BBBNqesMjTjBc1ZTBEQaIs+uHCNCAkl2BvVRHsR4UigzSQyz+A==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.1.tgz", - "integrity": "sha512-0lcQZ7hZ6/gBoJ/Od7BX33Q3jr9oGaQxJfYZ0wmCK4qSu3S06UoBTELy9Njv51h+JaWJFUwzROay8bGWrEVuLQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.2.tgz", + "integrity": "sha512-A9hSRjRrioxmiVgwt5UVqgWJPsO0YK5DJZTzkAotHGIAp84/xYy1MSsT596vyjj0IFx2VEfHtPHi0+wGW9nEoQ==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.1.tgz", - "integrity": "sha512-KQED61FrdYvW0YEMncBsak/PshpGkdPpzLLGXjdUqKqe6Tiv8/zqrlD8GC8CIvSBRxZs7ybyFMPi1KyjnvtUdQ==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.2.tgz", + "integrity": "sha512-beffwiBsw25kOYSKhEZNmmh2x7c9yAIXolD+wLWAc59nuOPYziDDh4mMa1z8P90ffyHPf13QeTom+Sv5vQve4w==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.1.tgz", - "integrity": "sha512-s4QSuvdNrQq00XB2t3Dt+B05rc5cvONnveHijaXtqS+yb98tvNvDiozVfS20k4k1eklhoBC8FBm165RAXDGEuA==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.2.tgz", + "integrity": "sha512-EsbuwjzVnKihisZp0a+fVFhzUFfS/pesfhReElalzXHKeKHiHQhnY5+cRJuNi/4u03kroVXDUrcpI2FsVVIxfw==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.1.tgz", - "integrity": "sha512-S7gzwMAvevFEJGZaWNltfJtvi8LCceWNs94b8uHQhmq8F/YFRy/iNPVAVB3SvnvBrIk8Iy2X6AXWoneLHFsNfg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.2.tgz", + "integrity": "sha512-b6v4cFEgp/DtoDt+OKO6dd4NtuuemAGuI70RQ+R1iIqEioe3AWNi4i6c4uHWfj3eJwWXD9IX1iCPCGPILoQwUw==", "optional": true }, "sass-embedded-win32-ia32": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.1.tgz", - "integrity": "sha512-UjxQ6KtO3UthJMvjlVaE3QiO76wRXLcM/gejSp2cgYUVRHYXFr88z0XjQiZc9mJEuvHi69BvvmpCjN4iptKO5A==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.2.tgz", + "integrity": "sha512-WxPytzrV3D3wD6CMy+4XWfQhQ7zHuJHw9n0z4dvA6w26v0VUSIEGWO/f0Zb6f3ddVZWCv44PBfmMVVCxm32etw==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.1.tgz", - "integrity": "sha512-hN9fO2Z5c5YhvF/p31PM4861y6wglwc11/K5vTaGwDKkhfVrKoT2iMGC9r0GshsP9D/LV8s+StoFe3NLYYp8Qg==", + "version": "1.79.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.2.tgz", + "integrity": "sha512-47KA0lXz11MuQeAjclua5FM7o2ebVz+YHmaQs4zZ13daec76IAMGexoe+KodkueDlGpMbWdhgfcyJVT6aGqQgQ==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index ae579c41df..cb91541ab5 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.79.1" + "sass-embedded": "1.79.2" }, "browserslist": [ "last 2 Firefox versions", From 83e59ec22985939219ea4a3473d566f5930d0968 Mon Sep 17 00:00:00 2001 From: Janes Resnik Date: Fri, 27 Sep 2024 06:37:34 +0000 Subject: [PATCH 115/186] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index fc7d68a372..811b5b2137 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1954,5 +1954,11 @@ "ReplaceTrickplayImages": "Ersetzen vorhandener Trickplay-Bilder", "LabelSaveTrickplayLocally": "Trickplay-Bilder bei den Medien speichern", "LabelSaveTrickplayLocallyHelp": "Wenn Sie Trickplay-Bilder in Medienordnern speichern, werden sie bei Ihren Medien abgelegt und ermöglichen so eine einfache Migration und den Zugriff.", - "RenderPgsSubtitle": "Experimentelles PGS-Untertitel-Rendering" + "RenderPgsSubtitle": "Experimentelles PGS-Untertitel-Rendering", + "LabelAudioTagSettings": "Audio-Tag Einstellungen", + "LabelCustomTagDelimitersHelp": "Zeichen die zur Trennung von Tags verwendet werden sollen.", + "LabelDelimiterWhitelistHelp": "Artikel, die vom Tag-Splitting ausgeschlossen werden sollen. Ein Artikel pro Zeile.", + "PreferNonstandardArtistsTag": "Bevorzuge KÜNSTLER-Tag, falls vorhanden", + "PreferNonstandardArtistsTagHelp": "Verwenden Sie den nicht standardisierten ARTISTS-Tag anstelle des ARTIST-Tags, sofern verfügbar.", + "UseCustomTagDelimitersHelp": "Trennen Sie Künstler-/Genre-Tags mit benutzerdefinierten Zeichen." } From d4cc33f0ee54b35b31d17ddddd0bc5a885dafe9b Mon Sep 17 00:00:00 2001 From: Janes Resnik Date: Fri, 27 Sep 2024 08:57:26 +0000 Subject: [PATCH 116/186] 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 811b5b2137..94ecb84cc7 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -134,8 +134,8 @@ "Disc": "Disk", "Disconnect": "Verbindung trennen", "Display": "Anzeige", - "DisplayInMyMedia": "Auf Homescreen anzeigen", - "DisplayInOtherHomeScreenSections": "Bereiche wie 'Neueste Medien' oder 'Weiterschauen' auf dem Homescreen anzeigen", + "DisplayInMyMedia": "Auf Startbildschirm anzeigen", + "DisplayInOtherHomeScreenSections": "Bereiche wie 'Neueste Medien' oder 'Weiterschauen' auf dem Startbildschirm anzeigen", "DisplayMissingEpisodesWithinSeasons": "Fehlende Folgen innerhalb von Staffeln anzeigen", "DisplayMissingEpisodesWithinSeasonsHelp": "Dies muss in den Servereinstellungen auch für TV-Bibliotheken aktiviert werden.", "DisplayModeHelp": "Wähle den für die Oberfläche zu verwendenden Layoutstil.", From 4c31742cc50c19702f2c1610c2bcfc0d6c4d210b Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 24 Sep 2024 20:09:17 +0300 Subject: [PATCH 117/186] Fix incorrect audio & subtitle index on next track --- src/components/playback/playbackmanager.js | 57 ++++++++++++++-------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index e14aa062d1..b51046d340 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2407,20 +2407,20 @@ class PlaybackManager { }); } - function rankStreamType(prevIndex, prevSource, mediaSource, streamType, isSecondarySubtitle) { + function rankStreamType(prevIndex, prevSource, mediaStreams, trackOptions, streamType, isSecondarySubtitle) { if (prevIndex == -1) { console.debug(`AutoSet ${streamType} - No Stream Set`); if (streamType == 'Subtitle') { if (isSecondarySubtitle) { - mediaSource.DefaultSecondarySubtitleStreamIndex = -1; + trackOptions.DefaultSecondarySubtitleStreamIndex = -1; } else { - mediaSource.DefaultSubtitleStreamIndex = -1; + trackOptions.DefaultSubtitleStreamIndex = -1; } } return; } - if (!prevSource.MediaStreams || !mediaSource.MediaStreams) { + if (!prevSource.MediaStreams || !mediaStreams) { console.debug(`AutoSet ${streamType} - No MediaStreams`); return; } @@ -2446,7 +2446,7 @@ class PlaybackManager { } let newRelIndex = 0; - for (const stream of mediaSource.MediaStreams) { + for (const stream of mediaStreams) { if (stream.Type != streamType) continue; let score = 0; @@ -2469,38 +2469,38 @@ class PlaybackManager { console.debug(`AutoSet ${streamType} - Using ${bestStreamIndex} score ${bestStreamScore}.`); if (streamType == 'Subtitle') { if (isSecondarySubtitle) { - mediaSource.DefaultSecondarySubtitleStreamIndex = bestStreamIndex; + trackOptions.DefaultSecondarySubtitleStreamIndex = bestStreamIndex; } else { - mediaSource.DefaultSubtitleStreamIndex = bestStreamIndex; + trackOptions.DefaultSubtitleStreamIndex = bestStreamIndex; } } if (streamType == 'Audio') { - mediaSource.DefaultAudioStreamIndex = bestStreamIndex; + trackOptions.DefaultAudioStreamIndex = bestStreamIndex; } } else { console.debug(`AutoSet ${streamType} - Threshold not met. Using default.`); } } - function autoSetNextTracks(prevSource, mediaSource, audio, subtitle) { + function autoSetNextTracks(prevSource, mediaStreams, trackOptions, audio, subtitle) { try { if (!prevSource) return; - if (!mediaSource) { - console.warn('AutoSet - No mediaSource'); + if (!mediaStreams) { + console.warn('AutoSet - No mediaStreams'); return; } if (audio && typeof prevSource.DefaultAudioStreamIndex == 'number') { - rankStreamType(prevSource.DefaultAudioStreamIndex, prevSource, mediaSource, 'Audio'); + rankStreamType(prevSource.DefaultAudioStreamIndex, prevSource, mediaStreams, trackOptions, 'Audio'); } if (subtitle && typeof prevSource.DefaultSubtitleStreamIndex == 'number') { - rankStreamType(prevSource.DefaultSubtitleStreamIndex, prevSource, mediaSource, 'Subtitle'); + rankStreamType(prevSource.DefaultSubtitleStreamIndex, prevSource, mediaStreams, trackOptions, 'Subtitle'); } if (subtitle && typeof prevSource.DefaultSecondarySubtitleStreamIndex == 'number') { - rankStreamType(prevSource.DefaultSecondarySubtitleStreamIndex, prevSource, mediaSource, 'Subtitle', true); + rankStreamType(prevSource.DefaultSecondarySubtitleStreamIndex, prevSource, mediaStreams, trackOptions, 'Subtitle', true); } } catch (e) { console.error(`AutoSet - Caught unexpected error: ${e}`); @@ -2572,12 +2572,18 @@ class PlaybackManager { }); } - return Promise.all([promise, player.getDeviceProfile(item)]).then(function (responses) { + const apiClient = ServerConnections.getApiClient(item.ServerId); + const mediaSourceId = playOptions.mediaSourceId || item.Id; + const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId) + .then(fullItem => { + return fullItem.MediaStreams; + }); + + return Promise.all([promise, player.getDeviceProfile(item), apiClient.getCurrentUser(), getMediaStreams]).then(function (responses) { const deviceProfile = responses[1]; + const user = responses[2]; + const mediaStreams = responses[3]; - const apiClient = ServerConnections.getApiClient(item.ServerId); - - const mediaSourceId = playOptions.mediaSourceId; const audioStreamIndex = playOptions.audioStreamIndex; const subtitleStreamIndex = playOptions.subtitleStreamIndex; const options = { @@ -2600,9 +2606,20 @@ class PlaybackManager { // this reference was only needed by sendPlaybackListToPlayer playOptions.items = null; + const trackOptions = {}; + + autoSetNextTracks(prevSource, mediaStreams, trackOptions, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); + if (trackOptions.DefaultAudioStreamIndex != null) { + options.audioStreamIndex = trackOptions.DefaultAudioStreamIndex; + } + if (trackOptions.DefaultSubtitleStreamIndex != null) { + options.subtitleStreamIndex = trackOptions.DefaultSubtitleStreamIndex; + } + return getPlaybackMediaSource(player, apiClient, deviceProfile, item, mediaSourceId, options).then(async (mediaSource) => { - const user = await apiClient.getCurrentUser(); - autoSetNextTracks(prevSource, mediaSource, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); + if (trackOptions.DefaultSecondarySubtitleStreamIndex != null) { + mediaSource.DefaultSecondarySubtitleStreamIndex = trackOptions.DefaultSecondarySubtitleStreamIndex; + } if (mediaSource.DefaultSubtitleStreamIndex == null || mediaSource.DefaultSubtitleStreamIndex < 0) { mediaSource.DefaultSubtitleStreamIndex = mediaSource.DefaultSecondarySubtitleStreamIndex; From 3fcf53d6554b2e33b7ecb2e00f68a727a02d399f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 12:04:44 +0000 Subject: [PATCH 118/186] Update dependency @mui/x-date-pickers to v7.18.0 --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index beac21530c..5114db2697 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@jellyfin/sdk": "0.0.0-unstable.202409260501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", - "@mui/x-date-pickers": "7.17.0", + "@mui/x-date-pickers": "7.18.0", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.56.2", "@tanstack/react-query-devtools": "5.56.2", @@ -5493,14 +5493,14 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/@mui/x-date-pickers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.17.0.tgz", - "integrity": "sha512-3mIw1uOZU/yKweZsVAo9QnwVFzLHqXgXG1TbGbDJ4AU6FhN2TCUlR9tzKHSlYdAHZ0bEWDS1/bgeGsQC7skXMA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.18.0.tgz", + "integrity": "sha512-12tXIoMj9vpS8fS/bS3kWPCoVrH38vNGCxgplI0vOnUrN9rJuYJz3agLPJe1S0xciTw+9W8ZSe3soaW+owoz1Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.6", "@mui/utils": "^5.16.6", - "@mui/x-internals": "7.17.0", + "@mui/x-internals": "7.18.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -5518,7 +5518,7 @@ "@emotion/styled": "^11.8.1", "@mui/material": "^5.15.14 || ^6.0.0", "@mui/system": "^5.15.14 || ^6.0.0", - "date-fns": "^2.25.0 || ^3.2.0", + "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0", "dayjs": "^1.10.7", "luxon": "^3.0.2", @@ -5559,9 +5559,9 @@ } }, "node_modules/@mui/x-internals": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.17.0.tgz", - "integrity": "sha512-FLlAGSJl/vsuaA/8hPGazXFppyzIzxApJJDZMoTS0geUmHd0hyooISV2ltllLmrZ/DGtHhI08m8GGnHL6/vVeg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.18.0.tgz", + "integrity": "sha512-lzCHOWIR0cAIY1bGrWSprYerahbnH5C31ql/2OWCEjcngL2NAV1M6oKI2Vp4HheqzJ822c60UyWyapvyjSzY/A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.6", @@ -29570,13 +29570,13 @@ } }, "@mui/x-date-pickers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.17.0.tgz", - "integrity": "sha512-3mIw1uOZU/yKweZsVAo9QnwVFzLHqXgXG1TbGbDJ4AU6FhN2TCUlR9tzKHSlYdAHZ0bEWDS1/bgeGsQC7skXMA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.18.0.tgz", + "integrity": "sha512-12tXIoMj9vpS8fS/bS3kWPCoVrH38vNGCxgplI0vOnUrN9rJuYJz3agLPJe1S0xciTw+9W8ZSe3soaW+owoz1Q==", "requires": { "@babel/runtime": "^7.25.6", "@mui/utils": "^5.16.6", - "@mui/x-internals": "7.17.0", + "@mui/x-internals": "7.18.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -29584,9 +29584,9 @@ } }, "@mui/x-internals": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.17.0.tgz", - "integrity": "sha512-FLlAGSJl/vsuaA/8hPGazXFppyzIzxApJJDZMoTS0geUmHd0hyooISV2ltllLmrZ/DGtHhI08m8GGnHL6/vVeg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.18.0.tgz", + "integrity": "sha512-lzCHOWIR0cAIY1bGrWSprYerahbnH5C31ql/2OWCEjcngL2NAV1M6oKI2Vp4HheqzJ822c60UyWyapvyjSzY/A==", "requires": { "@babel/runtime": "^7.25.6", "@mui/utils": "^5.16.6" diff --git a/package.json b/package.json index 0285482d5e..56e2ce613a 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@jellyfin/sdk": "0.0.0-unstable.202409260501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", - "@mui/x-date-pickers": "7.17.0", + "@mui/x-date-pickers": "7.18.0", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.56.2", "@tanstack/react-query-devtools": "5.56.2", From 0c1616fd4e9da52f543fd794d4272910d3d5df46 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:03:55 +0000 Subject: [PATCH 119/186] Update dependency sass-loader to v16.0.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 594ba87e00..d1904884f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -111,7 +111,7 @@ "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", "sass": "1.79.2", - "sass-loader": "16.0.1", + "sass-loader": "16.0.2", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", @@ -20603,9 +20603,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.1.tgz", - "integrity": "sha512-xACl1ToTsKnL9Ce5yYpRxrLj9QUDCnwZNhzpC7tKiFyA8zXsd3Ap+HGVnbCgkdQcm43E+i6oKAWBsvGA6ZoiMw==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.2.tgz", + "integrity": "sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==", "dev": true, "license": "MIT", "dependencies": { @@ -39904,9 +39904,9 @@ "optional": true }, "sass-loader": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.1.tgz", - "integrity": "sha512-xACl1ToTsKnL9Ce5yYpRxrLj9QUDCnwZNhzpC7tKiFyA8zXsd3Ap+HGVnbCgkdQcm43E+i6oKAWBsvGA6ZoiMw==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.2.tgz", + "integrity": "sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==", "dev": true, "requires": { "neo-async": "^2.6.2" diff --git a/package.json b/package.json index 98cdc04250..bc44b49688 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", "sass": "1.79.2", - "sass-loader": "16.0.1", + "sass-loader": "16.0.2", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", From 0780bc360bdde59847902f896d4fcc8803e7c7b0 Mon Sep 17 00:00:00 2001 From: Max Bruch Date: Fri, 27 Sep 2024 18:21:16 +0000 Subject: [PATCH 120/186] 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 94ecb84cc7..651b7d6c66 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1960,5 +1960,8 @@ "LabelDelimiterWhitelistHelp": "Artikel, die vom Tag-Splitting ausgeschlossen werden sollen. Ein Artikel pro Zeile.", "PreferNonstandardArtistsTag": "Bevorzuge KÜNSTLER-Tag, falls vorhanden", "PreferNonstandardArtistsTagHelp": "Verwenden Sie den nicht standardisierten ARTISTS-Tag anstelle des ARTIST-Tags, sofern verfügbar.", - "UseCustomTagDelimitersHelp": "Trennen Sie Künstler-/Genre-Tags mit benutzerdefinierten Zeichen." + "UseCustomTagDelimitersHelp": "Trennen Sie Künstler-/Genre-Tags mit benutzerdefinierten Zeichen.", + "LabelCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung", + "LabelDelimiterWhitelist": "Trennzeichen Whitelist", + "UseCustomTagDelimiters": "Benutzerdefinierte Tag-Begrenzung verwenden" } From 0945097208fdfe68c33f6eee7be07f22ba274d75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 00:56:50 +0000 Subject: [PATCH 121/186] Update dependency sass-embedded to v1.79.3 --- package-lock.json | 334 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 168 insertions(+), 168 deletions(-) diff --git a/package-lock.json b/package-lock.json index 594ba87e00..7fc53121a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.79.2" + "sass-embedded": "1.79.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -20213,9 +20213,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.2.tgz", - "integrity": "sha512-PYnPJJJcZ79NBLhC72MfZ+EWLkTIA2pizTEiNTtxXjLmqtKNkXO+TL9qXgTmot4F72ERVZqjQjBQUcfkNbXg/w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.3.tgz", + "integrity": "sha512-zUve2qCn6uSOMZnZazLzrDWq//OQWFle5G45vJjv3B/ADIA3TXVgqHqN3u7D2vGajOGREz0HN5nhliSoKmQqZA==", "license": "MIT", "optional": true, "dependencies": { @@ -20234,32 +20234,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.79.2", - "sass-embedded-android-arm64": "1.79.2", - "sass-embedded-android-ia32": "1.79.2", - "sass-embedded-android-riscv64": "1.79.2", - "sass-embedded-android-x64": "1.79.2", - "sass-embedded-darwin-arm64": "1.79.2", - "sass-embedded-darwin-x64": "1.79.2", - "sass-embedded-linux-arm": "1.79.2", - "sass-embedded-linux-arm64": "1.79.2", - "sass-embedded-linux-ia32": "1.79.2", - "sass-embedded-linux-musl-arm": "1.79.2", - "sass-embedded-linux-musl-arm64": "1.79.2", - "sass-embedded-linux-musl-ia32": "1.79.2", - "sass-embedded-linux-musl-riscv64": "1.79.2", - "sass-embedded-linux-musl-x64": "1.79.2", - "sass-embedded-linux-riscv64": "1.79.2", - "sass-embedded-linux-x64": "1.79.2", - "sass-embedded-win32-arm64": "1.79.2", - "sass-embedded-win32-ia32": "1.79.2", - "sass-embedded-win32-x64": "1.79.2" + "sass-embedded-android-arm": "1.79.3", + "sass-embedded-android-arm64": "1.79.3", + "sass-embedded-android-ia32": "1.79.3", + "sass-embedded-android-riscv64": "1.79.3", + "sass-embedded-android-x64": "1.79.3", + "sass-embedded-darwin-arm64": "1.79.3", + "sass-embedded-darwin-x64": "1.79.3", + "sass-embedded-linux-arm": "1.79.3", + "sass-embedded-linux-arm64": "1.79.3", + "sass-embedded-linux-ia32": "1.79.3", + "sass-embedded-linux-musl-arm": "1.79.3", + "sass-embedded-linux-musl-arm64": "1.79.3", + "sass-embedded-linux-musl-ia32": "1.79.3", + "sass-embedded-linux-musl-riscv64": "1.79.3", + "sass-embedded-linux-musl-x64": "1.79.3", + "sass-embedded-linux-riscv64": "1.79.3", + "sass-embedded-linux-x64": "1.79.3", + "sass-embedded-win32-arm64": "1.79.3", + "sass-embedded-win32-ia32": "1.79.3", + "sass-embedded-win32-x64": "1.79.3" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.2.tgz", - "integrity": "sha512-oBy6lRjCHvNThNbXJ8/P02tZQYnvaI3sR0aZ86DoHiMGMFaijwvXrzwkZWJZ6LxysuBXlfRh0nRWQuwWBCIt/A==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.3.tgz", + "integrity": "sha512-rrdaVDkKBLUqzdqlBFamUbeuLG+8r/QLXHIgz4qPhIDqceJH6ds0Vzrae9Ef6DhYfMatOg2xiScdatwQ8Yl/hA==", "cpu": [ "arm" ], @@ -20273,9 +20273,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.2.tgz", - "integrity": "sha512-msFtFD9QGPKH3wnrgj8bc/UMCpKGBUHpCTzMz1JSUDZapD3T/sSJSqkuywu3smawqd77tBKkr+34HX+ot9jNew==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.3.tgz", + "integrity": "sha512-Wqm/WKHIDQl7w7eIQRO/GQ7EXfnwNpipCyJL7Xtb15vSAV64J4/0D/esy6GOPlVG+qcu8/XN8NV7Bf5wZ2ExUw==", "cpu": [ "arm64" ], @@ -20289,9 +20289,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.2.tgz", - "integrity": "sha512-dtIAVmRdx+rMq0Bk4MG6AbcD/YfDfz2UIljzxnKp1kmZcU9vxcYbtx8c9T68qF3/JZx0rX6KSKwVRXjfLIxmVg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.3.tgz", + "integrity": "sha512-6rDmH0O7hjBP04/xBAFzSYYMU/7MrQYCak4541BZIbIfa2uw0x/8+mB7lZjdgFsBrFjcpdVCPhZPUE6Y50c00A==", "cpu": [ "ia32" ], @@ -20305,9 +20305,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.2.tgz", - "integrity": "sha512-XHe+ft67aeLdwyRId14NhJYQT6GdsGQdX2rH31HSJw2z8Xdzl2kbESw3QRPYpoIw+nPCt9ItJV6BoTaDszOc2A==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.3.tgz", + "integrity": "sha512-B/PgB0AfTCvOlF1g89raJTwTXIUQUM3OXDWqEKIlJEZM1Yao91i8ZkyrFkDMzT4G5sETy4o8pgK+qE9+7bFlug==", "cpu": [ "riscv64" ], @@ -20321,9 +20321,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.2.tgz", - "integrity": "sha512-1Es9PhGVCgT7BuXLMwxHv1h/Z6Oku5oN/zP2gkKycLgQwXRdz6c3jjvnveLpMgM8IhyWm1M4ELAYZ+3Agby0zg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.3.tgz", + "integrity": "sha512-a5cpo9Yw4xnX32Uo3WfMZLaTVnI/h2n7U3K3eTygyj707yhGkUB0i+qxldzCw8MmKivIu9irG6O4kmnRjW6f7g==", "cpu": [ "x64" ], @@ -20337,9 +20337,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.2.tgz", - "integrity": "sha512-89Oe60sneLTjqw7HwgDRdgQp3XFOe96GxM7HoQUFupl0a/xwOechDDTIIKqjZlx3CTwG4gijTufw4TlA2nROsw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.3.tgz", + "integrity": "sha512-imafD0nlVz5FJhqBqxUbG5rK4E3cu1GxhMZ5VhKm0k4t5jFQo+3OjN7sHT4Ee2Mk1g8sjr5dtq5enDU4fs6lXA==", "cpu": [ "arm64" ], @@ -20353,9 +20353,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.2.tgz", - "integrity": "sha512-b7jL2tcRFowuQU1VsPbktYJgaOy2I7xOf4PT0kv0okvgAzlr1lWCrWBJd1Ef1etu3jkkR713WkE08Jdr6jb37w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.3.tgz", + "integrity": "sha512-pjciT1FcMUMA4rWdpyZYSwMOvxk5JP7R6vy7TzvqkUEqXxP9FTflYnAiwgYUDVTpngHHqRxTjdyW+e+h2L9dHw==", "cpu": [ "x64" ], @@ -20369,9 +20369,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.2.tgz", - "integrity": "sha512-fW3E1OZDy6AXRjcW1Rx6AEHquNNF7TbtJjfU/IkJdS3hRUuJK03vvJduDYD3zCjr4EqKyuok+E+nYEnuIdyYrQ==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.3.tgz", + "integrity": "sha512-n0bDtzABPE5YaL9wSLxNPiQMl1zArsGblHJyED6fEHz41m+OkCTopfO8IVjcf+MBrK/j11gonxiIGWO+fNOxvg==", "cpu": [ "arm" ], @@ -20385,9 +20385,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.2.tgz", - "integrity": "sha512-t4RoNDnvTlvMO+UjTiuKJef4MiGyzO2YBVxb0k5Vsc82SFdCaNeqVsb1TlWcsmZA1uREmN+4XUPk25TTYYH92w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.3.tgz", + "integrity": "sha512-ODo8ghwk6KHxchgwxq4CwgfYwWdreEbsQoukeEgRKxHcuLB9XF6tol9pGlfrc8sYox48Vp5WDCZuzgoo6rJ6tg==", "cpu": [ "arm64" ], @@ -20401,9 +20401,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.2.tgz", - "integrity": "sha512-RXNqN4kKwQAELRTzVZe4KGAyZgRNZaZ5pslsPIPa2sJUCHnbGyhN+4NZBR/vZWWyb2q3Ps2kpM9FvOhYh72vgg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.3.tgz", + "integrity": "sha512-oC3rUyIE6mEm2etsc4CuNu6IVmB6CoSM4KsubxzCD3S37QFXq8wYbI0t9iiDdTkKb5Iu+vUyhn+tYJRVHg0tvw==", "cpu": [ "ia32" ], @@ -20417,9 +20417,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.2.tgz", - "integrity": "sha512-3IJ6L3UnLTVx4eheKqU9CcjwKyobTfSn9F3WdlWzxOH4SXSf7EYbfKpvwNHyZ8QJ7mRcndJOWU5Efuak12fl0w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.3.tgz", + "integrity": "sha512-TOUYMtDs9xoMsJSEEr7NjtcVCqVpg1eSOQHXXruJ1kiYfxwmHrCYTjTLoefbZ29mWqIq8NUaXJG4rZNDK6NzRA==", "cpu": [ "arm" ], @@ -20433,9 +20433,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.2.tgz", - "integrity": "sha512-/5wZ4skLIfhjei8WQ1HbOxXIrHHyW5ZBvD3Bay5k+YOH9chWqU3IVOl3q3ZY/MK+Exz99IBAV3/6ei11l6igoA==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.3.tgz", + "integrity": "sha512-Q9/5lsrK/JnQci3DwxZ9PGIIrRxuo/bySv+gbyVp8Kb7gdkZcEsY7HkxaBJfwVEwpZSGAyCviyZDHDMILjliOw==", "cpu": [ "arm64" ], @@ -20449,9 +20449,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.2.tgz", - "integrity": "sha512-6Edl93bBC0l8+/WaxisBocEQI6fe3Buce9ZiUy2yF6fLTuX2vZn4zx6T2/sb5+EbD0K2ZFuDkDeNwWWZvz4H4g==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.3.tgz", + "integrity": "sha512-T2uERh3gs9eWUzdkDadPuYbelQJQLZyX8myutUd4fxyrQ7ToQRBwcMoynEjl48DBHnM0oRiJUHrV9uFuJ+fmRA==", "cpu": [ "ia32" ], @@ -20465,9 +20465,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.2.tgz", - "integrity": "sha512-r/++4Cwsr56qXlcqc5/2W7PqjQGOSLhz7Lf1BBBNqesMjTjBc1ZTBEQaIs+uHCNCAkl2BvVRHsR4UigzSQyz+A==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.3.tgz", + "integrity": "sha512-XTuYtTBPFeEjydS2GsIUkMztzXIiz13noknE7m1yAbVxOchu9jD9FCLAdK9pVPPki+9BiLSxsutYwOcQn8atqQ==", "cpu": [ "riscv64" ], @@ -20481,9 +20481,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.2.tgz", - "integrity": "sha512-A9hSRjRrioxmiVgwt5UVqgWJPsO0YK5DJZTzkAotHGIAp84/xYy1MSsT596vyjj0IFx2VEfHtPHi0+wGW9nEoQ==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.3.tgz", + "integrity": "sha512-gDHfaPlxT/XQTMbfb2y+U6zDMuI8pfapVXTYlUrgYhKH2KoICclIvahhjFii5i5+1dHpfGzjgYKBqI3nvZsYFg==", "cpu": [ "x64" ], @@ -20497,9 +20497,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.2.tgz", - "integrity": "sha512-beffwiBsw25kOYSKhEZNmmh2x7c9yAIXolD+wLWAc59nuOPYziDDh4mMa1z8P90ffyHPf13QeTom+Sv5vQve4w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.3.tgz", + "integrity": "sha512-NONTa//1ZfxA87+Zjp3rabL+Z9gM67FJBdktRKXXMBAce5i8eCj/eqJGUOGPjYxtvxtQw77cex0qMr9SZnX6ww==", "cpu": [ "riscv64" ], @@ -20513,9 +20513,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.2.tgz", - "integrity": "sha512-EsbuwjzVnKihisZp0a+fVFhzUFfS/pesfhReElalzXHKeKHiHQhnY5+cRJuNi/4u03kroVXDUrcpI2FsVVIxfw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.3.tgz", + "integrity": "sha512-drlUqMMw222+f/T5sNrIAv+z0vQwLkO4zAlDmf4biLdWIloPP/3plTodAkMyfagNcvA8jG2jN414pJXBI3zK6w==", "cpu": [ "x64" ], @@ -20529,9 +20529,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.2.tgz", - "integrity": "sha512-b6v4cFEgp/DtoDt+OKO6dd4NtuuemAGuI70RQ+R1iIqEioe3AWNi4i6c4uHWfj3eJwWXD9IX1iCPCGPILoQwUw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.3.tgz", + "integrity": "sha512-gYz0IUb0fLkHUbhq+HR52wvQfG75Zu1s48/v48TqC+b04H/01k2eiawp/Ec1f+lhpIL/pr5+n5jWR6CjkxPdnQ==", "cpu": [ "arm64" ], @@ -20545,9 +20545,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.2.tgz", - "integrity": "sha512-WxPytzrV3D3wD6CMy+4XWfQhQ7zHuJHw9n0z4dvA6w26v0VUSIEGWO/f0Zb6f3ddVZWCv44PBfmMVVCxm32etw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.3.tgz", + "integrity": "sha512-fbDTyzbqRc+xCWZ+YHSDt2WvGk5PW2K0SjyHuwes/Fls1+wdO4iHIukE/pD+HSWytYrtCqhe7EFq5Ug5HxGTLg==", "cpu": [ "ia32" ], @@ -20561,9 +20561,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.2.tgz", - "integrity": "sha512-47KA0lXz11MuQeAjclua5FM7o2ebVz+YHmaQs4zZ13daec76IAMGexoe+KodkueDlGpMbWdhgfcyJVT6aGqQgQ==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.3.tgz", + "integrity": "sha512-vvfr6wyCaHvdQbGS8UkYab6DXc1FKJRYFT5aFE3QTVqbzCqmJ5tf80E4+gvB99nljLtMjwKR1d332iWI9KDLhw==", "cpu": [ "x64" ], @@ -39732,9 +39732,9 @@ } }, "sass-embedded": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.2.tgz", - "integrity": "sha512-PYnPJJJcZ79NBLhC72MfZ+EWLkTIA2pizTEiNTtxXjLmqtKNkXO+TL9qXgTmot4F72ERVZqjQjBQUcfkNbXg/w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.79.3.tgz", + "integrity": "sha512-zUve2qCn6uSOMZnZazLzrDWq//OQWFle5G45vJjv3B/ADIA3TXVgqHqN3u7D2vGajOGREz0HN5nhliSoKmQqZA==", "optional": true, "requires": { "@bufbuild/protobuf": "^2.0.0", @@ -39742,26 +39742,26 @@ "colorjs.io": "^0.5.0", "immutable": "^4.0.0", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.79.2", - "sass-embedded-android-arm64": "1.79.2", - "sass-embedded-android-ia32": "1.79.2", - "sass-embedded-android-riscv64": "1.79.2", - "sass-embedded-android-x64": "1.79.2", - "sass-embedded-darwin-arm64": "1.79.2", - "sass-embedded-darwin-x64": "1.79.2", - "sass-embedded-linux-arm": "1.79.2", - "sass-embedded-linux-arm64": "1.79.2", - "sass-embedded-linux-ia32": "1.79.2", - "sass-embedded-linux-musl-arm": "1.79.2", - "sass-embedded-linux-musl-arm64": "1.79.2", - "sass-embedded-linux-musl-ia32": "1.79.2", - "sass-embedded-linux-musl-riscv64": "1.79.2", - "sass-embedded-linux-musl-x64": "1.79.2", - "sass-embedded-linux-riscv64": "1.79.2", - "sass-embedded-linux-x64": "1.79.2", - "sass-embedded-win32-arm64": "1.79.2", - "sass-embedded-win32-ia32": "1.79.2", - "sass-embedded-win32-x64": "1.79.2", + "sass-embedded-android-arm": "1.79.3", + "sass-embedded-android-arm64": "1.79.3", + "sass-embedded-android-ia32": "1.79.3", + "sass-embedded-android-riscv64": "1.79.3", + "sass-embedded-android-x64": "1.79.3", + "sass-embedded-darwin-arm64": "1.79.3", + "sass-embedded-darwin-x64": "1.79.3", + "sass-embedded-linux-arm": "1.79.3", + "sass-embedded-linux-arm64": "1.79.3", + "sass-embedded-linux-ia32": "1.79.3", + "sass-embedded-linux-musl-arm": "1.79.3", + "sass-embedded-linux-musl-arm64": "1.79.3", + "sass-embedded-linux-musl-ia32": "1.79.3", + "sass-embedded-linux-musl-riscv64": "1.79.3", + "sass-embedded-linux-musl-x64": "1.79.3", + "sass-embedded-linux-riscv64": "1.79.3", + "sass-embedded-linux-x64": "1.79.3", + "sass-embedded-win32-arm64": "1.79.3", + "sass-embedded-win32-ia32": "1.79.3", + "sass-embedded-win32-x64": "1.79.3", "supports-color": "^8.1.1", "varint": "^6.0.0" }, @@ -39784,123 +39784,123 @@ } }, "sass-embedded-android-arm": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.2.tgz", - "integrity": "sha512-oBy6lRjCHvNThNbXJ8/P02tZQYnvaI3sR0aZ86DoHiMGMFaijwvXrzwkZWJZ6LxysuBXlfRh0nRWQuwWBCIt/A==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.79.3.tgz", + "integrity": "sha512-rrdaVDkKBLUqzdqlBFamUbeuLG+8r/QLXHIgz4qPhIDqceJH6ds0Vzrae9Ef6DhYfMatOg2xiScdatwQ8Yl/hA==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.2.tgz", - "integrity": "sha512-msFtFD9QGPKH3wnrgj8bc/UMCpKGBUHpCTzMz1JSUDZapD3T/sSJSqkuywu3smawqd77tBKkr+34HX+ot9jNew==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.79.3.tgz", + "integrity": "sha512-Wqm/WKHIDQl7w7eIQRO/GQ7EXfnwNpipCyJL7Xtb15vSAV64J4/0D/esy6GOPlVG+qcu8/XN8NV7Bf5wZ2ExUw==", "optional": true }, "sass-embedded-android-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.2.tgz", - "integrity": "sha512-dtIAVmRdx+rMq0Bk4MG6AbcD/YfDfz2UIljzxnKp1kmZcU9vxcYbtx8c9T68qF3/JZx0rX6KSKwVRXjfLIxmVg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.79.3.tgz", + "integrity": "sha512-6rDmH0O7hjBP04/xBAFzSYYMU/7MrQYCak4541BZIbIfa2uw0x/8+mB7lZjdgFsBrFjcpdVCPhZPUE6Y50c00A==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.2.tgz", - "integrity": "sha512-XHe+ft67aeLdwyRId14NhJYQT6GdsGQdX2rH31HSJw2z8Xdzl2kbESw3QRPYpoIw+nPCt9ItJV6BoTaDszOc2A==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.79.3.tgz", + "integrity": "sha512-B/PgB0AfTCvOlF1g89raJTwTXIUQUM3OXDWqEKIlJEZM1Yao91i8ZkyrFkDMzT4G5sETy4o8pgK+qE9+7bFlug==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.2.tgz", - "integrity": "sha512-1Es9PhGVCgT7BuXLMwxHv1h/Z6Oku5oN/zP2gkKycLgQwXRdz6c3jjvnveLpMgM8IhyWm1M4ELAYZ+3Agby0zg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.79.3.tgz", + "integrity": "sha512-a5cpo9Yw4xnX32Uo3WfMZLaTVnI/h2n7U3K3eTygyj707yhGkUB0i+qxldzCw8MmKivIu9irG6O4kmnRjW6f7g==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.2.tgz", - "integrity": "sha512-89Oe60sneLTjqw7HwgDRdgQp3XFOe96GxM7HoQUFupl0a/xwOechDDTIIKqjZlx3CTwG4gijTufw4TlA2nROsw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.79.3.tgz", + "integrity": "sha512-imafD0nlVz5FJhqBqxUbG5rK4E3cu1GxhMZ5VhKm0k4t5jFQo+3OjN7sHT4Ee2Mk1g8sjr5dtq5enDU4fs6lXA==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.2.tgz", - "integrity": "sha512-b7jL2tcRFowuQU1VsPbktYJgaOy2I7xOf4PT0kv0okvgAzlr1lWCrWBJd1Ef1etu3jkkR713WkE08Jdr6jb37w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.79.3.tgz", + "integrity": "sha512-pjciT1FcMUMA4rWdpyZYSwMOvxk5JP7R6vy7TzvqkUEqXxP9FTflYnAiwgYUDVTpngHHqRxTjdyW+e+h2L9dHw==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.2.tgz", - "integrity": "sha512-fW3E1OZDy6AXRjcW1Rx6AEHquNNF7TbtJjfU/IkJdS3hRUuJK03vvJduDYD3zCjr4EqKyuok+E+nYEnuIdyYrQ==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.79.3.tgz", + "integrity": "sha512-n0bDtzABPE5YaL9wSLxNPiQMl1zArsGblHJyED6fEHz41m+OkCTopfO8IVjcf+MBrK/j11gonxiIGWO+fNOxvg==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.2.tgz", - "integrity": "sha512-t4RoNDnvTlvMO+UjTiuKJef4MiGyzO2YBVxb0k5Vsc82SFdCaNeqVsb1TlWcsmZA1uREmN+4XUPk25TTYYH92w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.79.3.tgz", + "integrity": "sha512-ODo8ghwk6KHxchgwxq4CwgfYwWdreEbsQoukeEgRKxHcuLB9XF6tol9pGlfrc8sYox48Vp5WDCZuzgoo6rJ6tg==", "optional": true }, "sass-embedded-linux-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.2.tgz", - "integrity": "sha512-RXNqN4kKwQAELRTzVZe4KGAyZgRNZaZ5pslsPIPa2sJUCHnbGyhN+4NZBR/vZWWyb2q3Ps2kpM9FvOhYh72vgg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.79.3.tgz", + "integrity": "sha512-oC3rUyIE6mEm2etsc4CuNu6IVmB6CoSM4KsubxzCD3S37QFXq8wYbI0t9iiDdTkKb5Iu+vUyhn+tYJRVHg0tvw==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.2.tgz", - "integrity": "sha512-3IJ6L3UnLTVx4eheKqU9CcjwKyobTfSn9F3WdlWzxOH4SXSf7EYbfKpvwNHyZ8QJ7mRcndJOWU5Efuak12fl0w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.79.3.tgz", + "integrity": "sha512-TOUYMtDs9xoMsJSEEr7NjtcVCqVpg1eSOQHXXruJ1kiYfxwmHrCYTjTLoefbZ29mWqIq8NUaXJG4rZNDK6NzRA==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.2.tgz", - "integrity": "sha512-/5wZ4skLIfhjei8WQ1HbOxXIrHHyW5ZBvD3Bay5k+YOH9chWqU3IVOl3q3ZY/MK+Exz99IBAV3/6ei11l6igoA==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.79.3.tgz", + "integrity": "sha512-Q9/5lsrK/JnQci3DwxZ9PGIIrRxuo/bySv+gbyVp8Kb7gdkZcEsY7HkxaBJfwVEwpZSGAyCviyZDHDMILjliOw==", "optional": true }, "sass-embedded-linux-musl-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.2.tgz", - "integrity": "sha512-6Edl93bBC0l8+/WaxisBocEQI6fe3Buce9ZiUy2yF6fLTuX2vZn4zx6T2/sb5+EbD0K2ZFuDkDeNwWWZvz4H4g==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.79.3.tgz", + "integrity": "sha512-T2uERh3gs9eWUzdkDadPuYbelQJQLZyX8myutUd4fxyrQ7ToQRBwcMoynEjl48DBHnM0oRiJUHrV9uFuJ+fmRA==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.2.tgz", - "integrity": "sha512-r/++4Cwsr56qXlcqc5/2W7PqjQGOSLhz7Lf1BBBNqesMjTjBc1ZTBEQaIs+uHCNCAkl2BvVRHsR4UigzSQyz+A==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.79.3.tgz", + "integrity": "sha512-XTuYtTBPFeEjydS2GsIUkMztzXIiz13noknE7m1yAbVxOchu9jD9FCLAdK9pVPPki+9BiLSxsutYwOcQn8atqQ==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.2.tgz", - "integrity": "sha512-A9hSRjRrioxmiVgwt5UVqgWJPsO0YK5DJZTzkAotHGIAp84/xYy1MSsT596vyjj0IFx2VEfHtPHi0+wGW9nEoQ==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.79.3.tgz", + "integrity": "sha512-gDHfaPlxT/XQTMbfb2y+U6zDMuI8pfapVXTYlUrgYhKH2KoICclIvahhjFii5i5+1dHpfGzjgYKBqI3nvZsYFg==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.2.tgz", - "integrity": "sha512-beffwiBsw25kOYSKhEZNmmh2x7c9yAIXolD+wLWAc59nuOPYziDDh4mMa1z8P90ffyHPf13QeTom+Sv5vQve4w==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.79.3.tgz", + "integrity": "sha512-NONTa//1ZfxA87+Zjp3rabL+Z9gM67FJBdktRKXXMBAce5i8eCj/eqJGUOGPjYxtvxtQw77cex0qMr9SZnX6ww==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.2.tgz", - "integrity": "sha512-EsbuwjzVnKihisZp0a+fVFhzUFfS/pesfhReElalzXHKeKHiHQhnY5+cRJuNi/4u03kroVXDUrcpI2FsVVIxfw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.79.3.tgz", + "integrity": "sha512-drlUqMMw222+f/T5sNrIAv+z0vQwLkO4zAlDmf4biLdWIloPP/3plTodAkMyfagNcvA8jG2jN414pJXBI3zK6w==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.2.tgz", - "integrity": "sha512-b6v4cFEgp/DtoDt+OKO6dd4NtuuemAGuI70RQ+R1iIqEioe3AWNi4i6c4uHWfj3eJwWXD9IX1iCPCGPILoQwUw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.79.3.tgz", + "integrity": "sha512-gYz0IUb0fLkHUbhq+HR52wvQfG75Zu1s48/v48TqC+b04H/01k2eiawp/Ec1f+lhpIL/pr5+n5jWR6CjkxPdnQ==", "optional": true }, "sass-embedded-win32-ia32": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.2.tgz", - "integrity": "sha512-WxPytzrV3D3wD6CMy+4XWfQhQ7zHuJHw9n0z4dvA6w26v0VUSIEGWO/f0Zb6f3ddVZWCv44PBfmMVVCxm32etw==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.79.3.tgz", + "integrity": "sha512-fbDTyzbqRc+xCWZ+YHSDt2WvGk5PW2K0SjyHuwes/Fls1+wdO4iHIukE/pD+HSWytYrtCqhe7EFq5Ug5HxGTLg==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.2.tgz", - "integrity": "sha512-47KA0lXz11MuQeAjclua5FM7o2ebVz+YHmaQs4zZ13daec76IAMGexoe+KodkueDlGpMbWdhgfcyJVT6aGqQgQ==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.79.3.tgz", + "integrity": "sha512-vvfr6wyCaHvdQbGS8UkYab6DXc1FKJRYFT5aFE3QTVqbzCqmJ5tf80E4+gvB99nljLtMjwKR1d332iWI9KDLhw==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index 98cdc04250..9171ce6340 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.79.2" + "sass-embedded": "1.79.3" }, "browserslist": [ "last 2 Firefox versions", From fd465f16882b1e509986597580402aa2fbcf398f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Sep 2024 03:49:34 +0000 Subject: [PATCH 122/186] Update dependency sass to v1.79.3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d1904884f5..8e9486d606 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.79.2", + "sass": "1.79.3", "sass-loader": "16.0.2", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -20195,9 +20195,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz", - "integrity": "sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", + "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", "dev": true, "license": "MIT", "dependencies": { @@ -39704,9 +39704,9 @@ "dev": true }, "sass": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz", - "integrity": "sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", + "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", "dev": true, "requires": { "chokidar": "^4.0.0", diff --git a/package.json b/package.json index bc44b49688..6468c6c1fb 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", - "sass": "1.79.2", + "sass": "1.79.3", "sass-loader": "16.0.2", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", From 46f0307d6e77d8629f66243620843fad73a778b6 Mon Sep 17 00:00:00 2001 From: Kityn Date: Sat, 28 Sep 2024 05:11:44 +0000 Subject: [PATCH 123/186] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 79adcc28b3..fbde81eb3c 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1963,5 +1963,8 @@ "LabelCustomTagDelimitersHelp": "Znaki, które należy traktować jako ograniczniki oddzielające tagi.", "PreferNonstandardArtistsTagHelp": "Jeśli jest dostępny, użyj niestandardowego tagu WYKONAWCY zamiast tagu WYKONAWCA.", "UseCustomTagDelimitersHelp": "Podziel tagi wykonawcy/gatunku za pomocą niestandardowych znaków.", - "LabelCustomTagDelimiters": "Niestandardowy ogranicznik tagów" + "LabelCustomTagDelimiters": "Niestandardowy ogranicznik tagów", + "MessageCancelSeriesTimerError": "Wystąpił błąd podczas anulowania timera serialu", + "MessageCancelTimerError": "Wystąpił błąd podczas anulowania timera", + "MessageSplitVersionsError": "Wystąpił błąd podczas podziału wersji" } From 290207bdb780ef205e7cf55b7bdd914e2e7b19c8 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sat, 28 Sep 2024 07:14:03 +0000 Subject: [PATCH 124/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 877b9191a1..d71f6ad90b 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1962,5 +1962,8 @@ "UseCustomTagDelimiters": "Aangepast scheidingsteken voor tags gebruiken", "UseCustomTagDelimitersHelp": "Artiest- en genre-tags splitsen met aangepaste tekens.", "PreferNonstandardArtistsTagHelp": "Gebruik de incourante ARTISTS-tag in plaats van de ARTIST-tag indien beschikbaar.", - "PreferNonstandardArtistsTag": "ARTISTS-tag verkiezen indien beschikbaar" + "PreferNonstandardArtistsTag": "ARTISTS-tag verkiezen indien beschikbaar", + "MessageCancelTimerError": "Er is een fout opgetreden bij het annuleren van de tijdklok", + "MessageSplitVersionsError": "Er is een fout opgetreden bij het splitsen van de versies", + "MessageCancelSeriesTimerError": "Er is een fout opgetreden bij het annuleren van de serietijdklok" } From a5035baaf74ce68680d0e5ac03b8d393333efe87 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sat, 28 Sep 2024 07:13:20 +0000 Subject: [PATCH 125/186] Translated using Weblate (Chinese (Simplified Han script)) 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 9de2ea7460..3587f7dcc2 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1963,5 +1963,8 @@ "LabelDelimiterWhitelistHelp": "从标签分隔中排除的项目。每行一项。", "PreferNonstandardArtistsTag": "可用时首选的艺术家标签", "PreferNonstandardArtistsTagHelp": "如果可用,使用非标准的艺术家标签代替艺术家标签。", - "UseCustomTagDelimitersHelp": "使用自定义字符分割\"艺术家/类型\"标签。" + "UseCustomTagDelimitersHelp": "使用自定义字符分割\"艺术家/类型\"标签。", + "MessageCancelSeriesTimerError": "取消节目计时器时发生错误", + "MessageCancelTimerError": "取消计时器时发生错误", + "MessageSplitVersionsError": "分割版本时发生错误" } From bddb631b083898999590b37275fa40fcf0ee5916 Mon Sep 17 00:00:00 2001 From: Andreas Lundin Date: Sat, 28 Sep 2024 09:36:17 +0000 Subject: [PATCH 126/186] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index d1b508d6c9..52da440f96 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1754,9 +1754,9 @@ "AllowSegmentDeletion": "Radera segment", "AllowSegmentDeletionHelp": "Radera gamla segment efter att de har laddats ner av användaren. Detta förhindrar att hela den transkodade filen behöver lagras på hårddisken. Stäng av detta om du upplever uppspelningsproblem.", "LabelThrottleDelaySeconds": "Begränsa efter", - "LabelThrottleDelaySecondsHelp": "Tid i sekunder efter vilken transkodern kommer att strypas. Måste vara tillräckligt stor för att klienten ska kunna upprätthålla en sund buffert. Fungerar endast om strypning är aktiverat.", - "LabelSegmentKeepSeconds": "Tid för att behålla segment", - "LabelSegmentKeepSecondsHelp": "Tid i sekunder där segment ska sparas efter laddats ner av användaren. Fungerar endast om segmentradering är aktiverat.", + "LabelThrottleDelaySecondsHelp": "Tid i sekunder efter vilken transkodern kommer att strypas. Måste vara tillräckligt stor för att klienten ska kunna upprätthålla en tillräcklig buffert. Fungerar endast om strypning är aktiverat.", + "LabelSegmentKeepSeconds": "Tid att behålla segment", + "LabelSegmentKeepSecondsHelp": "Tid i sekunder då segment ska sparas efter att ha laddats ner av användaren. Fungerar endast om segmentradering är aktiverat.", "LabelDeveloper": "Utväcklare", "Notifications": "Notifieringar", "UserMenu": "Användarmeny", @@ -1912,7 +1912,7 @@ "LabelDuration": "Varaktighet", "LabelDropLyricsHere": "Släpp sångtext här, eller klicka för att bläddra.", "LabelIsSynced": "Är synkroniserad", - "AllowTonemappingSoftwareHelp": "Tonmappning kan konvertera det dynamiska omfånget för en video från HDR till SDR samtidigt som bilddetaljer och färger bibehålls, vilket är mycket viktig information för att representera den ursprungliga scenen. Fungerar för närvarande endast med 10-bitars HDR10- och HLG-videor.", + "AllowTonemappingSoftwareHelp": "Tonmappning kan konvertera det dynamiska omfånget för en video från HDR till SDR samtidigt som bilddetaljer och färger bibehålls, vilket är mycket viktig information för att representera den ursprungliga scenen. Fungerar för närvarande endast med 10-bitars HDR10-, DoVi- och HLG-videor.", "HeaderPreviewLyrics": "Förhandsgranska sångtext", "LibraryInvalidItemIdError": "Biblioteket är i ett ogiltigt tillstånd och kan inte redigeras. Det är möjligt att du stött på en bugg: sökvägen i databasen är inte rätt sökväg i filsystemet.", "MoveToTop": "Flytta längst upp", @@ -1938,5 +1938,7 @@ "FallbackMaxStreamingBitrateHelp": "Den högsta uppspelningsbithastigheten används ifall ffprobe inte lyckas fastställa källans bithastighet. Detta gör så att klienter inte efterfrågar en för hög omkodningsbithastighet, vilket kan resultera i att mediespelaren kraschar och överbelastar omkodaren.", "LabelAllowFmp4TranscodingContainer": "Tillåt fMP4 omkodningscontainer", "LabelAlwaysRemuxMp3AudioFiles": "Remux:a alltid MP3-ljudfiler", - "LabelAlwaysRemuxFlacAudioFiles": "Remux:a alltid FLAC-ljudfiler" + "LabelAlwaysRemuxFlacAudioFiles": "Remux:a alltid FLAC-ljudfiler", + "AllowFmp4TranscodingContainerHelp": "Tillåt fMP4-omkodande container för denna tuner för att stödja HEVC- och HDR-kodat innehåll. Inte alla tuners är kompatibla med denna sortens container. Avaktivera detta valet ifall du upplever problem med uppspelning.", + "AllowStreamSharingHelp": "Tillåt Jellyfin att duplicera MPEG-transportströmmen från tunern, och att dela den duplicerade strömmen till sina klienter. Detta är användbart när tunern har en maxgräns för antalet strömmar, men kan samtidigt orsaka problem med uppspelning." } From 52477f04e12c0589e26511400a31eb22c571e063 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:44:13 +0300 Subject: [PATCH 127/186] Fix refresh on profle page --- src/apps/dashboard/routes/users/profile.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 92ef21cf5d..d441fc857e 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -1,6 +1,6 @@ import type { BaseItemDto, NameIdPair, SyncPlayUserAccessType, UserDto } from '@jellyfin/sdk/lib/generated-client'; import escapeHTML from 'escape-html'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; @@ -42,6 +42,7 @@ const UserEdit = () => { const [ deleteFoldersAccess, setDeleteFoldersAccess ] = useState([]); const [ authProviders, setAuthProviders ] = useState([]); const [ passwordResetProviders, setPasswordResetProviders ] = useState([]); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const [ authenticationProviderId, setAuthenticationProviderId ] = useState(''); const [ passwordResetProviderId, setPasswordResetProviderId ] = useState(''); @@ -147,7 +148,8 @@ const UserEdit = () => { txtUserName.disabled = false; txtUserName.removeAttribute('disabled'); - LibraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); + setUserDto(user); (page.querySelector('#txtUserName') as HTMLInputElement).value = user.Name || ''; (page.querySelector('.chkIsAdmin') as HTMLInputElement).checked = !!user.Policy?.IsAdministrator; From 1752d0bf1a6e72df46a8679d66182a79b7085f22 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Sep 2024 14:57:45 +0300 Subject: [PATCH 128/186] Fix additional pages --- src/apps/dashboard/routes/users/access.tsx | 6 +++--- src/apps/dashboard/routes/users/parentalcontrol.tsx | 6 +++--- src/apps/dashboard/routes/users/profile.tsx | 1 - src/apps/stable/routes/user/userprofile.tsx | 5 +++-- src/components/dashboard/users/UserPasswordForm.tsx | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/apps/dashboard/routes/users/access.tsx b/src/apps/dashboard/routes/users/access.tsx index 25489d2d65..e55c94412a 100644 --- a/src/apps/dashboard/routes/users/access.tsx +++ b/src/apps/dashboard/routes/users/access.tsx @@ -1,9 +1,8 @@ import type { BaseItemDto, DeviceInfoDto, UserDto } from '@jellyfin/sdk/lib/generated-client'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import loading from '../../../../components/loading/loading'; -import libraryMenu from '../../../../scripts/libraryMenu'; import globalize from '../../../../lib/globalize'; import toast from '../../../../components/toast/toast'; import SectionTabs from '../../../../components/dashboard/users/SectionTabs'; @@ -28,6 +27,7 @@ const UserLibraryAccess = () => { const [channelsItems, setChannelsItems] = useState([]); const [mediaFoldersItems, setMediaFoldersItems] = useState([]); const [devicesItems, setDevicesItems] = useState([]); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const element = useRef(null); @@ -133,7 +133,7 @@ const UserLibraryAccess = () => { const loadUser = useCallback((user: UserDto, mediaFolders: BaseItemDto[], channels: BaseItemDto[], devices: DeviceInfoDto[]) => { setUserName(user.Name || ''); - libraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); loadChannels(user, channels); loadMediaFolders(user, mediaFolders); loadDevices(user, devices); diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx index 754129cec7..867cc2d043 100644 --- a/src/apps/dashboard/routes/users/parentalcontrol.tsx +++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx @@ -2,11 +2,10 @@ import type { AccessSchedule, ParentalRating, UserDto } from '@jellyfin/sdk/lib/ import { UnratedItem } from '@jellyfin/sdk/lib/generated-client/models/unrated-item'; import { DynamicDayOfWeek } from '@jellyfin/sdk/lib/generated-client/models/dynamic-day-of-week'; import escapeHTML from 'escape-html'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useState, useRef, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import globalize from '../../../../lib/globalize'; -import LibraryMenu from '../../../../scripts/libraryMenu'; import AccessScheduleList from '../../../../components/dashboard/users/AccessScheduleList'; import TagList from '../../../../components/dashboard/users/TagList'; import ButtonElement from '../../../../elements/ButtonElement'; @@ -69,6 +68,7 @@ const UserParentalControl = () => { const [ accessSchedules, setAccessSchedules ] = useState([]); const [ allowedTags, setAllowedTags ] = useState([]); const [ blockedTags, setBlockedTags ] = useState([]); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const element = useRef(null); @@ -219,7 +219,7 @@ const UserParentalControl = () => { } setUserName(user.Name || ''); - LibraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); loadUnratedItems(user); loadAllowedTags(user.Policy?.AllowedTags || []); diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index d441fc857e..d85cd847ff 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -5,7 +5,6 @@ import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; import globalize from '../../../../lib/globalize'; -import LibraryMenu from '../../../../scripts/libraryMenu'; import ButtonElement from '../../../../elements/ButtonElement'; import CheckBoxElement from '../../../../elements/CheckBoxElement'; import InputElement from '../../../../elements/InputElement'; diff --git a/src/apps/stable/routes/user/userprofile.tsx b/src/apps/stable/routes/user/userprofile.tsx index ccd05d6ad6..edd0748db4 100644 --- a/src/apps/stable/routes/user/userprofile.tsx +++ b/src/apps/stable/routes/user/userprofile.tsx @@ -1,6 +1,6 @@ import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type'; -import React, { FunctionComponent, useEffect, useState, useRef, useCallback } from 'react'; +import React, { FunctionComponent, useEffect, useState, useRef, useCallback, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; @@ -18,6 +18,7 @@ const UserProfile: FunctionComponent = () => { const [ searchParams ] = useSearchParams(); const userId = searchParams.get('userId'); const [ userName, setUserName ] = useState(''); + const libraryMenu = useMemo(async () => ((await import('../../../../scripts/libraryMenu')).default), []); const element = useRef(null); @@ -41,7 +42,7 @@ const UserProfile: FunctionComponent = () => { } setUserName(user.Name); - LibraryMenu.setTitle(user.Name); + void libraryMenu.then(menu => menu.setTitle(user.Name)); let imageUrl = 'assets/img/avatar.png'; if (user.PrimaryImageTag) { diff --git a/src/components/dashboard/users/UserPasswordForm.tsx b/src/components/dashboard/users/UserPasswordForm.tsx index 2ad67180a8..dd3eec0c57 100644 --- a/src/components/dashboard/users/UserPasswordForm.tsx +++ b/src/components/dashboard/users/UserPasswordForm.tsx @@ -1,8 +1,7 @@ -import React, { FunctionComponent, useCallback, useEffect, useRef } from 'react'; +import React, { FunctionComponent, useCallback, useEffect, useMemo, useRef } from 'react'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import Dashboard from '../../../utils/dashboard'; import globalize from '../../../lib/globalize'; -import LibraryMenu from '../../../scripts/libraryMenu'; import confirm from '../../confirm/confirm'; import loading from '../../loading/loading'; import toast from '../../toast/toast'; @@ -16,6 +15,7 @@ type IProps = { const UserPasswordForm: FunctionComponent = ({ userId }: IProps) => { const element = useRef(null); const user = useRef(); + const libraryMenu = useMemo(async () => ((await import('../../../scripts/libraryMenu')).default), []); const loadUser = useCallback(async () => { const page = element.current; @@ -37,7 +37,7 @@ const UserPasswordForm: FunctionComponent = ({ userId }: IProps) => { throw new Error('Unexpected null user policy or configuration'); } - LibraryMenu.setTitle(user.current.Name); + (await libraryMenu).setTitle(user.current.Name); if (user.current.HasConfiguredPassword) { if (!user.current.Policy?.IsAdministrator) { From c4e87649005f1513390a6d3008a52329a23a94cf Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:00:55 +0300 Subject: [PATCH 129/186] Remove LibraryMenu import --- src/apps/stable/routes/user/userprofile.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps/stable/routes/user/userprofile.tsx b/src/apps/stable/routes/user/userprofile.tsx index edd0748db4..0c40b24478 100644 --- a/src/apps/stable/routes/user/userprofile.tsx +++ b/src/apps/stable/routes/user/userprofile.tsx @@ -5,7 +5,6 @@ import { useSearchParams } from 'react-router-dom'; import Dashboard from '../../../../utils/dashboard'; import globalize from '../../../../lib/globalize'; -import LibraryMenu from '../../../../scripts/libraryMenu'; import { appHost } from '../../../../components/apphost'; import confirm from '../../../../components/confirm/confirm'; import ButtonElement from '../../../../elements/ButtonElement'; From 6afd7a3d98011720c0a1c6855bb8c455a1b3a349 Mon Sep 17 00:00:00 2001 From: lostb1t Date: Sat, 28 Sep 2024 16:36:01 +0200 Subject: [PATCH 130/186] Use DateModifed for label --- src/components/metadataEditor/metadataEditor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 4503e1cf10..c7441ca309 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -717,7 +717,7 @@ function setFieldVisibilities(context, item) { showElement('#fldDisplayOrder', context); hideElement('.seriesDisplayOrderDescription', context); - context.querySelector('#selectDisplayOrder').innerHTML = ''; + context.querySelector('#selectDisplayOrder').innerHTML = ''; } else if (item.Type === 'Series') { showElement('#fldDisplayOrder', context); showElement('.seriesDisplayOrderDescription', context); From f7c2a273e3eb6a4a82c6da41afed507d2619db6a Mon Sep 17 00:00:00 2001 From: lostb1t Date: Sat, 28 Sep 2024 18:26:22 +0200 Subject: [PATCH 131/186] Add translations string for DateMosified --- src/strings/en-us.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5d09fc16ce..babe1b6a8e 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -187,6 +187,7 @@ "DailyAt": "Daily at {0}", "Data": "Data", "DateAdded": "Date added", + "DateModified": "Date modified", "DatePlayed": "Date played", "DeathDateValue": "Died: {0}", "Default": "Default", From 7a0e3b7df7a43d9976b46ec434ba36aa7ed51733 Mon Sep 17 00:00:00 2001 From: Fahim Murshed Date: Sat, 28 Sep 2024 21:59:03 +0000 Subject: [PATCH 132/186] Translated using Weblate (Bengali (Bangladesh)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/bn_BD/ --- src/strings/bn_BD.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/bn_BD.json b/src/strings/bn_BD.json index b38c26a550..c7a4e8f65e 100644 --- a/src/strings/bn_BD.json +++ b/src/strings/bn_BD.json @@ -326,5 +326,10 @@ "ColorPrimaries": "কালার প্রাইমারি", "AllowCollectionManagement": "এই ব্যবহারকারীকে কালেকশন্স গুলি পরিচালনা করার অনুমতি দিন", "AllowSegmentDeletion": "অংশগুলি মুছে ফেলুন", - "AllowSegmentDeletionHelp": "পুরানো বিভাগগুলি ক্লায়েন্টের কাছে পাঠানোর পরে মুছে ফেলুন। এটি ডিস্কে পুরো ট্রান্সকোডেড ফাইল সংরক্ষণ করতে বাধা দেয়। এটি কেবল থ্রোটলিং সক্ষম করে কাজ করবে। আপনি যদি প্লেব্যাক সমস্যার সম্মুখীন হন তবে এটি বন্ধ করুন।" + "AllowSegmentDeletionHelp": "পুরানো বিভাগগুলি ক্লায়েন্টের কাছে পাঠানোর পরে মুছে ফেলুন। এটি ডিস্কে পুরো ট্রান্সকোডেড ফাইল সংরক্ষণ করতে বাধা দেয়। এটি কেবল থ্রোটলিং সক্ষম করে কাজ করবে। আপনি যদি প্লেব্যাক সমস্যার সম্মুখীন হন তবে এটি বন্ধ করুন।", + "AirPlay": "এয়ারপ্লে", + "AllowContentWithTagsHelp": "শুধুমাত্র নির্দিষ্ট ট্যাগগুলির মধ্যে অন্তত একটি সহ মিডিয়া দেখান।", + "Alternate": "বিকল্প", + "AllowSubtitleManagement": "এই ব্যবহারকারীকে সাবটাইটেল সম্পাদনা করার অনুমতি দিন", + "AllowFmp4TranscodingContainerHelp": "HEVC এবং HDR বিষয়বস্তু সক্ষম করতে এই টিউনারটির জন্য fMP4 ট্রান্সকোডিং কন্টেইনারকে অনুমতি দিন। সমস্ত টিউনার এই ধারকটির সাথে সামঞ্জস্যপূর্ণ নয়৷ আপনি যদি প্লেব্যাক সমস্যা অনুভব করেন তবে এটি অক্ষম করুন।" } From 1114b19b00db6616827c3d2148e21aeeb2f90bfb Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Sun, 29 Sep 2024 06:34:39 +0000 Subject: [PATCH 133/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index d71f6ad90b..cebcb545cd 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1965,5 +1965,6 @@ "PreferNonstandardArtistsTag": "ARTISTS-tag verkiezen indien beschikbaar", "MessageCancelTimerError": "Er is een fout opgetreden bij het annuleren van de tijdklok", "MessageSplitVersionsError": "Er is een fout opgetreden bij het splitsen van de versies", - "MessageCancelSeriesTimerError": "Er is een fout opgetreden bij het annuleren van de serietijdklok" + "MessageCancelSeriesTimerError": "Er is een fout opgetreden bij het annuleren van de serietijdklok", + "DateModified": "Datum gewijzigd" } From 055baa4efa0a88babd3108e1501b0b6beca85fe2 Mon Sep 17 00:00:00 2001 From: Kityn Date: Sun, 29 Sep 2024 09:57:45 +0000 Subject: [PATCH 134/186] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index fbde81eb3c..8812e9afff 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1966,5 +1966,6 @@ "LabelCustomTagDelimiters": "Niestandardowy ogranicznik tagów", "MessageCancelSeriesTimerError": "Wystąpił błąd podczas anulowania timera serialu", "MessageCancelTimerError": "Wystąpił błąd podczas anulowania timera", - "MessageSplitVersionsError": "Wystąpił błąd podczas podziału wersji" + "MessageSplitVersionsError": "Wystąpił błąd podczas podziału wersji", + "DateModified": "Data modyfikacji" } From c05550daf82b39a635731b60913719dc25fa7c59 Mon Sep 17 00:00:00 2001 From: felix920506 Date: Sun, 29 Sep 2024 15:58:27 +0000 Subject: [PATCH 135/186] Translated using Weblate (Chinese (Traditional Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 74709037cc..d7f640167f 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1939,5 +1939,30 @@ "LabelDropLyricsHere": "將歌詞拖曳至此處,或點擊以瀏覽。", "LabelAlwaysRemuxFlacAudioFiles": "總是重新封裝 FLAC 音訊", "LabelAlwaysRemuxMp3AudioFiles": "總是重新封裝 MP3 音訊", - "LabelDisableVbrAudioEncoding": "停用可變位元率 (VBR) 音訊編碼" + "LabelDisableVbrAudioEncoding": "停用可變位元率 (VBR) 音訊編碼", + "DateModified": "修改日期", + "FallbackMaxStreamingBitrateHelp": "當 ffprobe 無法判斷來源位元率時,將使用最大串流位元率。可以避免用戶端請求過高的轉檔位元率,進而導致播放失敗或編碼器過載。", + "LabelAudioTagSettings": "音訊標籤設定", + "LabelCustomTagDelimiters": "自訂標籤分隔字元", + "LabelCustomTagDelimitersHelp": "用來分隔標籤的字元。", + "LabelFallbackMaxStreamingBitrate": "備用最大串流位元率 (Mbps)", + "LabelAllowFmp4TranscodingContainer": "允許使用 fMP4 容器轉檔", + "MessageCancelSeriesTimerError": "取消節目計時器時發生錯誤", + "MessageCancelTimerError": "取消計時器時發生錯誤", + "MessageSplitVersionsError": "分割版本時發生錯誤", + "LabelLyricDownloaders": "歌詞下載器", + "LyricDownloadersHelp": "啟用並依照偏好排序字幕下載器。", + "RenderPgsSubtitle": "實驗性 PGS 字幕渲染", + "RenderPgsSubtitleHelp": "在用戶端渲染 PGS 字幕,代替伺服器端燒錄字幕。以降低用戶端效能為代價避免伺服器端轉檔。", + "PreferNonstandardArtistsTag": "可用時偏好 ARTISTS 標籤", + "PreferNonstandardArtistsTagHelp": "可用時使用非標準的 ARTISTS 標籤代替 ARTIST 標籤。", + "ReplaceTrickplayImages": "替換現有的快轉縮圖", + "UseCustomTagDelimiters": "使用自訂標籤分隔字元", + "UseCustomTagDelimitersHelp": "使用自訂的字元分割藝術家、風格標籤。", + "AllowFmp4TranscodingContainerHelp": "允許使用 fMP4 容器轉檔來自此解碼器的內容以啟用 HEVC 和 HDR。並非所有解碼器都和此容器相容。如果遇到播放問題,請停用此設定。", + "LabelSaveTrickplayLocally": "將快轉縮圖儲存在媒體旁邊", + "LabelSaveTrickplayLocallyHelp": "將快轉縮圖儲存在媒體資料夾會將它們放在媒體旁邊,以便遷移和存取。", + "VideoCodecTagNotSupported": "不支援的視訊編碼標籤", + "LabelDelimiterWhitelist": "分隔字元白名單", + "LabelDelimiterWhitelistHelp": "從標籤分隔中排除的項目。每行一項。" } From f88a7ccfdec4d4f33a2e48397d03e4b87a69a4fd Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Sun, 29 Sep 2024 17:49:12 +0000 Subject: [PATCH 136/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 3587f7dcc2..3969b117f4 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1966,5 +1966,6 @@ "UseCustomTagDelimitersHelp": "使用自定义字符分割\"艺术家/类型\"标签。", "MessageCancelSeriesTimerError": "取消节目计时器时发生错误", "MessageCancelTimerError": "取消计时器时发生错误", - "MessageSplitVersionsError": "分割版本时发生错误" + "MessageSplitVersionsError": "分割版本时发生错误", + "DateModified": "修改日期" } From 87e37557dd36091711f1ccd6615a6d35708ff4bb Mon Sep 17 00:00:00 2001 From: felix920506 Date: Mon, 30 Sep 2024 00:46:52 +0000 Subject: [PATCH 137/186] Translated using Weblate (Chinese (Traditional Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index d7f640167f..cc3dbbd668 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -1964,5 +1964,7 @@ "LabelSaveTrickplayLocallyHelp": "將快轉縮圖儲存在媒體資料夾會將它們放在媒體旁邊,以便遷移和存取。", "VideoCodecTagNotSupported": "不支援的視訊編碼標籤", "LabelDelimiterWhitelist": "分隔字元白名單", - "LabelDelimiterWhitelistHelp": "從標籤分隔中排除的項目。每行一項。" + "LabelDelimiterWhitelistHelp": "從標籤分隔中排除的項目。每行一項。", + "AllowStreamSharingHelp": "允許 Jellyfin 複製解碼器中的 MPEGTS 串流並共用給多個用戶端。當解碼器有總串流數量限制時很有用,但是可能導致播放問題。", + "LabelAllowStreamSharing": "允許串流共用" } From 8f952c4bf5bc21ad9e0f5673f224ddf9b18e27b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Mon, 30 Sep 2024 06:13:29 +0000 Subject: [PATCH 138/186] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 397cf4a5b2..7fac2a9281 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1858,7 +1858,7 @@ "LabelEncodingFormatOptions": "Možnosti formátu kódování", "EncodingFormatHelp": "Vyberte formát, do kterého by měly být překódovány videa. Pokud není k dispozici hardwarová akcelerace pro vybraný formát, bude použito softwarové kódování. Kódování do formátu H.264 bude vždy povoleno.", "LabelTrickplayAccelEncoding": "Povolit hardwarově akcelerované kódování MJPEG", - "LabelTrickplayAccelEncodingHelp": "Tato možnost je momentálně dostupná pouze při použití QSV, VAAPI a VideoToolbox. Nemá vliv na ostatní hardwarovou akceleraci.", + "LabelTrickplayAccelEncodingHelp": "Tato možnost je momentálně dostupná pouze při použití QSV, VA-API, VideoToolbox a RKMPP. Nemá vliv na ostatní hardwarovou akceleraci.", "EnableLibrary": "Povolit knihovnu", "EnableLibraryHelp": "Vypnutím knihovny ji skryjete ze všech míst, kde je uživateli zobrazena.", "ConfirmDeleteLyrics": "Písně budou odstraněny ze systému i knihovny médií. Opravdu chcete pokračovat?", @@ -1950,5 +1950,22 @@ "AllowFmp4TranscodingContainerHelp": "Povolením kontejneru fMP4 pro překódování umožníte tomuto tuneru pracovat s obsahem ve formátu HEVC a s HDR. Kompatibilní jsou jen některé tunery. Pokud máte potíže s přehráváním, tuto možnost vypněte.", "LabelSaveTrickplayLocally": "Uložit obrázky trickplay k médiím", "LabelSaveTrickplayLocallyHelp": "Uložením obrázků trickplay do složek s médii se usnadní jejich přesun a přístup k nim.", - "ReplaceTrickplayImages": "Nahradit existující obrázky trickplay" + "ReplaceTrickplayImages": "Nahradit existující obrázky trickplay", + "MessageCancelSeriesTimerError": "Při rušení časovače seriálu došlo k chybě", + "DateModified": "Datum upravení", + "LabelAudioTagSettings": "Nastavení zvukových značek", + "LabelCustomTagDelimiters": "Vlastní oddělovač značek", + "LabelCustomTagDelimitersHelp": "Znaky, které budou považovány za oddělovače značek.", + "LabelDelimiterWhitelistHelp": "Položky, které budou vyloučeny z rozdělování značek. Každý řádek je jedna položka.", + "LabelDelimiterWhitelist": "Seznam výjimek při oddělování", + "LabelLyricDownloaders": "Stahovače textů písní", + "LyricDownloadersHelp": "Povolit a seřadit své stahovače textů písní podle preferovaného pořadí.", + "MessageCancelTimerError": "Při rušení časovače došlo k chybě", + "MessageSplitVersionsError": "Při rozdělování verzí došlo k chybě", + "PreferNonstandardArtistsTag": "Preferovat značku ARTISTS, pokud existuje", + "PreferNonstandardArtistsTagHelp": "Použít nestandardní značku ARTISTS místo ARTIST, pokud je k dispozici.", + "RenderPgsSubtitle": "Experimentální rendrování titulků ve formátu PGS", + "RenderPgsSubtitleHelp": "Zda má klient zobrazit titulky ve formátu PGS místo jejich vypálení do obrazu. Můžete se tak vyhnout překódování na serveru výměnou za horší výkon klienta.", + "UseCustomTagDelimiters": "Použít vlastní oddělovač značek", + "UseCustomTagDelimitersHelp": "Rozdělit značky pro umělce a žánry pomocí vlastních znaků." } From ff256abb2774e9d3de0deaf3b5fe012bdeb0cd7b Mon Sep 17 00:00:00 2001 From: millallo Date: Mon, 30 Sep 2024 07:47:02 +0000 Subject: [PATCH 139/186] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 7da27be2d9..15562745c0 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1943,5 +1943,8 @@ "EnableHi10pHelp": "Abilita per evitare la transcodifica dei video H.264 a 10 bit. Disabilitare quest'opzione se il video mostra fotogrammi vuoti.", "LabelSaveTrickplayLocally": "Salva le immagini trickplay accanto ai media", "LabelSaveTrickplayLocallyHelp": "Salvare le immagini trickplay nella stessa cartella del video ti permetterà di spostarle e accederle più facilmente.", - "ReplaceTrickplayImages": "Sostituisci le immagini trickplay" + "ReplaceTrickplayImages": "Sostituisci le immagini trickplay", + "FallbackMaxStreamingBitrateHelp": "Il bitrate massimo dello streaming viene utilizzato quando ffprobe non è in grado di determinare il bitrate sorgente. Ciò aiuta a impedire che i client richiedano un bitrate di transcodifica troppo alto che potrebbe causare il fallimento del player e il sovraccarico dell'encoder.", + "LabelFallbackMaxStreamingBitrate": "Bitrate massimo di ripiego (Mbps)", + "DateModified": "Data di modifica" } From acd67807692a2f83db2ed6d8be078c4d21f37188 Mon Sep 17 00:00:00 2001 From: l00d3r Date: Mon, 30 Sep 2024 09:33:47 +0000 Subject: [PATCH 140/186] Translated using Weblate (Estonian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/et/ --- src/strings/et.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/strings/et.json b/src/strings/et.json index 0dbf9fbfbc..99be5853b6 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -1938,5 +1938,18 @@ "PriorityNormal": "Normaalväärtus", "PriorityAboveNormal": "Üle normaalväärtuse", "LabelTileWidthHelp": "Piltide maksimaalne arv ühe ruudu kohta X-suunas.", - "ExtractTrickplayImagesHelp": "Trickplay-pildid on sarnased peatükkide piltidega, kuid need hõlmavad kogu sisu. Neid kasutatakse videote skriinimisel eelvaate kuvamiseks." + "ExtractTrickplayImagesHelp": "Trickplay-pildid on sarnased peatükkide piltidega, kuid need hõlmavad kogu sisu. Neid kasutatakse videote skriinimisel eelvaate kuvamiseks.", + "LabelDelimiterWhitelistHelp": "Üksused, mida siltideks jagamisel ignoreeritakse. Iga üksus omaette real.", + "PreferNonstandardArtistsTag": "Eelista ARTISTS silti kui see saadaval on", + "LabelAudioTagSettings": "Audiosiltide seadistused", + "DateModified": "Muutmiskuupäev", + "LabelCustomTagDelimiters": "Kohandatud siltide eraldaja", + "LabelCustomTagDelimitersHelp": "Tähemärgid mida kasutatakse siltide eraldajana.", + "LabelDelimiterWhitelist": "Lubatud eraldusmärgid", + "MessageCancelSeriesTimerError": "Sarja taimeri tühistamisel ilmnes viga", + "MessageCancelTimerError": "Taimeri tühistamisel ilmnes viga", + "MessageSplitVersionsError": "Versioonideks jagamisel tekkis viga", + "PreferNonstandardArtistsTagHelp": "Kasuta ARTIST sildi asemel ebastandartset ARTISTS silti kui see saadaval on.", + "UseCustomTagDelimiters": "Kasuta kohandatud siltide eraldajat", + "UseCustomTagDelimitersHelp": "Kasuta siltideks jagamisel kohandatud tähemärke." } From 0728bad2229931c611c23ac40ed751c5827fae7c Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Mon, 30 Sep 2024 11:33:58 +0000 Subject: [PATCH 141/186] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index a8e9b41ab4..0d3f4a05d5 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1256,7 +1256,7 @@ "OnWakeFromSleep": "Pri prebúdzaní zo spánku", "WeeklyAt": "{0}s na {1}", "DailyAt": "Denne o {0}", - "LastSeen": "Naposledy videný {0}", + "LastSeen": "Posledná aktivita {0}", "PersonRole": "ako {0}", "ListPaging": "{0}-{1} z {2}", "WriteAccessRequired": "Server vyžaduje práva na zapisovanie do tohoto priečinku. Prosím, uistite sa že má práva na zapisovanie a skúste to znova.", @@ -1899,5 +1899,33 @@ "Regional": "Regionálne", "AlternateDVD": "Alternatívne DVD", "LabelSelectPreferredTranscodeVideoCodec": "Preferovaný video kodek pre prekódovanie", - "HeaderNextItem": "Nasleduje {0}" + "HeaderNextItem": "Nasleduje {0}", + "DisableVbrAudioEncodingHelp": "Zabrániť serveru kódovať zvuk pomocou VBR pre tohto klienta.", + "DateModified": "Dátum úpravy", + "HeaderAudioAdvanced": "Pokročilé nastavenia zvuku", + "HeaderPreviewLyrics": "Náhľad textov piesní", + "LabelAllowStreamSharing": "Povoliť zdieľanie streamu", + "LabelDuration": "Dĺžka", + "LabelDisableVbrAudioEncoding": "Zakázať kódovanie zvuku VBR", + "LabelEnablePlugin": "Povoliť zásuvný modul", + "LabelInstalled": "Nainštalované", + "LabelNotInstalled": "Nie je nainštalované", + "LabelRepository": "Repozitár", + "MediaInfoRotation": "Rotácia", + "MoveToBottom": "Presunúť na spodnú časť", + "MoveToTop": "Presunúť na vrchnú časť", + "PreferNonstandardArtistsTagHelp": "Ak je to možné, použiť neštandardnú značku ARTISTS namiesto značky ARTIST.", + "PreviewLyrics": "Náhľad textov piesní", + "Reset": "Resetovať", + "ReplaceTrickplayImages": "Nahradiť existujúce obrázky trickplay", + "LabelLyricDownloaders": "Sťahovače textov piesní", + "EditLyrics": "Upraviť texty piesní", + "HeaderAddLyrics": "Pridať texty piesní", + "HeaderUploadLyrics": "Nahrať texty piesní", + "LabelIsSynced": "Je synchronizovaný", + "NoLyricsSearchResultsFound": "Nenašli sa žiadne texty piesní.", + "PluginLoadRepoError": "Pri získavaní údajov o zásuvnom module z repozitáru došlo k chybe.", + "LabelAudioTagSettings": "Nastavenia zvukových štítkov", + "LyricDownloadersHelp": "Povoliť a zoradiť preferované sťahovače titulkov podľa priority.", + "SearchForLyrics": "Vyhľadávať texty piesní" } From 43f8a3f50c9a1e1ee309aa7a24b8c29802332e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Guerre?= Date: Mon, 30 Sep 2024 13:08:40 +0000 Subject: [PATCH 142/186] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 5c004e36bd..89495bb1e1 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1860,7 +1860,7 @@ "PlaybackError.NO_MEDIA_ERROR": "Impossible de trouver une source multimédia valide à lire.", "PlaybackError.PLAYER_ERROR": "La lecture a échoué en raison d'une erreur fatale du lecteur.", "LabelTrickplayAccelEncoding": "Activer l'encodage MJPEG accéléré par le matériel", - "LabelTrickplayAccelEncodingHelp": "Actuellement disponible uniquement sur QSV et VAAPI, cette option n'a aucun effet sur les autres méthodes d'accélération matérielle.", + "LabelTrickplayAccelEncodingHelp": "Actuellement disponible uniquement avec QSV, VA-API, VideoToolbox et RKMPP, cette option n'a aucun effet sur les autres méthodes d'accélération matérielle.", "ErrorDeletingLyrics": "Une erreur est survenu lors de la suppression des paroles du serveur. S'il vous plaît verifier que Jellyfin peut modifier les fichier dans le dossier multimedia et réessayez.", "HeaderDeleteLyrics": "Suppression des paroles", "ConfirmDeleteLyrics": "En supprimant ces paroles vous les supprimez a la fois de votre systeme de fichier et de votre bibliothèque. Êtes vous sure de vouloir continuez ?", From 2aaf520378dd479d582ca938b793898c46e3bf67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Mon, 30 Sep 2024 13:01:05 +0000 Subject: [PATCH 143/186] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 27132877e1..a000a8be7f 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1868,5 +1868,10 @@ "Creator": "Készítő", "Editor": "Szerkesztő", "EnableDtsHelp": "Csak akkor engedélyezze, hogyha az eszköze támogatja a DTS-t vagy ha csatlakoztatott egy megfelelő audió vevőkészüléket. Ellenkező esetben visszajátszási problémákat okozhat.", - "Author": "Szerző" + "Author": "Szerző", + "AllowStreamSharingHelp": "Engedélyezés, hogy a Jellyfin megkettőzze a tunerből származó mpegts adatfolyamot, és megossza azt a kliensekkel. Ez akkor hasznos, ha a tuner korlátozott számú adatfolyamot támogat, de ez egyéb lejátszási problémákat okozhat.", + "AllowFmp4TranscodingContainerHelp": "Az fMP4 átkódolási konténer engedélyezése ehhez a tunerhez, a HEVC és HDR tartalmak engedélyezéséhez. Nem minden tuner kompatibilis ezzel a tárolóval. Tiltsa le, ha lejátszási problémákat tapasztal.", + "Alternate": "Alternatív", + "AlternateDVD": "Alternatív DVD", + "AllowTonemappingSoftwareHelp": "A tónusleképzés képes a HDR videók dinamika tartományát SDR tartományba átalakítani, miközben megtartja a kép színét és részleteit, ami elengedhetetlen az eredeti jelenet megőrzéséhez. Jelenleg csak 10 bites HDR10, HLG és DoVi tartalmakon működik." } From b291b4ff733c81e7e40c19b97e82eda22a0e70d0 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Mon, 30 Sep 2024 11:43:00 +0000 Subject: [PATCH 144/186] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 0d3f4a05d5..3e7aaf5213 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1861,7 +1861,7 @@ "EnableLibraryHelp": "Zakázaním knižnice ju skryjete zo všetkých zobrazení používateľa.", "Lyrics": "Texty piesní", "LabelTrickplayAccelEncoding": "Povoliť hardvérovú akceleráciu kódovania MJPEG", - "LabelTrickplayAccelEncodingHelp": "Táto možnosť je v súčasnosti dostupná len pre QSV a VAAPI, na ostatné metódy hardvérovej akcelerácie nemá žiadny vplyv.", + "LabelTrickplayAccelEncodingHelp": "Táto možnosť je v súčasnosti k dispozícii len pre QSV, VA-API, VideoToolbox a RKMPP, na ostatné metódy hardvérovej akcelerácie nemá žiadny vplyv.", "DeleteLyrics": "Odstrániť texty piesní", "ConfirmDeleteLyrics": "Texty piesní budú odstránené zo systému a aj z knižnice médií. Ste si istí, že chcete pokračovať?", "ErrorDeletingLyrics": "Pri odstraňovaní textov piesní zo servera došlo k chybe. Skontrolujte, či má Jellyfin prístup na zápis do priečinka médií, a skúste to znova.", @@ -1927,5 +1927,25 @@ "PluginLoadRepoError": "Pri získavaní údajov o zásuvnom module z repozitáru došlo k chybe.", "LabelAudioTagSettings": "Nastavenia zvukových štítkov", "LyricDownloadersHelp": "Povoliť a zoradiť preferované sťahovače titulkov podľa priority.", - "SearchForLyrics": "Vyhľadávať texty piesní" + "SearchForLyrics": "Vyhľadávať texty piesní", + "EnableHi10pHelp": "Povoľte, aby ste zabránili prekódovaniu 10-bitových videí kodeku H.264. Túto možnosť zakážte, ak sa vo videu zobrazujú prázdne snímky.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrahovať iba kľúčové snímky pre výrazne rýchlejšie spracovanie na úkor presnosti časovania. Ak nakonfigurovaný hardvérový dekodér nepodporuje tento režim, použije sa namiesto neho softvérový dekodér.", + "FallbackMaxStreamingBitrateHelp": "Maximálny dátový tok sa používa ako záložná hodnota, keď ffprobe nedokáže určiť dátový tok zdrojového streamu. Pomáha to zabrániť tomu, aby klienti požadovali príliš vysoký dátový tok prekódovania, čo by mohlo spôsobiť zlyhanie prehrávača a preťaženie kodéra.", + "EnableHi10p": "Povoliť profil H.264 High 10", + "LabelAllowFmp4TranscodingContainer": "Povoliť kontajner fMP4 na prekódovanie", + "LabelAlwaysRemuxFlacAudioFiles": "Vždy remuxovať zvukové súbory FLAC", + "LabelAlwaysRemuxMp3AudioFiles": "Vždy remuxovať zvukové súbory MP3", + "LabelSaveTrickplayLocallyHelp": "Uložením obrázkov trickplay do priečinkov médií sa uľahčí ich migrácia a prístup k nim.", + "LibraryInvalidItemIdError": "Knižnica je v neplatnom stave a nie je možné ju upravovať. Pravdepodobne sa stretávate s chybou: cesta v databáze nie je správna cesta v súborovom systéme.", + "SelectPreferredTranscodeVideoCodecHelp": "Vybrať preferovaný kodek videa, do ktorého sa má prekódovať. Ak preferovaný kodek nie je podporovaný, server použije ďalší najlepší dostupný kodek.", + "LabelCustomTagDelimiters": "Vlastný oddeľovač tagov", + "LabelCustomTagDelimitersHelp": "Znaky, ktoré sa majú považovať za oddeľovače na oddelenie tagov.", + "LabelDelimiterWhitelist": "Biela listina oddeľovačov", + "RenderPgsSubtitleHelp": "Určite, či má klient vykresľovať titulky formátu PGS namiesto použitia vpálených titulkov. Tým sa možno vyhnúť prekódovaniu na strane servera výmenou za horší výkon na strane klienta.", + "AllowFmp4TranscodingContainerHelp": "Povolením kontajneru fMP4 pre prekódovanie umožníte tomuto tuneru spracovať obsah vo formáte HEVC a HDR. Nie všetky tunery sú kompatibilné s týmto kontajnerom. Ak sa vyskytnú problémy s prehrávaním, zakažte ho.", + "AllowStreamSharingHelp": "Umožniť aplikácii Jellyfin duplikovať mpegts stream z tunera a zdieľať tento duplikovaný stream so svojimi klientmi. Je to užitočné, keď má tuner limit celkového počtu streamov, ale môže to spôsobiť aj problémy s prehrávaním.", + "AndOtherArtists": "{0} a {1} ďalších umelcov.", + "AlwaysRemuxMp3AudioFilesHelp": "Ak máte súbory, ktorých časové značky váš prehliadač vypočítava nepresne, povoľte túto možnosť ako dočasné riešenie.", + "AlwaysRemuxFlacAudioFilesHelp": "Ak máte súbory, ktoré prehliadač odmieta prehrávať alebo pri ktorých nepresne počíta časové značky, povoľte túto funkciu ako dočasné riešenie.", + "AllowTonemappingSoftwareHelp": "Mapovanie tónov dokáže transformovať dynamický rozsah videa z HDR na SDR pri zachovaní detailov obrazu a farieb, ktoré sú veľmi dôležitými informáciami na zobrazenie pôvodnej scény. V súčasnosti funguje len s 10bitovými videami HDR10, HLG a DoVi." } From f341b11c96a66cf62b5ded9e7d1be0a66cfd632d Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Mon, 30 Sep 2024 22:02:54 +0800 Subject: [PATCH 145/186] Fix the broken LoginAttemptsBeforeLockout fixes a typo made in be891c3 Signed-off-by: nyanmisaka --- src/apps/dashboard/routes/users/profile.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx index 92ef21cf5d..58a1be2e50 100644 --- a/src/apps/dashboard/routes/users/profile.tsx +++ b/src/apps/dashboard/routes/users/profile.tsx @@ -168,8 +168,8 @@ const UserEdit = () => { (page.querySelector('.chkRemoteAccess') as HTMLInputElement).checked = user.Policy?.EnableRemoteAccess == null || user.Policy?.EnableRemoteAccess; (page.querySelector('#txtRemoteClientBitrateLimit') as HTMLInputElement).value = user.Policy?.RemoteClientBitrateLimit && user.Policy?.RemoteClientBitrateLimit > 0 ? (user.Policy?.RemoteClientBitrateLimit / 1e6).toLocaleString(undefined, { maximumFractionDigits: 6 }) : ''; - (page.querySelector('#txtLoginAttemptsBeforeLockout') as HTMLInputElement).value = String(user.Policy?.MaxActiveSessions) || '0'; - (page.querySelector('#txtMaxActiveSessions') as HTMLInputElement).value = String(user.Policy?.SyncPlayAccess) || '0'; + (page.querySelector('#txtLoginAttemptsBeforeLockout') as HTMLInputElement).value = String(user.Policy?.LoginAttemptsBeforeLockout) || '-1'; + (page.querySelector('#txtMaxActiveSessions') as HTMLInputElement).value = String(user.Policy?.MaxActiveSessions) || '0'; if (window.ApiClient.isMinServerVersion('10.6.0')) { (page.querySelector('#selectSyncPlayAccess') as HTMLSelectElement).value = String(user.Policy?.SyncPlayAccess); } From c7f494d7b9fa2592f9b1bd4ac1cffc6ce5987634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Guerre?= Date: Mon, 30 Sep 2024 15:40:25 +0000 Subject: [PATCH 146/186] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 89495bb1e1..5d651781b9 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1928,5 +1928,7 @@ "HeaderUploadLyrics": "Téléverser des paroles", "DisableVbrAudioEncodingHelp": "Empêche le serveur d'encoder l'audio avec VBR pour ce client.", "EnableHi10p": "Active le profil H.264 High 10", - "EnableHi10pHelp": "Activer pour éviter l'encodage des vidéos H.264 10-bits. Désactiver cette option si la vidéo affiche des images vides." + "EnableHi10pHelp": "Activer pour éviter l'encodage des vidéos H.264 10-bits. Désactiver cette option si la vidéo affiche des images vides.", + "AlwaysRemuxFlacAudioFilesHelp": "Si votre navigateur refuse de lire des fichiers ou s'il calcule incorrectement l'horodatage, activer ceci en guise d'alternative.", + "AlwaysRemuxMp3AudioFilesHelp": "Si votre navigateur calcule incorrectement l'horodatage de certains fichiers, activer ceci en guise d'alternative." } From 171dc0937313d6277bdf679741c4ec78868358f7 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Mon, 30 Sep 2024 13:44:06 +0000 Subject: [PATCH 147/186] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 3e7aaf5213..af21e7faf2 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1947,5 +1947,10 @@ "AndOtherArtists": "{0} a {1} ďalších umelcov.", "AlwaysRemuxMp3AudioFilesHelp": "Ak máte súbory, ktorých časové značky váš prehliadač vypočítava nepresne, povoľte túto možnosť ako dočasné riešenie.", "AlwaysRemuxFlacAudioFilesHelp": "Ak máte súbory, ktoré prehliadač odmieta prehrávať alebo pri ktorých nepresne počíta časové značky, povoľte túto funkciu ako dočasné riešenie.", - "AllowTonemappingSoftwareHelp": "Mapovanie tónov dokáže transformovať dynamický rozsah videa z HDR na SDR pri zachovaní detailov obrazu a farieb, ktoré sú veľmi dôležitými informáciami na zobrazenie pôvodnej scény. V súčasnosti funguje len s 10bitovými videami HDR10, HLG a DoVi." + "AllowTonemappingSoftwareHelp": "Mapovanie tónov dokáže transformovať dynamický rozsah videa z HDR na SDR pri zachovaní detailov obrazu a farieb, ktoré sú veľmi dôležitými informáciami na zobrazenie pôvodnej scény. V súčasnosti funguje len s 10bitovými videami HDR10, HLG a DoVi.", + "LabelDropLyricsHere": "Pretiahnite texty piesní sem alebo kliknutím vyberte súbor.", + "LabelFallbackMaxStreamingBitrate": "Záložný maximálny dátový tok (Mbps)", + "LabelSaveTrickplayLocally": "Uložit obrázky trickplay k médiám", + "LabelDelimiterWhitelistHelp": "Položky, ktoré sa majú vylúčiť z oddelovania tagov. Jedna položka na riadok.", + "LabelNoChangelog": "Pre túto verziu nie je k dispozícii žiadny zoznam zmien." } From 5e58df6fe21b19020ec86d48917c47540bd9b354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Guerre?= Date: Mon, 30 Sep 2024 15:41:56 +0000 Subject: [PATCH 148/186] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 5d651781b9..44bbbd4008 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1930,5 +1930,10 @@ "EnableHi10p": "Active le profil H.264 High 10", "EnableHi10pHelp": "Activer pour éviter l'encodage des vidéos H.264 10-bits. Désactiver cette option si la vidéo affiche des images vides.", "AlwaysRemuxFlacAudioFilesHelp": "Si votre navigateur refuse de lire des fichiers ou s'il calcule incorrectement l'horodatage, activer ceci en guise d'alternative.", - "AlwaysRemuxMp3AudioFilesHelp": "Si votre navigateur calcule incorrectement l'horodatage de certains fichiers, activer ceci en guise d'alternative." + "AlwaysRemuxMp3AudioFilesHelp": "Si votre navigateur calcule incorrectement l'horodatage de certains fichiers, activer ceci en guise d'alternative.", + "DateModified": "Date modifiée", + "FallbackMaxStreamingBitrateHelp": "Le débit maximum de streaming est utilisé par défaut quand ffprobe ne peut pas déterminer le débit du flux source. Cela aide à éviter que les clients demandent un débit de transcodage excessivement élevé, ce qui pourrait mener le lecteur à échouer et surcharger l'encodeur.", + "LabelAlwaysRemuxFlacAudioFiles": "Toujours remultiplexer les fichiers audio FLAC", + "LabelAlwaysRemuxMp3AudioFiles": "Toujours remultiplexer les fichiers audio MP3", + "LabelAllowStreamSharing": "Autoriser le partage de flux" } From aac5fe2f495d50198bbd4f27867552733adbab81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9on?= Date: Tue, 1 Oct 2024 03:40:00 +0000 Subject: [PATCH 149/186] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 44bbbd4008..7187a3c4c8 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1267,7 +1267,7 @@ "OnWakeFromSleep": "À la sortie de veille", "WeeklyAt": "{0} à {1}", "DailyAt": "Tous les jours à {0}", - "LastSeen": "Vu {0}", + "LastSeen": "Dernière connexion {0}", "PersonRole": "est {0}", "ListPaging": "{0}-{1} de {2}", "WriteAccessRequired": "Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier les permissions de ce-dernier puis de réessayer.", @@ -1935,5 +1935,36 @@ "FallbackMaxStreamingBitrateHelp": "Le débit maximum de streaming est utilisé par défaut quand ffprobe ne peut pas déterminer le débit du flux source. Cela aide à éviter que les clients demandent un débit de transcodage excessivement élevé, ce qui pourrait mener le lecteur à échouer et surcharger l'encodeur.", "LabelAlwaysRemuxFlacAudioFiles": "Toujours remultiplexer les fichiers audio FLAC", "LabelAlwaysRemuxMp3AudioFiles": "Toujours remultiplexer les fichiers audio MP3", - "LabelAllowStreamSharing": "Autoriser le partage de flux" + "LabelAllowStreamSharing": "Autoriser le partage de flux", + "MessageCancelSeriesTimerError": "Une erreur est survenue lors de l'annulation du minuteur de série", + "AllowStreamSharingHelp": "Autoriser Jellyfin à dupliquer le flux mpegts provenant du tuner et à partager ce flux dupliqué avec ses clients. Cela est utile lorsque le tuner a une limite de nombre total de flux, mais peut également causer des problèmes de lecture.", + "Reset": "Réinitialiser", + "UseCustomTagDelimitersHelp": "Diviser les balises d'artiste/genre avec des caractères personnalisés.", + "HeaderAudioAdvanced": "Audio Avancé", + "LabelAudioTagSettings": "Paramètres des balises audio", + "LabelCustomTagDelimiters": "Délimiteur de balise personnalisé", + "LabelCustomTagDelimitersHelp": "Caractères à traiter comme délimiteurs pour séparer les balises.", + "LabelLyricDownloaders": "Téléchargeurs de Lyrics", + "LabelDelimiterWhitelist": "Liste blanche des délimiteurs", + "LabelDelimiterWhitelistHelp": "Éléments à exclure de la division des balises. Un élément par ligne.", + "LabelDisableVbrAudioEncoding": "Désactiver l'encodage audio VBR", + "LabelSaveTrickplayLocally": "Enregistrer les images trickplay au même emplacement que les médias", + "LabelSaveTrickplayLocallyHelp": "Enregistrer les images trickplay dans les dossiers de médias les placera à côté de vos médias pour une migration et un accès faciles.", + "MediaInfoRotation": "Rotation", + "RenderPgsSubtitle": "Rendu expérimental des sous-titres PGS", + "ReplaceTrickplayImages": "Remplacer les images trickplay existantes", + "LibraryInvalidItemIdError": "La bibliothèque est dans un état invalide et ne peut pas être modifiée. Vous rencontrez probablement un bug : le chemin dans la base de données n'est pas le bon chemin sur le système de fichiers.", + "MessageCancelTimerError": "Une erreur est survenue lors de l'annulation du minuteur", + "MessageSplitVersionsError": "Une erreur s'est produite lors de la division des versions", + "PreferNonstandardArtistsTag": "Préférer la balise ARTISTS si disponible", + "PreferNonstandardArtistsTagHelp": "Utiliser la balise non standard ARTISTS au lieu de la balise ARTIST lorsqu'elle est disponible.", + "RenderPgsSubtitleHelp": "Détermine si le client doit rendre les sous-titres PGS au lieu d'utiliser des sous-titres incrustés. Cela peut éviter le transcodage côté serveur au profit de la performance de rendu côté client.", + "UseCustomTagDelimiters": "Utiliser un délimiteur de balise personnalisé", + "VideoCodecTagNotSupported": "La balise de codec vidéo n'est pas prise en charge", + "LabelFallbackMaxStreamingBitrate": "Bitrate de flux maximum de repli (Mbps)", + "LyricDownloadersHelp": "Activez et classez vos téléchargeurs de sous-titres préférés par ordre de priorité.", + "LabelAllowFmp4TranscodingContainer": "Autoriser le conteneur de transcodage fMP4", + "AllowTonemappingSoftwareHelp": "Le tone-mapping peut transformer la plage dynamique d'une vidéo de HDR à SDR tout en conservant les détails et les couleurs de l'image, qui sont des informations très importantes pour représenter la scène originale. Fonctionne uniquement avec les vidéos 10 bits HDR10, HLG et DoVi.", + "LabelTrickplayKeyFrameOnlyExtraction": "Générer uniquement des images à partir des images clés", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place." } From 0dbde712415af8e7f7b1424c47e47b569f1779ce Mon Sep 17 00:00:00 2001 From: gnattu Date: Tue, 1 Oct 2024 17:02:50 +0800 Subject: [PATCH 150/186] Only add gain node when normalization enabled --- src/plugins/htmlAudioPlayer/plugin.js | 11 +++++++++-- src/strings/en-us.json | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 067d94c48c..99ecb2b4c9 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -121,6 +121,13 @@ class HtmlAudioPlayer { normalizationGain = options.mediaSource.albumNormalizationGain ?? options.item.NormalizationGain; + } else { + console.debug('normalization disabled') + return; + } + + if (!self.gainNode) { + addGainElement(elem); } if (normalizationGain) { @@ -276,7 +283,7 @@ class HtmlAudioPlayer { self._mediaElement = elem; - addGainElement(elem); + // addGainElement(elem); return elem; } @@ -317,7 +324,7 @@ class HtmlAudioPlayer { function onVolumeChange() { if (!self._isFadingOut) { htmlMediaHelper.saveVolume(this.volume); - if (browser.safari) { + if (browser.safari && self.gainNode) { self.gainNode.gain.value = this.volume * self.normalizationGain; } Events.trigger(self, 'volumechange'); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index d2e32a1ff4..5cd78810ef 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -156,7 +156,7 @@ "ChannelNumber": "Channel number", "Channels": "Channels", "CinemaModeConfigurationHelp": "Cinema mode brings the theater experience straight to your living room with the ability to play trailers and custom intros before the main feature.", - "SelectAudioNormalizationHelp": "Track gain - adjusts the volume of each track so they playback with the same loudness. Album gain - adjusts the volume of all the tracks in an album only, keeping the album's dynamic range.", + "SelectAudioNormalizationHelp": "Track gain - adjusts the volume of each track so they playback with the same loudness. Album gain - adjusts the volume of all the tracks in an album only, keeping the album's dynamic range. Switching between \"Off\" and other options requires restarting the current playback.", "ClearQueue": "Clear queue", "ClientSettings": "Client Settings", "Collections": "Collections", From 6b52358b57ec80bb822838b764194709d65273be Mon Sep 17 00:00:00 2001 From: gnattu Date: Tue, 1 Oct 2024 17:13:52 +0800 Subject: [PATCH 151/186] Remove commented code --- src/plugins/htmlAudioPlayer/plugin.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 99ecb2b4c9..2be98b40aa 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -283,8 +283,6 @@ class HtmlAudioPlayer { self._mediaElement = elem; - // addGainElement(elem); - return elem; } From 75d21a81403bc76ee5a61d09333230122df3b705 Mon Sep 17 00:00:00 2001 From: gnattu Date: Tue, 1 Oct 2024 17:18:26 +0800 Subject: [PATCH 152/186] Fix lint Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/plugins/htmlAudioPlayer/plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 2be98b40aa..a211aba276 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -122,7 +122,7 @@ class HtmlAudioPlayer { options.mediaSource.albumNormalizationGain ?? options.item.NormalizationGain; } else { - console.debug('normalization disabled') + console.debug('normalization disabled'); return; } From 24c30dc96d577610cd4650f397c995bd6b2116c7 Mon Sep 17 00:00:00 2001 From: gnattu Date: Tue, 1 Oct 2024 18:25:09 +0800 Subject: [PATCH 153/186] Handle addGainElement failure Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/plugins/htmlAudioPlayer/plugin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index a211aba276..029cdeca82 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -128,6 +128,7 @@ class HtmlAudioPlayer { if (!self.gainNode) { addGainElement(elem); + if (!self.gainNode) return; } if (normalizationGain) { From 2442dc6b527d25ed29b3d2657ad14839193e847c Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Tue, 1 Oct 2024 10:02:03 +0000 Subject: [PATCH 154/186] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 92fa5b43a8..f54f367915 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1963,5 +1963,9 @@ "PreferNonstandardArtistsTag": "Prefer ARTISTS tag if available", "PreferNonstandardArtistsTagHelp": "Use the non-standard ARTISTS tag instead of ARTIST tag when available.", "UseCustomTagDelimiters": "Use custom tag delimiter", - "UseCustomTagDelimitersHelp": "Split artist/genre tags with custom characters." + "UseCustomTagDelimitersHelp": "Split artist/genre tags with custom characters.", + "DateModified": "Date modified", + "MessageCancelSeriesTimerError": "An error occurred while cancelling the series timer", + "MessageCancelTimerError": "An error occurred while cancelling the timer", + "MessageSplitVersionsError": "An error occurred while splitting versions" } From 7fe4c5c63fb58d83934dd9f10c7bcba083aa4d39 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Tue, 1 Oct 2024 18:50:44 +0200 Subject: [PATCH 155/186] Fix editing device info when there are no options yet --- src/controllers/dashboard/devices/device.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controllers/dashboard/devices/device.js b/src/controllers/dashboard/devices/device.js index e911b361af..120b478163 100644 --- a/src/controllers/dashboard/devices/device.js +++ b/src/controllers/dashboard/devices/device.js @@ -6,7 +6,7 @@ import Dashboard from '../../../utils/dashboard'; import { getParameterByName } from '../../../utils/url.ts'; function load(page, device, deviceOptions) { - page.querySelector('#txtCustomName', page).value = deviceOptions.CustomName || ''; + page.querySelector('#txtCustomName', page).value = deviceOptions?.CustomName || ''; page.querySelector('.reportedName', page).innerText = device.Name || ''; } @@ -14,13 +14,13 @@ function loadData() { const page = this; loading.show(); const id = getParameterByName('id'); - const promise1 = ApiClient.getJSON(ApiClient.getUrl('Devices/Info', { + const device = ApiClient.getJSON(ApiClient.getUrl('Devices/Info', { Id: id })); - const promise2 = ApiClient.getJSON(ApiClient.getUrl('Devices/Options', { + const deviceOptions = ApiClient.getJSON(ApiClient.getUrl('Devices/Options', { Id: id - })); - Promise.all([promise1, promise2]).then(function (responses) { + })).catch(() => undefined); + Promise.all([device, deviceOptions]).then(function (responses) { load(page, responses[0], responses[1]); loading.hide(); }); From 5888962e3f3fd389cfa54b502df1217717b4d140 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 1 Oct 2024 16:37:19 +0000 Subject: [PATCH 156/186] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index ddd7bd5b73..5c8fb2a9b9 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1960,5 +1960,9 @@ "ReplaceTrickplayImages": "Thay thế ảnh tua nhanh hiện có", "LabelAlwaysRemuxMp3AudioFiles": "Luôn làm lại các tập tin âm thanh MP3", "LabelSaveTrickplayLocally": "Lưu ảnh tua nhanh bên cạnh phương tiện", - "LabelSaveTrickplayLocallyHelp": "Việc lưu ảnh tua anh vào thư mục phương tiện sẽ đặt chúng kế bên phương tiện của bạn để dễ di chuyển và truy cập." + "LabelSaveTrickplayLocallyHelp": "Việc lưu ảnh tua anh vào thư mục phương tiện sẽ đặt chúng kế bên phương tiện của bạn để dễ di chuyển và truy cập.", + "DateModified": "Ngày sửa đổi", + "MessageCancelSeriesTimerError": "Đã xảy ra lỗi khi hủy bộ hẹn giờ chuỗi", + "MessageCancelTimerError": "Đã xảy ra lỗi khi hủy bộ hẹn giờ", + "MessageSplitVersionsError": "Đã xảy ra lỗi khi chia nhỏ các phiên bản" } From 26f7f281cd1c6e3b0ee596f8c0cda9c098d06267 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 1 Oct 2024 13:41:40 -0400 Subject: [PATCH 157/186] Add playback subscriber abstraction --- .../constants/playbackManagerEvent.ts | 14 +++ .../playback/constants/playerEvent.ts | 23 ++++ .../features/playback/types/callbacks.ts | 33 ++++++ .../features/playback/types/streamInfo.ts | 34 ++++++ .../playback/utils/playbackSubscriber.ts | 101 ++++++++++++++++++ src/components/playback/playbackmanager.js | 2 +- src/types/playTarget.ts | 3 + 7 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 src/apps/stable/features/playback/constants/playbackManagerEvent.ts create mode 100644 src/apps/stable/features/playback/constants/playerEvent.ts create mode 100644 src/apps/stable/features/playback/types/callbacks.ts create mode 100644 src/apps/stable/features/playback/types/streamInfo.ts create mode 100644 src/apps/stable/features/playback/utils/playbackSubscriber.ts diff --git a/src/apps/stable/features/playback/constants/playbackManagerEvent.ts b/src/apps/stable/features/playback/constants/playbackManagerEvent.ts new file mode 100644 index 0000000000..2200c833b5 --- /dev/null +++ b/src/apps/stable/features/playback/constants/playbackManagerEvent.ts @@ -0,0 +1,14 @@ +/** + * Events triggered by PlaybackManager. + */ +export enum PlaybackManagerEvent { + Pairing = 'pairing', + Paired = 'paired', + PairError = 'pairerror', + PlaybackCancelled = 'playbackcancelled', + PlaybackError = 'playbackerror', + PlaybackStart = 'playbackstart', + PlaybackStop = 'playbackstop', + PlayerChange = 'playerchange', + ReportPlayback = 'reportplayback' +} diff --git a/src/apps/stable/features/playback/constants/playerEvent.ts b/src/apps/stable/features/playback/constants/playerEvent.ts new file mode 100644 index 0000000000..a02a7caaf1 --- /dev/null +++ b/src/apps/stable/features/playback/constants/playerEvent.ts @@ -0,0 +1,23 @@ +/** + * Events triggered by media player plugins. + * NOTE: This list is incomplete + */ +export enum PlayerEvent { + Error = 'error', + FullscreenChange = 'fullscreenchange', + ItemStarted = 'itemstarted', + ItemStopped = 'itemstopped', + MediaStreamsChange = 'mediastreamschange', + Pause = 'pause', + PlaybackStart = 'playbackstart', + PlaybackStop = 'playbackstop', + PlaylistItemAdd = 'playlistitemadd', + PlaylistItemMove = 'playlistitemmove', + PlaylistItemRemove = 'playlistitemremove', + RepeatModeChange = 'repeatmodechange', + ShuffleModeChange = 'shufflequeuemodechange', + Stopped = 'stopped', + TimeUpdate = 'timeupdate', + Unpause = 'unpause', + VolumeChange = 'volumechange' +} diff --git a/src/apps/stable/features/playback/types/callbacks.ts b/src/apps/stable/features/playback/types/callbacks.ts new file mode 100644 index 0000000000..1bede1b2c0 --- /dev/null +++ b/src/apps/stable/features/playback/types/callbacks.ts @@ -0,0 +1,33 @@ +import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto'; +import type { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client/models/media-source-info'; +import type { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; + +import type { StreamInfo } from './streamInfo'; + +export interface ManagedPlayerStopInfo { + item: BaseItemDto + mediaSource: MediaSourceInfo + nextItem?: BaseItemDto | null + nextMediaType?: MediaType | null + positionMs?: number +} + +export interface MovedItem { + newIndex: number + playlistItemId: string +} + +export type PlayerErrorCode = string; + +export interface PlayerStopInfo { + src?: URL | BaseItemDto +} + +export interface PlayerError { + streamInfo?: StreamInfo + type: MediaError | string +} + +export interface RemovedItems { + playlistItemIds: string[] +} diff --git a/src/apps/stable/features/playback/types/streamInfo.ts b/src/apps/stable/features/playback/types/streamInfo.ts new file mode 100644 index 0000000000..0fe54210f3 --- /dev/null +++ b/src/apps/stable/features/playback/types/streamInfo.ts @@ -0,0 +1,34 @@ +import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto'; +import type { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client/models/media-source-info'; +import type { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; +import type { PlayMethod } from '@jellyfin/sdk/lib/generated-client/models/play-method'; + +export interface StreamInfo { + ended?: boolean + fullscreen?: boolean + item?: BaseItemDto + lastMediaInfoQuery?: number + liveStreamId?: string + mediaSource?: MediaSourceInfo + mediaType?: MediaType + mimeType?: string + playMethod?: PlayMethod + playSessionId?: string + playbackStartTimeTicks?: number + playerStartPositionTicks?: number + resetSubtitleOffset?: boolean + started?: boolean + textTracks?: TrackInfo[] + title?: string + tracks?: TrackInfo[] + transcodingOffsetTicks?: number + url?: string +} + +interface TrackInfo { + url: string + language: string + isDefault: boolean + index: number + format: string +} diff --git a/src/apps/stable/features/playback/utils/playbackSubscriber.ts b/src/apps/stable/features/playback/utils/playbackSubscriber.ts new file mode 100644 index 0000000000..54ff9d94fc --- /dev/null +++ b/src/apps/stable/features/playback/utils/playbackSubscriber.ts @@ -0,0 +1,101 @@ +import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto'; +import type { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client/models/media-source-info'; + +import type { PlaybackManager } from 'components/playback/playbackmanager'; +import type { MediaError } from 'types/mediaError'; +import type { PlayTarget } from 'types/playTarget'; +import type { PlaybackStopInfo, PlayerState } from 'types/playbackStopInfo'; +import type { Plugin } from 'types/plugin'; +import Events, { type Event } from 'utils/events'; + +import { PlaybackManagerEvent } from '../constants/playbackManagerEvent'; +import { PlayerEvent } from '../constants/playerEvent'; +import type { ManagedPlayerStopInfo, MovedItem, PlayerError, PlayerErrorCode, PlayerStopInfo, RemovedItems } from '../types/callbacks'; + +export interface PlaybackSubscriber { + onPlaybackCancelled?(e: Event): void + onPlaybackError?(e: Event, errorType: MediaError): void + onPlaybackStart?(e: Event, player: Plugin, state: PlayerState): void + onPlaybackStop?(e: Event, info: PlaybackStopInfo): void + onPlayerChange?(e: Event, player: Plugin, target: PlayTarget, previousPlayer: Plugin): void + onPlayerError?(e: Event, error: PlayerError): void + onPlayerFullscreenChange?(e: Event): void + onPlayerItemStarted?(e: Event, item?: BaseItemDto, mediaSource?: MediaSourceInfo): void + onPlayerItemStopped?(e: Event, info: ManagedPlayerStopInfo): void + onPlayerMediaStreamsChange?(e: Event): void + onPlayerPause?(e: Event): void + onPlayerPlaybackStart?(e: Event, state: PlayerState): void + onPlayerPlaybackStop?(e: Event, state: PlayerState): void + onPlayerPlaylistItemAdd?(e: Event): void + onPlayerPlaylistItemMove?(e: Event, item: MovedItem): void + onPlayerPlaylistItemRemove?(e: Event, items?: RemovedItems): void + onPlayerRepeatModeChange?(e: Event): void + onPlayerShuffleModeChange?(e: Event): void + onPlayerStopped?(e: Event, info?: PlayerStopInfo | PlayerErrorCode): void + onPlayerTimeUpdate?(e: Event): void + onPlayerUnpause?(e: Event): void + onPlayerVolumeChange?(e: Event): void + onReportPlayback?(e: Event, isServerItem: boolean): void +} + +export abstract class PlaybackSubscriber { + private player: Plugin | undefined; + + private playbackManagerEvents = { + [PlaybackManagerEvent.PlaybackCancelled]: this.onPlaybackCancelled, + [PlaybackManagerEvent.PlaybackError]: this.onPlaybackError, + [PlaybackManagerEvent.PlaybackStart]: this.onPlaybackStart, + [PlaybackManagerEvent.PlaybackStop]: this.onPlaybackStop, + [PlaybackManagerEvent.PlayerChange]: this.onPlayerChange, + [PlaybackManagerEvent.ReportPlayback]: this.onReportPlayback + }; + + private playerEvents = { + [PlayerEvent.Error]: this.onPlayerError, + [PlayerEvent.FullscreenChange]: this.onPlayerFullscreenChange, + [PlayerEvent.ItemStarted]: this.onPlayerItemStarted, + [PlayerEvent.ItemStopped]: this.onPlayerItemStopped, + [PlayerEvent.MediaStreamsChange]: this.onPlayerMediaStreamsChange, + [PlayerEvent.Pause]: this.onPlayerPause, + [PlayerEvent.PlaybackStart]: this.onPlayerPlaybackStart, + [PlayerEvent.PlaybackStop]: this.onPlayerPlaybackStop, + [PlayerEvent.PlaylistItemAdd]: this.onPlayerPlaylistItemAdd, + [PlayerEvent.PlaylistItemMove]: this.onPlayerPlaylistItemMove, + [PlayerEvent.PlaylistItemRemove]: this.onPlayerPlaylistItemRemove, + [PlayerEvent.RepeatModeChange]: this.onPlayerRepeatModeChange, + [PlayerEvent.ShuffleModeChange]: this.onPlayerShuffleModeChange, + [PlayerEvent.Stopped]: this.onPlayerStopped, + [PlayerEvent.TimeUpdate]: this.onPlayerTimeUpdate, + [PlayerEvent.Unpause]: this.onPlayerUnpause, + [PlayerEvent.VolumeChange]: this.onPlayerVolumeChange + }; + + constructor( + protected readonly playbackManager: PlaybackManager + ) { + Object.entries(this.playbackManagerEvents).forEach(([event, handler]) => { + if (handler) Events.on(playbackManager, event, handler); + }); + + this.bindPlayerEvents(); + Events.on(playbackManager, PlaybackManagerEvent.PlayerChange, this.bindPlayerEvents.bind(this)); + } + + private bindPlayerEvents() { + const newPlayer = this.playbackManager.getCurrentPlayer(); + if (this.player === newPlayer) return; + + if (this.player) { + Object.entries(this.playerEvents).forEach(([event, handler]) => { + if (handler) Events.off(this.player, event, handler); + }); + } + + this.player = newPlayer; + if (!this.player) return; + + Object.entries(this.playerEvents).forEach(([event, handler]) => { + if (handler) Events.on(this.player, event, handler); + }); + } +} diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index b51046d340..e90aff609f 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -687,7 +687,7 @@ function sortPlayerTargets(a, b) { return aVal.localeCompare(bVal); } -class PlaybackManager { +export class PlaybackManager { constructor() { const self = this; diff --git a/src/types/playTarget.ts b/src/types/playTarget.ts index 33353137d5..b2f0f6a284 100644 --- a/src/types/playTarget.ts +++ b/src/types/playTarget.ts @@ -1,3 +1,4 @@ +import type { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; import type { UserDto } from '@jellyfin/sdk/lib/generated-client/models/user-dto'; export interface PlayTarget { @@ -7,5 +8,7 @@ export interface PlayTarget { playerName?: string deviceType?: string isLocalPlayer?: boolean + playableMediaTypes: MediaType[] + supportedCommands?: string[] user?: UserDto } From 8acf8fb5506fd19c18da1d8eafb5eb35d5254a9b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 1 Oct 2024 14:01:54 -0400 Subject: [PATCH 158/186] Mark event handler maps as readonly --- src/apps/stable/features/playback/utils/playbackSubscriber.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/stable/features/playback/utils/playbackSubscriber.ts b/src/apps/stable/features/playback/utils/playbackSubscriber.ts index 54ff9d94fc..dfc79360a2 100644 --- a/src/apps/stable/features/playback/utils/playbackSubscriber.ts +++ b/src/apps/stable/features/playback/utils/playbackSubscriber.ts @@ -41,7 +41,7 @@ export interface PlaybackSubscriber { export abstract class PlaybackSubscriber { private player: Plugin | undefined; - private playbackManagerEvents = { + private readonly playbackManagerEvents = { [PlaybackManagerEvent.PlaybackCancelled]: this.onPlaybackCancelled, [PlaybackManagerEvent.PlaybackError]: this.onPlaybackError, [PlaybackManagerEvent.PlaybackStart]: this.onPlaybackStart, @@ -50,7 +50,7 @@ export abstract class PlaybackSubscriber { [PlaybackManagerEvent.ReportPlayback]: this.onReportPlayback }; - private playerEvents = { + private readonly playerEvents = { [PlayerEvent.Error]: this.onPlayerError, [PlayerEvent.FullscreenChange]: this.onPlayerFullscreenChange, [PlayerEvent.ItemStarted]: this.onPlayerItemStarted, From f4687e115798f4bf3166bada6b87606d458dbd52 Mon Sep 17 00:00:00 2001 From: stanol Date: Tue, 1 Oct 2024 18:31:21 +0000 Subject: [PATCH 159/186] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index b34ef8960a..66f2dc6a5b 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1960,5 +1960,9 @@ "PreferNonstandardArtistsTag": "Надавати перевагу тегу ARTISTS, якщо він доступний", "PreferNonstandardArtistsTagHelp": "Використовувати нестандартний тег ARTISTS замість тега ARTIST, якщо він доступний.", "UseCustomTagDelimiters": "Використовувати власний роздільник тегів", - "UseCustomTagDelimitersHelp": "Розділіть теги виконавця/жанру за допомогою спеціальних символів." + "UseCustomTagDelimitersHelp": "Розділіть теги виконавця/жанру за допомогою спеціальних символів.", + "DateModified": "Дату змінено", + "MessageCancelSeriesTimerError": "Виникла помилка під час скасування таймера серіалу", + "MessageCancelTimerError": "Виникла помилка під час скасування таймера", + "MessageSplitVersionsError": "Виникла помилка під час розділення версій" } From 6a6766f998b861ed7c5080597224a66e552952da Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 1 Oct 2024 16:00:48 -0400 Subject: [PATCH 160/186] Change NOTE to TODO --- src/apps/stable/features/playback/constants/playerEvent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/stable/features/playback/constants/playerEvent.ts b/src/apps/stable/features/playback/constants/playerEvent.ts index a02a7caaf1..c236475383 100644 --- a/src/apps/stable/features/playback/constants/playerEvent.ts +++ b/src/apps/stable/features/playback/constants/playerEvent.ts @@ -1,6 +1,6 @@ /** * Events triggered by media player plugins. - * NOTE: This list is incomplete + * TODO: This list is incomplete */ export enum PlayerEvent { Error = 'error', From 443b5cf895f9128669b5429bfd621b3059b2a4eb Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 2 Oct 2024 02:07:24 -0400 Subject: [PATCH 161/186] Use renovate for unstable sdk updates --- .github/renovate.json | 9 +++++- .github/workflows/update-sdk.yml | 52 -------------------------------- 2 files changed, 8 insertions(+), 53 deletions(-) delete mode 100644 .github/workflows/update-sdk.yml diff --git a/.github/renovate.json b/.github/renovate.json index 9bfb15c5e3..0a3b7bd9c1 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -2,7 +2,14 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "github>jellyfin/.github//renovate-presets/nodejs", - ":semanticCommitsDisabled", ":dependencyDashboard" + ], + "packageRules": [ + { + "matchPackageNames": [ "@jellyfin/sdk" ], + "followTag": "unstable", + "minimumReleaseAge": 0, + "schedule": [ "after 7:00 am" ] + } ] } diff --git a/.github/workflows/update-sdk.yml b/.github/workflows/update-sdk.yml deleted file mode 100644 index c76d34729e..0000000000 --- a/.github/workflows/update-sdk.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Update the Jellyfin SDK - -on: - schedule: - - cron: '0 7 * * *' - workflow_dispatch: - -concurrency: - group: unstable-sdk-pr - cancel-in-progress: true - -jobs: - update: - runs-on: ubuntu-latest - if: ${{ github.repository == 'jellyfin/jellyfin-web' }} - - steps: - - name: Check out Git repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - with: - ref: master - token: ${{ secrets.JF_BOT_TOKEN }} - - - name: Set up Node.js - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 - with: - node-version: 20 - check-latest: true - cache: npm - - - name: Install latest unstable SDK - run: | - npm i --save @jellyfin/sdk@unstable - VERSION=$(jq -r '.dependencies["@jellyfin/sdk"]' package.json) - echo "JF_SDK_VERSION=${VERSION}" >> $GITHUB_ENV - - - name: Open a pull request - uses: peter-evans/create-pull-request@8867c4aba1b742c39f8d0ba35429c2dfa4b6cb20 # v7.0.1 - with: - token: ${{ secrets.JF_BOT_TOKEN }} - commit-message: Update @jellyfin/sdk to ${{env.JF_SDK_VERSION}} - committer: jellyfin-bot - author: jellyfin-bot - branch: update-jf-sdk - delete-branch: true - title: Update @jellyfin/sdk to ${{env.JF_SDK_VERSION}} - body: | - **Changes** - Updates to the latest unstable @jellyfin/sdk build - labels: | - dependencies - npm From b7a32c6aeea5e3edebcb2142cb299e9ea33cee3c Mon Sep 17 00:00:00 2001 From: BromTeque Date: Wed, 2 Oct 2024 10:18:44 +0000 Subject: [PATCH 162/186] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index d0e1dee15d..987f622dfe 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1958,5 +1958,9 @@ "PreferNonstandardArtistsTag": "Foretrekk ARTISTER-tag om tilgjengelig", "PreferNonstandardArtistsTagHelp": "Bruk ikke-standard ARTISTS-taggen istedenfor ARTIST-taggen når den er tilgjengelig.", "UseCustomTagDelimiters": "Bruk egendefinert skilletegn for tagger", - "UseCustomTagDelimitersHelp": "Del artist- og sjanger-tagger med egendefinert tegn." + "UseCustomTagDelimitersHelp": "Del artist- og sjanger-tagger med egendefinert tegn.", + "DateModified": "Data modifisert", + "MessageCancelSeriesTimerError": "Det oppstod en feil under avbryting av serietidtakeren", + "MessageCancelTimerError": "Det oppstod en feil under avbryting av tidtakeren", + "MessageSplitVersionsError": "Det oppsto en feil under oppdeling av versjoner" } From f1e5b409e7d4b503b10bd09b2a92f9caadc6c78b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 2 Oct 2024 07:57:58 -0400 Subject: [PATCH 163/186] Fix minimum release age type in renovate config --- .github/renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/renovate.json b/.github/renovate.json index 0a3b7bd9c1..200d5e43e7 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -8,7 +8,7 @@ { "matchPackageNames": [ "@jellyfin/sdk" ], "followTag": "unstable", - "minimumReleaseAge": 0, + "minimumReleaseAge": null, "schedule": [ "after 7:00 am" ] } ] From 00844cee032fe89f94ffefb118257ab16f071e74 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:36:06 +0000 Subject: [PATCH 164/186] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index cebcb545cd..6033a8b8c9 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1776,7 +1776,7 @@ "BackdropScreensaver": "Schermbeveiliging met achtergronden", "LogoScreensaver": "Schermbeveiliging met logo", "LabelIsHearingImpaired": "Voor slechthorenden (ODS)", - "SelectAudioNormalizationHelp": "Nummerversterking regelt het volume van elk individueel nummer zodat alle nummers even luid afspelen. Albumversterking regelt het volume van alle nummers op een album, zodat het dynamische bereik van het album behouden blijft.", + "SelectAudioNormalizationHelp": "Nummerversterking regelt het volume van elk individueel nummer zodat alle nummers even luid afspelen. Albumversterking regelt het volume van alle nummers op een album, waarbij het dynamische bereik van het album behouden blijft. Na het wisselen tussen deze opties moet het afspelen herstart worden.", "LabelAlbumGain": "Albumversterking", "LabelSelectAudioNormalization": "Geluidsnormalisatie", "LabelTrackGain": "Nummerversterking", From e3cec3168216ffdefbc72f35441444210dc73d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9A=87=E7=94=AB=E6=9C=9D=E4=BA=91?= Date: Wed, 2 Oct 2024 13:08:27 +0000 Subject: [PATCH 165/186] Translated using Weblate (Chinese (Simplified Han script)) 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, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 3969b117f4..f32fc318d6 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1019,7 +1019,7 @@ "SortName": "排序名称", "Sports": "体育", "StopRecording": "停止录制", - "Studios": "制片发行商", + "Studios": "工作室", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "这些设置也会被应用于任何通过此设备发起的 Google Cast 播放。", "SubtitleAppearanceSettingsDisclaimer": "以下设置不适用于上述图形字幕或嵌入其自身样式的 ASS/SSA 字幕。", "SubtitleDownloadersHelp": "按优先顺序启用并排列您的首选字幕下载程序。", @@ -1728,7 +1728,7 @@ "MenuOpen": "打开菜单", "MenuClose": "关闭菜单", "UserMenu": "用户菜单", - "Studio": "制片发行商", + "Studio": "工作室", "AllowCollectionManagement": "允许该用户管理收藏夹", "EnableAudioNormalizationHelp": "音频标准化将添加一个恒定的增益,以保持平均音量在所需的级别(-18dB)。", "EnableAudioNormalization": "音频标准化", @@ -1779,7 +1779,7 @@ "LabelIsHearingImpaired": "用于听障/聋哑人士", "SearchResultsEmpty": "抱歉!未找到与\"{0}\"相关的结果", "LabelTrackGain": "音轨增益", - "SelectAudioNormalizationHelp": "音轨增益 - 调整每个音轨的音量,使它们播放时具有相同的响度。专辑增益 - 只调整专辑中所有音轨的音量,保持专辑的动态范围。", + "SelectAudioNormalizationHelp": "音轨增益 - 调整每个音轨的音量,使它们播放时具有相同的响度。专辑增益 - 只调整专辑中所有音轨的音量,保持专辑的动态范围。在“关闭”和其他选项之间切换后需要重新启动当前播放。", "LabelAlbumGain": "专辑增益", "LabelSelectAudioNormalization": "音频标准化", "HeaderAllRecordings": "所有录制的节目", From d301f323ac995ea5071a9f2ed80335fc962a3694 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 14:16:23 +0000 Subject: [PATCH 166/186] Update dependency @jellyfin/sdk to v0.0.0-unstable.202410020501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa0e5591f3..355a5821d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409260501", + "@jellyfin/sdk": "0.0.0-unstable.202410020501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202409260501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409260501.tgz", - "integrity": "sha512-3W/J15A/jELTMJPrPiGvfkO8xsUaxKh4P/f+kVAxOSCYkPp+vvZxmRCGV7M1+1947O19iJ/l7ypD08L3YVf39g==", + "version": "0.0.0-unstable.202410020501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410020501.tgz", + "integrity": "sha512-Tl+bE4GoGDf5qmzYiauNLFclAYF4cPFVX3HldKl/KuwEarzRdQfudGNFCu0KmDbJGiZ6HtDlec6LoUaYeXmvng==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29306,9 +29306,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202409260501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202409260501.tgz", - "integrity": "sha512-3W/J15A/jELTMJPrPiGvfkO8xsUaxKh4P/f+kVAxOSCYkPp+vvZxmRCGV7M1+1947O19iJ/l7ypD08L3YVf39g==", + "version": "0.0.0-unstable.202410020501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410020501.tgz", + "integrity": "sha512-Tl+bE4GoGDf5qmzYiauNLFclAYF4cPFVX3HldKl/KuwEarzRdQfudGNFCu0KmDbJGiZ6HtDlec6LoUaYeXmvng==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index 47063fda6f..fb62f4be96 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202409260501", + "@jellyfin/sdk": "0.0.0-unstable.202410020501", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", From d2e9a8b6b396f13ae058a791400bd495a33084f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9A=87=E7=94=AB=E6=9C=9D=E4=BA=91?= Date: Thu, 3 Oct 2024 00:36:46 +0000 Subject: [PATCH 167/186] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index f32fc318d6..6dff69d2e9 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -197,7 +197,7 @@ "GuestStar": "特邀明星", "GuideProviderLogin": "登入", "GuideProviderSelectListings": "选择列表", - "H264CrfHelp": "恒定速率因子 (CRF) 是 x264 软件编码器的默认质量设置。您可以设置介于0和51之间的值, 其中较低的值将导致更好的质量 (以更高的文件大小为代价)。正常值介于 18 和 28 之间。x264 的默认值为 23,x265 的默认值为 28,因此可以将其用作起始点。硬件编码器不使用这些设置。", + "H264CrfHelp": "恒定速率因子 (CRF) 是 x264 和x265 软件编码的默认质量设置。您可以设置介于0和51之间的值, 较低的数值会带来更高的画质,但同时也会导致文件大小的增加。正常值介于 18 和 28 之间。x264 的默认值为 23,x265 的默认值为 28,因此可以用它作为初始参考值。硬件编码不使用这些设置。", "EncoderPresetHelp": "选择较快的值以提高性能,或选择较慢的值以提高质量。", "HDPrograms": "高清节目", "HardwareAccelerationWarning": "启动硬件加速可能在某些环境下导致系统不稳定。请确认你的操作系统和显卡驱动程序是最新的。如果你在开启此项后播放视频时遇到困难,那么你需要将此选项设置回“没有”。", From 1fc1dc1e65f5b2dd86eb9295a94079c96d8fb20a Mon Sep 17 00:00:00 2001 From: Kityn Date: Thu, 3 Oct 2024 05:35:56 +0000 Subject: [PATCH 168/186] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 8812e9afff..9b63dd969d 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1780,7 +1780,7 @@ "LabelAlbumGain": "Wzmocnienie albumu", "LabelSelectAudioNormalization": "Normalizacja dźwięku", "LabelTrackGain": "Wzmocnienie utworu", - "SelectAudioNormalizationHelp": "Wzmocnienie utworu – reguluje głośność każdego utworu tak, aby odtwarzał się z tą samą głośnością. Wzmocnienie albumu – reguluje głośność tylko wszystkich utworów w albumie, zachowując zakres dynamiki albumu.", + "SelectAudioNormalizationHelp": "Wzmocnienie utworu – reguluje głośność każdego utworu tak, aby odtwarzał się z tą samą głośnością. Wzmocnienie albumu – reguluje głośność tylko wszystkich utworów w albumie, zachowując zakres dynamiki albumu. Przełączanie między opcją \"Wyłączone\" a innymi wymaga ponownego uruchomienia bieżącego odtwarzania.", "SearchResultsEmpty": "Wybacz! Nie znaleziono wyników dla „{0}”", "HeaderAllRecordings": "Wszystkie nagrania", "LabelBuildVersion": "Wersja kompilacji", From 9875194da6af9a3b29424f20c08554fc3de46ce5 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 3 Oct 2024 18:22:37 +0000 Subject: [PATCH 169/186] 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 db2f7c16c8..42486c88d7 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1926,5 +1926,6 @@ "LabelTrickplayAccelEncoding": "Käyttöönota rautakiihdytetty MJPEG enkoodaus", "LabelTrickplayAccelEncodingHelp": "Tällä hetkellä ainoastaan käytettävissä QSV, VAAPI ja VideoToolbox, tällä valinnalla ei ole vaikutusta muihin rautakiihdytysmetodeihin.", "HeaderVideoAdvanced": "Edistynyt video", - "PlaylistPublicDescription": "Salli tämän soittolistan katsominen jokaiselle kirjautuneelle käyttäjälle." + "PlaylistPublicDescription": "Salli tämän soittolistan katsominen jokaiselle kirjautuneelle käyttäjälle.", + "DateModified": "Muokkauspäivämäärä" } From 077e9181d385bd32a0cddb8946db6e7de0ba3711 Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Thu, 3 Oct 2024 23:43:17 +0000 Subject: [PATCH 170/186] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index f54f367915..ba2e3e4d54 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1777,7 +1777,7 @@ "LabelIsHearingImpaired": "For hearing impaired (SDH)", "BackdropScreensaver": "Backdrop Screensaver", "LogoScreensaver": "Logo Screensaver", - "SelectAudioNormalizationHelp": "Track gain - adjusts the volume of each track so they playback with the same loudness. Album gain - adjusts the volume of all the tracks in an album only, keeping the album's dynamic range.", + "SelectAudioNormalizationHelp": "Track gain - adjusts the volume of each track so they playback with the same loudness. Album gain - adjusts the volume of all the tracks in an album only, keeping the album's dynamic range. Switching between \"Off\" and other options requires restarting the current playback.", "LabelAlbumGain": "Album Gain", "SearchResultsEmpty": "Sorry! No results found for \"{0}\"", "LabelSelectAudioNormalization": "Audio Normalisation", From 7504daba70e314f3a4adb6e58e541ce8223710be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 4 Oct 2024 07:07:53 +0000 Subject: [PATCH 171/186] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 7fac2a9281..d1d81cb6e6 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1780,7 +1780,7 @@ "LabelSelectAudioNormalization": "Normalizace hlasitosti", "LabelAlbumGain": "Na úrovni alba", "LabelTrackGain": "Na úrovni skladby", - "SelectAudioNormalizationHelp": "Normalizace na úrovni skladby upraví hlasitost všech skladeb tak, aby byla všude stejná. Normalizace na úrovni alba upraví hlasitost všech skladeb tak, aby byla hlasitost stejná v rámci jednotlivých alb.", + "SelectAudioNormalizationHelp": "Normalizace na úrovni skladby upraví hlasitost všech skladeb tak, aby byla všude stejná. Normalizace na úrovni alba upraví hlasitost všech skladeb tak, aby byla hlasitost stejná v rámci jednotlivých alb. Vypnutí a následné zapnutí vyžaduje restart aktuálně hrající skladby.", "SearchResultsEmpty": "Pro “{0}” nebylo nic nalezeno", "HeaderAllRecordings": "Všechny nahrávky", "LabelBuildVersion": "Verze sestavení", From f1a6bfe111d3f656834581c1696571b7bdb75100 Mon Sep 17 00:00:00 2001 From: Mylan1173 Date: Fri, 4 Oct 2024 09:19:18 +0000 Subject: [PATCH 172/186] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index a000a8be7f..a9d4d3faa8 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1873,5 +1873,31 @@ "AllowFmp4TranscodingContainerHelp": "Az fMP4 átkódolási konténer engedélyezése ehhez a tunerhez, a HEVC és HDR tartalmak engedélyezéséhez. Nem minden tuner kompatibilis ezzel a tárolóval. Tiltsa le, ha lejátszási problémákat tapasztal.", "Alternate": "Alternatív", "AlternateDVD": "Alternatív DVD", - "AllowTonemappingSoftwareHelp": "A tónusleképzés képes a HDR videók dinamika tartományát SDR tartományba átalakítani, miközben megtartja a kép színét és részleteit, ami elengedhetetlen az eredeti jelenet megőrzéséhez. Jelenleg csak 10 bites HDR10, HLG és DoVi tartalmakon működik." + "AllowTonemappingSoftwareHelp": "A tónusleképzés képes a HDR videók dinamika tartományát SDR tartományba átalakítani, miközben megtartja a kép színét és részleteit, ami elengedhetetlen az eredeti jelenet megőrzéséhez. Jelenleg csak 10 bites HDR10, HLG és DoVi tartalmakon működik.", + "DateModified": "Dátum módosítva", + "EditLyrics": "Dalszöveg módosítása", + "DisableVbrAudioEncodingHelp": "Megakadályozza a szervert hogy a hangot VBR-rel kódolja a kliensnek.", + "HeaderAddLyrics": "Dalszöveg hozzáadása", + "EnableHi10p": "H.264 High 10 profil bekapcsolása", + "EnableHi10pHelp": "Kapcsold be hogy megakadályozd a H.264 10-bites videók transzkódolását. Kapcsold ki ezt a beállítást ha a videó üres képkockákat jelenít meg.", + "HeaderAudioAdvanced": "Haladó Hang", + "EnableTrueHdHelp": "Csak akkor kapcsold be ha az eszköz támogatja a TrueHD-t vagy csatlakoztatva van egy kompatibilis hang vevőhöz, egyébként lejátszási hibát okozhat.", + "HeaderPreviewLyrics": "Dalszöveg Előnézet", + "HeaderLyricDownloads": "Dalszöveg Letöltések", + "HeaderUploadLyrics": "Dalszöveg Feltöltése", + "HeaderNextItemPlayingInValue": "Következő: {0} Lejátszás kezdődik: {1}", + "Inker": "Színező", + "LabelAllowFmp4TranscodingContainer": "fMP4 transzkódoló container engedélyezése", + "Colorist": "Kolorista", + "AlwaysRemuxFlacAudioFilesHelp": "Ha vannak olyan fájlok amiket a böngésző nem játszik le vagy helytelenül számítja ki az időbélyegeket akkor kapcsold be ezt mint megoldás.", + "AlwaysRemuxMp3AudioFilesHelp": "Ha vannak olyan fájlok amikben a böngésző helytelenül számítja ki az időbélyegeket akkor kapcsold be ezt mint megoldás.", + "CoverArtist": "Borító művész", + "AndOtherArtists": "{0} és {1} további művész.", + "EnableDts": "DTS (DCA) bekapcsolása", + "EnableTrueHd": "TrueHD bekapcsolása", + "HeaderNextItem": "Következő {0}", + "HeaderVideoAdvanced": "Haladó VIdeó", + "Illustrator": "Illusztrátor", + "LabelAlwaysRemuxFlacAudioFiles": "Mindig remux-olja a FLAC hang fájlokat", + "LabelAlwaysRemuxMp3AudioFiles": "Mindig remux-olja a MP3 hang fájlokat" } From 3a33ed9ffc59263bac99818b84879f24f857730a Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Fri, 4 Oct 2024 21:42:41 +0000 Subject: [PATCH 173/186] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 9b6d56cb43..ae0bc382fc 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -3,7 +3,7 @@ "Add": "הוסף", "AddToCollection": "הוסף לאוסף", "AddToPlayQueue": "הוסף לתור ברשימת ניגון", - "AddToPlaylist": "הוסף לרשימת ניגון", + "AddToPlaylist": "הוסף לרשימת השמעה", "AdditionalNotificationServices": "עיין ברשימת התוספים להתקנת שירותי התראות נוספים.", "All": "הכול", "AllChannels": "כל הערוצים", @@ -67,7 +67,7 @@ "HeaderActiveDevices": "מכשירים פעילים", "HeaderActiveRecordings": "הקלטות פעילות", "HeaderAddToCollection": "להוסיף לאוסף", - "HeaderAddToPlaylist": "הוסף לרשימת ניגון", + "HeaderAddToPlaylist": "הוסף לרשימת השמעה", "HeaderAdditionalParts": "חלקים נוספים", "HeaderCancelRecording": "ביטול הקלטה", "HeaderCancelSeries": "בטל סדרה", @@ -103,7 +103,7 @@ "HeaderScenes": "סצנות", "HeaderSeriesOptions": "אפשרויות סדרה", "HeaderServerSettings": "הגדרות שרת", - "HeaderSetupLibrary": "הגדר את ספריית המדיה שלך", + "HeaderSetupLibrary": "הגדרת ספריות המדיה שלך", "HeaderSpecialEpisodeInfo": "פרטי אפיזודות מיוחדות", "HeaderStatus": "מצב", "HeaderSystemDlnaProfiles": "פרופילי מערכת", @@ -477,7 +477,7 @@ "ButtonAddImage": "הוסף תמונה", "AskAdminToCreateLibrary": "בקש ממנהל ליצור ספרייה.", "Ascending": "בסדר עולה", - "Photos": "תמונות", + "Photos": "צילומים", "MessageConfirmShutdown": "‫האם אתה בטוח שברצונך לכבות את השרת?", "MessageConfirmRestart": "‫האם אתה בטוח שברצונך לאתחל את שרת ה-Jellyfin‏?", "HeaderThisUserIsCurrentlyDisabled": "משתמש זה אינו פעיל כרגע", @@ -584,7 +584,7 @@ "BookLibraryHelp": "ניתן להוסיף ספרים מוקלטים וספרים כתובים. עיינו {0} במדריך מתן שמות לספרים {1}.", "Desktop": "שולחן עבודה", "MessageDeleteTaskTrigger": "האם אתה בטוח כי ברצונך למחוק את מפעיל משימה זה?", - "LastSeen": "נראה לאחרונה ב-{0}", + "LastSeen": "פעילות אחרונה ב-{0}", "PersonRole": "כ-{0}", "ListPaging": "{0}-{1} מתוך {2}", "EveryXHours": "בכל {0} שעות", @@ -840,7 +840,7 @@ "HeaderDeleteDevices": "מחק את כל המכשירים", "HeaderApiKeysHelp": "תוכנות חיצוניות נדרשות להשתמש במפתח API חיצוני על מנת לתקשר עם השרת. מפתחות מונפקים ע\"י התחברות עם משתמש רגיל, או באמצעות הנפקה ידנית של מפתח לתוכנה.", "EncoderPresetHelp": "בחר ערך מהיר יותר לשיפור ביצועים, או ערך איטי יותר לשיפור איכות.", - "H264CrfHelp": "Constant Rate Factor (CRF) הוא הגדרת איכות ברירת המחדל של מקודדי ה-x264 ו-x265. ניתן לקבוע ערך בין 0 ל-51, כשערך נמוך יותר יביא לאיכות גבוהה יותר (על חשבון קבצים גדולים יותר). ההגדרות המומלצות הן בין 18 ל-28. ערך ברירת המחדל של x264 הוא 23, ושל x265 הוא 28, אז ניתן לראות בכך נקודת התחלה.", + "H264CrfHelp": "Constant Rate Factor (CRF) הוא הגדרת איכות ברירת המחדל של מקודדי התוכנה x264 ו-x265. ניתן לקבוע ערך בין 0 ל-51, כשערך נמוך יותר יביא לאיכות גבוהה יותר (על חשבון קבצים גדולים יותר). ההגדרות המומלצות הן בין 18 ל-28. ערך ברירת המחדל של x264 הוא 23, ושל x265 הוא 28, אז ניתן לראות בכך נקודת התחלה. מקודדי חומרה לא משתמשים בהגדרות אלה.", "FFmpegSavePathNotFound": "תיקיית FFmpeg לא נמצאה באמצעות נתיב התיקייה שהוכנס. FFprobe נדרש וצריך גם הוא להימצא באותה התיקייה. רכיבים אלו בד\"כ נמצאים ביחד באותה ההורדה. אנא בדוק את נתיב בתיקייה ונסה שנית.", "DeleteDevicesConfirmation": "האם אתה בטוח כי ברצונך למחוק את כל המכשירים? כל החיבורים האחרים ינותקו. מכשירים יופיעו מחדש בפעם הבאה שיתחברו דרכם.", "DeleteAll": "מחק הכל", @@ -851,7 +851,7 @@ "EnableFasterAnimations": "אנימציות מהירות", "EnableBlurHash": "הפעל מצייני מיקום מטושטשים לתמונות", "EnableBlurHashHelp": "תמונות שעדיין נטענות יוצגו עם מציין מיקום ייחודי.", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "ButtonCast": "שדר למכשיר", "AllowTonemappingHelp": "מיפוי-טונים מאפשר המרה של וידאו מ-HDR ל-SDR תוך שמירה על פרטי וצבעי תמונה, החשובים לשימור מידע מהסצנה המקורית. כרגע עובד רק בקידוד קבצים של HDR10, HLG ו-DoVi. תכונה זו מצריכה הרצה של GPGPU בהתאם.", "Subtitle": "כתובית", @@ -866,7 +866,7 @@ "ShowLess": "הצג פחות", "ShowAdvancedSettings": "הצג הגדרות מתקדמות", "SettingsWarning": "שינוי ערכים אלו עלול לגרום לחוסר יציבות או בעיות חיבור. אם אתה נתקל בבעיות, אנו ממליצים להחזיר אותם לערכי ברירת המחדל.", - "ServerRestartNeededAfterPluginInstall": "Jellyfin יצטרך לאתחל לאחר התקנת תוסף.", + "ServerRestartNeededAfterPluginInstall": "Jellyfin יצטרך לאתחל לאחר התקנת התוסף.", "SeriesDisplayOrderHelp": "סדר פרקים על פי תאריך שידור, סדר DVD, או מספרים אבסולוטיים.", "Series": "סדרה", "SendMessage": "שלח הודעה", @@ -904,7 +904,7 @@ "SubtitleOffset": "קיזוז כתוביות", "SubtitleAppearanceSettingsDisclaimer": "הגדרות אלו לא יחולו את קבצי כתוביות גרפיים (DVD ,PGS, וכו') או כתוביות SSA\\ASS עם סגנונות מוטמעים.", "LabelAutoDiscoveryTracing": "אפשר מעקב אחר גילוי אוטומטי.", - "LabelAppNameExample": "דוגמא: Sickbeard, Sonarr", + "LabelAppNameExample": "שם לזיהוי מפתחות API. הגדרה זו לא תשנה התנהגות.", "LabelAllowHWTranscoding": "אפשר קידוד חומרה", "LabelAlbumArtMaxWidth": "רוחב מירבי של אומנות אלבום", "LabelAlbumArtMaxHeight": "גובה מירבי של אומנות אלבום", @@ -1129,7 +1129,7 @@ "TypeOptionPluralBook": "ספרים", "TypeOptionPluralAudio": "קטעי שמע", "Video": "סרטון", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "LabelMaxChromecastBitrate": "איכות הזרמת Google Cast", "LabelMethod": "שיטה", "LabelNewsCategories": "קטגוריות חדשות", @@ -1269,7 +1269,7 @@ "DeleteSeries": "מחיקת סידרה", "DeleteEpisode": "מחיקת פרק", "DeleteName": "מחיקת {0}", - "SelectAudioNormalizationHelp": "עוצמת רצועת שמע - משנה את העוצמה של כל רצועה כך שהם יתנגנו בעוצמת קול זהה. עוצמת אלבום - משנה את העוצמה של כל רצועות השמע באלבום בלבד, תוך שמירה על התחום הדינמי של האלבום.", + "SelectAudioNormalizationHelp": "עוצמת רצועת שמע - משנה את העוצמה של כל רצועה כך שעוצמת הקול תישאר זהה. עוצמת אלבום - משנה את העוצמה של רצועות השמע באלבום בלבד, תוך שמירה על התחום הדינמי של האלבום. החלפה בין \"כבוי\" ושאר האפשרויות דורשת ריסוט המנגינה.", "LabelAllowContentWithTags": "אפשר פריטים עם תגיות", "EnableSmoothScroll": "הפעל גלילה חלקה", "HeaderDeleteSeries": "מחק סדרה", @@ -1278,11 +1278,11 @@ "LabelMaxDaysForNextUpHelp": "הגדר את מספר הימים המקסימלי שתכנית צריכה להישאר ברשימת 'הבא בתור' מבלי לצפות בה.", "LabelMaxVideoResolution": "רזולוצייה מקסימלית המותרת להמרת קידוד וידאו", "LabelLocalCustomCss": "קוד CSS לעיצוב מותאם אישית ללקוח זה בלבד. ייתכן שתרצה להשבית את קוד ה-CSS המסופק על ידי השרת.", - "LabelMaxAudiobookResume": "דקות נותרות בספר המוקלט להמשך", + "LabelMaxAudiobookResume": "דקות שנותרו להמשך הספר המוקלט", "LabelMaxAudiobookResumeHelp": "כותרים נחשבים כנוגנו במלואם כאשר משך הזמן הנותר קטן יותר מערך זה.", "LabelMetadataReaders": "קוראי מטא-דאטה", "LabelMetadataSavers": "שומרי מטא-דאטה", - "PlaybackError.RateLimitExceeded": "מדיה", + "PlaybackError.RateLimitExceeded": "לא ניתן לנגן את המדיה כרגע עקבת מגבלה על קצב השימוש.", "CoverArtist": "אמן קאבר", "Colorist": "רשימת צבעים", "Author": "יוצר", From c54db604d9426f3b3d46222c9161b88aa210d4da Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 5 Oct 2024 08:47:03 +0300 Subject: [PATCH 174/186] Fix LiveTV Playback --- src/components/playback/playbackmanager.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index e90aff609f..f19bb51e53 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2573,8 +2573,8 @@ export class PlaybackManager { } const apiClient = ServerConnections.getApiClient(item.ServerId); - const mediaSourceId = playOptions.mediaSourceId || item.Id; - const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId) + const mediaSourceId = playOptions.mediaSourceId; + const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId || item.Id) .then(fullItem => { return fullItem.MediaStreams; }); From 95e23875f4e2761a8ed65d73dd5b94977e0d0d79 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 5 Oct 2024 09:56:06 +0300 Subject: [PATCH 175/186] Only specify mediaSourceId if index changed --- src/components/playback/playbackmanager.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index f19bb51e53..3dfa961856 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2573,7 +2573,7 @@ export class PlaybackManager { } const apiClient = ServerConnections.getApiClient(item.ServerId); - const mediaSourceId = playOptions.mediaSourceId; + let mediaSourceId = playOptions.mediaSourceId; const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId || item.Id) .then(fullItem => { return fullItem.MediaStreams; @@ -2611,9 +2611,11 @@ export class PlaybackManager { autoSetNextTracks(prevSource, mediaStreams, trackOptions, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); if (trackOptions.DefaultAudioStreamIndex != null) { options.audioStreamIndex = trackOptions.DefaultAudioStreamIndex; + mediaSourceId = mediaSourceId || item.Id; } if (trackOptions.DefaultSubtitleStreamIndex != null) { options.subtitleStreamIndex = trackOptions.DefaultSubtitleStreamIndex; + mediaSourceId = mediaSourceId || item.Id; } return getPlaybackMediaSource(player, apiClient, deviceProfile, item, mediaSourceId, options).then(async (mediaSource) => { From c1df20f6ec53a976dbae45e1eedc06b56ea9ef65 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sat, 5 Oct 2024 09:48:58 +0000 Subject: [PATCH 176/186] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index af21e7faf2..9a3c1cd564 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1102,7 +1102,7 @@ "MediaInfoPixelFormat": "Pixel formát", "MediaInfoFramerate": "Snímková frekvencia", "MediaInfoDefault": "Predvolený", - "MediaInfoCodecTag": "Štítok kodeku", + "MediaInfoCodecTag": "Tag kodeku", "MediaInfoBitrate": "Dátový tok", "MediaInfoAnamorphic": "Anamorfné", "MapChannels": "Mapovať kanály", @@ -1777,7 +1777,7 @@ "LabelThrottleDelaySecondsHelp": "Čas v sekundách, po ktorom bude prekódovanie obmedzené. Musí byť dostatočne veľký, aby mal klient v rezerve dostatočné množstvo prehrávaného súboru. Funguje len vtedy, ak je povolená funkcia Obmedziť prekódovanie.", "AllowSegmentDeletionHelp": "Odstránenie starých segmentov po ich stiahnutí klientom. Tým sa zabráni tomu, aby sa celý prekódovaný súbor uložil na disk. Ak sa vyskytnú problémy s prehrávaním, vypnite túto funkciu.", "LabelSegmentKeepSecondsHelp": "Čas v sekundách, počas ktorého sa majú segmenty uchovávať po ich stiahnutí klientom. Funguje len vtedy, ak je povolené mazanie segmentov.", - "SelectAudioNormalizationHelp": "Zosilnenie stopy - upravuje hlasitosť jednotlivých stôp tak, aby sa prehrávali s rovnakou hlasitosťou. Zosilnenie pre album - upravuje hlasitosť všetkých skladieb iba v albume, pričom zachováva dynamický rozsah albumu.", + "SelectAudioNormalizationHelp": "Zosilnenie stopy - upravuje hlasitosť jednotlivých stôp tak, aby sa prehrávali s rovnakou hlasitosťou. Zosilnenie pre album - upravuje hlasitosť všetkých skladieb iba v albume, pričom zachováva dynamický rozsah albumu. Vypnutie a následné zapnutie si vyžaduje reštartovanie aktuálne prehrávanej skladby.", "LabelAlbumGain": "Zosilnenie pre album", "LabelSelectAudioNormalization": "Normalizácia hlasitosti", "LabelTrackGain": "Zosilnenie stopy", @@ -1914,7 +1914,7 @@ "MediaInfoRotation": "Rotácia", "MoveToBottom": "Presunúť na spodnú časť", "MoveToTop": "Presunúť na vrchnú časť", - "PreferNonstandardArtistsTagHelp": "Ak je to možné, použiť neštandardnú značku ARTISTS namiesto značky ARTIST.", + "PreferNonstandardArtistsTagHelp": "Ak je to možné, použiť neštandardný tag ARTISTS namiesto tagu ARTIST.", "PreviewLyrics": "Náhľad textov piesní", "Reset": "Resetovať", "ReplaceTrickplayImages": "Nahradiť existujúce obrázky trickplay", @@ -1952,5 +1952,20 @@ "LabelFallbackMaxStreamingBitrate": "Záložný maximálny dátový tok (Mbps)", "LabelSaveTrickplayLocally": "Uložit obrázky trickplay k médiám", "LabelDelimiterWhitelistHelp": "Položky, ktoré sa majú vylúčiť z oddelovania tagov. Jedna položka na riadok.", - "LabelNoChangelog": "Pre túto verziu nie je k dispozícii žiadny zoznam zmien." + "LabelNoChangelog": "Pre túto verziu nie je k dispozícii žiadny zoznam zmien.", + "HeaderNextItemPlayingInValue": "Nasleduje {0} Prehrávanie za {1}", + "MessageSplitVersionsError": "Pri rozdeľovaní verzií došlo k chybe", + "PasswordMissingSaveError": "Nové heslo nesmie byť prázdne.", + "PluginLoadConfigError": "Pri získavaní konfigurácie zásuvného modulu došlo k chybe.", + "UseCustomTagDelimiters": "Použiť vlastný oddeľovač tagov", + "UseCustomTagDelimitersHelp": "Rozdeliť tagy umelcov/žánrov pomocou vlastných znakov.", + "LabelTrickplayKeyFrameOnlyExtraction": "Generovať obrázky len z kľúčových snímkov", + "MessageCancelSeriesTimerError": "Pri rušení časovača seriálu došlo k chybe", + "MessageCancelTimerError": "Pri rušení časovača došlo k chybe", + "PluginDisableError": "Pri zakazovaní zásuvného modulu došlo k chybe.", + "PluginEnableError": "Pri povoľovaní zásuvného modulu došlo k chybe.", + "PluginUninstallError": "Pri odinštalovaní zásuvného modulu došlo k chybe.", + "PreferNonstandardArtistsTag": "Preferovať tag ARTISTS, ak je k dispozícii", + "RenderPgsSubtitle": "Experimentálne vykresľovanie titulkov formátu PGS", + "VideoCodecTagNotSupported": "Tag video kodeku nie je podporovaný" } From 24c8a2220f8dceda32ab60f41111d78a9bf63f13 Mon Sep 17 00:00:00 2001 From: Nico Date: Sat, 5 Oct 2024 16:49:02 +0000 Subject: [PATCH 177/186] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 7187a3c4c8..3805109a91 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1267,7 +1267,7 @@ "OnWakeFromSleep": "À la sortie de veille", "WeeklyAt": "{0} à {1}", "DailyAt": "Tous les jours à {0}", - "LastSeen": "Dernière connexion {0}", + "LastSeen": "Dernière activité {0}", "PersonRole": "est {0}", "ListPaging": "{0}-{1} de {2}", "WriteAccessRequired": "Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier les permissions de ce-dernier puis de réessayer.", @@ -1778,7 +1778,7 @@ "HeaderGuestCast": "Invités vedettes", "LabelIsHearingImpaired": "Sous-titrage pour sourds et malentendants", "SearchResultsEmpty": "Désolé ! Aucun résultat trouvé pour \"{0}\"", - "SelectAudioNormalizationHelp": "Gain de piste - permet de régler le volume de chaque piste de manière à ce qu'elles soient lues avec la même intensité sonore. Gain de l'album - ajuste le volume de toutes les pistes d'un album uniquement, en conservant la plage dynamique de l'album.", + "SelectAudioNormalizationHelp": "Gain de piste - permet de régler le volume de chaque piste de manière à ce qu'elles soient lues avec la même intensité sonore. Gain de l'album - ajuste le volume de toutes les pistes d'un album uniquement, en conservant la plage dynamique de l'album. Passer de \"Off\" à une autre option, requiert le redémarrage la lecture en cours.", "LabelAlbumGain": "Gain de l'album", "LabelSelectAudioNormalization": "Normalisation de l'audio", "LabelTrackGain": "Gain de piste", @@ -1944,11 +1944,11 @@ "LabelAudioTagSettings": "Paramètres des balises audio", "LabelCustomTagDelimiters": "Délimiteur de balise personnalisé", "LabelCustomTagDelimitersHelp": "Caractères à traiter comme délimiteurs pour séparer les balises.", - "LabelLyricDownloaders": "Téléchargeurs de Lyrics", + "LabelLyricDownloaders": "Téléchargeurs de paroles", "LabelDelimiterWhitelist": "Liste blanche des délimiteurs", "LabelDelimiterWhitelistHelp": "Éléments à exclure de la division des balises. Un élément par ligne.", "LabelDisableVbrAudioEncoding": "Désactiver l'encodage audio VBR", - "LabelSaveTrickplayLocally": "Enregistrer les images trickplay au même emplacement que les médias", + "LabelSaveTrickplayLocally": "Enregistrer les images de prévisualisation (trickplay) au même emplacement que les médias", "LabelSaveTrickplayLocallyHelp": "Enregistrer les images trickplay dans les dossiers de médias les placera à côté de vos médias pour une migration et un accès faciles.", "MediaInfoRotation": "Rotation", "RenderPgsSubtitle": "Rendu expérimental des sous-titres PGS", @@ -1966,5 +1966,6 @@ "LabelAllowFmp4TranscodingContainer": "Autoriser le conteneur de transcodage fMP4", "AllowTonemappingSoftwareHelp": "Le tone-mapping peut transformer la plage dynamique d'une vidéo de HDR à SDR tout en conservant les détails et les couleurs de l'image, qui sont des informations très importantes pour représenter la scène originale. Fonctionne uniquement avec les vidéos 10 bits HDR10, HLG et DoVi.", "LabelTrickplayKeyFrameOnlyExtraction": "Générer uniquement des images à partir des images clés", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place." + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extraire uniquement les images clés pour un traitement beaucoup plus rapide avec un minutage moins précis. Si le décodeur matériel configuré ne prend pas en charge ce mode, il utilisera le décodeur logiciel à la place.", + "AllowFmp4TranscodingContainerHelp": "Autoriser le conteneur de transcodage fMP4 pour ce tuner afin d'activer les contenus HEVC et HDR. Tous les tuners ne sont pas compatibles avec ce conteneur. Désactivez ceci si vous rencontrez des problèmes de lecture." } From 81cf8df5c98397300b41a606d21c228221bae58d Mon Sep 17 00:00:00 2001 From: stanol Date: Sun, 6 Oct 2024 12:51:27 +0000 Subject: [PATCH 178/186] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 66f2dc6a5b..55b688db07 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -1774,7 +1774,7 @@ "BackdropScreensaver": "Заставка «Задники»", "LogoScreensaver": "Заставка з логотипом", "LabelIsHearingImpaired": "Для людей з вадами слуху (SDH)", - "SelectAudioNormalizationHelp": "Посилення треку - регулює гучність кожного треку так, щоб вони відтворювалися з однаковою гучністю. Посилення альбому - регулює гучність лише всіх треків в альбомі, зберігаючи динамічний діапазон альбому.", + "SelectAudioNormalizationHelp": "Посилення треку - регулює гучність кожного треку так, щоб вони відтворювалися з однаковою гучністю. Посилення альбому - регулює гучність лише всіх треків в альбомі, зберігаючи динамічний діапазон альбому. Перемикання між «Вимкнено» та іншими опціями вимагає перезапуску поточного відтворення.", "LabelAlbumGain": "Посилення альбому", "LabelSelectAudioNormalization": "Нормалізація звуку", "LabelTrackGain": "Посилення треку", From 708226763a0644c0cddad7740269ca557de1b5ce Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sun, 6 Oct 2024 15:04:11 +0000 Subject: [PATCH 179/186] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 5c8fb2a9b9..7dffb27c75 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1764,7 +1764,7 @@ "LabelTrackGain": "Điều Chỉnh Nhạc", "GridView": "Xem Lưới", "ListView": "Xem Danh Sách", - "SelectAudioNormalizationHelp": "Điều chỉnh nhạc - điều chỉnh âm lượng của mỗi bản nhạc để chúng phát lại với cùng một độ to. Điều chỉnh album - điều chỉnh âm lượng tất cả bản nhạc trong album, giữ nguyên dải động của album.", + "SelectAudioNormalizationHelp": "Chỉnh nhạc - điều chỉnh âm lượng mỗi bản nhạc để chúng phát với cùng một độ to. Chỉnh album - điều chỉnh âm lượng tất cả bản nhạc trong album, giữ nguyên dải động của album. Việc chuyển đổi giữa \"Tắt\" và các tùy chọn khác yêu cầu khởi động lại quá trình phát lại hiện tại.", "LabelAlbumGain": "Điều Chỉnh Album", "LabelSegmentKeepSecondsHelp": "Thời gian tính bằng giây mà các phân đoạn cần được giữ lại sau khi chúng được khách hàng tải xuống.. Chỉ hoạt động nếu tính năng xóa phân đoạn được bật.", "MenuClose": "Đóng Menu", @@ -1796,8 +1796,8 @@ "Lyric": "Lời bài hát", "HeaderLyricDownloads": "Tải Xuống Lời Bài Hát", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bộ giải mã âm thanh chuyển mã ưa thích khi phát lại video", - "LibraryScanFanoutConcurrency": "Giới hạn nhiệm vụ quét thư viện song song", - "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ song song tối đa trong quá trình quét thư viện. Đặt giá trị này thành 0 sẽ chọn một giới hạn dựa trên số lõi của hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này.", + "LibraryScanFanoutConcurrency": "Giới hạn tác vụ quét thư viện song song", + "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ song song tối đa trong quá trình quét thư viện. Đặt là 0 sẽ chọn một giới hạn dựa trên số lõi trên hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này xuống thấp.", "Lyrics": "Lời bài hát", "PlaybackError.ASS_RENDER_ERROR": "Đã xảy ra lỗi trong trình kết xuất phụ đề ASS/SSA.", "PlaybackError.FATAL_HLS_ERROR": "Đã xảy ra lỗi nghiêm trọng trong luồng HLS.", From 60c2f7366f9f163974b553cc7c7100b179742de7 Mon Sep 17 00:00:00 2001 From: rushmash Date: Sun, 6 Oct 2024 18:46:44 +0000 Subject: [PATCH 180/186] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index e9add6931b..fb7e674e11 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -311,7 +311,7 @@ "HeaderYears": "Гады", "LabelValue": "Значэнне", "Image": "Малюнак", - "LastSeen": "Апошні раз бачылі {0}", + "LastSeen": "Апошняе дзеянне {0}", "List": "Спіс", "Live": "Трансляцыя", "MediaInfoAnamorphic": "Анаморфны", @@ -1760,7 +1760,7 @@ "LogLevel.Error": "Памылка", "LabelTrackGain": "Узмацненне дарожкі", "GoHome": "На галоўную", - "SelectAudioNormalizationHelp": "Узмацненне дарожкі - рэгулюе гучнасць кожнай дарожкі, каб яны прайграваліся з аднолькавай гучнасцю. Узмацненне альбома - рэгулюе гучнасць толькі ўсіх дарожак у альбоме, захоўваючы дынамічны дыяпазон альбома.", + "SelectAudioNormalizationHelp": "Узмацненне дарожкі - рэгулюе гучнасць кожнай дарожкі, каб яны прайграваліся з аднолькавай гучнасцю. Узмацненне альбома - рэгулюе гучнасць толькі ўсіх дарожак у альбоме, захоўваючы дынамічны дыяпазон альбома. Пераключэнне паміж \"Выкл\" і іншымі опцыямі патрабуе перазапуску бягучага прайгравання.", "SearchResultsEmpty": "Выбачайце! Няма вынікаў для \"{0}\"", "UnknownError": "Адбылася невядомая памылка.", "LabelIsHearingImpaired": "Для людзей з парушэннем слыху (SDH)", @@ -1893,5 +1893,15 @@ "PluginEnableError": "Адбылася памылка пры ўключэнні плагіна.", "PluginLoadConfigError": "Адбылася памылка падчас атрымання старонак канфігурацыі плагіна.", "PluginLoadRepoError": "Адбылася памылка падчас атрымання дэталяў плагіна з рэпазітара.", - "PluginUninstallError": "Адбылася памылка пры выдаленні плагіна." + "PluginUninstallError": "Адбылася памылка пры выдаленні плагіна.", + "HeaderAudioAdvanced": "Пашыраны аўдыё", + "EnableHi10p": "Уключыць профіль H.264 High 10", + "HeaderUploadLyrics": "Спампаваць тэксты песень", + "DateModified": "Дата змяненняў", + "DisableVbrAudioEncodingHelp": "Забараніць серверу кадаваць аўдыя з VBR для гэтага кліента.", + "HeaderPreviewLyrics": "Папярэдні прагляд тэкстаў песень", + "LabelIsSynced": "Сінхранізавана", + "LabelDuration": "Працягласць", + "NoLyricsSearchResultsFound": "Тэксты песень не знойдзены.", + "FallbackMaxStreamingBitrateHelp": "Максімальны бітрэйт плыні выкарыстоўваецца ў якасці запаснога, калі ffprobe не можа вызначыць бітрэйт зыходнага патоку. Гэта дапамагае прадухіліць кліенты ад запытаў празмерна высокага бітрэйту транскадавання, які можа прывесці да збою прайгравальніка і перагрузкі кадавальніка." } From ca4763512f4a4e2a73e37600a5dc520f917c2274 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:58:02 +0300 Subject: [PATCH 181/186] Explicitly check for Live TV --- src/components/playback/playbackmanager.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 3dfa961856..c85b2fd579 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -22,6 +22,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/index.js'; const UNLIMITED_ITEMS = -1; @@ -2573,8 +2574,15 @@ export class PlaybackManager { } const apiClient = ServerConnections.getApiClient(item.ServerId); - let mediaSourceId = playOptions.mediaSourceId; - const getMediaStreams = apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId || item.Id) + let mediaSourceId; + + const isLiveTv = [BaseItemKind.TvChannel, BaseItemKind.Channel, BaseItemKind.LiveTvChannel].includes(item.Type); + + if (!isLiveTv) { + mediaSourceId = playOptions.mediaSourceId || item.Id; + } + + const getMediaStreams = isLiveTv ? Promise.resolve([]) : apiClient.getItem(apiClient.getCurrentUserId(), mediaSourceId) .then(fullItem => { return fullItem.MediaStreams; }); @@ -2611,11 +2619,9 @@ export class PlaybackManager { autoSetNextTracks(prevSource, mediaStreams, trackOptions, user.Configuration.RememberAudioSelections, user.Configuration.RememberSubtitleSelections); if (trackOptions.DefaultAudioStreamIndex != null) { options.audioStreamIndex = trackOptions.DefaultAudioStreamIndex; - mediaSourceId = mediaSourceId || item.Id; } if (trackOptions.DefaultSubtitleStreamIndex != null) { options.subtitleStreamIndex = trackOptions.DefaultSubtitleStreamIndex; - mediaSourceId = mediaSourceId || item.Id; } return getPlaybackMediaSource(player, apiClient, deviceProfile, item, mediaSourceId, options).then(async (mediaSource) => { From 213047dc296ecc543c0607d43f03bcad33a0c857 Mon Sep 17 00:00:00 2001 From: Anders Date: Tue, 8 Oct 2024 09:03:41 +0000 Subject: [PATCH 182/186] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/strings/da.json b/src/strings/da.json index 7364c60cd1..c7a5878978 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1085,7 +1085,7 @@ "LearnHowYouCanContribute": "Lær hvordan du kan bidrage.", "LeaveBlankToNotSetAPassword": "Du kan lade dette felt være tomt hvis du ikke ønsker adgangskode.", "List": "Liste", - "Live": "Live", + "Live": "Direkte", "LiveTV": "Direkte TV", "Logo": "Logo", "ManageRecording": "Håndtér optagelse", @@ -1095,7 +1095,7 @@ "MediaInfoInterlaced": "Interlaceret", "MediaInfoLayout": "Udlæg", "MediaInfoRefFrames": "Ref billeder", - "MediaInfoSampleRate": "Sample rate", + "MediaInfoSampleRate": "Samplingsfrekvens", "MediaIsBeingConverted": "Mediet bliver konverteret til et format der er kompatibel med enheden der afspiller mediet.", "Menu": "Menu", "MessageImageFileTypeAllowed": "Kun JPEG og PNG filer er understøttet.", @@ -1341,9 +1341,9 @@ "MessagePlaybackError": "Der opstod en fejl under afspilning af denne fil på din Google Cast modtager.", "MessageChromecastConnectionError": "Din Google Cast modtager kan ikke komme i kontakt med Jellyfin serveren. Undersøg venligst forbindelsen og prøv igen.", "LabelPlaybackInfo": "Afspilningsinformation", - "Remuxing": "Remuxing", + "Remuxing": "Ompakning", "AspectRatioFill": "Udfyld", - "AspectRatioCover": "Cover", + "AspectRatioCover": "Omslag", "EnableFallbackFont": "Aktiver fald tilbage på skrifttype", "Writers": "Forfattere", "ViewAlbumArtist": "Vis album kunstner", @@ -1369,7 +1369,7 @@ "QuickConnectAuthorizeFail": "Ukendt Quick Connect kode", "QuickConnectAuthorizeCode": "Angiv kode {0} for at logge ind", "QuickConnectActivationSuccessful": "Aktivering blev gennemført", - "QuickConnect": "Quick Connect", + "QuickConnect": "Hurtigtilkobling", "PluginFromRepo": "{0} fra arkiv {1}", "Profile": "Profil", "PreviousTrack": "Gå til forrige", @@ -1603,7 +1603,7 @@ "Remixer": "Remixer", "ReleaseGroup": "Udgivelsesgruppe", "Production": "Produktion", - "Print": "Print", + "Print": "Udskriv", "PreviousChapter": "Sidste kapitel", "AllowEmbeddedSubtitlesAllowTextOption": "Tillad tekst", "AllowEmbeddedSubtitlesAllowImageOption": "Tillad billede", @@ -1749,7 +1749,7 @@ "Notifications": "Notifikationer", "PleaseConfirmRepositoryInstallation": "Venligst klik OK for at bekræfte at du har læst ovenstående og ønsker at fortsætte med installationen af plugin repository.", "SaveRecordingImagesHelp": "Gem billeder fra EPG listings udbyder samt billeder fra side media.", - "SelectAudioNormalizationHelp": "Track gain - justerer volumen for hvert track så de afspiller med samme volume. Album gain - justerer volumen kun volumen for alle tracks i et album, samt bevarer albummets dynamic range.", + "SelectAudioNormalizationHelp": "Track gain - justerer volumen for hvert track så de afspiller med samme volume. Album gain - justerer volumen kun volumen for alle tracks i et album, samt bevarer albummets dynamic range. Skift mellem \"Fra\" og andre muligheder kræver genstart af den indeværende afspilning.", "Select": "Vælg", "LabelLevel": "Niveau", "LabelMediaDetails": "Media detaljer", @@ -1875,7 +1875,7 @@ "Translator": "Oversætter", "ViewLyrics": "Se sangtekst", "LabelTrickplayAccelEncoding": "Aktivér hardware acceleret MJPEG kodning", - "LabelTrickplayAccelEncodingHelp": "På nuværende tidspunkt kun tilgængeligt på QSV, VAAPI og VideoToolbox; denne indstilling har ingen effekt på andre hardware accelerationsmetoder.", + "LabelTrickplayAccelEncodingHelp": "På nuværende tidspunkt kun tilgængeligt på QSV, VA-API, VideoToolbox og RKMPP; denne indstilling har ingen effekt på andre hardware accelerationsmetoder.", "HeaderNoLyrics": "Ingen sangtekst blev fundet", "HeaderVideoAdvanced": "Video Avanceret", "PlaylistPublic": "Tillad offentlig adgang", @@ -1924,7 +1924,7 @@ "PreviewLyrics": "Gennemse sangtekster", "SearchForLyrics": "Find sangtekster", "LabelRepository": "Arkiv", - "AllowTonemappingSoftwareHelp": "Tone-mapping kan transformere det dynamiske område af en video fra HDR til SDR, uden tab af billeddetalje og farver, hvilket er meget vigtige informationer for at representere den originale scene. Virker lige nu kun med 10bit HDR10 og HLG videoer.", + "AllowTonemappingSoftwareHelp": "Tone-mapping kan transformere det dynamiske område af en video fra HDR til SDR, uden tab af billeddetalje og farver, hvilket er meget vigtige informationer for at repræsentere den originale scene. Virker lige nu kun med 10bit HDR10-, HLG- og DoVi-videoer.", "HeaderAddLyrics": "Tilføj sangtekst", "LabelNoChangelog": "Ingen ændringer fortaget for denne udgivelse.", "LabelSelectPreferredTranscodeVideoCodec": "Fforetrukne video codec til omkodning", From a3df9bd637e24f4d5db93e186198e939d02f077e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= Date: Tue, 8 Oct 2024 11:30:21 +0000 Subject: [PATCH 183/186] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index a9d4d3faa8..ffa4e680ec 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -164,7 +164,7 @@ "Label3DFormat": "3D formátum", "LabelAlbumArtists": "Album előadók", "LabelArtists": "Előadók", - "LabelAudioLanguagePreference": "Audió nyelvének beállítása", + "LabelAudioLanguagePreference": "Hang előnyben részesített nyelve", "LabelBirthYear": "Születési év", "LabelCachePath": "Gyorsítótár útvonal", "LabelCollection": "Gyűjtemény", @@ -683,8 +683,8 @@ "LabelAllowHWTranscoding": "Hardveres átkódolás engedélyezése", "LabelAllowedRemoteAddresses": "Távoli IP cím szűrő", "LabelAllowedRemoteAddressesMode": "Távoli IP cím szűrő mód", - "LabelAppName": "App neve", - "LabelAppNameExample": "Például: Sickbeard, Sonarr", + "LabelAppName": "Alkalmazás neve", + "LabelAppNameExample": "Ember számára olvasható név az API -kulcsok azonosításához. Ez a beállítás nincs hatással a működésre.", "LabelAutomaticallyRefreshInternetMetadataEvery": "A metaadatok automatikus frissítése az internetről", "LabelBindToLocalNetworkAddress": "Kötés a helyi hálózati címhez", "LabelBindToLocalNetworkAddressHelp": "A helyi IP cím felülbírálása a HTTP szerverhez való csatlakozáshoz. Ha üres marad, a szerver minden elérhető címhez kötődik. Az érték megváltoztatásához a szerver újraindítása szükséges.", @@ -1148,11 +1148,11 @@ "XmlDocumentAttributeListHelp": "Ezek a tulajdonságok minden XML válaszüzenet gyökér elemére alkalmazásra kerülnek.", "Thumb": "Miniatűr", "LabelBitrate": "Bitráta", - "LabelAudioSampleRate": "Audió mintavételi ráta", - "LabelAudioCodec": "Audió kódek", - "LabelAudioChannels": "Audió csatorna", - "LabelAudioBitrate": "Audió bitráta", - "LabelAudioBitDepth": "Audió bitmélység", + "LabelAudioSampleRate": "Hang mintavételi sebessége", + "LabelAudioCodec": "Hangkodek", + "LabelAudioChannels": "Hangcsatornák", + "LabelAudioBitrate": "Hang bitsebessége", + "LabelAudioBitDepth": "Hang bitmélysége", "CopyStreamURLSuccess": "URL másolása sikeres.", "CopyStreamURL": "Stream URL másolása", "PlaybackData": "Lejátszási információk", @@ -1269,7 +1269,7 @@ "Album": "Album", "LabelLibraryPageSizeHelp": "Az oldalnként megmutatott elemek száma. Nullára állítva a lapozási funkció ki lesz kapcsolva.", "LabelLibraryPageSize": "Könyvtár oldalméret", - "LabelDeinterlaceMethod": "Deinterlacing mód", + "LabelDeinterlaceMethod": "Váltottsorosság-mentesítő mód", "DeinterlaceMethodHelp": "Válaszd ki a szétválasztási módot, amelyet a váltott soros tartalom szoftveres átkódolásához használ. Ha engedélyezed a hardveres deinterlace-t támogató hardveres gyorsítást, akkor a hardveres deinterlacer lesz használva e beállítás helyett.", "UnsupportedPlayback": "A Jellyfin nem tudja feloldani a DRM-mel védett tartalmak titkosítását, de ettől függetlenül mindig megpróbálja a lejátszást, a védett címek esetén is. Néhány fájl emiatt teljesen feketeként jelenhet meg a titkosítás vagy a nem támogatott funkciók miatt, például az interaktív címeknél.", "Yadif": "YADIF", @@ -1373,7 +1373,7 @@ "ButtonUseQuickConnect": "Gyors kapcsolódás használata", "ButtonActivate": "Aktiválás", "Authorize": "Engedélyezés", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver váltottsorosság-mentesítő szűrő (BWDIF)", "SpecialFeatures": "Speciális tartalmak", "QuickConnectNotActive": "A gyors csatlakozás nem engedélyezett ezen a szerveren", "QuickConnectNotAvailable": "Kérd meg a szerver adminisztrátorát, hogy engedélyezze a gyors csatlakozást", @@ -1773,9 +1773,9 @@ "LabelIsHearingImpaired": "Hallássérültek számára (SDH)", "GoHome": "Kezdőlapra", "BackdropScreensaver": "Háttér képernyővédő", - "SelectAudioNormalizationHelp": "Sáverősítés - az egyes sávok hangerejét állítja be, hogy azonos hangerővel játsszák le őket. Album gain - csak az album összes zeneszámának hangerejét állítja be, megtartva az album dinamikatartományát.", + "SelectAudioNormalizationHelp": "Számerősítés – az egyes számok hangerejét állítja be, hogy azonos hangerővel legyenek lejátszva. Albumerősítés – az album összes számának hangerejét állítja, megtartva az album dinamikatartományát.", "LabelAlbumGain": "Album nyereség", - "LabelSelectAudioNormalization": "Hang normalizálás", + "LabelSelectAudioNormalization": "Hangnormalizálás", "LogoScreensaver": "Logo képernyővédő", "UnknownError": "Ismeretlen hiba történt.", "LabelTrackGain": "Címnyereség", @@ -1898,6 +1898,13 @@ "HeaderNextItem": "Következő {0}", "HeaderVideoAdvanced": "Haladó VIdeó", "Illustrator": "Illusztrátor", - "LabelAlwaysRemuxFlacAudioFiles": "Mindig remux-olja a FLAC hang fájlokat", - "LabelAlwaysRemuxMp3AudioFiles": "Mindig remux-olja a MP3 hang fájlokat" + "LabelAlwaysRemuxFlacAudioFiles": "Mindig remuxolja a FLAC-hangfájlokat", + "LabelAlwaysRemuxMp3AudioFiles": "Mindig remuxolja az MP3-hangfájlokat", + "LabelCustomTagDelimiters": "Egyéni címkeelválasztó", + "LabelCustomTagDelimitersHelp": "A címkék elválasztójaként kezelendő karakterek.", + "LabelDuration": "Hossz", + "LabelAudioTagSettings": "Hangcímke-beállítások", + "LabelDelimiterWhitelist": "Elválasztók engedélyezési listája", + "LabelDelimiterWhitelistHelp": "Elemek, melyek nem lesznek figyelembe véve a címkefelosztásnál. Soronként egy elem.", + "LabelDisableVbrAudioEncoding": "Változó bitsebességű hangfelvétel letiltása" } From c2c5228c06a55a8b946de5741d4f9e1c30f1c837 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:27:46 +0300 Subject: [PATCH 184/186] Update playbackmanager.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/components/playback/playbackmanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index c85b2fd579..ffec28ab6b 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -22,7 +22,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; -import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/index.js'; +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind.js'; const UNLIMITED_ITEMS = -1; From 07316cf870948483bd740a147b222282d2ab4818 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:19:38 +0300 Subject: [PATCH 185/186] Update playbackmanager.js Co-authored-by: Bill Thornton --- src/components/playback/playbackmanager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index ffec28ab6b..a036008033 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2576,7 +2576,7 @@ export class PlaybackManager { const apiClient = ServerConnections.getApiClient(item.ServerId); let mediaSourceId; - const isLiveTv = [BaseItemKind.TvChannel, BaseItemKind.Channel, BaseItemKind.LiveTvChannel].includes(item.Type); + const isLiveTv = [BaseItemKind.TvChannel, BaseItemKind.LiveTvChannel].includes(item.Type); if (!isLiveTv) { mediaSourceId = playOptions.mediaSourceId || item.Id; From 2ca5a60e90384b70b15d1f9e50927e938ccd6ed8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:46:31 +0000 Subject: [PATCH 186/186] Update dependency @jellyfin/sdk to v0.0.0-unstable.202410080502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 355a5821d3..16cb15f5ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410020501", + "@jellyfin/sdk": "0.0.0-unstable.202410080502", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0", @@ -5068,9 +5068,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202410020501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410020501.tgz", - "integrity": "sha512-Tl+bE4GoGDf5qmzYiauNLFclAYF4cPFVX3HldKl/KuwEarzRdQfudGNFCu0KmDbJGiZ6HtDlec6LoUaYeXmvng==", + "version": "0.0.0-unstable.202410080502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410080502.tgz", + "integrity": "sha512-GJx92FQUByJSWtVwuegWNJLop8g8PdQxcs1ucZuSNHZD0FT7EK92gnEf/N80Wj7ef9zFrWnWQgu+Hn4K9r11jg==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -29306,9 +29306,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202410020501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410020501.tgz", - "integrity": "sha512-Tl+bE4GoGDf5qmzYiauNLFclAYF4cPFVX3HldKl/KuwEarzRdQfudGNFCu0KmDbJGiZ6HtDlec6LoUaYeXmvng==", + "version": "0.0.0-unstable.202410080502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202410080502.tgz", + "integrity": "sha512-GJx92FQUByJSWtVwuegWNJLop8g8PdQxcs1ucZuSNHZD0FT7EK92gnEf/N80Wj7ef9zFrWnWQgu+Hn4K9r11jg==", "requires": {} }, "@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index fb62f4be96..56239095fe 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@fontsource/noto-sans-sc": "5.1.0", "@fontsource/noto-sans-tc": "5.1.0", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202410020501", + "@jellyfin/sdk": "0.0.0-unstable.202410080502", "@mui/icons-material": "5.16.7", "@mui/material": "5.16.7", "@mui/x-date-pickers": "7.18.0",