From 835ec473139e623da7b7d41a94e9c33866e4a6ea Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 19 Dec 2025 15:22:56 -0600 Subject: [PATCH] fix: SonarCloud bugs batch 2 - S2445: Make _connections readonly for thread-safe locking (MessageHub.cs) - S6756: Use setState callbacks for 5 React components - S1764: Remove duplicate expression in QualityProfileSelectInput.tsx - S2583: Remove unreachable conditions in NotificationDefinition.cs - S2259: Fix null reference in Pushcut.cs --- frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js | 2 +- .../Import/SelectMovie/ImportMovieSelectMovie.js | 2 +- frontend/src/Collection/Collection.js | 6 ++++-- .../Components/Form/Select/QualityProfileSelectInput.tsx | 5 +---- frontend/src/DiscoverMovie/DiscoverMovie.js | 6 ++++-- .../Quality/EditQualityProfileModalContentConnector.js | 2 +- src/NzbDrone.Core/Notifications/NotificationDefinition.cs | 2 +- src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs | 2 +- src/NzbDrone.SignalR/MessageHub.cs | 2 +- 9 files changed, 15 insertions(+), 14 deletions(-) diff --git a/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js b/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js index eb92afbdb3..70393d0528 100644 --- a/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js +++ b/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js @@ -50,7 +50,7 @@ class ImportMovie extends Component { onSelectAllChange = ({ value }) => { // Only select non-dupes - this.setState(selectAll(this.state.selectedState, value)); + this.setState((prevState) => selectAll(prevState.selectedState, value)); }; onSelectedChange = ({ id, value, shiftKey = false }) => { diff --git a/frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovie.js b/frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovie.js index eca2eda874..fad7155ec6 100644 --- a/frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovie.js +++ b/frontend/src/AddMovie/ImportMovie/Import/SelectMovie/ImportMovieSelectMovie.js @@ -78,7 +78,7 @@ class ImportMovieSelectMovie extends Component { this._addListener(); } - this.setState({ isOpen: !this.state.isOpen }); + this.setState((prevState) => ({ isOpen: !prevState.isOpen })); }; onSearchInputChange = ({ value }) => { diff --git a/frontend/src/Collection/Collection.js b/frontend/src/Collection/Collection.js index 3430a2ed00..b8f8a2bae5 100644 --- a/frontend/src/Collection/Collection.js +++ b/frontend/src/Collection/Collection.js @@ -182,11 +182,13 @@ class Collection extends Component { }; onSelectAllChange = ({ value }) => { - this.setState(selectAll(this.state.selectedState, value)); + this.setState((prevState) => selectAll(prevState.selectedState, value)); }; onSelectAllPress = () => { - this.onSelectAllChange({ value: !this.state.allSelected }); + this.setState((prevState) => + selectAll(prevState.selectedState, !prevState.allSelected) + ); }; onRefreshMovieCollectionsPress = () => { diff --git a/frontend/src/Components/Form/Select/QualityProfileSelectInput.tsx b/frontend/src/Components/Form/Select/QualityProfileSelectInput.tsx index e4a844c7df..984fa0e29e 100644 --- a/frontend/src/Components/Form/Select/QualityProfileSelectInput.tsx +++ b/frontend/src/Components/Form/Select/QualityProfileSelectInput.tsx @@ -94,10 +94,7 @@ function QualityProfileSelectInput({ ); useEffect(() => { - if ( - !value || - !values.some((option) => option.key === value || option.key === value) - ) { + if (!value || !values.some((option) => option.key === value)) { const firstValue = values.find( (option) => typeof option.key === 'number' ); diff --git a/frontend/src/DiscoverMovie/DiscoverMovie.js b/frontend/src/DiscoverMovie/DiscoverMovie.js index 8ec5c7badf..65dbada701 100644 --- a/frontend/src/DiscoverMovie/DiscoverMovie.js +++ b/frontend/src/DiscoverMovie/DiscoverMovie.js @@ -214,11 +214,13 @@ class DiscoverMovie extends Component { }; onSelectAllChange = ({ value }) => { - this.setState(selectAll(this.state.selectedState, value)); + this.setState((prevState) => selectAll(prevState.selectedState, value)); }; onSelectAllPress = () => { - this.onSelectAllChange({ value: !this.state.allSelected }); + this.setState((prevState) => + selectAll(prevState.selectedState, !prevState.allSelected) + ); }; onImportListSyncPress = () => { diff --git a/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContentConnector.js b/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContentConnector.js index bf6e3927e6..32126aabaf 100644 --- a/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContentConnector.js +++ b/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContentConnector.js @@ -474,7 +474,7 @@ class EditQualityProfileModalContentConnector extends Component { }; onToggleEditGroupsMode = () => { - this.setState({ editGroups: !this.state.editGroups }); + this.setState((prevState) => ({ editGroups: !prevState.editGroups })); }; // diff --git a/src/NzbDrone.Core/Notifications/NotificationDefinition.cs b/src/NzbDrone.Core/Notifications/NotificationDefinition.cs index 70d8ec9ab1..34f717c4c5 100644 --- a/src/NzbDrone.Core/Notifications/NotificationDefinition.cs +++ b/src/NzbDrone.Core/Notifications/NotificationDefinition.cs @@ -59,7 +59,7 @@ public class NotificationDefinition : ProviderDefinition, IEquatable OnGrab || OnDownload || (OnDownload && OnUpgrade) || OnRename || OnMovieAdded || OnMovieDelete || OnMovieFileDelete || (OnMovieFileDelete && OnMovieFileDeleteForUpgrade) || OnHealthIssue || OnHealthRestored || OnApplicationUpdate || OnManualInteractionRequired; + public override bool Enable => OnGrab || OnDownload || OnRename || OnMovieAdded || OnMovieDelete || OnMovieFileDelete || OnHealthIssue || OnHealthRestored || OnApplicationUpdate || OnManualInteractionRequired; public bool Equals(NotificationDefinition other) { diff --git a/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs b/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs index 717de132d6..a7fb51b597 100644 --- a/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs +++ b/src/NzbDrone.Core/Notifications/Pushcut/Pushcut.cs @@ -31,7 +31,7 @@ public override ValidationResult Test() public override void OnGrab(GrabMessage grabMessage) { - _proxy.SendNotification(MOVIE_GRABBED_TITLE, grabMessage?.Message, GetPosterUrl(grabMessage.Movie), GetLinks(grabMessage.Movie), Settings); + _proxy.SendNotification(MOVIE_GRABBED_TITLE, grabMessage?.Message, GetPosterUrl(grabMessage?.Movie), GetLinks(grabMessage?.Movie), Settings); } public override void OnDownload(DownloadMessage downloadMessage) diff --git a/src/NzbDrone.SignalR/MessageHub.cs b/src/NzbDrone.SignalR/MessageHub.cs index 9d0494e346..6f410d5f26 100644 --- a/src/NzbDrone.SignalR/MessageHub.cs +++ b/src/NzbDrone.SignalR/MessageHub.cs @@ -25,7 +25,7 @@ public async Task BroadcastMessage(SignalRMessage message) public class MessageHub : Hub { - private static HashSet _connections = new HashSet(); + private static readonly HashSet _connections = new HashSet(); public static bool IsConnected {