aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJPVenson <github@jpb.email>2024-12-15 14:46:40 +0000
committerJPVenson <github@jpb.email>2024-12-15 14:46:40 +0000
commita0c568bc6c9944fab8b6d1d6d420a9716bdab1e9 (patch)
tree00565ba6c1e73ddfd3278cd3356c5110699553ad
parent1c3196dd5f07d152b5c0ab4614ab0ca01557375d (diff)
Applied review comments
-rw-r--r--Jellyfin.Api/Controllers/PlaystateController.cs12
-rw-r--r--Jellyfin.Api/Controllers/UserLibraryController.cs12
-rw-r--r--Jellyfin.Data/Entities/BaseItemEntity.cs6
-rw-r--r--Jellyfin.Data/Entities/BaseItemExtraType.cs2
-rw-r--r--Jellyfin.Data/Entities/BaseItemImageInfo.cs6
-rw-r--r--Jellyfin.Data/Entities/ItemValueType.cs2
-rw-r--r--Jellyfin.Data/Entities/MediaStreamInfo.cs3
-rw-r--r--Jellyfin.Data/Entities/People.cs3
-rw-r--r--Jellyfin.Server.Implementations/Item/BaseItemRepository.cs21
-rw-r--r--MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs4
-rw-r--r--MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs3
11 files changed, 42 insertions, 32 deletions
diff --git a/Jellyfin.Api/Controllers/PlaystateController.cs b/Jellyfin.Api/Controllers/PlaystateController.cs
index 292344c9d..794c6500c 100644
--- a/Jellyfin.Api/Controllers/PlaystateController.cs
+++ b/Jellyfin.Api/Controllers/PlaystateController.cs
@@ -72,7 +72,7 @@ public class PlaystateController : BaseJellyfinApiController
[HttpPost("UserPlayedItems/{itemId}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
- public async Task<ActionResult<UserItemDataDto>> MarkPlayedItem(
+ public async Task<ActionResult<UserItemDataDto?>> MarkPlayedItem(
[FromQuery] Guid? userId,
[FromRoute, Required] Guid itemId,
[FromQuery, ModelBinder(typeof(LegacyDateTimeModelBinder))] DateTime? datePlayed)
@@ -121,7 +121,7 @@ public class PlaystateController : BaseJellyfinApiController
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Kept for backwards compatibility")]
[ApiExplorerSettings(IgnoreApi = true)]
- public Task<ActionResult<UserItemDataDto>> MarkPlayedItemLegacy(
+ public Task<ActionResult<UserItemDataDto?>> MarkPlayedItemLegacy(
[FromRoute, Required] Guid userId,
[FromRoute, Required] Guid itemId,
[FromQuery, ModelBinder(typeof(LegacyDateTimeModelBinder))] DateTime? datePlayed)
@@ -138,7 +138,7 @@ public class PlaystateController : BaseJellyfinApiController
[HttpDelete("UserPlayedItems/{itemId}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
- public async Task<ActionResult<UserItemDataDto>> MarkUnplayedItem(
+ public async Task<ActionResult<UserItemDataDto?>> MarkUnplayedItem(
[FromQuery] Guid? userId,
[FromRoute, Required] Guid itemId)
{
@@ -185,7 +185,7 @@ public class PlaystateController : BaseJellyfinApiController
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Kept for backwards compatibility")]
[ApiExplorerSettings(IgnoreApi = true)]
- public Task<ActionResult<UserItemDataDto>> MarkUnplayedItemLegacy(
+ public Task<ActionResult<UserItemDataDto?>> MarkUnplayedItemLegacy(
[FromRoute, Required] Guid userId,
[FromRoute, Required] Guid itemId)
=> MarkUnplayedItem(userId, itemId);
@@ -502,7 +502,7 @@ public class PlaystateController : BaseJellyfinApiController
/// <param name="wasPlayed">if set to <c>true</c> [was played].</param>
/// <param name="datePlayed">The date played.</param>
/// <returns>Task.</returns>
- private UserItemDataDto UpdatePlayedStatus(User user, BaseItem item, bool wasPlayed, DateTime? datePlayed)
+ private UserItemDataDto? UpdatePlayedStatus(User user, BaseItem item, bool wasPlayed, DateTime? datePlayed)
{
if (wasPlayed)
{
@@ -513,7 +513,7 @@ public class PlaystateController : BaseJellyfinApiController
item.MarkUnplayed(user);
}
- return _userDataRepository.GetUserDataDto(item, user)!;
+ return _userDataRepository.GetUserDataDto(item, user);
}
private PlayMethod ValidatePlayMethod(PlayMethod method, string? playSessionId)
diff --git a/Jellyfin.Api/Controllers/UserLibraryController.cs b/Jellyfin.Api/Controllers/UserLibraryController.cs
index 5330db48b..272a59559 100644
--- a/Jellyfin.Api/Controllers/UserLibraryController.cs
+++ b/Jellyfin.Api/Controllers/UserLibraryController.cs
@@ -305,7 +305,7 @@ public class UserLibraryController : BaseJellyfinApiController
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
[HttpDelete("UserItems/{itemId}/Rating")]
[ProducesResponseType(StatusCodes.Status200OK)]
- public ActionResult<UserItemDataDto> DeleteUserItemRating(
+ public ActionResult<UserItemDataDto?> DeleteUserItemRating(
[FromQuery] Guid? userId,
[FromRoute, Required] Guid itemId)
{
@@ -338,7 +338,7 @@ public class UserLibraryController : BaseJellyfinApiController
[ProducesResponseType(StatusCodes.Status200OK)]
[Obsolete("Kept for backwards compatibility")]
[ApiExplorerSettings(IgnoreApi = true)]
- public ActionResult<UserItemDataDto> DeleteUserItemRatingLegacy(
+ public ActionResult<UserItemDataDto?> DeleteUserItemRatingLegacy(
[FromRoute, Required] Guid userId,
[FromRoute, Required] Guid itemId)
=> DeleteUserItemRating(userId, itemId);
@@ -353,7 +353,7 @@ public class UserLibraryController : BaseJellyfinApiController
/// <returns>An <see cref="OkResult"/> containing the <see cref="UserItemDataDto"/>.</returns>
[HttpPost("UserItems/{itemId}/Rating")]
[ProducesResponseType(StatusCodes.Status200OK)]
- public ActionResult<UserItemDataDto> UpdateUserItemRating(
+ public ActionResult<UserItemDataDto?> UpdateUserItemRating(
[FromQuery] Guid? userId,
[FromRoute, Required] Guid itemId,
[FromQuery] bool? likes)
@@ -388,7 +388,7 @@ public class UserLibraryController : BaseJellyfinApiController
[ProducesResponseType(StatusCodes.Status200OK)]
[Obsolete("Kept for backwards compatibility")]
[ApiExplorerSettings(IgnoreApi = true)]
- public ActionResult<UserItemDataDto> UpdateUserItemRatingLegacy(
+ public ActionResult<UserItemDataDto?> UpdateUserItemRatingLegacy(
[FromRoute, Required] Guid userId,
[FromRoute, Required] Guid itemId,
[FromQuery] bool? likes)
@@ -679,7 +679,7 @@ public class UserLibraryController : BaseJellyfinApiController
/// <param name="user">The user.</param>
/// <param name="item">The item.</param>
/// <param name="likes">if set to <c>true</c> [likes].</param>
- private UserItemDataDto UpdateUserItemRatingInternal(User user, BaseItem item, bool? likes)
+ private UserItemDataDto? UpdateUserItemRatingInternal(User user, BaseItem item, bool? likes)
{
// Get the user data for this item
var data = _userDataRepository.GetUserData(user, item);
@@ -691,6 +691,6 @@ public class UserLibraryController : BaseJellyfinApiController
_userDataRepository.SaveUserData(user, item, data, UserDataSaveReason.UpdateUserRating, CancellationToken.None);
}
- return _userDataRepository.GetUserDataDto(item, user)!;
+ return _userDataRepository.GetUserDataDto(item, user);
}
}
diff --git a/Jellyfin.Data/Entities/BaseItemEntity.cs b/Jellyfin.Data/Entities/BaseItemEntity.cs
index 0c9020a66..33b2b6741 100644
--- a/Jellyfin.Data/Entities/BaseItemEntity.cs
+++ b/Jellyfin.Data/Entities/BaseItemEntity.cs
@@ -1,3 +1,6 @@
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+#pragma warning disable CA2227 // Collection properties should be read only
+
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@@ -5,9 +8,6 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Jellyfin.Data.Entities;
-#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
-#pragma warning disable CA2227 // Collection properties should be read only
-
public class BaseItemEntity
{
public required Guid Id { get; set; }
diff --git a/Jellyfin.Data/Entities/BaseItemExtraType.cs b/Jellyfin.Data/Entities/BaseItemExtraType.cs
index 341697436..54aef50e4 100644
--- a/Jellyfin.Data/Entities/BaseItemExtraType.cs
+++ b/Jellyfin.Data/Entities/BaseItemExtraType.cs
@@ -1,6 +1,6 @@
+#pragma warning disable CS1591
namespace Jellyfin.Data.Entities;
-#pragma warning disable CS1591
public enum BaseItemExtraType
{
Unknown = 0,
diff --git a/Jellyfin.Data/Entities/BaseItemImageInfo.cs b/Jellyfin.Data/Entities/BaseItemImageInfo.cs
index 6390cac58..37723df11 100644
--- a/Jellyfin.Data/Entities/BaseItemImageInfo.cs
+++ b/Jellyfin.Data/Entities/BaseItemImageInfo.cs
@@ -1,8 +1,9 @@
+#pragma warning disable CA2227
+
using System;
using System.Collections.Generic;
namespace Jellyfin.Data.Entities;
-#pragma warning disable CA2227
/// <summary>
/// Enum TrailerTypes.
@@ -39,11 +40,12 @@ public class BaseItemImageInfo
/// </summary>
public int Height { get; set; }
-#pragma warning disable CA1819
+#pragma warning disable CA1819 // Properties should not return arrays
/// <summary>
/// Gets or Sets the blurhash.
/// </summary>
public byte[]? Blurhash { get; set; }
+#pragma warning restore CA1819
/// <summary>
/// Gets or Sets the reference id to the BaseItem.
diff --git a/Jellyfin.Data/Entities/ItemValueType.cs b/Jellyfin.Data/Entities/ItemValueType.cs
index 006036b40..48c5d0f30 100644
--- a/Jellyfin.Data/Entities/ItemValueType.cs
+++ b/Jellyfin.Data/Entities/ItemValueType.cs
@@ -10,9 +10,7 @@ public enum ItemValueType
/// <summary>
/// Artists.
/// </summary>
-#pragma warning disable CA1008 // Enums should have zero value. Cannot apply here.
Artist = 0,
-#pragma warning restore CA1008 // Enums should have zero value
/// <summary>
/// Album.
diff --git a/Jellyfin.Data/Entities/MediaStreamInfo.cs b/Jellyfin.Data/Entities/MediaStreamInfo.cs
index 79053652a..77816565a 100644
--- a/Jellyfin.Data/Entities/MediaStreamInfo.cs
+++ b/Jellyfin.Data/Entities/MediaStreamInfo.cs
@@ -1,9 +1,10 @@
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+
using System;
using System.Diagnostics.CodeAnalysis;
namespace Jellyfin.Data.Entities;
-#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public class MediaStreamInfo
{
public required Guid ItemId { get; set; }
diff --git a/Jellyfin.Data/Entities/People.cs b/Jellyfin.Data/Entities/People.cs
index b1834a70d..18c778b17 100644
--- a/Jellyfin.Data/Entities/People.cs
+++ b/Jellyfin.Data/Entities/People.cs
@@ -1,8 +1,9 @@
+#pragma warning disable CA2227 // Collection properties should be read only
+
using System;
using System.Collections.Generic;
namespace Jellyfin.Data.Entities;
-#pragma warning disable CA2227 // Collection properties should be read only
/// <summary>
/// People entity.
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index e1f0dc3c0..4f8fe467a 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -1,3 +1,9 @@
+#pragma warning disable RS0030 // Do not use banned APIs
+// Do not enforce that because EFCore cannot deal with cultures well.
+#pragma warning disable CA1304 // Specify CultureInfo
+#pragma warning disable CA1311 // Specify a culture or use an invariant version
+#pragma warning disable CA1862 // Use the 'StringComparison' method overloads to perform case-insensitive string comparisons
+
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -31,14 +37,15 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using BaseItemDto = MediaBrowser.Controller.Entities.BaseItem;
using BaseItemEntity = Jellyfin.Data.Entities.BaseItemEntity;
-#pragma warning disable RS0030 // Do not use banned APIs
-// Do not enforce that because EFCore cannot deal with cultures well.
-#pragma warning disable CA1304 // Specify CultureInfo
-#pragma warning disable CA1311 // Specify a culture or use an invariant version
-#pragma warning disable CA1862 // Use the 'StringComparison' method overloads to perform case-insensitive string comparisons
namespace Jellyfin.Server.Implementations.Item;
+
+/*
+ All queries in this class and all other nullable enabled EFCore repository classes will make libraral use of the null-forgiving operator "!".
+ This is done as the code isn't actually executed client side, but only the expressions are interpretet and the compiler cannot know that.
+ This is your only warning/message regarding this topic.
+*/
/// <summary>
/// Handles all storage logic for BaseItems.
/// </summary>
@@ -1065,7 +1072,7 @@ public sealed class BaseItemRepository
ItemId = baseItemId,
Id = Guid.NewGuid(),
Path = e.Path,
- Blurhash = e.BlurHash != null ? Encoding.UTF8.GetBytes(e.BlurHash) : null,
+ Blurhash = e.BlurHash is null ? null : Encoding.UTF8.GetBytes(e.BlurHash),
DateModified = e.DateModified,
Height = e.Height,
Width = e.Width,
@@ -1079,7 +1086,7 @@ public sealed class BaseItemRepository
return new ItemImageInfo()
{
Path = appHost?.ExpandVirtualPath(e.Path) ?? e.Path,
- BlurHash = e.Blurhash != null ? Encoding.UTF8.GetString(e.Blurhash) : null,
+ BlurHash = e.Blurhash is null ? null : Encoding.UTF8.GetString(e.Blurhash),
DateModified = e.DateModified,
Height = e.Height,
Width = e.Width,
diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
index bfe4f3300..71ea8af52 100644
--- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs
@@ -81,11 +81,11 @@ namespace MediaBrowser.Providers.MediaInfo
if (!File.Exists(path))
{
Directory.CreateDirectory(Path.GetDirectoryName(path));
-
+#pragma warning disable CA1826
var imageStream = imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).Contains("front", StringComparison.OrdinalIgnoreCase)) ??
imageStreams.FirstOrDefault(i => (i.Comment ?? string.Empty).Contains("cover", StringComparison.OrdinalIgnoreCase)) ??
imageStreams.FirstOrDefault();
-
+#pragma warning restore CA1826
var imageStreamIndex = imageStream?.Index;
var tempFile = await _mediaEncoder.ExtractAudioImage(item.Path, imageStreamIndex, cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
index ba7ad4072..bd6b40c51 100644
--- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs
@@ -88,6 +88,7 @@ namespace MediaBrowser.Providers.MediaInfo
: TimeSpan.FromSeconds(10);
var query = new MediaStreamQuery { ItemId = item.Id, Index = item.DefaultVideoStreamIndex };
+#pragma warning disable CA1826
var videoStream = _mediaSourceManager.GetMediaStreams(query).FirstOrDefault();
if (videoStream is null)
{
@@ -95,7 +96,7 @@ namespace MediaBrowser.Providers.MediaInfo
query.Index = null;
videoStream = _mediaSourceManager.GetMediaStreams(query).FirstOrDefault();
}
-
+#pragma warning restore CA1826
if (videoStream is null)
{
_logger.LogInformation("Skipping image extraction: no video stream found for {Path}.", item.Path ?? string.Empty);