From f8658fe6d56488aa5caa68093245cbf021a31810 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Wed, 14 May 2025 21:51:41 +0100 Subject: [PATCH] fix(radarr): ensure RequestedUser is loaded when creating tags - Replace Find() with GetWithUser() in MovieRequestEngine methods to properly load RequestedUser navigation property - Add null check in GetOrCreateTag as a safety measure - Fix NullReferenceException when "Add the user as a tag" feature is enabled Fixes #5045 --- src/Ombi.Core/Engine/MovieRequestEngine.cs | 10 +++++----- src/Ombi.Core/Senders/MovieSender.cs | 11 ++++++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Ombi.Core/Engine/MovieRequestEngine.cs b/src/Ombi.Core/Engine/MovieRequestEngine.cs index 4d3cd2cf9..82a6bce21 100644 --- a/src/Ombi.Core/Engine/MovieRequestEngine.cs +++ b/src/Ombi.Core/Engine/MovieRequestEngine.cs @@ -598,13 +598,13 @@ namespace Ombi.Core.Engine public async Task ApproveMovieById(int requestId, bool is4K) { - var request = await MovieRepository.Find(requestId); + var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == requestId); return await ApproveMovie(request, is4K); } public async Task DenyMovieById(int modelId, string denyReason, bool is4K) { - var request = await MovieRepository.Find(modelId); + var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == modelId); if (request == null) { return new RequestEngineResult @@ -790,7 +790,7 @@ namespace Ombi.Core.Engine public async Task ReProcessRequest(int requestId, bool is4K, CancellationToken cancellationToken) { - var request = await MovieRepository.Find(requestId); + var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == requestId); if (request == null) { return new RequestEngineResult @@ -805,7 +805,7 @@ namespace Ombi.Core.Engine public async Task MarkUnavailable(int modelId, bool is4K) { - var request = await MovieRepository.Find(modelId); + var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == modelId); if (request == null) { return new RequestEngineResult @@ -834,7 +834,7 @@ namespace Ombi.Core.Engine public async Task MarkAvailable(int modelId, bool is4K) { - var request = await MovieRepository.Find(modelId); + var request = await MovieRepository.GetWithUser().FirstOrDefaultAsync(x => x.Id == modelId); if (request == null) { return new RequestEngineResult diff --git a/src/Ombi.Core/Senders/MovieSender.cs b/src/Ombi.Core/Senders/MovieSender.cs index 26da3465c..3b0017492 100644 --- a/src/Ombi.Core/Senders/MovieSender.cs +++ b/src/Ombi.Core/Senders/MovieSender.cs @@ -182,7 +182,10 @@ namespace Ombi.Core.Senders if (settings.SendUserTags) { var userTag = await GetOrCreateTag(model, settings); - tags.Add(userTag.id); + if (userTag != null) + { + tags.Add(userTag.id); + } } // Overrides on the request take priority @@ -246,6 +249,12 @@ namespace Ombi.Core.Senders private async Task GetOrCreateTag(MovieRequests model, RadarrSettings s) { + if (model.RequestedUser == null) + { + _log.LogWarning("Cannot create tag - RequestedUser is null for movie request {MovieTitle}", model.Title); + return null; + } + var tagName = model.RequestedUser.UserName; // Does tag exist?