diff --git a/Emby.Naming/obj/project.nuget.cache b/Emby.Naming/obj/project.nuget.cache
index 196a06b0..1ef4bf68 100644
--- a/Emby.Naming/obj/project.nuget.cache
+++ b/Emby.Naming/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "M3eEjXrprD8=",
+ "dgSpecHash": "qWdnDCktJdY=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Emby.Naming\\Emby.Naming.csproj",
"expectedPackageFiles": [
diff --git a/Emby.Photos/obj/project.nuget.cache b/Emby.Photos/obj/project.nuget.cache
index 71b5a2a2..db61bb8d 100644
--- a/Emby.Photos/obj/project.nuget.cache
+++ b/Emby.Photos/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "leFWYb0Dcsk=",
+ "dgSpecHash": "DaMoU2oavX0=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Emby.Photos\\Emby.Photos.csproj",
"expectedPackageFiles": [
diff --git a/Emby.Server.Implementations/obj/project.nuget.cache b/Emby.Server.Implementations/obj/project.nuget.cache
index c6a9b337..769321e3 100644
--- a/Emby.Server.Implementations/obj/project.nuget.cache
+++ b/Emby.Server.Implementations/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "ZVA5ePVHqjg=",
+ "dgSpecHash": "CU3WcVn0qXE=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Emby.Server.Implementations\\Emby.Server.Implementations.csproj",
"expectedPackageFiles": [
diff --git a/Jellyfin.Api/obj/project.nuget.cache b/Jellyfin.Api/obj/project.nuget.cache
index fccf3de6..3b4b499f 100644
--- a/Jellyfin.Api/obj/project.nuget.cache
+++ b/Jellyfin.Api/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "4CpeL+8YFHs=",
+ "dgSpecHash": "sEpjYe2J48k=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Api\\Jellyfin.Api.csproj",
"expectedPackageFiles": [
diff --git a/Jellyfin.Data/obj/project.nuget.cache b/Jellyfin.Data/obj/project.nuget.cache
index 0713dade..a35ad6a2 100644
--- a/Jellyfin.Data/obj/project.nuget.cache
+++ b/Jellyfin.Data/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "R6LANlB4kiE=",
+ "dgSpecHash": "V+/rEcS1v1k=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Data\\Jellyfin.Data.csproj",
"expectedPackageFiles": [
diff --git a/Jellyfin.Server.Implementations/obj/project.nuget.cache b/Jellyfin.Server.Implementations/obj/project.nuget.cache
index 4131b5d7..db5a88c8 100644
--- a/Jellyfin.Server.Implementations/obj/project.nuget.cache
+++ b/Jellyfin.Server.Implementations/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "8rGyZK2RqJs=",
+ "dgSpecHash": "2uqnqkg9VpI=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Server.Implementations\\Jellyfin.Server.Implementations.csproj",
"expectedPackageFiles": [
diff --git a/Jellyfin.Server/obj/project.nuget.cache b/Jellyfin.Server/obj/project.nuget.cache
index 09ef9e03..19436215 100644
--- a/Jellyfin.Server/obj/project.nuget.cache
+++ b/Jellyfin.Server/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "WNAhlXOd1t0=",
+ "dgSpecHash": "uvfyRwbCsEk=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\Jellyfin.Server\\Jellyfin.Server.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.Common/obj/project.nuget.cache b/MediaBrowser.Common/obj/project.nuget.cache
index 28073138..a1d2a890 100644
--- a/MediaBrowser.Common/obj/project.nuget.cache
+++ b/MediaBrowser.Common/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "TOGQe6JoQmo=",
+ "dgSpecHash": "JKxQaRKDB/g=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Common\\MediaBrowser.Common.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.Controller/.editorconfig b/MediaBrowser.Controller/.editorconfig
new file mode 100644
index 00000000..dc2cdf37
--- /dev/null
+++ b/MediaBrowser.Controller/.editorconfig
@@ -0,0 +1,27 @@
+# EditorConfig for MediaBrowser.Controller
+# https://EditorConfig.org
+
+root = true
+
+[*.cs]
+# Disable StyleCop rules that are not followed in this legacy project
+dotnet_diagnostic.SA1101.severity = none
+dotnet_diagnostic.SA1200.severity = none
+dotnet_diagnostic.SA1202.severity = none
+dotnet_diagnostic.SA1204.severity = none
+dotnet_diagnostic.SA1309.severity = none
+dotnet_diagnostic.SA1413.severity = none
+dotnet_diagnostic.SA1515.severity = none
+dotnet_diagnostic.SA1512.severity = none
+dotnet_diagnostic.SA1600.severity = none
+dotnet_diagnostic.SA1601.severity = none
+dotnet_diagnostic.SA1602.severity = none
+dotnet_diagnostic.SA1128.severity = none
+dotnet_diagnostic.SA1009.severity = none
+dotnet_diagnostic.SA1108.severity = none
+
+# Disable IDisposableAnalyzers rules
+dotnet_diagnostic.IDISP001.severity = none
+dotnet_diagnostic.IDISP003.severity = none
+dotnet_diagnostic.IDISP007.severity = none
+dotnet_diagnostic.IDISP008.severity = none
diff --git a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs
index 72cec9bf..8b6e1b00 100644
--- a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs
+++ b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.Controller.BaseItemManager
/// Instance of the interface.
public BaseItemManager(IServerConfigurationManager serverConfigurationManager)
{
- _serverConfigurationManager = serverConfigurationManager;
+ this._serverConfigurationManager = serverConfigurationManager;
}
///
@@ -46,7 +46,7 @@ namespace MediaBrowser.Controller.BaseItemManager
return libraryTypeOptions.MetadataFetchers.Contains(name, StringComparison.OrdinalIgnoreCase);
}
- var itemConfig = _serverConfigurationManager.GetMetadataOptionsForType(baseItem.GetType().Name);
+ var itemConfig = this._serverConfigurationManager.GetMetadataOptionsForType(baseItem.GetType().Name);
return itemConfig is null || !itemConfig.DisabledMetadataFetchers.Contains(name, StringComparison.OrdinalIgnoreCase);
}
@@ -70,7 +70,7 @@ namespace MediaBrowser.Controller.BaseItemManager
return libraryTypeOptions.ImageFetchers.Contains(name, StringComparison.OrdinalIgnoreCase);
}
- var itemConfig = _serverConfigurationManager.GetMetadataOptionsForType(baseItem.GetType().Name);
+ var itemConfig = this._serverConfigurationManager.GetMetadataOptionsForType(baseItem.GetType().Name);
return itemConfig is null || !itemConfig.DisabledImageFetchers.Contains(name, StringComparison.OrdinalIgnoreCase);
}
}
diff --git a/MediaBrowser.Controller/Channels/Channel.cs b/MediaBrowser.Controller/Channels/Channel.cs
index 37511329..9fb4b80b 100644
--- a/MediaBrowser.Controller/Channels/Channel.cs
+++ b/MediaBrowser.Controller/Channels/Channel.cs
@@ -27,12 +27,18 @@ namespace MediaBrowser.Controller.Channels
[JsonIgnore]
public override SourceType SourceType => SourceType.Channel;
+ ///
+ /// Determines whether this channel is visible to the specified user.
+ ///
+ /// The user.
+ /// Whether to skip the allowed tags check.
+ /// True if visible; otherwise, false.
public override bool IsVisible(User user, bool skipAllowedTagsCheck = false)
{
var blockedChannelsPreference = user.GetPreferenceValues(PreferenceKind.BlockedChannels);
if (blockedChannelsPreference.Length != 0)
{
- if (blockedChannelsPreference.Contains(Id))
+ if (blockedChannelsPreference.Contains(this.Id))
{
return false;
}
@@ -40,7 +46,7 @@ namespace MediaBrowser.Controller.Channels
else
{
if (!user.HasPermission(PermissionKind.EnableAllChannels)
- && !user.GetPreferenceValues(PreferenceKind.EnabledChannels).Contains(Id))
+ && !user.GetPreferenceValues(PreferenceKind.EnabledChannels).Contains(this.Id))
{
return false;
}
@@ -49,12 +55,17 @@ namespace MediaBrowser.Controller.Channels
return base.IsVisible(user, skipAllowedTagsCheck);
}
+ ///
+ /// Gets items from the channel.
+ ///
+ /// The items query.
+ /// The query result.
protected override QueryResult GetItemsInternal(InternalItemsQuery query)
{
try
{
query.Parent = this;
- query.ChannelIds = new Guid[] { Id };
+ query.ChannelIds = new Guid[] { this.Id };
// Don't blow up here because it could cause parent screens with other content to fail
return ChannelManager.GetChannelItemsInternal(query, new Progress(), CancellationToken.None).GetAwaiter().GetResult();
@@ -66,21 +77,42 @@ namespace MediaBrowser.Controller.Channels
}
}
+ ///
+ /// Gets the internal metadata path for this channel.
+ ///
+ /// The base path.
+ /// The internal metadata path.
protected override string GetInternalMetadataPath(string basePath)
{
- return GetInternalMetadataPath(basePath, Id);
+ return GetInternalMetadataPath(basePath, this.Id);
}
+ ///
+ /// Gets the internal metadata path for a channel with the specified ID.
+ ///
+ /// The base path.
+ /// The channel ID.
+ /// The internal metadata path.
public static string GetInternalMetadataPath(string basePath, Guid id)
{
return System.IO.Path.Combine(basePath, "channels", id.ToString("N", CultureInfo.InvariantCulture), "metadata");
}
+ ///
+ /// Determines whether this channel can be deleted.
+ ///
+ /// True if deletable; otherwise, false.
public override bool CanDelete()
{
return false;
}
+ ///
+ /// Determines whether the channel item is visible to the specified user.
+ ///
+ /// The channel item.
+ /// The user.
+ /// True if visible; otherwise, false.
internal static bool IsChannelVisible(BaseItem channelItem, User user)
{
var channel = ChannelManager.GetChannel(channelItem.ChannelId.ToString(string.Empty));
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs
index bcd469cb..c1a4d276 100644
--- a/MediaBrowser.Controller/Entities/Audio/Audio.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs
@@ -142,7 +142,7 @@ namespace MediaBrowser.Controller.Entities.Audio
public SongInfo GetLookupInfo()
{
- var info = GetItemLookupInfo();
+ var info = this.GetItemLookupInfo();
info.AlbumArtists = AlbumArtists;
info.Album = Album;
diff --git a/MediaBrowser.Controller/Entities/AudioBook.cs b/MediaBrowser.Controller/Entities/AudioBook.cs
index c77d1c68..bc0e6700 100644
--- a/MediaBrowser.Controller/Entities/AudioBook.cs
+++ b/MediaBrowser.Controller/Entities/AudioBook.cs
@@ -31,36 +31,64 @@ namespace MediaBrowser.Controller.Entities
[JsonIgnore]
public Guid SeriesId { get; set; }
+ ///
+ /// Finds the series sort name.
+ ///
+ /// The series sort name.
public string FindSeriesSortName()
{
- return SeriesName;
+ return this.SeriesName;
}
+ ///
+ /// Finds the series name.
+ ///
+ /// The series name.
public string FindSeriesName()
{
- return SeriesName;
+ return this.SeriesName;
}
+ ///
+ /// Finds the series presentation unique key.
+ ///
+ /// The series presentation unique key.
public string FindSeriesPresentationUniqueKey()
{
- return SeriesPresentationUniqueKey;
+ return this.SeriesPresentationUniqueKey;
}
+ ///
+ /// Gets the default primary image aspect ratio.
+ ///
+ /// The default primary image aspect ratio.
public override double GetDefaultPrimaryImageAspectRatio()
{
return 0;
}
+ ///
+ /// Finds the series identifier.
+ ///
+ /// The series identifier.
public Guid FindSeriesId()
{
- return SeriesId;
+ return this.SeriesId;
}
+ ///
+ /// Determines whether this audiobook can be downloaded.
+ ///
+ /// True if downloadable; otherwise, false.
public override bool CanDownload()
{
- return IsFileProtocol;
+ return this.IsFileProtocol;
}
+ ///
+ /// Gets the unrated type for blocking purposes.
+ ///
+ /// The unrated item type.
public override UnratedItem GetBlockUnratedType()
{
return UnratedItem.Book;
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index 39462adf..1f9176f8 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -7263,6 +7263,13 @@ namespace MediaBrowser.Controller.MediaEncoding
return inputModifier;
}
+ ///
+ /// Attaches media source information to the encoding job state.
+ ///
+ /// The encoding job state.
+ /// The encoding options.
+ /// The media source information.
+ /// The requested URL.
public void AttachMediaSourceInfo(
EncodingJobInfo state,
EncodingOptions encodingOptions,
@@ -7327,26 +7334,26 @@ namespace MediaBrowser.Controller.MediaEncoding
requestedUrl = "test." + videoRequest.Container;
}
- videoRequest.VideoCodec = InferVideoCodec(requestedUrl);
+ videoRequest.VideoCodec = this.InferVideoCodec(requestedUrl);
}
- state.VideoStream = GetMediaStream(mediaStreams, videoRequest.VideoStreamIndex, MediaStreamType.Video);
- state.SubtitleStream = GetMediaStream(mediaStreams, videoRequest.SubtitleStreamIndex, MediaStreamType.Subtitle, false);
+ state.VideoStream = this.GetMediaStream(mediaStreams, videoRequest.VideoStreamIndex, MediaStreamType.Video);
+ state.SubtitleStream = this.GetMediaStream(mediaStreams, videoRequest.SubtitleStreamIndex, MediaStreamType.Subtitle, false);
state.SubtitleDeliveryMethod = videoRequest.SubtitleMethod;
- state.AudioStream = GetMediaStream(mediaStreams, videoRequest.AudioStreamIndex, MediaStreamType.Audio);
+ state.AudioStream = this.GetMediaStream(mediaStreams, videoRequest.AudioStreamIndex, MediaStreamType.Audio);
if (state.SubtitleStream is not null && !state.SubtitleStream.IsExternal)
{
state.InternalSubtitleStreamOffset = mediaStreams.Where(i => i.Type == MediaStreamType.Subtitle && !i.IsExternal).ToList().IndexOf(state.SubtitleStream);
}
- EnforceResolutionLimit(state);
+ this.EnforceResolutionLimit(state);
- NormalizeSubtitleEmbed(state);
+ this.NormalizeSubtitleEmbed(state);
}
else
{
- state.AudioStream = GetMediaStream(mediaStreams, null, MediaStreamType.Audio, true);
+ state.AudioStream = this.GetMediaStream(mediaStreams, null, MediaStreamType.Audio, true);
}
state.MediaSource = mediaSource;
@@ -7357,11 +7364,11 @@ namespace MediaBrowser.Controller.MediaEncoding
{
var supportedAudioCodecsList = supportedAudioCodecs.ToList();
- ShiftAudioCodecsIfNeeded(supportedAudioCodecsList, state.AudioStream);
+ this.ShiftAudioCodecsIfNeeded(supportedAudioCodecsList, state.AudioStream);
state.SupportedAudioCodecs = supportedAudioCodecsList.ToArray();
- request.AudioCodec = state.SupportedAudioCodecs.FirstOrDefault(_mediaEncoder.CanEncodeToAudioCodec)
+ request.AudioCodec = state.SupportedAudioCodecs.FirstOrDefault(this._mediaEncoder.CanEncodeToAudioCodec)
?? state.SupportedAudioCodecs.FirstOrDefault();
}
@@ -7370,7 +7377,7 @@ namespace MediaBrowser.Controller.MediaEncoding
{
var supportedVideoCodecsList = supportedVideoCodecs.ToList();
- ShiftVideoCodecsIfNeeded(supportedVideoCodecsList, encodingOptions);
+ this.ShiftVideoCodecsIfNeeded(supportedVideoCodecsList, encodingOptions);
state.SupportedVideoCodecs = supportedVideoCodecsList.ToArray();
@@ -7791,6 +7798,12 @@ namespace MediaBrowser.Controller.MediaEncoding
|| (state.BaseRequest.AlwaysBurnInSubtitleWhenTranscoding && !IsCopyCodec(state.OutputVideoCodec));
}
+ ///
+ /// Gets the video sync option based on the encoder version.
+ ///
+ /// The video sync parameter.
+ /// The encoder version.
+ /// The video sync option string.
public static string GetVideoSyncOption(string videoSync, Version encoderVersion)
{
if (string.IsNullOrEmpty(videoSync))
@@ -7808,7 +7821,7 @@ namespace MediaBrowser.Controller.MediaEncoding
0 => " -fps_mode passthrough",
1 => " -fps_mode cfr",
2 => " -fps_mode vfr",
- _ => string.Empty
+ _ => string.Empty,
};
}
diff --git a/MediaBrowser.Controller/obj/project.nuget.cache b/MediaBrowser.Controller/obj/project.nuget.cache
index 80d5e712..a8132c41 100644
--- a/MediaBrowser.Controller/obj/project.nuget.cache
+++ b/MediaBrowser.Controller/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "oIB4cupu3LM=",
+ "dgSpecHash": "No+LvUzpMog=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Controller\\MediaBrowser.Controller.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.LocalMetadata/obj/project.nuget.cache b/MediaBrowser.LocalMetadata/obj/project.nuget.cache
index 44ace0a6..090e8528 100644
--- a/MediaBrowser.LocalMetadata/obj/project.nuget.cache
+++ b/MediaBrowser.LocalMetadata/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "GeC+ga1Uo2A=",
+ "dgSpecHash": "MUG8U7vEPzE=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.LocalMetadata\\MediaBrowser.LocalMetadata.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.MediaEncoding/obj/project.nuget.cache b/MediaBrowser.MediaEncoding/obj/project.nuget.cache
index 68198fee..7d158cd5 100644
--- a/MediaBrowser.MediaEncoding/obj/project.nuget.cache
+++ b/MediaBrowser.MediaEncoding/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "aQOA3jWvZ/0=",
+ "dgSpecHash": "GTQOs1iNxFU=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.MediaEncoding\\MediaBrowser.MediaEncoding.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.Model/obj/project.nuget.cache b/MediaBrowser.Model/obj/project.nuget.cache
index 1b1cceb6..1ad0211a 100644
--- a/MediaBrowser.Model/obj/project.nuget.cache
+++ b/MediaBrowser.Model/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "3yWrXzucBNg=",
+ "dgSpecHash": "xzRZKMjouOE=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Model\\MediaBrowser.Model.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.Providers/obj/project.nuget.cache b/MediaBrowser.Providers/obj/project.nuget.cache
index 77a580a9..b799ccd6 100644
--- a/MediaBrowser.Providers/obj/project.nuget.cache
+++ b/MediaBrowser.Providers/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "ncCtXCalGV4=",
+ "dgSpecHash": "O+ANw3v7loA=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Providers\\MediaBrowser.Providers.csproj",
"expectedPackageFiles": [
diff --git a/MediaBrowser.XbmcMetadata/obj/project.nuget.cache b/MediaBrowser.XbmcMetadata/obj/project.nuget.cache
index 5452631b..832e5504 100644
--- a/MediaBrowser.XbmcMetadata/obj/project.nuget.cache
+++ b/MediaBrowser.XbmcMetadata/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "P3fDKwImSWA=",
+ "dgSpecHash": "rQazb3gGG1E=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.XbmcMetadata\\MediaBrowser.XbmcMetadata.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll b/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll
index 5c6c0b5b..a40ec022 100644
Binary files a/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll and b/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll differ
diff --git a/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb b/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb
index dde67d47..bb671259 100644
Binary files a/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb and b/src/Jellyfin.CodeAnalysis/bin/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb differ
diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfo.cs b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfo.cs
index 92b4a152..06971691 100644
--- a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfo.cs
+++ b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfo.cs
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Jellyfin.CodeAnalysis")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2dc0129a11d3a125fd227b7e4a86196bf919a4c8")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e8873563856ad813cb4b7695b0aaa85c32729a4c")]
[assembly: System.Reflection.AssemblyProductAttribute("Jellyfin.CodeAnalysis")]
[assembly: System.Reflection.AssemblyTitleAttribute("Jellyfin.CodeAnalysis")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache
index c56a746a..802bf3a3 100644
--- a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache
+++ b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.AssemblyInfoInputs.cache
@@ -1 +1 @@
-3bf9933fb90a6f3d3cf98eeedc63c2ff29157a52a9ff0ab543c63872fa45561b
+4aa28b28b5f36d3ba59b76bc7e3a9a39544dcee89f6b8e3632f4df17d7b042d4
diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll
index 5c6c0b5b..a40ec022 100644
Binary files a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll and b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.dll differ
diff --git a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb
index dde67d47..bb671259 100644
Binary files a/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb and b/src/Jellyfin.CodeAnalysis/obj/Debug/netstandard2.0/Jellyfin.CodeAnalysis.pdb differ
diff --git a/src/Jellyfin.CodeAnalysis/obj/project.nuget.cache b/src/Jellyfin.CodeAnalysis/obj/project.nuget.cache
index 20e77e07..7cf6c8b2 100644
--- a/src/Jellyfin.CodeAnalysis/obj/project.nuget.cache
+++ b/src/Jellyfin.CodeAnalysis/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "Y7Khl1IIiuQ=",
+ "dgSpecHash": "OZOEm6CP/lY=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.CodeAnalysis\\Jellyfin.CodeAnalysis.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/project.nuget.cache b/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/project.nuget.cache
index b768e9e8..f5ae8bfc 100644
--- a/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/project.nuget.cache
+++ b/src/Jellyfin.Database/Jellyfin.Database.Implementations/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "o3KwAigR2H0=",
+ "dgSpecHash": "wWhRHr+gc4I=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Implementations\\Jellyfin.Database.Implementations.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/obj/project.nuget.cache b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/obj/project.nuget.cache
index 5b2c5edb..c4a00c0e 100644
--- a/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/obj/project.nuget.cache
+++ b/src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "vHGJFlfns3Y=",
+ "dgSpecHash": "7p0VjWNAkOM=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Providers.Sqlite\\Jellyfin.Database.Providers.Sqlite.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.Drawing.Skia/obj/project.nuget.cache b/src/Jellyfin.Drawing.Skia/obj/project.nuget.cache
index a88faec5..ef341c73 100644
--- a/src/Jellyfin.Drawing.Skia/obj/project.nuget.cache
+++ b/src/Jellyfin.Drawing.Skia/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "Fpoz11tqLl0=",
+ "dgSpecHash": "HMW40QmobtY=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Drawing.Skia\\Jellyfin.Drawing.Skia.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.Drawing/obj/project.nuget.cache b/src/Jellyfin.Drawing/obj/project.nuget.cache
index 522e6462..63719595 100644
--- a/src/Jellyfin.Drawing/obj/project.nuget.cache
+++ b/src/Jellyfin.Drawing/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "Vcdm+k15Tts=",
+ "dgSpecHash": "kfdiYX/qdMo=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Drawing\\Jellyfin.Drawing.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.Extensions/obj/project.nuget.cache b/src/Jellyfin.Extensions/obj/project.nuget.cache
index 77731123..af2e2577 100644
--- a/src/Jellyfin.Extensions/obj/project.nuget.cache
+++ b/src/Jellyfin.Extensions/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "bmcoRiE2ZBQ=",
+ "dgSpecHash": "jFXUtLlrjTY=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Extensions\\Jellyfin.Extensions.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.LiveTv/obj/project.nuget.cache b/src/Jellyfin.LiveTv/obj/project.nuget.cache
index ab1ebe5a..96bf1989 100644
--- a/src/Jellyfin.LiveTv/obj/project.nuget.cache
+++ b/src/Jellyfin.LiveTv/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "9I/zz4fLYTY=",
+ "dgSpecHash": "Wq1Uahcka68=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.LiveTv\\Jellyfin.LiveTv.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.MediaEncoding.Hls/obj/project.nuget.cache b/src/Jellyfin.MediaEncoding.Hls/obj/project.nuget.cache
index 2fde37c8..86ecdc7f 100644
--- a/src/Jellyfin.MediaEncoding.Hls/obj/project.nuget.cache
+++ b/src/Jellyfin.MediaEncoding.Hls/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "svddOISkg9E=",
+ "dgSpecHash": "2kUNnZdwGG8=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.MediaEncoding.Hls\\Jellyfin.MediaEncoding.Hls.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs
index e9587fb7..5975aebd 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs
+++ b/src/Jellyfin.MediaEncoding.Keyframes/FfProbe/FfProbeKeyframeExtractor.cs
@@ -87,54 +87,51 @@ public static class FfProbeKeyframeExtractor
double streamDuration = 0;
double formatDuration = 0;
- using (reader)
+ while (!reader.EndOfStream)
{
- while (!reader.EndOfStream)
+ var line = reader.ReadLine().AsSpan();
+ if (line.IsEmpty)
{
- var line = reader.ReadLine().AsSpan();
- if (line.IsEmpty)
- {
- continue;
- }
+ continue;
+ }
- var firstComma = line.IndexOf(',');
- var lineType = line[..firstComma];
- var rest = line[(firstComma + 1)..];
- if (lineType.Equals("packet", StringComparison.OrdinalIgnoreCase))
+ var firstComma = line.IndexOf(',');
+ var lineType = line[..firstComma];
+ var rest = line[(firstComma + 1)..];
+ if (lineType.Equals("packet", StringComparison.OrdinalIgnoreCase))
+ {
+ // Split time and flags from the packet line. Example line: packet,7169.079000,K_
+ var secondComma = rest.IndexOf(',');
+ var ptsTime = rest[..secondComma];
+ var flags = rest[(secondComma + 1)..];
+ if (flags.StartsWith("K_"))
{
- // Split time and flags from the packet line. Example line: packet,7169.079000,K_
- var secondComma = rest.IndexOf(',');
- var ptsTime = rest[..secondComma];
- var flags = rest[(secondComma + 1)..];
- if (flags.StartsWith("K_"))
+ if (double.TryParse(ptsTime, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var keyframe))
{
- if (double.TryParse(ptsTime, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var keyframe))
- {
- // Have to manually convert to ticks to avoid rounding errors as TimeSpan is only precise down to 1 ms when converting double.
- keyframes.Add(Convert.ToInt64(keyframe * TimeSpan.TicksPerSecond));
- }
- }
- }
- else if (lineType.Equals("stream", StringComparison.OrdinalIgnoreCase))
- {
- if (double.TryParse(rest, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var streamDurationResult))
- {
- streamDuration = streamDurationResult;
- }
- }
- else if (lineType.Equals("format", StringComparison.OrdinalIgnoreCase))
- {
- if (double.TryParse(rest, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var formatDurationResult))
- {
- formatDuration = formatDurationResult;
+ // Have to manually convert to ticks to avoid rounding errors as TimeSpan is only precise down to 1 ms when converting double.
+ keyframes.Add(Convert.ToInt64(keyframe * TimeSpan.TicksPerSecond));
}
}
}
-
- // Prefer the stream duration as it should be more accurate
- var duration = streamDuration > 0 ? streamDuration : formatDuration;
-
- return new KeyframeData(TimeSpan.FromSeconds(duration).Ticks, keyframes);
+ else if (lineType.Equals("stream", StringComparison.OrdinalIgnoreCase))
+ {
+ if (double.TryParse(rest, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var streamDurationResult))
+ {
+ streamDuration = streamDurationResult;
+ }
+ }
+ else if (lineType.Equals("format", StringComparison.OrdinalIgnoreCase))
+ {
+ if (double.TryParse(rest, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var formatDurationResult))
+ {
+ formatDuration = formatDurationResult;
+ }
+ }
}
+
+ // Prefer the stream duration as it should be more accurate
+ var duration = streamDuration > 0 ? streamDuration : formatDuration;
+
+ return new KeyframeData(TimeSpan.FromSeconds(duration).Ticks, keyframes);
}
}
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs b/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs
index 70b7269a..e4b7bb5b 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs
+++ b/src/Jellyfin.MediaEncoding.Keyframes/KeyframeData.cs
@@ -18,8 +18,8 @@ public class KeyframeData
/// The video keyframes in ticks.
public KeyframeData(long totalDuration, IReadOnlyList keyframeTicks)
{
- TotalDuration = totalDuration;
- KeyframeTicks = keyframeTicks;
+ this.TotalDuration = totalDuration;
+ this.KeyframeTicks = keyframeTicks;
}
///
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs
index 69f89158..f9094146 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs
+++ b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Extensions/EbmlReaderExtensions.cs
@@ -70,6 +70,7 @@ internal static class EbmlReaderExtensions
long? tracksPosition = null;
long? cuesPosition = null;
long? infoPosition = null;
+
// The first element should be a SeekHead otherwise we'll have to search manually
if (!reader.FindElement(MatroskaConstants.SeekHead))
{
@@ -128,6 +129,7 @@ internal static class EbmlReaderExtensions
double? duration = null;
reader.EnterContainer();
+
// Mandatory element
reader.FindElement(MatroskaConstants.TimestampScale);
var timestampScale = reader.ReadUInt();
@@ -158,6 +160,7 @@ internal static class EbmlReaderExtensions
while (reader.FindElement(MatroskaConstants.TrackEntry))
{
reader.EnterContainer();
+
// Mandatory element
reader.FindElement(MatroskaConstants.TrackNumber);
var trackNumber = reader.ReadUInt();
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs
index cb6aa3b2..50f06e08 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs
+++ b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/MatroskaKeyframeExtractor.cs
@@ -27,6 +27,7 @@ public static class MatroskaKeyframeExtractor
using var reader = new EbmlReader(stream);
var seekHead = reader.ReadSeekHead();
+
// External lib does not support seeking backwards (yet)
Info info;
ulong videoTrackNumber;
@@ -49,6 +50,7 @@ public static class MatroskaKeyframeExtractor
{
reader.EnterContainer();
ulong? trackNumber = null;
+
// Mandatory element
reader.FindElement(MatroskaConstants.CueTime);
var cueTime = reader.ReadUInt();
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/Info.cs b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/Info.cs
index 8c5722d1..109c0881 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/Info.cs
+++ b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/Info.cs
@@ -16,8 +16,8 @@ internal class Info
/// The duration of the entire file.
public Info(long timestampScale, double? duration)
{
- TimestampScale = timestampScale;
- Duration = duration;
+ this.TimestampScale = timestampScale;
+ this.Duration = duration;
}
///
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/SeekHead.cs b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/SeekHead.cs
index 6eabc8a8..a34d0815 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/SeekHead.cs
+++ b/src/Jellyfin.MediaEncoding.Keyframes/Matroska/Models/SeekHead.cs
@@ -17,9 +17,9 @@ internal class SeekHead
/// The relative file position of the cues segment.
public SeekHead(long infoPosition, long tracksPosition, long cuesPosition)
{
- InfoPosition = infoPosition;
- TracksPosition = tracksPosition;
- CuesPosition = cuesPosition;
+ this.InfoPosition = infoPosition;
+ this.TracksPosition = tracksPosition;
+ this.CuesPosition = cuesPosition;
}
///
diff --git a/src/Jellyfin.MediaEncoding.Keyframes/obj/project.nuget.cache b/src/Jellyfin.MediaEncoding.Keyframes/obj/project.nuget.cache
index e5613e27..f6c37485 100644
--- a/src/Jellyfin.MediaEncoding.Keyframes/obj/project.nuget.cache
+++ b/src/Jellyfin.MediaEncoding.Keyframes/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "fWFpFkhudto=",
+ "dgSpecHash": "mTVFQQSIGo8=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.MediaEncoding.Keyframes\\Jellyfin.MediaEncoding.Keyframes.csproj",
"expectedPackageFiles": [
diff --git a/src/Jellyfin.Networking/obj/project.nuget.cache b/src/Jellyfin.Networking/obj/project.nuget.cache
index c0129512..bde2e2ce 100644
--- a/src/Jellyfin.Networking/obj/project.nuget.cache
+++ b/src/Jellyfin.Networking/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "nYThmTXT+N4=",
+ "dgSpecHash": "o8ef9/49oOU=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Networking\\Jellyfin.Networking.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Api.Tests/obj/project.nuget.cache b/tests/Jellyfin.Api.Tests/obj/project.nuget.cache
index 5c5091f3..5cc91304 100644
--- a/tests/Jellyfin.Api.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Api.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "jz3od75Vj9o=",
+ "dgSpecHash": "I6cvgut0KE0=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Api.Tests\\Jellyfin.Api.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Common.Tests/obj/project.nuget.cache b/tests/Jellyfin.Common.Tests/obj/project.nuget.cache
index f4d4c8d5..1562062a 100644
--- a/tests/Jellyfin.Common.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Common.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "D3+az8yIj/g=",
+ "dgSpecHash": "rSTC0c4hKeg=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Common.Tests\\Jellyfin.Common.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Controller.Tests/obj/project.nuget.cache b/tests/Jellyfin.Controller.Tests/obj/project.nuget.cache
index 53b06e0f..6ab22ad8 100644
--- a/tests/Jellyfin.Controller.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Controller.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "GDKjP2XUxGM=",
+ "dgSpecHash": "rCzbZx73oRU=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Controller.Tests\\Jellyfin.Controller.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Extensions.Tests/obj/project.nuget.cache b/tests/Jellyfin.Extensions.Tests/obj/project.nuget.cache
index cdd45fa5..7dd496fa 100644
--- a/tests/Jellyfin.Extensions.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Extensions.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "cBK/w0WVJEs=",
+ "dgSpecHash": "en/g4Rojfa8=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Extensions.Tests\\Jellyfin.Extensions.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.LiveTv.Tests/obj/project.nuget.cache b/tests/Jellyfin.LiveTv.Tests/obj/project.nuget.cache
index e37c6514..2b70e0e0 100644
--- a/tests/Jellyfin.LiveTv.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.LiveTv.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "nbns8k6jJuA=",
+ "dgSpecHash": "YQ4opaxxEO8=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.LiveTv.Tests\\Jellyfin.LiveTv.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/project.nuget.cache b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/project.nuget.cache
index 946bb86b..8d750119 100644
--- a/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.MediaEncoding.Hls.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "hvFFds1OJpc=",
+ "dgSpecHash": "/lT1/xD3XnU=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.MediaEncoding.Hls.Tests\\Jellyfin.MediaEncoding.Hls.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/project.nuget.cache b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/project.nuget.cache
index 1f7062c1..546f0827 100644
--- a/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.MediaEncoding.Keyframes.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "5g3aj0khPqM=",
+ "dgSpecHash": "0nvUEzLEN94=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.MediaEncoding.Keyframes.Tests\\Jellyfin.MediaEncoding.Keyframes.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.MediaEncoding.Tests/obj/project.nuget.cache b/tests/Jellyfin.MediaEncoding.Tests/obj/project.nuget.cache
index 1febf3d9..b4bb581b 100644
--- a/tests/Jellyfin.MediaEncoding.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.MediaEncoding.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "2rGlge7UbGY=",
+ "dgSpecHash": "SBmVy71j/UM=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.MediaEncoding.Tests\\Jellyfin.MediaEncoding.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Model.Tests/obj/project.nuget.cache b/tests/Jellyfin.Model.Tests/obj/project.nuget.cache
index a132eada..ecc57c45 100644
--- a/tests/Jellyfin.Model.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Model.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "E+3Xf4aE0A8=",
+ "dgSpecHash": "S2M6GE9E6Mw=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Model.Tests\\Jellyfin.Model.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Naming.Tests/obj/project.nuget.cache b/tests/Jellyfin.Naming.Tests/obj/project.nuget.cache
index 012be5d7..f9f28ac9 100644
--- a/tests/Jellyfin.Naming.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Naming.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "w013NueXjWs=",
+ "dgSpecHash": "aetk2kDndoI=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Naming.Tests\\Jellyfin.Naming.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Networking.Tests/obj/project.nuget.cache b/tests/Jellyfin.Networking.Tests/obj/project.nuget.cache
index 88263095..3a22e8f1 100644
--- a/tests/Jellyfin.Networking.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Networking.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "dtvsyCwkixc=",
+ "dgSpecHash": "VqeAp96kZ+8=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Networking.Tests\\Jellyfin.Networking.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Providers.Tests/obj/project.nuget.cache b/tests/Jellyfin.Providers.Tests/obj/project.nuget.cache
index 60aceb0f..612e547e 100644
--- a/tests/Jellyfin.Providers.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Providers.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "99YmHljNark=",
+ "dgSpecHash": "yVpchsJCVR8=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Providers.Tests\\Jellyfin.Providers.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Server.Implementations.Tests/obj/project.nuget.cache b/tests/Jellyfin.Server.Implementations.Tests/obj/project.nuget.cache
index d5f01a83..fb9302aa 100644
--- a/tests/Jellyfin.Server.Implementations.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Server.Implementations.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "ekBTYkgmpdU=",
+ "dgSpecHash": "SB6n8FaqhDk=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Server.Implementations.Tests\\Jellyfin.Server.Implementations.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Server.Integration.Tests/obj/project.nuget.cache b/tests/Jellyfin.Server.Integration.Tests/obj/project.nuget.cache
index 0061c7c5..3bd82b26 100644
--- a/tests/Jellyfin.Server.Integration.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Server.Integration.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "wWSnrqDiePs=",
+ "dgSpecHash": "F/F7p6QhWSM=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Server.Integration.Tests\\Jellyfin.Server.Integration.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.Server.Tests/obj/project.nuget.cache b/tests/Jellyfin.Server.Tests/obj/project.nuget.cache
index 93138c2d..9ad57761 100644
--- a/tests/Jellyfin.Server.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.Server.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "2W4hzYZ52SM=",
+ "dgSpecHash": "W1tIaEHAq1A=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.Server.Tests\\Jellyfin.Server.Tests.csproj",
"expectedPackageFiles": [
diff --git a/tests/Jellyfin.XbmcMetadata.Tests/obj/project.nuget.cache b/tests/Jellyfin.XbmcMetadata.Tests/obj/project.nuget.cache
index e42c907c..6aa62ef1 100644
--- a/tests/Jellyfin.XbmcMetadata.Tests/obj/project.nuget.cache
+++ b/tests/Jellyfin.XbmcMetadata.Tests/obj/project.nuget.cache
@@ -1,6 +1,6 @@
{
"version": 2,
- "dgSpecHash": "cjfpv0pWthU=",
+ "dgSpecHash": "+lkQwnGRsbE=",
"success": true,
"projectFilePath": "E:\\Projects\\pgsql-jellyfin\\tests\\Jellyfin.XbmcMetadata.Tests\\Jellyfin.XbmcMetadata.Tests.csproj",
"expectedPackageFiles": [