Răsfoiți Sursa

Merge branch 'jellyfin:master' into master

Negulici-R. Barnabas 3 ani în urmă
părinte
comite
5121baa9e8

+ 1 - 1
Emby.Server.Implementations/Emby.Server.Implementations.csproj

@@ -29,7 +29,7 @@
     <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
     <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.6" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.7" />
     <PackageReference Include="Mono.Nat" Version="3.0.3" />
     <PackageReference Include="prometheus-net.DotNetRuntime" Version="4.2.4" />
     <PackageReference Include="sharpcompress" Version="0.32.1" />

+ 12 - 12
Emby.Server.Implementations/Localization/Core/fr.json

@@ -5,7 +5,7 @@
     "Artists": "Artistes",
     "AuthenticationSucceededWithUserName": "{0} authentifié avec succès",
     "Books": "Livres",
-    "CameraImageUploadedFrom": "Une photo a été chargée depuis {0}",
+    "CameraImageUploadedFrom": "Une photo a été téléversée depuis {0}",
     "Channels": "Chaînes",
     "ChapterNameValue": "Chapitre {0}",
     "Collections": "Collections",
@@ -42,13 +42,13 @@
     "MusicVideos": "Clips musicaux",
     "NameInstallFailed": "{0} échec de l'installation",
     "NameSeasonNumber": "Saison {0}",
-    "NameSeasonUnknown": "Saison Inconnue",
+    "NameSeasonUnknown": "Saison inconnue",
     "NewVersionIsAvailable": "Une nouvelle version de Jellyfin Serveur est disponible au téléchargement.",
     "NotificationOptionApplicationUpdateAvailable": "Mise à jour de l'application disponible",
     "NotificationOptionApplicationUpdateInstalled": "Mise à jour de l'application installée",
     "NotificationOptionAudioPlayback": "Lecture audio démarrée",
     "NotificationOptionAudioPlaybackStopped": "Lecture audio arrêtée",
-    "NotificationOptionCameraImageUploaded": "L'image de l'appareil photo a été transférée",
+    "NotificationOptionCameraImageUploaded": "L'image de l'appareil photo a été téléversée",
     "NotificationOptionInstallationFailed": "Échec de l'installation",
     "NotificationOptionNewLibraryContent": "Nouveau contenu ajouté",
     "NotificationOptionPluginError": "Erreur d'extension",
@@ -93,33 +93,33 @@
     "ValueSpecialEpisodeName": "Spécial - {0}",
     "VersionNumber": "Version {0}",
     "TasksChannelsCategory": "Chaînes en ligne",
-    "TaskDownloadMissingSubtitlesDescription": "Recherche les sous-titres manquants sur internet en se basant sur la configuration des métadonnées.",
+    "TaskDownloadMissingSubtitlesDescription": "Recherche les sous-titres manquants sur Internet en se basant sur la configuration des métadonnées.",
     "TaskDownloadMissingSubtitles": "Télécharger les sous-titres manquants",
-    "TaskRefreshChannelsDescription": "Rafraîchit les informations des chaînes en ligne.",
-    "TaskRefreshChannels": "Rafraîchir les chaînes",
+    "TaskRefreshChannelsDescription": "Actualise les informations des chaînes en ligne.",
+    "TaskRefreshChannels": "Actualiser les chaînes",
     "TaskCleanTranscodeDescription": "Supprime les fichiers transcodés de plus d'un jour.",
-    "TaskCleanTranscode": "Nettoyer les dossier des transcodages",
+    "TaskCleanTranscode": "Nettoyer le dossier des transcodages",
     "TaskUpdatePluginsDescription": "Télécharge et installe les mises à jours des extensions configurées pour être mises à jour automatiquement.",
     "TaskUpdatePlugins": "Mettre à jour les extensions",
-    "TaskRefreshPeopleDescription": "Met à jour les métadonnées pour les acteurs et réalisateurs dans votre bibliothèque.",
-    "TaskRefreshPeople": "Rafraîchir les acteurs",
+    "TaskRefreshPeopleDescription": "Met à jour les métadonnées pour les acteurs et réalisateurs dans votre médiathèque.",
+    "TaskRefreshPeople": "Actualiser les acteurs",
     "TaskCleanLogsDescription": "Supprime les journaux de plus de {0} jours.",
     "TaskCleanLogs": "Nettoyer le répertoire des journaux",
-    "TaskRefreshLibraryDescription": "Scanne votre médiathèque pour trouver les nouveaux fichiers et rafraîchit les métadonnées.",
+    "TaskRefreshLibraryDescription": "Scanne votre médiathèque pour trouver les nouveaux fichiers et actualise les métadonnées.",
     "TaskRefreshLibrary": "Scanner la médiathèque",
     "TaskRefreshChapterImagesDescription": "Crée des vignettes pour les vidéos ayant des chapitres.",
     "TaskRefreshChapterImages": "Extraire les images de chapitre",
     "TaskCleanCacheDescription": "Supprime les fichiers de cache dont le système n'a plus besoin.",
     "TaskCleanCache": "Vider le répertoire cache",
     "TasksApplicationCategory": "Application",
-    "TasksLibraryCategory": "Bibliothèque",
+    "TasksLibraryCategory": "Médiathèque",
     "TasksMaintenanceCategory": "Maintenance",
     "TaskCleanActivityLogDescription": "Supprime les entrées du journal d'activité antérieures à l'âge configuré.",
     "TaskCleanActivityLog": "Nettoyer le journal d'activité",
     "Undefined": "Non défini",
     "Forced": "Forcé",
     "Default": "Par défaut",
-    "TaskOptimizeDatabaseDescription": "Réduit les espaces vides ou inutiles et compacte la base de données. Utiliser cette fonction après une mise à jour de la bibliothèque ou toute autre modification de la base de données peut améliorer les performances du serveur.",
+    "TaskOptimizeDatabaseDescription": "Réduit les espaces vides ou inutiles et compacte la base de données. Utiliser cette fonction après une mise à jour de la médiathèque ou toute autre modification de la base de données peut améliorer les performances du serveur.",
     "TaskOptimizeDatabase": "Optimiser la base de données",
     "TaskKeyframeExtractorDescription": "Extrait les images clés des fichiers vidéo pour créer des listes de lecture HLS plus précises. Cette tâche peut durer très longtemps.",
     "TaskKeyframeExtractor": "Extracteur d'image clé",

+ 12 - 9
Jellyfin.Api/Controllers/UserController.cs

@@ -282,16 +282,19 @@ namespace Jellyfin.Api.Controllers
             }
             else
             {
-                var success = await _userManager.AuthenticateUser(
-                    user.Username,
-                    request.CurrentPw,
-                    request.CurrentPw,
-                    HttpContext.GetNormalizedRemoteIp().ToString(),
-                    false).ConfigureAwait(false);
-
-                if (success == null)
+                if (!HttpContext.User.IsInRole(UserRoles.Administrator))
                 {
-                    return StatusCode(StatusCodes.Status403Forbidden, "Invalid user or password entered.");
+                    var success = await _userManager.AuthenticateUser(
+                        user.Username,
+                        request.CurrentPw,
+                        request.CurrentPw,
+                        HttpContext.GetNormalizedRemoteIp().ToString(),
+                        false).ConfigureAwait(false);
+
+                    if (success == null)
+                    {
+                        return StatusCode(StatusCodes.Status403Forbidden, "Invalid user or password entered.");
+                    }
                 }
 
                 await _userManager.ChangePassword(user, request.NewPw).ConfigureAwait(false);

+ 1 - 1
Jellyfin.Api/Jellyfin.Api.csproj

@@ -17,7 +17,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.6" />
+    <PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.7" />
     <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
     <PackageReference Include="Swashbuckle.AspNetCore.ReDoc" Version="6.3.1" />

+ 2 - 2
Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj

@@ -18,8 +18,8 @@
   <ItemGroup>
     <PackageReference Include="BlurHashSharp" Version="1.2.0" />
     <PackageReference Include="BlurHashSharp.SkiaSharp" Version="1.2.0" />
-    <PackageReference Include="SkiaSharp" Version="2.88.1-preview.71" />
-    <PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.1-preview.71" />
+    <PackageReference Include="SkiaSharp" Version="2.88.1-preview.79" />
+    <PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.1-preview.79" />
     <PackageReference Include="SkiaSharp.Svg" Version="1.60.0" />
   </ItemGroup>
 

+ 4 - 4
Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj

@@ -27,13 +27,13 @@
 
   <ItemGroup>
     <PackageReference Include="System.Linq.Async" Version="6.0.1" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.6" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.6" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.6">
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.7" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.7" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.7">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.6">
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.7">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 2 - 2
Jellyfin.Server/Jellyfin.Server.csproj

@@ -37,8 +37,8 @@
     <PackageReference Include="CommandLineParser" Version="2.9.1" />
     <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
-    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.6" />
-    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.6" />
+    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.7" />
+    <PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.7" />
     <PackageReference Include="prometheus-net" Version="6.0.0" />
     <PackageReference Include="prometheus-net.AspNetCore" Version="6.0.0" />
     <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />

+ 4 - 1
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -1713,6 +1713,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
             // Can't stream copy if we're burning in subtitles
             if (request.SubtitleStreamIndex.HasValue
+                && request.SubtitleStreamIndex.Value >= 0
                 && state.SubtitleDeliveryMethod == SubtitleDeliveryMethod.Encode)
             {
                 return false;
@@ -1760,7 +1761,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             }
 
             var requestedRangeTypes = state.GetRequestedRangeTypes(videoStream.Codec);
-            if (requestedProfiles.Length > 0)
+            if (requestedRangeTypes.Length > 0)
             {
                 if (string.IsNullOrEmpty(videoStream.VideoRangeType))
                 {
@@ -2026,6 +2027,8 @@ namespace MediaBrowser.Controller.MediaEncoding
             {
                 if (string.Equals(audioCodec, "aac", StringComparison.OrdinalIgnoreCase)
                     || string.Equals(audioCodec, "mp3", StringComparison.OrdinalIgnoreCase)
+                    || string.Equals(audioCodec, "opus", StringComparison.OrdinalIgnoreCase)
+                    || string.Equals(audioCodec, "vorbis", StringComparison.OrdinalIgnoreCase)
                     || string.Equals(audioCodec, "ac3", StringComparison.OrdinalIgnoreCase)
                     || string.Equals(audioCodec, "eac3", StringComparison.OrdinalIgnoreCase))
                 {

+ 1 - 1
MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj

@@ -30,7 +30,7 @@
     <PackageReference Include="libse" Version="3.6.5" />
     <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
     <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
-    <PackageReference Include="UTF.Unknown" Version="2.5.0" />
+    <PackageReference Include="UTF.Unknown" Version="2.5.1" />
   </ItemGroup>
 
   <!-- Code Analyzers-->

+ 13 - 6
MediaBrowser.Model/Entities/MediaStream.cs

@@ -588,15 +588,22 @@ namespace MediaBrowser.Model.Entities
 
             return Width switch
             {
-                <= 720 when Height <= 480 => IsInterlaced ? "480i" : "480p",
-                // 720x576 (PAL) (768 when rescaled for square pixels)
-                <= 768 when Height <= 576 => IsInterlaced ? "576i" : "576p",
-                // 960x540 (sometimes 544 which is multiple of 16)
+                // 256x144 (16:9 square pixel format)
+                <= 256 when Height <= 144 => IsInterlaced ? "144i" : "144p",
+                // 426x240 (16:9 square pixel format)
+                <= 426 when Height <= 240 => IsInterlaced ? "240i" : "240p",
+                // 640x360 (16:9 square pixel format)
+                <= 640 when Height <= 360 => IsInterlaced ? "360i" : "360p",
+                // 854x480 (16:9 square pixel format)
+                <= 854 when Height <= 480 => IsInterlaced ? "480i" : "480p",
+                // 960x544 (16:9 square pixel format)
                 <= 960 when Height <= 544 => IsInterlaced ? "540i" : "540p",
+                // 1024x576 (16:9 square pixel format)
+                <= 1024 when Height <= 576 => IsInterlaced ? "576i" : "576p",
                 // 1280x720
                 <= 1280 when Height <= 962 => IsInterlaced ? "720i" : "720p",
-                // 1920x1080
-                <= 1920 when Height <= 1440 => IsInterlaced ? "1080i" : "1080p",
+                // 2560x1080 (FHD ultra wide 21:9) using 1440px width to accomodate WQHD
+                <= 2560 when Height <= 1440 => IsInterlaced ? "1080i" : "1080p",
                 // 4K
                 <= 4096 when Height <= 3072 => "4K",
                 // 8K

+ 1 - 1
deployment/Dockerfile.centos.amd64

@@ -13,7 +13,7 @@ RUN yum update -yq \
   && yum install -yq @buildsys-build rpmdevtools yum-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel git wget
 
 # Install DotNET SDK
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/77d472e5-194c-421e-992d-e4ca1d08e6cc/56c61ac303ddf1b12026151f4f000a2b/dotnet-sdk-6.0.301-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/0e83f50a-0619-45e6-8f16-dc4f41d1bb16/e0de908b2f070ef9e7e3b6ddea9d268c/dotnet-sdk-6.0.302-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.fedora.amd64

@@ -12,7 +12,7 @@ RUN dnf update -yq \
   && dnf install -yq @buildsys-build rpmdevtools git dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel systemd wget make
 
 # Install DotNET SDK
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/77d472e5-194c-421e-992d-e4ca1d08e6cc/56c61ac303ddf1b12026151f4f000a2b/dotnet-sdk-6.0.301-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/0e83f50a-0619-45e6-8f16-dc4f41d1bb16/e0de908b2f070ef9e7e3b6ddea9d268c/dotnet-sdk-6.0.302-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.ubuntu.amd64

@@ -17,7 +17,7 @@ RUN apt-get update -yqq \
     libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
 
 # Install dotnet repository
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/77d472e5-194c-421e-992d-e4ca1d08e6cc/56c61ac303ddf1b12026151f4f000a2b/dotnet-sdk-6.0.301-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/0e83f50a-0619-45e6-8f16-dc4f41d1bb16/e0de908b2f070ef9e7e3b6ddea9d268c/dotnet-sdk-6.0.302-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.ubuntu.arm64

@@ -16,7 +16,7 @@ RUN apt-get update -yqq \
     mmv build-essential lsb-release
 
 # Install dotnet repository
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/77d472e5-194c-421e-992d-e4ca1d08e6cc/56c61ac303ddf1b12026151f4f000a2b/dotnet-sdk-6.0.301-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/0e83f50a-0619-45e6-8f16-dc4f41d1bb16/e0de908b2f070ef9e7e3b6ddea9d268c/dotnet-sdk-6.0.302-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
deployment/Dockerfile.ubuntu.armhf

@@ -16,7 +16,7 @@ RUN apt-get update -yqq \
     mmv build-essential lsb-release
 
 # Install dotnet repository
-RUN wget -q https://download.visualstudio.microsoft.com/download/pr/77d472e5-194c-421e-992d-e4ca1d08e6cc/56c61ac303ddf1b12026151f4f000a2b/dotnet-sdk-6.0.301-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+RUN wget -q https://download.visualstudio.microsoft.com/download/pr/0e83f50a-0619-45e6-8f16-dc4f41d1bb16/e0de908b2f070ef9e7e3b6ddea9d268c/dotnet-sdk-6.0.302-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
   && mkdir -p dotnet-sdk \
   && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
   && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet

+ 1 - 1
tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj

@@ -15,7 +15,7 @@
     <PackageReference Include="AutoFixture" Version="4.17.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
     <PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.6" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.7" />
     <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
     <PackageReference Include="xunit" Version="2.4.1" />

+ 29 - 11
tests/Jellyfin.Model.Tests/Entities/MediaStreamTests.cs

@@ -109,26 +109,37 @@ namespace Jellyfin.Model.Tests.Entities
         [InlineData(null, null, false, null)]
         [InlineData(null, 0, false, null)]
         [InlineData(0, null, false, null)]
-        [InlineData(640, 480, false, "480p")]
-        [InlineData(640, 480, true, "480i")]
-        [InlineData(720, 576, false, "576p")]
-        [InlineData(720, 576, true, "576i")]
+        [InlineData(256, 144, false, "144p")]
+        [InlineData(256, 144, true, "144i")]
+        [InlineData(426, 240, false, "240p")]
+        [InlineData(426, 240, true, "240i")]
+        [InlineData(640, 360, false, "360p")]
+        [InlineData(640, 360, true, "360i")]
+        [InlineData(854, 480, false, "480p")]
+        [InlineData(854, 480, true, "480i")]
         [InlineData(960, 540, false, "540p")]
         [InlineData(960, 540, true, "540i")]
+        [InlineData(1024, 576, false, "576p")]
+        [InlineData(1024, 576, true, "576i")]
         [InlineData(1280, 720, false, "720p")]
         [InlineData(1280, 720, true, "720i")]
-        [InlineData(1920, 1080, false, "1080p")]
-        [InlineData(1920, 1080, true, "1080i")]
+        [InlineData(2560, 1080, false, "1080p")]
+        [InlineData(2560, 1080, true, "1080i")]
         [InlineData(4096, 3072, false, "4K")]
         [InlineData(8192, 6144, false, "8K")]
         [InlineData(512, 384, false, "480p")]
-        [InlineData(576, 336, false, "480p")]
-        [InlineData(624, 352, false, "480p")]
-        [InlineData(640, 352, false, "480p")]
+        [InlineData(576, 336, false, "360p")]
+        [InlineData(576, 336, true, "360i")]
+        [InlineData(624, 352, false, "360p")]
+        [InlineData(640, 352, false, "360p")]
+        [InlineData(640, 480, false, "480p")]
         [InlineData(704, 396, false, "480p")]
         [InlineData(720, 404, false, "480p")]
         [InlineData(720, 480, false, "480p")]
+        [InlineData(720, 576, false, "576p")]
         [InlineData(768, 576, false, "576p")]
+        [InlineData(960, 544, false, "540p")]
+        [InlineData(960, 544, true, "540i")]
         [InlineData(960, 720, false, "720p")]
         [InlineData(1280, 528, false, "720p")]
         [InlineData(1280, 532, false, "720p")]
@@ -140,6 +151,11 @@ namespace Jellyfin.Model.Tests.Entities
         [InlineData(1280, 696, false, "720p")]
         [InlineData(1280, 716, false, "720p")]
         [InlineData(1280, 718, false, "720p")]
+        [InlineData(1920, 1080, false, "1080p")]
+        [InlineData(1440, 1070, false, "1080p")]
+        [InlineData(1440, 1072, false, "1080p")]
+        [InlineData(1440, 1080, false, "1080p")]
+        [InlineData(1440, 1440, false, "1080p")]
         [InlineData(1912, 792, false, "1080p")]
         [InlineData(1916, 1076, false, "1080p")]
         [InlineData(1918, 1080, false, "1080p")]
@@ -153,14 +169,16 @@ namespace Jellyfin.Model.Tests.Entities
         [InlineData(1920, 960, false, "1080p")]
         [InlineData(1920, 1024, false, "1080p")]
         [InlineData(1920, 1040, false, "1080p")]
+        [InlineData(1920, 1070, false, "1080p")]
         [InlineData(1920, 1072, false, "1080p")]
-        [InlineData(1440, 1072, false, "1080p")]
-        [InlineData(1440, 1080, false, "1080p")]
+        [InlineData(1920, 1440, false, "1080p")]
         [InlineData(3840, 1600, false, "4K")]
         [InlineData(3840, 1606, false, "4K")]
         [InlineData(3840, 1608, false, "4K")]
         [InlineData(3840, 2160, false, "4K")]
+        [InlineData(4090, 3070, false, "4K")]
         [InlineData(7680, 4320, false, "8K")]
+        [InlineData(8190, 6140, false, "8K")]
         public void GetResolutionText_Valid(int? width, int? height, bool interlaced, string expected)
         {
             var mediaStream = new MediaStream()

+ 1 - 1
tests/Jellyfin.Server.Integration.Tests/Jellyfin.Server.Integration.Tests.csproj

@@ -9,7 +9,7 @@
     <PackageReference Include="AutoFixture" Version="4.17.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
     <PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.6" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.7" />
     <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
     <PackageReference Include="xunit" Version="2.4.1" />

+ 1 - 1
tests/Jellyfin.Server.Tests/Jellyfin.Server.Tests.csproj

@@ -10,7 +10,7 @@
     <PackageReference Include="AutoFixture" Version="4.17.0" />
     <PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
     <PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.6" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.7" />
     <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
     <PackageReference Include="xunit" Version="2.4.1" />