PerlRegexFactory: static Regex field should be readonly to
prevent accidental reassignment.
Closes#36
Co-authored-by: admin <admin@ardentleatherworks.com>
Convert blocking GetAwaiter().GetResult() to proper await pattern
in the API controller method.
Partial fix for #32
Co-authored-by: admin <admin@ardentleatherworks.com>
- Remove continue-on-error from integration tests
- Set fail-on-error: true on test reporter
Closes#56
Co-authored-by: admin <admin@ardentleatherworks.com>
Add guard clauses to prevent InvalidOperationException when
movieFiles list is empty in bulk update/delete operations
Co-authored-by: admin <admin@ardentleatherworks.com>
Replace .Single() with .SingleOrDefault() when reading Config element
from XML to prevent InvalidOperationException on malformed config files
Co-authored-by: admin <admin@ardentleatherworks.com>
- FileStationProxy: throw if no file info returned from API
- NzbVortex: return outputPath if no files in response
- RTorrent: use FirstOrDefault() for validation errors
Prevents InvalidOperationException on empty collections
Co-authored-by: admin <admin@ardentleatherworks.com>
- Update workflow triggers to use main instead of master
- Update CONTRIBUTING.md to reference main branch
- Aligns with documentation in CLAUDE.md
Closes#52
Note: Actual branch rename (master → main) must be done on GitHub.
Co-authored-by: admin <admin@ardentleatherworks.com>
* fix(frontend): replace any types with proper TypeScript types
- AutoSuggestInput: use Data type from popper.js for modifier callback
- Tooltip: use Data type from popper.js for computeMaxSize callback
- OverlayScroller: use ComponentPropsWithoutRef<'div'> for renderView
- index.ts: use unknown[] instead of any[] for logError parameters
Improves type safety and removes eslint-disable comments.
Partially addresses #37
* fix(frontend): use ModifierFn type and string values for Popper styles
- Use ModifierFn type from popper.js for modifier callbacks
- Calculate bottom/right from offset properties (top+height, left+width)
- Convert numeric style values to strings with 'px' suffix
- Fix typo: 'botton' -> 'bottom' in AutoSuggestInput
---------
Co-authored-by: admin <admin@ardentleatherworks.com>
- Update workflow triggers to use main instead of master
- Update CONTRIBUTING.md to reference main branch
- Aligns with documentation in CLAUDE.md
Closes#52
Note: Actual branch rename (master → main) must be done on GitHub.
Co-authored-by: admin <admin@ardentleatherworks.com>
- MoreInfo: point to Aletheia GitHub instead of Radarr resources
- UpdateChanges: link issue numbers to Aletheia repo
- Add "Upstream" translation key for Radarr reference link
Closes#53
Co-authored-by: admin <admin@ardentleatherworks.com>
* fix: SonarCloud null safety and struct comparison issues
- OsPath.cs: Remove ReferenceEquals checks on struct (always false)
- SkyHookProxy.cs: Add null-conditional operators for Credits.Cast/Crew
* fix: remaining React index-as-key issues and backend null safety
Frontend:
- Fix 8 remaining index-as-key violations using content-based keys
- ImportMovieSelectFolder.js: use errorMessage as key
- ImportMovieFooter.js: use errorMessage as key
- CustomFormat.js: use item.name as key
- AddSpecificationItem.js: use preset.name as key
- QualityProfileItems.js: use message as key
- QualityProfileFormatItems.js: use message as key
Backend (cherry-picked from batch-3):
- OsPath.cs: Remove ReferenceEquals on struct
- SkyHookProxy.cs: Add null-conditional for Credits
* refactor(notifications): consolidate GetPosterUrl to base class
* docs: add architectural decisions log
* fix(sonar): enable path traversal suppressions for media management app
---------
Co-authored-by: admin <admin@ardentleatherworks.com>
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
- Create eslint.config.mjs with ESM flat config format
- Remove legacy .eslintrc.js and .eslintignore
- Remove eslint-plugin-filenames (not ESLint 9 compatible)
- Update lint-staged to use new config
- Clean up unused eslint-disable directives