From 48569427a5cba735184e017148b7c71f665279bc Mon Sep 17 00:00:00 2001 From: Wendell Jones Date: Sat, 21 Feb 2026 16:55:27 -0500 Subject: [PATCH] Refactor for clarity; add docs and .editorconfig Refactored code to consistently use `this.` for instance members, improving clarity and maintainability. Added XML documentation comments to multiple methods and properties for better API documentation. Streamlined `FfProbeKeyframeExtractor` logic and enhanced EBML parsing code with comments and style improvements. Introduced a new `.editorconfig` to disable legacy StyleCop and IDisposableAnalyzers rules. Updated binary files, assembly info, and NuGet cache files due to rebuilds and dependency changes. No functional changes were made. --- Emby.Naming/obj/project.nuget.cache | 2 +- Emby.Photos/obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- Jellyfin.Api/obj/project.nuget.cache | 2 +- Jellyfin.Data/obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- Jellyfin.Server/obj/project.nuget.cache | 2 +- MediaBrowser.Common/obj/project.nuget.cache | 2 +- MediaBrowser.Controller/.editorconfig | 27 ++++++ .../BaseItemManager/BaseItemManager.cs | 6 +- MediaBrowser.Controller/Channels/Channel.cs | 40 ++++++++- .../Entities/Audio/Audio.cs | 2 +- MediaBrowser.Controller/Entities/AudioBook.cs | 38 +++++++-- .../MediaEncoding/EncodingHelper.cs | 35 +++++--- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- MediaBrowser.Model/obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../netstandard2.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../netstandard2.0/Jellyfin.CodeAnalysis.pdb | Bin 10192 -> 10192 bytes .../Jellyfin.CodeAnalysis.AssemblyInfo.cs | 2 +- ...yfin.CodeAnalysis.AssemblyInfoInputs.cache | 2 +- .../netstandard2.0/Jellyfin.CodeAnalysis.dll | Bin 8704 -> 8704 bytes .../netstandard2.0/Jellyfin.CodeAnalysis.pdb | Bin 10192 -> 10192 bytes .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- src/Jellyfin.Drawing/obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- src/Jellyfin.LiveTv/obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../FfProbe/FfProbeKeyframeExtractor.cs | 77 +++++++++--------- .../KeyframeData.cs | 4 +- .../Extensions/EbmlReaderExtensions.cs | 3 + .../Matroska/MatroskaKeyframeExtractor.cs | 2 + .../Matroska/Models/Info.cs | 4 +- .../Matroska/Models/SeekHead.cs | 6 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- .../obj/project.nuget.cache | 2 +- 58 files changed, 215 insertions(+), 113 deletions(-) create mode 100644 MediaBrowser.Controller/.editorconfig 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 5c6c0b5bfd016c909a9811ab2479bb9d20c79bb0..a40ec0229eedc7dd8863edb86859bbf741dd9799 100644 GIT binary patch delta 235 zcmZp0X>gg)!E#1-b^FGi7*T;3vn8)MH8(hHNKT2AVc%`A`G@EpCXG}J3v**rGh+)= zv&0k&L*wKmlO%I9OVcES#Kc4k(_~{Kb0f<{ljO;FB-XH0Uaws>xkoZU;F80t%&DSF zy;cVodbg}C$)5a1vRDBs_(~fp2vVIY%=&oo+~z4$!Yx8J*Gt`G@lR#2077#HV+KXJ7vmycuu E05Mod8~^|S delta 235 zcmZp0X>gg)!7_WopY0oaVnhXA-QT@<@m?gj>H-kk=XG0lY1ls1a`mKRipdE zz+;tpgG$eZS?!bGNERzV1uL|mfs*`m6=*K0o58edch-&`+slf~bNA%!8C!GOV# z!HB_^;$e`r==Ymjpenm7`9mRO%vk4m;_7I@`VjjsEh7YAw9 zOo3Ys1ONc7lTAwlF%X9Dh5m=3Cq=qzZMR)N5Nf5OAc%?{#KR;zyB)|TlFVB6-%F|# ziy!pR$tja}o_81~Y1-dubUSGZXV{4AS7gbfP;tIW#&}$C0PPBbB?edve?YZ>AkLX2 zO4st)0&PVB#DT=hk_|zPEof{40bA|7CoQ08f$!`*peQ7IyYDN?$Mps+DO^ehQN5*W1k1Z)n@8 zh-cLZ?e%WRn6_k_%v?cJe~YFK9D4h&TLW#$RpT*czhN&)HP!Z*IU9N+A2uO_^;$fBytxfYAg)lOo-9*IHW@p;jsif@sl$c$iIQw*%Qkl3C0Cd&w$A z@q->ZIc4(B^A5u#O$S?zonD&488+eu6L17aJ*ed5eDS?8P_{PoyS`8~U1_}b>f&iCmnk?zVn*(@S zn|GFQmj2T7wnwwmYXaK}9@-#OpMJk4_f#5E!p@#X=`)5vbz$0*pMqri`8IR)E82D{ z;<;#qcKbJEOk1)|W=_-8f1+svhyLEn#z0$g)p(5AFW5^enrd^*oDDsa58okKauCnv zm}^@)Uw6Hr`GdEgYju$26U;Jwh*^GA>O4O#j%kSFQ8pPBnaYz4J~tO13xE z1&g8W;r^d&x6fB!|5n`m+lPyWjfN-BLeX~av8u@mD1#v+vF;s$vt$NeAQSolqX7Y< W9s#2&0i!_yqhA4|gp<}L`T+pV7~Yxy 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 5c6c0b5bfd016c909a9811ab2479bb9d20c79bb0..a40ec0229eedc7dd8863edb86859bbf741dd9799 100644 GIT binary patch delta 235 zcmZp0X>gg)!E#1-b^FGi7*T;3vn8)MH8(hHNKT2AVc%`A`G@EpCXG}J3v**rGh+)= zv&0k&L*wKmlO%I9OVcES#Kc4k(_~{Kb0f<{ljO;FB-XH0Uaws>xkoZU;F80t%&DSF zy;cVodbg}C$)5a1vRDBs_(~fp2vVIY%=&oo+~z4$!Yx8J*Gt`G@lR#2077#HV+KXJ7vmycuu E05Mod8~^|S delta 235 zcmZp0X>gg)!7_WopY0oaVnhXA-QT@<@m?gj>H-kk=XG0lY1ls1a`mKRipdE zz+;tpgG$eZS?!bGNERzV1uL|mfs*`m6=*K0o58edch-&`+slf~bNA%!8C!GOV# z!HB_^;$e`r==Ymjpenm7`9mRO%vk4m;_7I@`VjjsEh7YAw9 zOo3Ys1ONc7lTAwlF%X9Dh5m=3Cq=qzZMR)N5Nf5OAc%?{#KR;zyB)|TlFVB6-%F|# ziy!pR$tja}o_81~Y1-dubUSGZXV{4AS7gbfP;tIW#&}$C0PPBbB?edve?YZ>AkLX2 zO4st)0&PVB#DT=hk_|zPEof{40bA|7CoQ08f$!`*peQ7IyYDN?$Mps+DO^ehQN5*W1k1Z)n@8 zh-cLZ?e%WRn6_k_%v?cJe~YFK9D4h&TLW#$RpT*czhN&)HP!Z*IU9N+A2uO_^;$fBytxfYAg)lOo-9*IHW@p;jsif@sl$c$iIQw*%Qkl3C0Cd&w$A z@q->ZIc4(B^A5u#O$S?zonD&488+eu6L17aJ*ed5eDS?8P_{PoyS`8~U1_}b>f&iCmnk?zVn*(@S zn|GFQmj2T7wnwwmYXaK}9@-#OpMJk4_f#5E!p@#X=`)5vbz$0*pMqri`8IR)E82D{ z;<;#qcKbJEOk1)|W=_-8f1+svhyLEn#z0$g)p(5AFW5^enrd^*oDDsa58okKauCnv zm}^@)Uw6Hr`GdEgYju$26U;Jwh*^GA>O4O#j%kSFQ8pPBnaYz4J~tO13xE z1&g8W;r^d&x6fB!|5n`m+lPyWjfN-BLeX~av8u@mD1#v+vF;s$vt$NeAQSolqX7Y< W9s#2&0i!_yqhA4|gp<}L`T+pV7~Yxy 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": [