From 9d601b7cc07d479c9760bfc5716bea66790335e5 Mon Sep 17 00:00:00 2001 From: Will Burland Date: Fri, 9 Jan 2026 19:20:02 +0000 Subject: [PATCH] Fix linting and build errors --- .../DownloadStatusFilterBuilderRowValue.js | 2 +- .../Filter/Builder/FilterBuilderRow.js | 2 +- .../src/Movie/Index/Table/MovieIndexRow.css | 9 +++++ .../Movie/Index/Table/MovieIndexRow.css.d.ts | 1 + frontend/src/Movie/Movie.ts | 8 +++- src/Radarr.Api.V3/Movies/MovieController.cs | 8 ++-- .../Movies/MovieControllerWithSignalR.cs | 2 +- .../Movies/MovieEditorController.cs | 2 +- src/Radarr.Api.V3/Movies/MovieResource.cs | 37 +++++-------------- 9 files changed, 35 insertions(+), 36 deletions(-) diff --git a/frontend/src/Components/Filter/Builder/DownloadStatusFilterBuilderRowValue.js b/frontend/src/Components/Filter/Builder/DownloadStatusFilterBuilderRowValue.js index d97eb3fa13..249b081589 100644 --- a/frontend/src/Components/Filter/Builder/DownloadStatusFilterBuilderRowValue.js +++ b/frontend/src/Components/Filter/Builder/DownloadStatusFilterBuilderRowValue.js @@ -38,7 +38,7 @@ const protocols = [ get name() { return translate('Unreleased'); } - }, + } ]; function DownloadStatusFilterBuilderRowValue(props) { diff --git a/frontend/src/Components/Filter/Builder/FilterBuilderRow.js b/frontend/src/Components/Filter/Builder/FilterBuilderRow.js index cc60be009b..41ad28497d 100644 --- a/frontend/src/Components/Filter/Builder/FilterBuilderRow.js +++ b/frontend/src/Components/Filter/Builder/FilterBuilderRow.js @@ -6,6 +6,7 @@ import { filterBuilderTypes, filterBuilderValueTypes, icons } from 'Helpers/Prop import sortByProp from 'Utilities/Array/sortByProp'; import BoolFilterBuilderRowValue from './BoolFilterBuilderRowValue'; import DateFilterBuilderRowValue from './DateFilterBuilderRowValue'; +import DownloadStatusFilterBuilderRowValue from './DownloadStatusFilterBuilderRowValue'; import FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector'; import HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue'; import ImportListFilterBuilderRowValueConnector from './ImportListFilterBuilderRowValueConnector'; @@ -13,7 +14,6 @@ import IndexerFilterBuilderRowValueConnector from './IndexerFilterBuilderRowValu import LanguageFilterBuilderRowValue from './LanguageFilterBuilderRowValue'; import MinimumAvailabilityFilterBuilderRowValue from './MinimumAvailabilityFilterBuilderRowValue'; import MovieFilterBuilderRowValue from './MovieFilterBuilderRowValue'; -import DownloadStatusFilterBuilderRowValue from './DownloadStatusFilterBuilderRowValue'; import ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue'; import QualityFilterBuilderRowValueConnector from './QualityFilterBuilderRowValueConnector'; import QualityProfileFilterBuilderRowValue from './QualityProfileFilterBuilderRowValue'; diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.css b/frontend/src/Movie/Index/Table/MovieIndexRow.css index 6b8091960c..a59f45e78a 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.css +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.css @@ -67,6 +67,15 @@ flex-direction: column; } +.downloadStatus { + composes: cell; + + display: flex; + justify-content: center; + flex: 0 0 150px; + flex-direction: column; +} + .certification { composes: cell; diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.css.d.ts b/frontend/src/Movie/Index/Table/MovieIndexRow.css.d.ts index 441f0219d4..5234c6a057 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.css.d.ts +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.css.d.ts @@ -8,6 +8,7 @@ interface CssExports { 'checkInput': string; 'collection': string; 'digitalRelease': string; + 'downloadStatus': string; 'externalLinks': string; 'genres': string; 'imdbRating': string; diff --git a/frontend/src/Movie/Movie.ts b/frontend/src/Movie/Movie.ts index da7a4630a7..bb568788f2 100644 --- a/frontend/src/Movie/Movie.ts +++ b/frontend/src/Movie/Movie.ts @@ -13,7 +13,13 @@ export type MovieStatus = export type MovieAvailability = 'announced' | 'inCinemas' | 'released'; -export type DownloadStatus = 'downloaded' | 'unmonitored' | 'missingMonitored' | 'missingUnmonitored' | 'queue' | 'continuing'; +export type DownloadStatus = + | 'downloaded' + | 'unmonitored' + | 'missingMonitored' + | 'missingUnmonitored' + | 'queue' + | 'continuing'; export type CoverType = 'poster' | 'fanart' | 'headshot'; diff --git a/src/Radarr.Api.V3/Movies/MovieController.cs b/src/Radarr.Api.V3/Movies/MovieController.cs index 36f684be2b..36dce0899c 100644 --- a/src/Radarr.Api.V3/Movies/MovieController.cs +++ b/src/Radarr.Api.V3/Movies/MovieController.cs @@ -19,11 +19,11 @@ using NzbDrone.Core.Movies.Events; using NzbDrone.Core.Movies.Translations; using NzbDrone.Core.MovieStats; +using NzbDrone.Core.Queue; using NzbDrone.Core.RootFolders; using NzbDrone.Core.Validation; using NzbDrone.Core.Validation.Paths; using NzbDrone.SignalR; -using NzbDrone.Core.Queue; using Radarr.Http; using Radarr.Http.REST; using Radarr.Http.REST.Attributes; @@ -60,7 +60,7 @@ public MovieController(IBroadcastSignalRMessage signalRBroadcaster, IRootFolderService rootFolderService, IUpgradableSpecification qualityUpgradableSpecification, IConfigService configService, - IQueueService queueService, + IQueueService queueService, RootFolderValidator rootFolderValidator, MappedNetworkDriveValidator mappedNetworkDriveValidator, MoviePathValidator moviesPathValidator, @@ -154,8 +154,8 @@ public List AllMovie(int? tmdbId, bool excludeLocalCovers = false foreach (var movie in movies) { - var translation = GetTranslationFromDict(tdict, movie.MovieMetadata, translationLanguage); - moviesResources.Add(movie.ToResource(availDelay, translation, _qualityUpgradableSpecification, null, _queueService)); + var translation = GetTranslationFromDict(tdict, movie.MovieMetadata, translationLanguage); + moviesResources.Add(movie.ToResource(availDelay, translation, _qualityUpgradableSpecification, null, _queueService)); } if (!excludeLocalCovers) diff --git a/src/Radarr.Api.V3/Movies/MovieControllerWithSignalR.cs b/src/Radarr.Api.V3/Movies/MovieControllerWithSignalR.cs index 51920225b4..eb0a6f7206 100644 --- a/src/Radarr.Api.V3/Movies/MovieControllerWithSignalR.cs +++ b/src/Radarr.Api.V3/Movies/MovieControllerWithSignalR.cs @@ -6,7 +6,6 @@ using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Download; -using NzbDrone.Core.Queue; using NzbDrone.Core.Languages; using NzbDrone.Core.MediaCover; using NzbDrone.Core.MediaFiles.Events; @@ -14,6 +13,7 @@ using NzbDrone.Core.Movies; using NzbDrone.Core.Movies.Translations; using NzbDrone.Core.MovieStats; +using NzbDrone.Core.Queue; using NzbDrone.SignalR; using Radarr.Http.REST; diff --git a/src/Radarr.Api.V3/Movies/MovieEditorController.cs b/src/Radarr.Api.V3/Movies/MovieEditorController.cs index 3fe3fec48c..109d533fd5 100644 --- a/src/Radarr.Api.V3/Movies/MovieEditorController.cs +++ b/src/Radarr.Api.V3/Movies/MovieEditorController.cs @@ -129,7 +129,7 @@ public IActionResult SaveAll([FromBody] MovieEditorResource resource) foreach (var movie in updatedMovies) { var translation = GetTranslationFromDict(tdict, movie.MovieMetadata, configLanguage); - var movieResource = movie.ToResource(availabilityDelay, translation, _upgradableSpecification, null, _queueService); + var movieResource = movie.ToResource(availabilityDelay, translation, _upgradableSpecification, null, _queueService); MapCoversToLocal(movieResource); diff --git a/src/Radarr.Api.V3/Movies/MovieResource.cs b/src/Radarr.Api.V3/Movies/MovieResource.cs index b34873ed05..cd297ca2a6 100644 --- a/src/Radarr.Api.V3/Movies/MovieResource.cs +++ b/src/Radarr.Api.V3/Movies/MovieResource.cs @@ -61,9 +61,6 @@ public MovieResource() public bool? HasFile { get; set; } public int MovieFileId { get; set; } - // Computed for frontend display/filtering - public string DownloadStatus { get; set; } - // Editing Only public bool Monitored { get; set; } public MovieStatusType MinimumAvailability { get; set; } @@ -89,6 +86,7 @@ public MovieResource() public float Popularity { get; set; } public DateTime? LastSearchTime { get; set; } public MovieStatisticsResource Statistics { get; set; } + public string DownloadStatus { get; set; } // Hiding this so people don't think its usable (only used to set the initial state) [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] @@ -120,31 +118,16 @@ public static MovieResource ToResource(this Movie model, int availDelay, MovieTr var hasMovieFile = movieFile != null; var isAvailable = model.IsAvailable(availDelay); - // detect if this movie has an active queue entry - var isQueued = queueService != null && queueService.GetQueue().Any(q => q.Movie != null && q.Movie.Id == model.Id); - - string downloadStatus; - - if (isQueued) + var isQueued = queueService?.GetQueue().Any(q => q.Movie?.Id == model.Id) == true; + var downloadStatus = (isQueued, hasMovieFile, isAvailable, model.Monitored) switch { - downloadStatus = "queue"; - } - else if (hasMovieFile) - { - downloadStatus = model.Monitored ? "downloaded" : "unmonitored"; - } - else if (isAvailable && !model.Monitored) - { - downloadStatus = "missingUnmonitored"; - } - else if (isAvailable) - { - downloadStatus = "missingMonitored"; - } - else - { - downloadStatus = "continuing"; - } + (true, _, _, _) => "queue", + (_, true, _, true) => "downloaded", + (_, true, _, false) => "unmonitored", + (_, false, true, false) => "missingUnmonitored", + (_, false, true, true) => "missingMonitored", + _ => "continuing" + }; return new MovieResource {