* fix(mediarequest entity): narrow cascade to insert & remove to prevent hook recursion
Restrict cascade options on the MediaRequest→Media relation to only `insert` and `remove`to avoid
nested subscriber/AfterUpdate recursion when saving entities.
* fix(mediarequest): move methods modifying MediaRequest to its Subscriber
* fix(mediasubscriber): use event.manager for parent media updates on remove
Replace `getRepository(Media)` calls with `event.manager` in the `afterRemove` hook so that
parent-media status resets run within the same transaction/QueryRunner (important for postgresql.
Doesnt affect sqlite).
* refactor(mediasubscriber): make afterInsert and afterUpdate async and await internal operations
This should prevent unhandled promise rejections and ensure sequential execution of lifecycle
actions
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
* fix: filter specials from modal all seasons and watchlist
* fix: skip specials when marking available
* fix: edge case where specials were marked as completed
* fix: modified media status handling when media has been deleted
fix: requests will now be updated to completed on scan
fix: modified components to display deleted as a status
fix: corrected media status switching away from deleted
fix: modified components to display deleted as a status
fix: corrected media status switching away from deleted
fix: base scanner will set requests to completed correctly
fix: mark available button correctly sets requests as completed
fix: status will now stay deleted after declined request
refactor: request completion handling moved to entity
fix: prevented notifications from sending to old deleted requests
refactor: cleaned up code and added more detail to logs
refactor: updated to reflect latest availability sync changes
* fix: fetch requests only if necessary in db and remove unneeded code
* fix: update request button logic to accomodate specials
fix: remove completed filtering in tv details
* fix: correctly set seasons status when using the manual button
* refactor: improve reliability of season request completion
refactor: remove seasonrequest code
* fix: send notification for 4k movies
fix: same for shows
* feat: add completed filter to requests list
refactor: correct label
* Merge series tags instead of overwriting when adding a series that already exists
Currently, a request coming in for a series that already exists in sonarr nukes the tags in sonarr for the series in favor of the tags coming from overseerr. This change merges the two lists of tags and deduplicates them before sending them to sonarr.
* fix(servarr api): merge request media tags with servarr instead of overwriting
---------
Co-authored-by: Danshil Kokil Mungur <me@danshilm.com>
refactor: organized placement of new button + added comments
fix: added api routes for push registration
fix: modified get request to confirm key identity
fix: added back notification types to always show
feat: added a manageable device list
refactor: modified device list to make it mobile friendly
fix: correct typo for enabling notifications
* feat: add support for requesting "Specials" for TV Shows
This commit is responsible for adding support in Overseerr for requesting "Special" episodes for TV
Shows. This request has become especially pertinent when you consider shows like "Doctor Who". These
shows have Specials that are critical to understanding the plot of a TV show.
fix#779
* chore(yarn.lock): undo inappropriate changes to yarn.lock
I was informed by @sct in a comment on the #3724 PR that it was not appropriate to commit the
changes that ended up being made to the yarn.lock file. This commit is responsible, then, for
undoing the changes to the yarn.lock file that ended up being submitted.
* refactor: change loose equality to strict equality
I received a comment from OwsleyJr pointing out that we are using loose equality when we could
alternatively just be using strict equality to increase the robustness of our code. This commit
does exactly that by squashing out previous usages of loose equality in my commits and replacing
them with strict equality
* refactor: move 'Specials' string to a global message
Owsley pointed out that we are redefining the 'Specials' string multiple times throughout this PR.
Instead, we can just move it as a global message. This commit does exactly that. It squashes out and
previous declarations of the 'Specials' string inside the src files, and moves it directly to the
global messages file.
* perf(watchlist): add E-Tag caching to Plex watchlist requests
* refactor(watchlist): increase frequency of watchlist requests
* fix: sync watchlist every 3 min instead of 3 sec
* 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
This PR removes the spaces in the tags sent to *arr when the Tag Requests option is enabled. Spaces
in tags are an unintended behavior and are not longer supported.
fix#1897
* fix: ensure dnsCache is checked for when its enabled before initialization
previously dnsCache was being initialized even if it was disabled because the previous check was
always returning truthy.
fix#1857
* chore: update dns-caching to 0.2.6
This will allow dns-caching to respect forceIpv4 flag.
* chore: update dns-caching to 0.2.7
* feat(notifications): make images optional
* fix(notifications): added en i18n config
* fix: prettify
* fix(notifications): added embedImage support for ntfy
* fix(frontend): update embedImage on form state change and submission
* fix(locale): updated locale for embedImage
* fix: renamed embedImage to embedPoster
* feat(dns): implement dns caching
* feat: simple implementation of dnscaching
* feat: dynamic ttl which is revalidated while using stale dns cache
This is done as tmdb ttl is very less like 40 seconds so to make sure
any issues wont be caused due to cached dns (previously we were caching
for 5 minutes no matter what ttl)
* feat(dns): improve DNS cache with multi-strategy fallback system
- multiple DNS resolution strategie
- graceful fallbacks between IPv6 and IPv4 addresses
- network error reporting in fetch fix
- compatibility with cypress testing (I HOPE)
* fix: typos
* feat: dns cache stats in jobs & cache page (and cleanup)
* feat(networksettings): cache dns off by default
* feat: make dnsCache optional and enable-able through network settings
* chore(i18n): extract translation keys
* test(cypress): fix cypress testing
* feat(dnscache): dns cache entries are now flushable
* style(cypress): run prettier
* chore(cypresssettings): git ignore cypress json settings
* chore: ignore cypress/config/settings.json
* fix(dnscache): use entry specific hits and misses not global
* refactor: clean up console logs
* fix(dnscache): fix miss counter
* feat(dnscache): global stats
* chore(i18n): extract translation keys
* refactor: use date-fns for formatting age and remove useless code
* refactor: remove cypress testing options in dnsCacheManager
* refactor: remove console logs
* refactor: removed useless condition when its always truthy
* fix: remove FetchAPI-related code
* fix: remove old ipv4first setting
* refactor: use our own dns-caching package instead
* fix: correct dns-caching module configuration
* fix: correct dns-caching module configuration
* fix: remove useless lru-cache dependency
* fix: update dns-caching to v0.2.0
* fix: add env variable for min/max ttl & update dns-caching
* fix: update dns-caching package
* fix: add force min/max TTL in network settings
* docs: add docs for dns caching
---------
Co-authored-by: Gauthier <mail@gauthierth.fr>
* fix(MediaRequestSubscriber): use event manager to get fresh media state for MEDIA_AVAILABLE notifications
* refactor(MediaRequestSubscriber): streamline media availability notifications
* 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
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