aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci-codeql-analysis.yml6
-rw-r--r--.github/workflows/ci-tests.yml2
-rw-r--r--.github/workflows/commands.yml2
-rw-r--r--.github/workflows/issue-template-check.yml2
-rw-r--r--Directory.Packages.props2
-rw-r--r--Emby.Server.Implementations/Localization/Core/et.json14
-rw-r--r--Emby.Server.Implementations/Localization/Core/gl.json132
-rw-r--r--Emby.Server.Implementations/Localization/Core/ur.json15
-rw-r--r--Emby.Server.Implementations/Localization/Core/ur_PK.json6
-rw-r--r--Jellyfin.Server.Implementations/Item/BaseItemRepository.cs30
-rw-r--r--MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs2
-rw-r--r--MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs2
12 files changed, 116 insertions, 99 deletions
diff --git a/.github/workflows/ci-codeql-analysis.yml b/.github/workflows/ci-codeql-analysis.yml
index 6bbbbd2a8..4dd240229 100644
--- a/.github/workflows/ci-codeql-analysis.yml
+++ b/.github/workflows/ci-codeql-analysis.yml
@@ -27,11 +27,11 @@ jobs:
dotnet-version: '9.0.x'
- name: Initialize CodeQL
- uses: github/codeql-action/init@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
+ uses: github/codeql-action/init@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8
with:
languages: ${{ matrix.language }}
queries: +security-extended
- name: Autobuild
- uses: github/codeql-action/autobuild@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
+ uses: github/codeql-action/autobuild@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6
+ uses: github/codeql-action/analyze@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8
diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml
index f2cf967e9..846835491 100644
--- a/.github/workflows/ci-tests.yml
+++ b/.github/workflows/ci-tests.yml
@@ -35,7 +35,7 @@ jobs:
--verbosity minimal
- name: Merge code coverage results
- uses: danielpalme/ReportGenerator-GitHub-Action@1978db745da4a573ca4baa2d0f67175df51a148c # v5.4.16
+ uses: danielpalme/ReportGenerator-GitHub-Action@9870ed167742d546b99962ff815fcc1098355ed8 # v5.4.17
with:
reports: "**/coverage.cobertura.xml"
targetdir: "merged/"
diff --git a/.github/workflows/commands.yml b/.github/workflows/commands.yml
index a2e37e7d5..ba12d4747 100644
--- a/.github/workflows/commands.yml
+++ b/.github/workflows/commands.yml
@@ -46,7 +46,7 @@ jobs:
- name: install python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
- python-version: '3.13'
+ python-version: '3.14'
cache: 'pip'
- name: install python packages
run: pip install -r rename/requirements.txt
diff --git a/.github/workflows/issue-template-check.yml b/.github/workflows/issue-template-check.yml
index 0c4115888..b49647d33 100644
--- a/.github/workflows/issue-template-check.yml
+++ b/.github/workflows/issue-template-check.yml
@@ -16,7 +16,7 @@ jobs:
- name: install python
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
- python-version: '3.13'
+ python-version: '3.14'
cache: 'pip'
- name: install python packages
run: pip install -r main-repo-triage/requirements.txt
diff --git a/Directory.Packages.props b/Directory.Packages.props
index d387cca6d..857b1a7ef 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -4,7 +4,7 @@
</PropertyGroup>
<!-- Run "dotnet list package (dash,dash)outdated" to see the latest versions of each package.-->
<ItemGroup Label="Package Dependencies">
- <PackageVersion Include="AsyncKeyedLock" Version="7.1.6" />
+ <PackageVersion Include="AsyncKeyedLock" Version="7.1.7" />
<PackageVersion Include="AutoFixture.AutoMoq" Version="4.18.1" />
<PackageVersion Include="AutoFixture.Xunit2" Version="4.18.1" />
<PackageVersion Include="AutoFixture" Version="4.18.1" />
diff --git a/Emby.Server.Implementations/Localization/Core/et.json b/Emby.Server.Implementations/Localization/Core/et.json
index 486e62dfd..b81ae459a 100644
--- a/Emby.Server.Implementations/Localization/Core/et.json
+++ b/Emby.Server.Implementations/Localization/Core/et.json
@@ -41,7 +41,7 @@
"StartupEmbyServerIsLoading": "Jellyfin server laadib. Proovi varsti uuesti.",
"User": "Kasutaja",
"Undefined": "Määratlemata",
- "TvShows": "Seriaalid",
+ "TvShows": "Sarjad",
"System": "Süsteem",
"Sync": "Sünkrooni",
"Songs": "Laulud",
@@ -123,11 +123,11 @@
"External": "Väline",
"HearingImpaired": "Kuulmispuudega",
"TaskKeyframeExtractorDescription": "Eraldab videofailidest võtmekaadreid, et luua täpsemaid HLS-i esitusloendeid. See ülesanne võib kesta pikka aega.",
- "TaskKeyframeExtractor": "Võtmekaadri ekstraktor",
- "TaskRefreshTrickplayImages": "Loo eelvaate pildid",
- "TaskRefreshTrickplayImagesDescription": "Loob eelvaated videotele, kus lubatud.",
- "TaskAudioNormalization": "Heli Normaliseerimine",
- "TaskAudioNormalizationDescription": "Skaneerib faile heli normaliseerimise andmete jaoks.",
+ "TaskKeyframeExtractor": "Võtmekaadrite eraldamine",
+ "TaskRefreshTrickplayImages": "Loo trickplay pildid",
+ "TaskRefreshTrickplayImagesDescription": "Loob trickplay eelvaated videotele lubatud meediakogudes.",
+ "TaskAudioNormalization": "Normaliseeri heli",
+ "TaskAudioNormalizationDescription": "Otsib failidest helitugevuse normaliseerimise teavet.",
"TaskCleanCollectionsAndPlaylistsDescription": "Eemaldab kogumikest ja esitusloenditest asjad, mida enam ei eksisteeri.",
"TaskCleanCollectionsAndPlaylists": "Puhasta kogumikud ja esitusloendid",
"TaskDownloadMissingLyrics": "Lae alla puuduolev lüürika",
@@ -135,7 +135,7 @@
"TaskMoveTrickplayImagesDescription": "Liigutab trickplay pildid meediakogu sätete kohaselt.",
"TaskExtractMediaSegments": "Meediasegmentide skaneerimine",
"TaskExtractMediaSegmentsDescription": "Eraldab või võtab meediasegmendid MediaSegment'i lubavatest pluginatest.",
- "TaskMoveTrickplayImages": "Migreeri trickplay piltide asukoht",
+ "TaskMoveTrickplayImages": "Muuda trickplay piltide asukoht",
"CleanupUserDataTask": "Kasutajaandmete puhastamise ülesanne",
"CleanupUserDataTaskDescription": "Puhastab kõik kasutajaandmed (vaatamise olek, lemmikute olek jne) meediast, mis pole enam vähemalt 90 päeva saadaval olnud."
}
diff --git a/Emby.Server.Implementations/Localization/Core/gl.json b/Emby.Server.Implementations/Localization/Core/gl.json
index 0e7c9dc3a..b3f137feb 100644
--- a/Emby.Server.Implementations/Localization/Core/gl.json
+++ b/Emby.Server.Implementations/Localization/Core/gl.json
@@ -1,74 +1,74 @@
{
- "Albums": "Álbumes",
+ "Albums": "Álbums",
"Collections": "Coleccións",
"ChapterNameValue": "Capítulo {0}",
"Channels": "Canles",
- "CameraImageUploadedFrom": "Cargouse unha nova imaxe da cámara desde {0}",
+ "CameraImageUploadedFrom": "Cargouse unha nova imaxe de cámara dende {0}",
"Books": "Libros",
"AuthenticationSucceededWithUserName": "{0} autenticouse correctamente",
"Artists": "Artistas",
- "Application": "Aplicativo",
- "NotificationOptionServerRestartRequired": "Necesario un reinicio do servidor",
- "NotificationOptionPluginUpdateInstalled": "Actualización do Plugin instalada",
+ "Application": "Aplicación",
+ "NotificationOptionServerRestartRequired": "Necesario o reinicio do servidor",
+ "NotificationOptionPluginUpdateInstalled": "Actualización do plugin instalada",
"NotificationOptionPluginUninstalled": "Plugin desinstalado",
"NotificationOptionPluginInstalled": "Plugin instalado",
- "NotificationOptionPluginError": "Fallo do Plugin",
+ "NotificationOptionPluginError": "Fallo do plugin",
"NotificationOptionNewLibraryContent": "Novo contido engadido",
"NotificationOptionInstallationFailed": "Fallo na instalación",
- "NotificationOptionCameraImageUploaded": "Imaxe da cámara subida",
- "NotificationOptionAudioPlaybackStopped": "Reproducción de audio parada",
+ "NotificationOptionCameraImageUploaded": "Imaxe da cámara cargada",
+ "NotificationOptionAudioPlaybackStopped": "Reproducción de audio detida",
"NotificationOptionAudioPlayback": "Reproducción de audio comezada",
"NotificationOptionApplicationUpdateInstalled": "Actualización da aplicación instalada",
"NotificationOptionApplicationUpdateAvailable": "Actualización da aplicación dispoñible",
- "NewVersionIsAvailable": "Unha nova versión do Servidor Jellyfin está dispoñible para descarga.",
+ "NewVersionIsAvailable": "Nova versión do Servidor Jellyfin dispoñible para descargar.",
"NameSeasonUnknown": "Tempada descoñecida",
"NameSeasonNumber": "Tempada {0}",
"NameInstallFailed": "{0} instalación fallida",
- "MusicVideos": "Vídeos Musicais",
+ "MusicVideos": "Vídeos musicais",
"Music": "Música",
"Movies": "Películas",
- "MixedContent": "Contido Mixto",
- "MessageServerConfigurationUpdated": "A configuración do servidor foi actualizada",
- "MessageNamedServerConfigurationUpdatedWithValue": "A sección de configuración {0} do servidor foi actualizada",
- "MessageApplicationUpdatedTo": "O servidor Jellyfin foi actualizado a {0}",
- "MessageApplicationUpdated": "O servidor Jellyfin foi actualizado",
+ "MixedContent": "Contido mixto",
+ "MessageServerConfigurationUpdated": "Actualizouse a configuración do servidor",
+ "MessageNamedServerConfigurationUpdatedWithValue": "Actualizouse a sección de configuración {0} do servidor",
+ "MessageApplicationUpdatedTo": "O servidor Jellyfin actualizouse a {0}",
+ "MessageApplicationUpdated": "O servidor Jellyfin actualizouse",
"Latest": "Último",
- "LabelRunningTimeValue": "Tempo de execución: {0}",
+ "LabelRunningTimeValue": "Tempo en execución: {0}",
"LabelIpAddressValue": "Enderezo IP: {0}",
- "ItemRemovedWithName": "{0} foi eliminado da biblioteca",
- "ItemAddedWithName": "{0} foi engadido a biblioteca",
+ "ItemRemovedWithName": "{0} eliminouse da biblioteca",
+ "ItemAddedWithName": "{0} engadiuse á biblioteca",
"Inherit": "Herdar",
"HomeVideos": "Videos caseiros",
- "HeaderRecordingGroups": "Grupos de Grabación",
+ "HeaderRecordingGroups": "Grupos de grabación",
"HeaderNextUp": "De seguido",
"HeaderLiveTV": "TV en directo",
- "HeaderFavoriteSongs": "Cancións Favoritas",
- "HeaderFavoriteShows": "Series de TV Favoritas",
- "HeaderFavoriteEpisodes": "Episodios Favoritos",
- "HeaderFavoriteArtists": "Artistas Favoritos",
- "HeaderFavoriteAlbums": "Álbunes Favoritos",
+ "HeaderFavoriteSongs": "Cancións favoritas",
+ "HeaderFavoriteShows": "Series de TV favoritas",
+ "HeaderFavoriteEpisodes": "Episodios favoritos",
+ "HeaderFavoriteArtists": "Artistas favoritos",
+ "HeaderFavoriteAlbums": "Álbums favoritos",
"HeaderContinueWatching": "Seguir vendo",
- "HeaderAlbumArtists": "Artistas do Album",
+ "HeaderAlbumArtists": "Artistas do álbum",
"Genres": "Xéneros",
"Forced": "Forzado",
"Folders": "Cartafoles",
"Favorites": "Favoritos",
- "FailedLoginAttemptWithUserName": "Intento de incio de sesión fallido {0}",
+ "FailedLoginAttemptWithUserName": "Fallo de intento de inicio de sesión dende {0}",
"DeviceOnlineWithName": "{0} conectouse",
"DeviceOfflineWithName": "{0} desconectouse",
"Default": "Por defecto",
"AppDeviceValues": "Aplicación: {0}, Dispositivo: {1}",
- "TaskCleanLogs": "Limpar Carpeta de Rexistros",
- "TaskCleanActivityLog": "Limpar Rexistro de Actividade",
- "TasksChannelsCategory": "Canáis de Internet",
- "TaskUpdatePlugins": "Actualizar Plugins",
+ "TaskCleanLogs": "Limpar directorio de rexistros",
+ "TaskCleanActivityLog": "Limpar rexistro de actividade",
+ "TasksChannelsCategory": "Canles da Internet",
+ "TaskUpdatePlugins": "Actualizar plugins",
"User": "Usuario",
"Undefined": "Sen definir",
"TvShows": "Programas de TV",
"System": "Sistema",
"Sync": "Sincronizar",
"SubtitleDownloadFailureFromForItem": "Fallou a descarga de subtítulos para {1} dende {0}",
- "StartupEmbyServerIsLoading": "O Servidor Jellyfin está cargando. Por favor, reinténteo en breve.",
+ "StartupEmbyServerIsLoading": "O servidor Jellyfin está cargando. Por favor, ténteo axiña outra vez.",
"Songs": "Cancións",
"Shows": "Programas",
"ServerNameNeedsToBeRestarted": "{0} precisa ser reiniciado",
@@ -85,57 +85,57 @@
"UserDeletedWithName": "O usuario {0} foi borrado",
"UserCreatedWithName": "O usuario {0} foi creado",
"Plugin": "Plugin",
- "NotificationOptionVideoPlaybackStopped": "Reproducción de vídeo parada",
+ "NotificationOptionVideoPlaybackStopped": "Reproducción de vídeo detida",
"NotificationOptionVideoPlayback": "Reproducción de vídeo iniciada",
"NotificationOptionUserLockedOut": "Usuario bloqueado",
"NotificationOptionTaskFailed": "Falla na tarefa axendada",
- "TaskCleanTranscodeDescription": "Borra os arquivos de transcode anteriores a un día.",
- "TaskCleanTranscode": "Limpar Directorio de Transcode",
+ "TaskCleanTranscodeDescription": "Borra os ficheiros de transcodificación de hai más dun día.",
+ "TaskCleanTranscode": "Limpar o directorio de transcodificación",
"UserStoppedPlayingItemWithValues": "{0} rematou de reproducir {1} en {2}",
- "UserStartedPlayingItemWithValues": "{0} está reproducindo {1} en {2}",
- "TaskDownloadMissingSubtitlesDescription": "Busca en internet por subtítulos que faltan baseado na configuración de metadatos.",
+ "UserStartedPlayingItemWithValues": "{0} está a reproducir {1} en {2}",
+ "TaskDownloadMissingSubtitlesDescription": "Procura na internet os subtítulos que faltan segundo a configuración de metadatos.",
"TaskDownloadMissingSubtitles": "Descargar subtítulos que faltan",
- "TaskRefreshChannelsDescription": "Refresca a información do canle de internet.",
- "TaskRefreshChannels": "Refrescar Canles",
- "TaskUpdatePluginsDescription": "Descarga e instala actualizacións para plugins que están configurados para actualizarse automáticamente.",
- "TaskRefreshPeopleDescription": "Actualiza os metadatos dos actores e directores na túa libraría multimedia.",
- "TaskRefreshPeople": "Refrescar Persoas",
- "TaskCleanLogsDescription": "Borra arquivos de rexistro que son mais antigos que {0} días.",
- "TaskRefreshLibraryDescription": "Escanea a tua libraría multimedia buscando novos arquivos e refrescando os metadatos.",
- "TaskRefreshLibrary": "Escanear Libraría Multimedia",
- "TaskRefreshChapterImagesDescription": "Crea previsualizacións para videos que teñen capítulos.",
- "TaskRefreshChapterImages": "Extraer Imaxes dos Capítulos",
+ "TaskRefreshChannelsDescription": "Refresca a información da canle de internet.",
+ "TaskRefreshChannels": "Refrescar canles",
+ "TaskUpdatePluginsDescription": "Descarga e instala actualizacións dos plugins configurados para actualizarse automáticamente.",
+ "TaskRefreshPeopleDescription": "Actualiza os metadatos dos actores e directores na túa biblioteca de medios.",
+ "TaskRefreshPeople": "Refrescar persoas",
+ "TaskCleanLogsDescription": "Borra ficheiros de rexistro con máis de {0} días de antigüidade.",
+ "TaskRefreshLibraryDescription": "Escanea a túa biblioteca de medios á procura de novos ficheiros e refresca os metadatos.",
+ "TaskRefreshLibrary": "Escanear a biblioteca de medios",
+ "TaskRefreshChapterImagesDescription": "Crea miniaturas dos vídeos que teñen capítulos.",
+ "TaskRefreshChapterImages": "Extraer imaxes dos capítulos",
"TaskCleanCacheDescription": "Borra ficheiros da caché que xa non son necesarios para o sistema.",
- "TaskCleanCache": "Limpa Directorio de Caché",
- "TaskCleanActivityLogDescription": "Borra as entradas no rexistro de actividade anteriores á data configurada.",
+ "TaskCleanCache": "Limpar directorio de caché",
+ "TaskCleanActivityLogDescription": "Borra do rexistro de actividade as entradas anteriores á data configurada.",
"TasksApplicationCategory": "Aplicación",
"ValueSpecialEpisodeName": "Especial - {0}",
- "ValueHasBeenAddedToLibrary": "{0} foi engadido a túa libraría multimedia",
- "TasksLibraryCategory": "Libraría",
+ "ValueHasBeenAddedToLibrary": "{0} engadiuse á túa biblioteca de medios",
+ "TasksLibraryCategory": "Biblioteca",
"TasksMaintenanceCategory": "Mantemento",
"VersionNumber": "Versión {0}",
"UserPolicyUpdatedWithName": "A política de usuario foi actualizada para {0}",
"UserPasswordChangedWithName": "Cambiouse o contrasinal para o usuario {0}",
"UserOnlineFromDevice": "{0} está en liña desde {1}",
- "UserOfflineFromDevice": "{0} desconectouse desde {1}",
- "TaskOptimizeDatabaseDescription": "Compacta e libera o espazo libre da base de datos. Executar esta tarefa logo de realizar mudanzas que impliquen modificacións da base de datos ou despois de escanear a biblioteca pode traer mellorías de desempeño.",
+ "UserOfflineFromDevice": "{0} desconectouse dende {1}",
+ "TaskOptimizeDatabaseDescription": "Compacta e libera espazo na base de datos. Executar esta tarefa logo de facer cambios que muden a base de datos ou despois de escanear a biblioteca pode mellorar o rendemento.",
"TaskOptimizeDatabase": "Optimizar base de datos",
- "TaskKeyframeExtractorDescription": "Extrae fragmentos do vídeo para crear listas de reprodución HLS máis precisas. Podería levarlle bastante tempo.",
+ "TaskKeyframeExtractorDescription": "Extrae fotogramas clave dos vídeos para crear listas de reprodución HLS máis precisas. Podería levar moito tempo.",
"External": "Externo",
"HearingImpaired": "Problemas de audición",
- "TaskKeyframeExtractor": "Extractor de fragmentos",
- "TaskAudioNormalization": "Normalización do audio",
- "TaskRefreshTrickplayImagesDescription": "Crea vistas previas de reprodución con truco para vídeos en bibliotecas activadas.",
+ "TaskKeyframeExtractor": "Extractor de fotogramas clave",
+ "TaskAudioNormalization": "Normalización de volume",
+ "TaskRefreshTrickplayImagesDescription": "Crea miniaturas de previsualización para os vídeos nas bibliotecas habilitadas.",
"TaskDownloadMissingLyrics": "Descargar letras que faltan",
- "TaskDownloadMissingLyricsDescription": "Descargas de letras das cancións",
+ "TaskDownloadMissingLyricsDescription": "Descarga as letras das cancións",
"TaskCleanCollectionsAndPlaylists": "Limpar coleccións e listas de reprodución",
- "TaskCleanCollectionsAndPlaylistsDescription": "Elimina elementos de coleccións e listas de reprodución que xa non existen.",
- "TaskExtractMediaSegmentsDescription": "Extrae ou obtén segmentos multimedia de complementos habilitados para o Segmento de medios.",
- "TaskExtractMediaSegments": "Escaneo de segmentos multimedia",
- "TaskMoveTrickplayImages": "Migrar a localización da imaxe de Trickplay",
- "TaskMoveTrickplayImagesDescription": "Move os ficheiros de reprodución con trickplay existentes segundo a configuración da biblioteca.",
- "TaskRefreshTrickplayImages": "Xerar imaxes de Trickplay",
- "TaskAudioNormalizationDescription": "Analiza ficheiros para obter datos de normalización de audio.",
- "CleanupUserDataTask": "Tarefa de limpeza de datos do usuario",
- "CleanupUserDataTaskDescription": "Limpa todos os datos do usuario (Estado de visualización, estado de favorito, etc) da multimedia que leve non presente polo menos durante 90 días."
+ "TaskCleanCollectionsAndPlaylistsDescription": "Quita ítems que xa non existen das coleccións e listas de reprodución.",
+ "TaskExtractMediaSegmentsDescription": "Procura segmentos de medios cos plugins habilitados.",
+ "TaskExtractMediaSegments": "Escaneo de segmentos de medios",
+ "TaskMoveTrickplayImages": "Migrar as miniaturas de previsualización a outra ubicación",
+ "TaskMoveTrickplayImagesDescription": "Move as miniaturas de previsualización segundo a configuración da biblioteca.",
+ "TaskRefreshTrickplayImages": "Xerar miniaturas de previsualización",
+ "TaskAudioNormalizationDescription": "Escanea ficheiros á procura de datos de normalización de volume.",
+ "CleanupUserDataTask": "Tarefa de limpeza de datos dos usuarios",
+ "CleanupUserDataTaskDescription": "Limpa todos os datos do usuario (estado de visualización, de favorito etc.) dos medios ausentes polo menos 90 días."
}
diff --git a/Emby.Server.Implementations/Localization/Core/ur.json b/Emby.Server.Implementations/Localization/Core/ur.json
index 376683041..94d9c8541 100644
--- a/Emby.Server.Implementations/Localization/Core/ur.json
+++ b/Emby.Server.Implementations/Localization/Core/ur.json
@@ -1,3 +1,16 @@
{
- "Books": "کتابیں"
+ "Books": "کتابیں",
+ "AppDeviceValues": "ایپ: {0}، ڈیوائس: {1}",
+ "Albums": "البمز",
+ "Application": "ایپلی کیشن",
+ "Artists": "فنکار",
+ "AuthenticationSucceededWithUserName": "{0} کی کامیابی سے تصدیق ہو چکی ہے",
+ "CameraImageUploadedFrom": "ایک نئی کیمرے کی تصویر {0} سے اپ لوڈ کی گئی ہے",
+ "Channels": "چینلز",
+ "ChapterNameValue": "باب {0}",
+ "Collections": "مجموعے",
+ "Default": "ڈیفالٹ",
+ "DeviceOfflineWithName": "{0} نے رابطہ منقطع کر دیا ہے",
+ "DeviceOnlineWithName": "{0} منسلک ہے",
+ "External": "بیرونی"
}
diff --git a/Emby.Server.Implementations/Localization/Core/ur_PK.json b/Emby.Server.Implementations/Localization/Core/ur_PK.json
index 5d3f19432..f6539adff 100644
--- a/Emby.Server.Implementations/Localization/Core/ur_PK.json
+++ b/Emby.Server.Implementations/Localization/Core/ur_PK.json
@@ -123,5 +123,9 @@
"TaskCleanActivityLogDescription": "تشکیل شدہ عمر سے زیادہ پرانی سرگرمی لاگ اندراجات کو حذف کرتا ہے۔",
"External": "بیرونی",
"HearingImpaired": "قوت سماعت سے محروم",
- "TaskCleanActivityLog": "سرگرمی لاگ کو صاف کریں"
+ "TaskCleanActivityLog": "سرگرمی لاگ کو صاف کریں",
+ "TaskDownloadMissingLyrics": "غائب بول ڈاؤن لوڈ کریں",
+ "TaskDownloadMissingLyricsDescription": "گانے کے غائب بول ڈاؤن لوڈ کریں",
+ "TaskAudioNormalization": "آڈیو نارملائزیشن",
+ "TaskAudioNormalizationDescription": "آڈیو نارملائزیشن ڈیٹا کے لیے فائلوں کو سکین کرتا ہے۔"
}
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index ef444b930..f4396301c 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -1232,8 +1232,20 @@ public sealed class BaseItemRepository
ExcludeItemIds = filter.ExcludeItemIds
};
- var query = TranslateQuery(innerQuery, context, outerQueryFilter)
- .GroupBy(e => e.PresentationUniqueKey);
+ var masterQuery = TranslateQuery(innerQuery, context, outerQueryFilter)
+ .GroupBy(e => e.PresentationUniqueKey)
+ .Select(e => e.FirstOrDefault())
+ .Select(e => e!.Id);
+
+ var query = context.BaseItems
+ .Include(e => e.TrailerTypes)
+ .Include(e => e.Provider)
+ .Include(e => e.LockedFields)
+ .Include(e => e.Images)
+ .AsSingleQuery()
+ .Where(e => masterQuery.Contains(e.Id));
+
+ query = ApplyOrder(query, filter);
var result = new QueryResult<(BaseItemDto, ItemCounts?)>();
if (filter.EnableTotalRecordCount)
@@ -1288,12 +1300,7 @@ public sealed class BaseItemRepository
var resultQuery = query.Select(e => new
{
- item = e.AsQueryable()
- .Include(e => e.TrailerTypes)
- .Include(e => e.Provider)
- .Include(e => e.LockedFields)
- .Include(e => e.Images)
- .AsSingleQuery().First(),
+ item = e,
// TODO: This is bad refactor!
itemCount = new ItemCounts()
{
@@ -1325,13 +1332,6 @@ public sealed class BaseItemRepository
result.Items =
[
.. query
- .Select(e => e.AsQueryable()
- .Include(e => e.TrailerTypes)
- .Include(e => e.Provider)
- .Include(e => e.LockedFields)
- .Include(e => e.Images)
- .AsSingleQuery()
- .First())
.AsEnumerable()
.Where(e => e is not null)
.Select<BaseItemEntity, (BaseItemDto, ItemCounts?)>(e =>
diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs
index 56b0d9bcb..6c1fbbeb7 100644
--- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs
+++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs
@@ -22,7 +22,7 @@ public class AudioDbArtistExternalUrlProvider : IExternalUrlProvider
var baseUrl = "https://www.theaudiodb.com/";
switch (item)
{
- case MusicAlbum:
+ case MusicArtist:
case Person:
yield return baseUrl + $"artist/{externalId}";
break;
diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs
index ee5a597c6..398ec2d20 100644
--- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs
+++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs
@@ -21,7 +21,7 @@ public class MusicBrainzArtistExternalUrlProvider : IExternalUrlProvider
{
switch (item)
{
- case MusicAlbum:
+ case MusicArtist:
case Person:
yield return Plugin.Instance!.Configuration.Server + $"/artist/{externalId}";