Fix SonarCloud bugs: threading, React state, sorting

Backend:
- S2445: Make _connections readonly in MessageHub.cs to fix locking issue

Frontend:
- S6756: Use callback form of setState when referencing previous state
  - Collection.js, DiscoverMovie.js, ImportMovie.js
  - ImportMovieSelectMovie.js, EditQualityProfileModalContentConnector.js
- S2871: Add localeCompare for proper alphabetical sorting
  - Collection.js, DiscoverMovie.js, MovieIndex.tsx
- S1764: Remove duplicate condition in QualityProfileSelectInput.tsx
This commit is contained in:
admin 2025-12-19 15:15:24 -06:00
parent 220eba471b
commit 6d17e5eaff
8 changed files with 16 additions and 15 deletions

View file

@ -50,7 +50,7 @@ class ImportMovie extends Component {
onSelectAllChange = ({ value }) => { onSelectAllChange = ({ value }) => {
// Only select non-dupes // Only select non-dupes
this.setState(selectAll(this.state.selectedState, value)); this.setState((prevState) => selectAll(prevState.selectedState, value));
}; };
onSelectedChange = ({ id, value, shiftKey = false }) => { onSelectedChange = ({ id, value, shiftKey = false }) => {

View file

@ -78,7 +78,7 @@ class ImportMovieSelectMovie extends Component {
this._addListener(); this._addListener();
} }
this.setState({ isOpen: !this.state.isOpen }); this.setState((prevState) => ({ isOpen: !prevState.isOpen }));
}; };
onSearchInputChange = ({ value }) => { onSearchInputChange = ({ value }) => {

View file

@ -151,7 +151,7 @@ class Collection extends Component {
return acc; return acc;
}, {}); }, {});
const order = Object.keys(characters).sort(); const order = Object.keys(characters).sort((a, b) => a.localeCompare(b));
// Reverse if sorting descending // Reverse if sorting descending
if (sortDirection === sortDirections.DESCENDING) { if (sortDirection === sortDirections.DESCENDING) {
@ -182,11 +182,13 @@ class Collection extends Component {
}; };
onSelectAllChange = ({ value }) => { onSelectAllChange = ({ value }) => {
this.setState(selectAll(this.state.selectedState, value)); this.setState((prevState) => selectAll(prevState.selectedState, value));
}; };
onSelectAllPress = () => { onSelectAllPress = () => {
this.onSelectAllChange({ value: !this.state.allSelected }); this.setState((prevState) =>
selectAll(prevState.selectedState, !prevState.allSelected)
);
}; };
onRefreshMovieCollectionsPress = () => { onRefreshMovieCollectionsPress = () => {

View file

@ -94,10 +94,7 @@ function QualityProfileSelectInput({
); );
useEffect(() => { useEffect(() => {
if ( if (!value || !values.some((option) => option.key === value)) {
!value ||
!values.some((option) => option.key === value || option.key === value)
) {
const firstValue = values.find( const firstValue = values.find(
(option) => typeof option.key === 'number' (option) => typeof option.key === 'number'
); );

View file

@ -175,7 +175,7 @@ class DiscoverMovie extends Component {
return acc; return acc;
}, {}); }, {});
const order = Object.keys(characters).sort(); const order = Object.keys(characters).sort((a, b) => a.localeCompare(b));
// Reverse if sorting descending // Reverse if sorting descending
if (sortDirection === sortDirections.DESCENDING) { if (sortDirection === sortDirections.DESCENDING) {
@ -214,11 +214,13 @@ class DiscoverMovie extends Component {
}; };
onSelectAllChange = ({ value }) => { onSelectAllChange = ({ value }) => {
this.setState(selectAll(this.state.selectedState, value)); this.setState((prevState) => selectAll(prevState.selectedState, value));
}; };
onSelectAllPress = () => { onSelectAllPress = () => {
this.onSelectAllChange({ value: !this.state.allSelected }); this.setState((prevState) =>
selectAll(prevState.selectedState, !prevState.allSelected)
);
}; };
onImportListSyncPress = () => { onImportListSyncPress = () => {

View file

@ -219,7 +219,7 @@ const MovieIndex = withScrollPosition((props: Readonly<MovieIndexProps>) => {
return acc; return acc;
}, {}); }, {});
const order = Object.keys(characters).sort(); const order = Object.keys(characters).sort((a, b) => a.localeCompare(b));
// Reverse if sorting descending // Reverse if sorting descending
if (sortDirection === DESCENDING) { if (sortDirection === DESCENDING) {

View file

@ -474,7 +474,7 @@ class EditQualityProfileModalContentConnector extends Component {
}; };
onToggleEditGroupsMode = () => { onToggleEditGroupsMode = () => {
this.setState({ editGroups: !this.state.editGroups }); this.setState((prevState) => ({ editGroups: !prevState.editGroups }));
}; };
// //

View file

@ -25,7 +25,7 @@ public async Task BroadcastMessage(SignalRMessage message)
public class MessageHub : Hub public class MessageHub : Hub
{ {
private static HashSet<string> _connections = new HashSet<string>(); private static readonly HashSet<string> _connections = new HashSet<string>();
public static bool IsConnected public static bool IsConnected
{ {