240 Commits
Author SHA1 Message Date
0xsysr3ll 9a5c89fb96 fix(plex): do not cache invalid Discover watchlist responses (#3406) 2026-10-05 21:10:02 +02:00
0xsysr3ll 103976d1b4 fix(plex): limit concurrent watchlist metadata requests (#3251) 2026-09-25 17:31:32 +02:00
fallenbagel 34b28d0aba fix(scanner): confirm orphan candidates against the servers before declining (#3399) 2026-09-14 17:30:29 +02:00
fallenbagel 2759058aeb fix(discover): fix tv title sorting and validate sortBy per media type (#3305) 2026-08-28 15:19:07 +02:00
Parman Mohammadalizadeh a123d20b2c feat(api): send a Seerr user agent on outbound requests (#3395) 2026-08-27 17:08:17 +02:00
fallenbagel 59ad5f1916 perf: bound tmdb cache & split scan lookups into their own tier (#3367) 2026-08-27 18:09:14 +05:00
fallenbagel 4d17e08b91 fix: stop masking connection failures across media server sync and login (#3324) 2026-08-16 18:31:44 +05:00
fallenbagel c9f2ac58be fix: keep library settings when renamed on media server (#3323) 2026-08-16 18:31:44 +05:00
fallenbagel 8ea0c174ea fix: handle already-removed media in radarr/sonarr delete (#3209) 2026-07-30 00:49:55 +05:00
fallenbagel 74c8db42a6 feat: add jellyfin/emby quick connect authentication (#2212) 2026-07-03 13:32:20 +02:00
fallenbagel 8ad191f42b fix(proxy): proxy clients built before proxy init (#3196) 2026-06-25 01:49:58 +02:00
Defendi 99f8520f48 fix(plex-watchlist-sync): handle MediaContainer.Video fallback in watchlist sync (#2992) 2026-05-08 14:09:50 +02:00
fallenbagel 7861db4941 fix(imdbRadarrProxy): pass headers and nodeCache as options instead of params (#2900) 2026-04-17 12:57:27 +02:00
fallenbagel fe2c0416ef fix(emby): use static version in auth header for emby only (#2821) 2026-04-07 23:12:54 +02:00
Shyam 56b79ff38c feat(i18n): add Estonian language support (#2611) 2026-03-29 02:54:52 +08:00
YakGravity 10f23f009d fix(jellyfin-scanner): add TheMovieDb provider fallback for Jellyfin scanner (#2605) 2026-03-17 16:18:43 +01:00
0xsysr3ll 90d407d410 fix(movie,tv): respect display language for trailers (#2674) 2026-03-16 18:29:40 +01:00
Michael Thomas 36243a0deb chore: upgrade to eslint v9 (#2574) 2026-03-16 21:12:30 +05:00
0xsysr3ll dccdc95927 feat(i18n): add Luxembourgish language support (#2671) 2026-03-12 19:07:58 +05:00
0xsysr3ll 40edaea43f feat(i18n): add Vietnamese language support (#2670) 2026-03-12 15:59:56 +05:00
bogo22 4ce0db1959 feat(trending): add filter options (#2137)
Signed-off-by: Florian Hoech <[email protected]>
2026-03-05 15:24:55 +05:00
fallenbagel 5c34c91257 feat(sonarr): add monitorNewItems option to sonarr settings & modal (#2071) 2026-02-28 02:08:44 +05:00
Kenshin9977 55776ea24f fix(radarr): trigger search for existing monitored movies without files (#2391) 2026-02-25 15:58:05 +01:00
fallenbagel 3bcb4da1e5 feat(servarr-api): make Servarr API request timeout configurable (#2556) 2026-02-23 00:32:31 +01:00
fallenbagel b499976902 fix(servarr): increase default API timeout from 5000ms to 10000ms (#2442) 2026-02-15 17:19:27 +05:00
fallenbagel faa2c0a005 fix(servarr): add timeout to Radarr/Sonarr API requests to prevent infinite loading (#2375)
* fix(servarr): add timeout to Radarr/Sonarr API requests to prevent infinite loading

Adds a 5-second timeout to all Radarr/Sonarr API requests and displays a warning banner when
services are unreachable. This prevents the Recent Requests section and request list pages from
hanging indefinitely when a configured service has connection issues.

fix #2374

* fix(requests): only show service error banner to users with advanced permissions
2026-02-06 21:38:21 +01:00
fallenbagel 8b41685b31 chore(deps): upgrade prettier, and tailwind (#2351) 2026-01-29 07:48:34 +01:00
fallenbagel f627a8e9db refactor(api): replace plex-api package with internal implementation (#2335)
Removes plex-api dependency and its type declarations. Then extends the ExternalApi class for
PlexAPI implementation to mimick the exact same old behaviour. This should resolve the security
vulnerabilities in transitive dependencies: form-data(critical), request (moderate, deprecated),
tough-cookie (moderate), xml2js (moderate). Plex-api itself is also no longer maintained.
2026-01-26 20:52:44 +01:00
fallenbagel 88b2e7843f fix(sonarr): re-monitor episodes when re-requesting deleted but monitored seasons (#2312) 2026-01-20 18:34:21 +01:00
RolliePollie18andpatrick-acland 15356dfe49 fix(jellyfin-scan): reduce jellyfin API calls during recently added scan (#2205)
* fix(jellyfin scanner): reduce jellyfin API calls during recently added scan

Significantly reduce number of API calls, addressing CPU spikes on Jellyfin 10.10+ servers.- Move
getSeasons() call outside the seasons loop (N calls to 1)- Request MediaSources via getEpisodes()
field parameter instead of  individual getItemData() calls per episode (N calls to 1 per season)
Performance improvements (tested on library with 12 TV shows):- Scan duration: 43.7s to 9.1s - Peak
CPU: 277% to 115% - CPU spike duration: 36s to 2s Functionality is unchanged, all availability
statuses identicalbefore and after.

* fix: add getEpisodes overloads to remove unsafe type assertion

* refactor(jellyfin): use generics instead of overloads

---------

Co-authored-by: patrick-acland <[email protected]>
2025-12-09 22:20:47 +08:00
fallenbagel f4fe16608a fix(jellyfin-api): use standard Authorization header (#2211)
Replace X-Emby-Authorization with Authorization header to fix authentication failures when users
have <EnableLegacyAuthorization>false</EnableLegacyAuthorization> in their Jellyfin system.xml.
2025-12-08 15:46:47 +01:00
TacoCake 2e6e9ad657 fix: include video content in the blacklisted tags processing job (#1736)
* fix: include video content in the blacklisted tags processing job

Modified the “blacklisted tags” job to include adult & video content, this correctly blacklists more
adult films that were always missed, even if they had the tag.

* refactor: remove dead code

* refactor: remove redundant explicit arguments
2025-10-28 20:29:04 -06:00
salty a8c7e35f56 fix(api): cleanup radarr bits in sonarr api (#2035) 2025-10-12 17:19:51 +02:00
TheCatLady 2e2d2a031b chore: rename Jellyseerr -> Seerr, part 1 (#1984)
* chore: rename Jellyseerr -> Seerr, part 1

* chore: update Jellyfin bot name
2025-10-06 15:22:36 -07:00
Gauthier f2bd0abcd8 fix(api): add a migration script to rename *arr tags with spaces (#1946)
* fix(api): add a migration script to rename *arr tags with spaces

This PR adds a migration script that will run at the startup of the app to remove the spaces from
the *arr tags of Jellyseerr.

fix #1897
re #1913
re https://github.com/Radarr/Radarr/issues/11251

* fix: add error message to logs
2025-10-01 11:42:10 +02:00
ale183andGauthier b209e7fdf9 feat: add anidb support to jellyfin scanner (#1533)
* feat: anidb on jellyfin scanner

* fix: handle 4k movies if the provider is anidb

* fix: add nullish coalescing for anidbId

* Update server/lib/scanners/jellyfin/index.ts

Co-authored-by: Gauthier <[email protected]>

* fix: await getEpisodes call in JellyfinScanner to handle async behavior

---------

Co-authored-by: Gauthier <[email protected]>
2025-09-25 19:04:42 +05:00
Gauthier 328517cc0a fix(watchlist): handle undefined Guid for Plex watchlist metadata (#1914) 2025-09-21 20:46:29 +05:00
0xsysr3ll cd479d0d17 feat(api): add excludeKeywords parameter to discovery queries (#1908)
Signed-off-by: 0xsysr3ll <[email protected]>
2025-09-17 03:32:39 +08:00
Gauthier e9f2f4490f fix(api): catch error when watchlist item doesn't exist anymore (#1907) 2025-09-16 15:42:41 +02:00
THOMAS B 4878722030 fix(tvdb): respect display language when fetching metadata (#1889)
* fix(tvdb): respect display language when fetching metadata

* refactor(tvdb): use seasons translation

* refactor(tvdb): limit while loop

* fix(tvdb): fix translation with '-'

* refactor(tvdb): remove logs

* style(tvdb): remove useless logs

* refactor(tvdb): simplify wanted translation condition

* refactor(languages): move AvailableLocale  from context to types
2025-09-08 20:20:21 +08:00
THOMAS B 6245dae3b3 fix(tvdb): return specials seasons (#1894) 2025-09-08 10:49:26 +02:00
22b2824441 feat: add tvdb indexer (#899)
* feat(tvdb): get tv seasons/episodes with tvdb

* fix: fix rate limiter index tvdb indexer

* fix(usersettings): remove unused column tvdbtoken

* refactor(tvdb): replace tvdb api by skyhook

* fix: error during get episodes

* fix: error if tmdb poster is null

* refactor: clean tvdb indexer code

* fix: wrong language with tmdb indexer

* style: replace avalaible to available

* style: tvdb.login to tvdb.test

* fix(test): fix  discover test

* fix(test): wrong url tv-details

* test(tvdb): add tvdb tests

* style(tvdb): rename pokemon to correct tv show

* refactor(indexer): remove unused getSeasonIdentifier method

* refactor(settings): replace tvdb object to boolean type

* refactor(tmdb): reduce still path condition

* test(tvdb): change 'use' to 'tvdb' condition check

* fix(tmdb): fix build

fix build after rebase

* fix(build): revert package.json

* fix(tvdb): ensure that seasons contain data

* refactor(swagger): fix /tvdb/test response

* fix(scanner): add tvdb indexer for scanner

* refactor(tvdb): remove skyhook api

* refactor(tvdb): use tvdb api

* fix(tvdb): rename tvdb to medatada

* refactor(medata): add tvdb settings

* refactor(metadata): rewrite metadata settings

* refactor(metadata): refactor metadata routes

* refactor(metadata): remove french comments

* refactor(metadata): refactor tvdb api calls

* style(prettier): run prettier

* fix(scanner): fix jellyfin scanner with tvdb provider

* fix(scanner): fix plex scanner tvdb provider

* style(provider): change provider name in info section

* style(provider): full provider name in select

* style(provider): remove french comment

* fix(tests): fix all cypress tests

* refactor(tvdb): fix apikey

* refactor(tmdb): apply prettier

* refactor(tvdb): remove logger info

* feat(metadata): replace fetch with axios for API calls

* feat(provider): replace indexer by provider

* fix(tests): fix cypress test

* chore: add project-wide apikey for tvdb

* chore: add correct application-wide key

* fix(test): fix test with default provider tmdb anime

* style(cypress): fix anime name variable

* chore(i18n): remove french translation + apply i18n:extract

* style(wording): standardize naming to "Metadata Provider" in UI text

* docs(comments): translate from French to English

* refactor(tvdb): remove unnecessary try/catch block

* feat(i18n): add missing translations

* fix(scanner): correct metadata provider ID from Tmdb to Tvdb

* style(settings): clarify navigation label from "Metadata" to "Metadata Providers"

* style(logs): update error log label from "Metadata" to "MetadataProvider"

* refactor(tvdb): replace indexer by metadata providers

* refactor(settings): remove metadata providers logo

* fix(config): restore missing config/db/.gitkeep file

---------

Co-authored-by: TOomaAh <ubuntu@PC>
Co-authored-by: fallenbagel <[email protected]>
2025-09-02 22:40:47 +02:00
Georgy d3fd5028dc feat: add IMDb rating votes count in tooltip (#1696)
* feat: add IMDb rating votes count in tooltip

* feat: add IMDb rating votes count in tooltip

* feat: add IMDb rating votes count in tooltip
2025-08-19 22:26:42 +02:00
0xsysr3ll 17d4f13afe fix(api): update Plex Watchlist URL (#1847) 2025-08-15 03:57:30 +08:00
0xsysr3ll ca1686425b fix(blacklist): handle invalid keywords gracefully (#1815)
* fix(blacklist): handle invalid keywords gracefully

* fix(blacklist): only remove keywords on 404 errors

* fix(blacklist): remove non-null assertion and add proper type annotation

* refactor(blacklist): return null instead of 404 for missing keywords

* fix(blacklist): add type annotation for validKeywords

* fix(selector): update type annotation for validKeywords
2025-08-01 11:03:22 +02:00
Gauthier 75a7279ea2 fix(proxy): modify the registration of the axios interceptors (#1791)
The previous way of adding Axios interceptors added a new interceptor each time, causing lags after
a while because of all the duplicate interceptors added.

fix #1787
2025-07-20 11:33:16 +02:00
Gauthier b83367cbf2 fix(proxy): apply all proxy settings to Axios (#1741) 2025-06-25 22:40:24 +08:00
Gauthier c7284f473c fix(jellyfin): use the same deviceId for admins (#1710)
* fix(jellyfin): use the same deviceId for admins

This PR will make Jellyseerr use the same deviceId for the admin user everytime he logins to
Jellyfin/Emby. The previous behavior with different deviceId was creating new entries on the media
at every request.

* fix: remove useless check
2025-06-12 23:52:01 +05:00
0xsysr3ll b27dbd7a15 fix(jellyfin): clean up Jellyfin sessions on Jellyseerr logout (#1651)
* fix(jellyfin): clean up Jellyfin sessions on Jellyseerr logout

* refactor(auth): remove deleteUserDevice method and handle device deletion directly in logout process

* refactor(auth): optimize logout route for Jellyfin/Emby

Only query database for Jellyfin/Emby users during logout to avoid unnecessary database queries for Plex/local users. This improves performance by skipping the device deletion process when it's not needed.
2025-05-16 20:42:40 +08:00
Dillion 149d79e540 feat: add content certification/age-rating filter (#1418)
* feat(api): add TMDB certifications endpoint and discover certification params

re #501

* feat(discover): add certification/age-rating filter to movies and series

Add generic and US-only certification selector components, update Discover FilterSlideover, add
certification options to query constants

re #501

* fix(certificationselector): fix linter warning from useEffect missing dependency

* fix(jellyseerr-api.yml): prettier formatting

* chore(translation keys): run pnpm i18n:extract

* fix(certificationselector): change query destructure to Zod omit, fix translations, fix formatting

* style: fix whitespace with prettier
2025-05-07 01:55:02 +08:00