fix(media): clean up watchlist on error card delete#3073
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughServer DELETE /:id treats missing Media as HTTP 204; the client Clear Data flow first removes the watchlist entry, then the media record, shows toasts on unexpected failures, and refreshes SWR caches. ChangesDelisted Media Cleanup
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Fixes an issue where dismissing an “unavailable media” error card did not remove the item from the watchlist, causing it to reappear, and makes server-side media deletes resilient to concurrent/repeated delete requests.
Changes:
- Client: delete the watchlist entry first when clearing unavailable media, then revalidate the watchlist discover feed.
- Client: treat watchlist-delete 404s as non-fatal (entry may already be gone).
- Server: treat TypeORM
EntityNotFoundErrorduring delete as a successful no-op (204), and return 500 for unexpected delete failures.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/components/TitleCard/ErrorCard.tsx | Updates “Clear Data” behavior to remove watchlist entry first and revalidate affected SWR keys. |
| server/routes/media.ts | Makes media deletion idempotent by returning 204 when the entity is already missing and improving error handling. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Delete the watchlist entry before removing media on error card dismissal, refresh the watchlist discover page, and handle already-deleted media gracefully on the server fix #3046
311d526 to
afc38dd
Compare
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [seerr/seerr](https://github.com/seerr-team/seerr) | minor | `v3.2.0` → `v3.3.0` | --- ### Release Notes <details> <summary>seerr-team/seerr (seerr/seerr)</summary> ### [`v3.3.0`](https://github.com/seerr-team/seerr/releases/tag/v3.3.0) [Compare Source](seerr-team/seerr@v3.2.0...v3.3.0) ##### [3.3.0](https://github.com/seerr-team/seerr/compare/v3.2.0..v3.3.0) - 2026-06-02 ##### 🚀 Features - *(db)* Add DB\_POOL\_SIZE environment variable for postgres connection pool ([#​2990](seerr-team/seerr#2990)) - ([f093c69](seerr-team/seerr@f093c69)) - *(i18n)* Add server-side i18n for notification agents ([#​2731](seerr-team/seerr#2731)) - ([cd257ba](seerr-team/seerr@cd257ba)) - *(notification)* Add support for public seerr logo in email ([#​3036](seerr-team/seerr#3036)) - ([a8f147d](seerr-team/seerr@a8f147d)) - *(notifications)* Support multiple Discord IDs ([#​2712](seerr-team/seerr#2712)) - ([63175f5](seerr-team/seerr@63175f5)) - Add plex media ratingKey and ratingKey4k to webhook payload and… ([#​1812](seerr-team/seerr#1812)) - ([9b7b50b](seerr-team/seerr@9b7b50b)) - Add route to fetch user by jellyfin id ([#​2074](seerr-team/seerr#2074)) - ([15296a0](seerr-team/seerr@15296a0)) - Filter out "Thanks" credits when looking at a person's credits ([#​2370](seerr-team/seerr#2370)) - ([d024849](seerr-team/seerr@d024849)) ##### 🐛 Bug Fixes - *(auth)* Drop popup.closed check in Plex pin poll ([#​2941](seerr-team/seerr#2941)) - ([ce9643c](seerr-team/seerr@ce9643c)) - *(availability-sync)* Detect deleted seasons when media server retains empty season metadata ([#​2850](seerr-team/seerr#2850)) - ([9c34864](seerr-team/seerr@9c34864)) - *(discover)* Preserve keyword filter input focus after selection ([#​2962](seerr-team/seerr#2962)) - ([32169d9](seerr-team/seerr@32169d9)) - *(docs)* Enable trailingSlash to prevent 404 flash on direct navigation ([#​3039](seerr-team/seerr#3039)) - ([df105b8](seerr-team/seerr@df105b8)) - *(docs)* Switch to SWC minimizer to fix broken runtime bundle - ([d88242f](seerr-team/seerr@d88242f)) - *(docs)* Bump openapi docs packages to 5.0.2 ([#​3027](seerr-team/seerr#3027)) - ([080c68a](seerr-team/seerr@080c68a)) - *(entity)* Set the default value of UpdateDateColumn to CURRENT\_TIMESTAMP ([#​2913](seerr-team/seerr#2913)) - ([86e780e](seerr-team/seerr@86e780e)) - *(external-link)* Replace TMDB ID with IMDB ID for Trakt links ([#​2934](seerr-team/seerr#2934)) - ([f078da8](seerr-team/seerr@f078da8)) - *(imdbRadarrProxy)* Pass headers and nodeCache as options instead of params ([#​2900](seerr-team/seerr#2900)) - ([7861db4](seerr-team/seerr@7861db4)) - *(issuedescription)* Fix issue display lists in IssueDescription ([#​2972](seerr-team/seerr#2972)) - ([ce47cfb](seerr-team/seerr@ce47cfb)) - *(media)* Clean up watchlist on error card delete ([#​3073](seerr-team/seerr#3073)) - ([ee915b9](seerr-team/seerr@ee915b9)) - *(media-request)* Remove cascade from modifiedBy to prevent user column wipe ([#​2911](seerr-team/seerr#2911)) - ([2dfea0c](seerr-team/seerr@2dfea0c)) - *(ntfy)* Save priority field as number instead of string ([#​3096](seerr-team/seerr#3096)) - ([2fa535d](seerr-team/seerr@2fa535d)) - *(ntfy)* Remove undefined fields from ntfy payload ([#​2931](seerr-team/seerr#2931)) - ([377bf65](seerr-team/seerr@377bf65)) - *(override-rules)* Use find() instead of index lookup for service resolution ([#​2903](seerr-team/seerr#2903)) - ([5fdedb1](seerr-team/seerr@5fdedb1)) - *(plex-watchlist-sync)* Handle MediaContainer.Video fallback in watchlist sync ([#​2992](seerr-team/seerr#2992)) - ([99f8520](seerr-team/seerr@99f8520)) - *(request)* Restore media status correctly when deleting requests ([#​3064](seerr-team/seerr#3064)) - ([ff88d52](seerr-team/seerr@ff88d52)) - *(scanners)* Reset orphaned processing media from deleted Radarr/Sonarr entries ([#​2757](seerr-team/seerr#2757)) - ([198e4e5](seerr-team/seerr@198e4e5)) - *(scanners)* Ignore unknown seasons in availability rollup and skip empty placeholder seasons ([#​2958](seerr-team/seerr#2958)) - ([ce51f6a](seerr-team/seerr@ce51f6a)) - *(search)* Replace "TV" with "Series" in search placeholder ([#​3067](seerr-team/seerr#3067)) - ([c04172a](seerr-team/seerr@c04172a)) - *(slider)* Add async to spring animation ([#​2978](seerr-team/seerr#2978)) - ([5267611](seerr-team/seerr@5267611)) - *(tag)* Use inset ring to avoid clipped outlines ([#​2985](seerr-team/seerr#2985)) - ([cf87205](seerr-team/seerr@cf87205)) - *(tvrequest)* Allow special episodes when partial series requests are disabled ([#​2973](seerr-team/seerr#2973)) - ([b32ab02](seerr-team/seerr@b32ab02)) - *(users)* Correct auth middleware for web push subscription ([#​3005](seerr-team/seerr#3005)) - ([bd27f2d](seerr-team/seerr@bd27f2d)) - *(watchlistsync)* Re-request deleted media from watchlist ([#​3072](seerr-team/seerr#3072)) - ([2588e49](seerr-team/seerr@2588e49)) - Update series status to partially available when seasons are missing ([#​3044](seerr-team/seerr#3044)) - ([4ed29cf](seerr-team/seerr@4ed29cf)) - Add missing "key" to React arrays ([#​3043](seerr-team/seerr#3043)) - ([4fa2c71](seerr-team/seerr@4fa2c71)) - Send availability notification if media is available before approval ([#​2819](seerr-team/seerr#2819)) - ([d426e1e](seerr-team/seerr@d426e1e)) - Normalize webhook payload encoding to support raw JSON inputs ([#​2641](seerr-team/seerr#2641)) - ([5b45806](seerr-team/seerr@5b45806)) ##### 📖 Documentation - *(blog)* Add v3.3.0 release blog post ([#​3098](seerr-team/seerr#3098)) - ([759e359](seerr-team/seerr@759e359)) - *(fail2ban)* Add fail2ban documentation ([#​2894](seerr-team/seerr#2894)) - ([39e9f1f](seerr-team/seerr@39e9f1f)) - *(nixpkgs)* Add documentation for nixpkgs 26.05 ([#​3089](seerr-team/seerr#3089)) - ([5fc7a40](seerr-team/seerr@5fc7a40)) - Add REST API documentation ([#​2981](seerr-team/seerr#2981)) - ([7aa1470](seerr-team/seerr@7aa1470)) - Add Terraform/OpenTofu provider page ([#​2967](seerr-team/seerr#2967)) - ([811126d](seerr-team/seerr@811126d)) ##### 🚜 Refactor - *(docs)* Move REST API docs to navbar and dedicated sidebar ([#​3040](seerr-team/seerr#3040)) - ([08b7bd4](seerr-team/seerr@08b7bd4)) - *(logs)* Align failed login attempt message with failed sign-i… ([#​2914](seerr-team/seerr#2914)) - ([3e4bf1b](seerr-team/seerr@3e4bf1b)) - Replace react-toast-notifications with react-hot-toast ([#​3004](seerr-team/seerr#3004)) - ([dfde4d3](seerr-team/seerr@dfde4d3)) ##### ⚙️ Miscellaneous Tasks - *(actions)* Update github actions ([#​3028](seerr-team/seerr#3028)) - ([6bb402a](seerr-team/seerr@6bb402a)) - *(actions)* Update github actions ([#​2982](seerr-team/seerr#2982)) - ([20dbc30](seerr-team/seerr@20dbc30)) - *(actions)* Update github actions (major) ([#​2947](seerr-team/seerr#2947)) - ([952261b](seerr-team/seerr@952261b)) - *(actions)* Update taiki-e/install-action action to v2.75.18 ([#​2961](seerr-team/seerr#2961)) - ([d50bdad](seerr-team/seerr@d50bdad)) - *(actions)* Update github actions ([#​2945](seerr-team/seerr#2945)) - ([60a2a87](seerr-team/seerr@60a2a87)) - *(create-tag)* Add gh token to avoid api rate limit in tag version retrieval ([#​2886](seerr-team/seerr#2886)) - ([85bfdb2](seerr-team/seerr@85bfdb2)) - *(i18n)* Update translations from Weblate - ([73fcfd2](seerr-team/seerr@73fcfd2)) - *(i18n)* Update translations from Weblate - ([788311a](seerr-team/seerr@788311a)) - *(i18n)* Update translations from Weblate - ([6eb43e0](seerr-team/seerr@6eb43e0)) - *(i18n)* Update translations from Weblate - ([656e33f](seerr-team/seerr@656e33f)) - *(i18n)* Update translations from Weblate - ([4742018](seerr-team/seerr@4742018)) - *(i18n)* Update translations from Weblate - ([2d4cd03](seerr-team/seerr@2d4cd03)) - *(i18n)* Update translations from Weblate - ([3c249c7](seerr-team/seerr@3c249c7)) - *(i18n)* Update translations from Weblate - ([4e4e673](seerr-team/seerr@4e4e673)) - *(i18n)* Update translations from Weblate ([#​2906](seerr-team/seerr#2906)) - ([6513915](seerr-team/seerr@6513915)) - *(i18n)* Update translations from Weblate ([#​2901](seerr-team/seerr#2901)) - ([56ab94a](seerr-team/seerr@56ab94a)) - *(release)* Prepare v3.2.0 - ([703faf9](seerr-team/seerr@703faf9)) - *(release)* Merge develop into main - ([0621e3d](seerr-team/seerr@0621e3d)) - *(release)* Remove git-cliff footer in release changelog ([#​2986](seerr-team/seerr#2986)) - ([550c3bc](seerr-team/seerr@550c3bc)) - Cleanup intl polyfills and dev config ([#​2965](seerr-team/seerr#2965)) - ([ba6ed6c](seerr-team/seerr@ba6ed6c)) - Ignore Renovate bot on irrelevant jobs ([#​2904](seerr-team/seerr#2904)) - ([1d2aa76](seerr-team/seerr@1d2aa76)) ##### New Contributors ❤️ - [@​defaultdino](https://github.com/defaultdino) made their first contribution - [@​haribo-hyung](https://github.com/haribo-hyung) made their first contribution - [@​felixschndr](https://github.com/felixschndr) made their first contribution - [@​burakemirsezen](https://github.com/burakemirsezen) made their first contribution - [@​death2all110](https://github.com/death2all110) made their first contribution - [@​fredrikburmester](https://github.com/fredrikburmester) made their first contribution - [@​marcinjurczak](https://github.com/marcinjurczak) made their first contribution - [@​Josh-Archer](https://github.com/Josh-Archer) made their first contribution - [@​Finchow](https://github.com/Finchow) made their first contribution - [@​kyle-engler](https://github.com/kyle-engler) made their first contribution - [@​danjuv](https://github.com/danjuv) made their first contribution - [@​aldoeliacim](https://github.com/aldoeliacim) made their first contribution </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/791
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [seerr/seerr](https://github.com/seerr-team/seerr) | minor | `v3.2.0` → `v3.3.0` | --- ### Release Notes <details> <summary>seerr-team/seerr (seerr/seerr)</summary> ### [`v3.3.0`](https://github.com/seerr-team/seerr/releases/tag/v3.3.0) [Compare Source](seerr-team/seerr@v3.2.0...v3.3.0) ##### [3.3.0](https://github.com/seerr-team/seerr/compare/v3.2.0..v3.3.0) - 2026-06-02 ##### 🚀 Features - *(db)* Add DB\_POOL\_SIZE environment variable for postgres connection pool ([#​2990](seerr-team/seerr#2990)) - ([f093c69](seerr-team/seerr@f093c69)) - *(i18n)* Add server-side i18n for notification agents ([#​2731](seerr-team/seerr#2731)) - ([cd257ba](seerr-team/seerr@cd257ba)) - *(notification)* Add support for public seerr logo in email ([#​3036](seerr-team/seerr#3036)) - ([a8f147d](seerr-team/seerr@a8f147d)) - *(notifications)* Support multiple Discord IDs ([#​2712](seerr-team/seerr#2712)) - ([63175f5](seerr-team/seerr@63175f5)) - Add plex media ratingKey and ratingKey4k to webhook payload and… ([#​1812](seerr-team/seerr#1812)) - ([9b7b50b](seerr-team/seerr@9b7b50b)) - Add route to fetch user by jellyfin id ([#​2074](seerr-team/seerr#2074)) - ([15296a0](seerr-team/seerr@15296a0)) - Filter out "Thanks" credits when looking at a person's credits ([#​2370](seerr-team/seerr#2370)) - ([d024849](seerr-team/seerr@d024849)) ##### 🐛 Bug Fixes - *(auth)* Drop popup.closed check in Plex pin poll ([#​2941](seerr-team/seerr#2941)) - ([ce9643c](seerr-team/seerr@ce9643c)) - *(availability-sync)* Detect deleted seasons when media server retains empty season metadata ([#​2850](seerr-team/seerr#2850)) - ([9c34864](seerr-team/seerr@9c34864)) - *(discover)* Preserve keyword filter input focus after selection ([#​2962](seerr-team/seerr#2962)) - ([32169d9](seerr-team/seerr@32169d9)) - *(docs)* Enable trailingSlash to prevent 404 flash on direct navigation ([#​3039](seerr-team/seerr#3039)) - ([df105b8](seerr-team/seerr@df105b8)) - *(docs)* Switch to SWC minimizer to fix broken runtime bundle - ([d88242f](seerr-team/seerr@d88242f)) - *(docs)* Bump openapi docs packages to 5.0.2 ([#​3027](seerr-team/seerr#3027)) - ([080c68a](seerr-team/seerr@080c68a)) - *(entity)* Set the default value of UpdateDateColumn to CURRENT\_TIMESTAMP ([#​2913](seerr-team/seerr#2913)) - ([86e780e](seerr-team/seerr@86e780e)) - *(external-link)* Replace TMDB ID with IMDB ID for Trakt links ([#​2934](seerr-team/seerr#2934)) - ([f078da8](seerr-team/seerr@f078da8)) - *(imdbRadarrProxy)* Pass headers and nodeCache as options instead of params ([#​2900](seerr-team/seerr#2900)) - ([7861db4](seerr-team/seerr@7861db4)) - *(issuedescription)* Fix issue display lists in IssueDescription ([#​2972](seerr-team/seerr#2972)) - ([ce47cfb](seerr-team/seerr@ce47cfb)) - *(media)* Clean up watchlist on error card delete ([#​3073](seerr-team/seerr#3073)) - ([ee915b9](seerr-team/seerr@ee915b9)) - *(media-request)* Remove cascade from modifiedBy to prevent user column wipe ([#​2911](seerr-team/seerr#2911)) - ([2dfea0c](seerr-team/seerr@2dfea0c)) - *(ntfy)* Save priority field as number instead of string ([#​3096](seerr-team/seerr#3096)) - ([2fa535d](seerr-team/seerr@2fa535d)) - *(ntfy)* Remove undefined fields from ntfy payload ([#​2931](seerr-team/seerr#2931)) - ([377bf65](seerr-team/seerr@377bf65)) - *(override-rules)* Use find() instead of index lookup for service resolution ([#​2903](seerr-team/seerr#2903)) - ([5fdedb1](seerr-team/seerr@5fdedb1)) - *(plex-watchlist-sync)* Handle MediaContainer.Video fallback in watchlist sync ([#​2992](seerr-team/seerr#2992)) - ([99f8520](seerr-team/seerr@99f8520)) - *(request)* Restore media status correctly when deleting requests ([#​3064](seerr-team/seerr#3064)) - ([ff88d52](seerr-team/seerr@ff88d52)) - *(scanners)* Reset orphaned processing media from deleted Radarr/Sonarr entries ([#​2757](seerr-team/seerr#2757)) - ([198e4e5](seerr-team/seerr@198e4e5)) - *(scanners)* Ignore unknown seasons in availability rollup and skip empty placeholder seasons ([#​2958](seerr-team/seerr#2958)) - ([ce51f6a](seerr-team/seerr@ce51f6a)) - *(search)* Replace "TV" with "Series" in search placeholder ([#​3067](seerr-team/seerr#3067)) - ([c04172a](seerr-team/seerr@c04172a)) - *(slider)* Add async to spring animation ([#​2978](seerr-team/seerr#2978)) - ([5267611](seerr-team/seerr@5267611)) - *(tag)* Use inset ring to avoid clipped outlines ([#​2985](seerr-team/seerr#2985)) - ([cf87205](seerr-team/seerr@cf87205)) - *(tvrequest)* Allow special episodes when partial series requests are disabled ([#​2973](seerr-team/seerr#2973)) - ([b32ab02](seerr-team/seerr@b32ab02)) - *(users)* Correct auth middleware for web push subscription ([#​3005](seerr-team/seerr#3005)) - ([bd27f2d](seerr-team/seerr@bd27f2d)) - *(watchlistsync)* Re-request deleted media from watchlist ([#​3072](seerr-team/seerr#3072)) - ([2588e49](seerr-team/seerr@2588e49)) - Update series status to partially available when seasons are missing ([#​3044](seerr-team/seerr#3044)) - ([4ed29cf](seerr-team/seerr@4ed29cf)) - Add missing "key" to React arrays ([#​3043](seerr-team/seerr#3043)) - ([4fa2c71](seerr-team/seerr@4fa2c71)) - Send availability notification if media is available before approval ([#​2819](seerr-team/seerr#2819)) - ([d426e1e](seerr-team/seerr@d426e1e)) - Normalize webhook payload encoding to support raw JSON inputs ([#​2641](seerr-team/seerr#2641)) - ([5b45806](seerr-team/seerr@5b45806)) ##### 📖 Documentation - *(blog)* Add v3.3.0 release blog post ([#​3098](seerr-team/seerr#3098)) - ([759e359](seerr-team/seerr@759e359)) - *(fail2ban)* Add fail2ban documentation ([#​2894](seerr-team/seerr#2894)) - ([39e9f1f](seerr-team/seerr@39e9f1f)) - *(nixpkgs)* Add documentation for nixpkgs 26.05 ([#​3089](seerr-team/seerr#3089)) - ([5fc7a40](seerr-team/seerr@5fc7a40)) - Add REST API documentation ([#​2981](seerr-team/seerr#2981)) - ([7aa1470](seerr-team/seerr@7aa1470)) - Add Terraform/OpenTofu provider page ([#​2967](seerr-team/seerr#2967)) - ([811126d](seerr-team/seerr@811126d)) ##### 🚜 Refactor - *(docs)* Move REST API docs to navbar and dedicated sidebar ([#​3040](seerr-team/seerr#3040)) - ([08b7bd4](seerr-team/seerr@08b7bd4)) - *(logs)* Align failed login attempt message with failed sign-i… ([#​2914](seerr-team/seerr#2914)) - ([3e4bf1b](seerr-team/seerr@3e4bf1b)) - Replace react-toast-notifications with react-hot-toast ([#​3004](seerr-team/seerr#3004)) - ([dfde4d3](seerr-team/seerr@dfde4d3)) ##### ⚙️ Miscellaneous Tasks - *(actions)* Update github actions ([#​3028](seerr-team/seerr#3028)) - ([6bb402a](seerr-team/seerr@6bb402a)) - *(actions)* Update github actions ([#​2982](seerr-team/seerr#2982)) - ([20dbc30](seerr-team/seerr@20dbc30)) - *(actions)* Update github actions (major) ([#​2947](seerr-team/seerr#2947)) - ([952261b](seerr-team/seerr@952261b)) - *(actions)* Update taiki-e/install-action action to v2.75.18 ([#​2961](seerr-team/seerr#2961)) - ([d50bdad](seerr-team/seerr@d50bdad)) - *(actions)* Update github actions ([#​2945](seerr-team/seerr#2945)) - ([60a2a87](seerr-team/seerr@60a2a87)) - *(create-tag)* Add gh token to avoid api rate limit in tag version retrieval ([#​2886](seerr-team/seerr#2886)) - ([85bfdb2](seerr-team/seerr@85bfdb2)) - *(i18n)* Update translations from Weblate - ([73fcfd2](seerr-team/seerr@73fcfd2)) - *(i18n)* Update translations from Weblate - ([788311a](seerr-team/seerr@788311a)) - *(i18n)* Update translations from Weblate - ([6eb43e0](seerr-team/seerr@6eb43e0)) - *(i18n)* Update translations from Weblate - ([656e33f](seerr-team/seerr@656e33f)) - *(i18n)* Update translations from Weblate - ([4742018](seerr-team/seerr@4742018)) - *(i18n)* Update translations from Weblate - ([2d4cd03](seerr-team/seerr@2d4cd03)) - *(i18n)* Update translations from Weblate - ([3c249c7](seerr-team/seerr@3c249c7)) - *(i18n)* Update translations from Weblate - ([4e4e673](seerr-team/seerr@4e4e673)) - *(i18n)* Update translations from Weblate ([#​2906](seerr-team/seerr#2906)) - ([6513915](seerr-team/seerr@6513915)) - *(i18n)* Update translations from Weblate ([#​2901](seerr-team/seerr#2901)) - ([56ab94a](seerr-team/seerr@56ab94a)) - *(release)* Prepare v3.2.0 - ([703faf9](seerr-team/seerr@703faf9)) - *(release)* Merge develop into main - ([0621e3d](seerr-team/seerr@0621e3d)) - *(release)* Remove git-cliff footer in release changelog ([#​2986](seerr-team/seerr#2986)) - ([550c3bc](seerr-team/seerr@550c3bc)) - Cleanup intl polyfills and dev config ([#​2965](seerr-team/seerr#2965)) - ([ba6ed6c](seerr-team/seerr@ba6ed6c)) - Ignore Renovate bot on irrelevant jobs ([#​2904](seerr-team/seerr#2904)) - ([1d2aa76](seerr-team/seerr@1d2aa76)) ##### New Contributors ❤️ - [@​defaultdino](https://github.com/defaultdino) made their first contribution - [@​haribo-hyung](https://github.com/haribo-hyung) made their first contribution - [@​felixschndr](https://github.com/felixschndr) made their first contribution - [@​burakemirsezen](https://github.com/burakemirsezen) made their first contribution - [@​death2all110](https://github.com/death2all110) made their first contribution - [@​fredrikburmester](https://github.com/fredrikburmester) made their first contribution - [@​marcinjurczak](https://github.com/marcinjurczak) made their first contribution - [@​Josh-Archer](https://github.com/Josh-Archer) made their first contribution - [@​Finchow](https://github.com/Finchow) made their first contribution - [@​kyle-engler](https://github.com/kyle-engler) made their first contribution - [@​danjuv](https://github.com/danjuv) made their first contribution - [@​aldoeliacim](https://github.com/aldoeliacim) made their first contribution </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDYuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIwNi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/177
(cherry picked from commit ee915b9)
Description
When dismissing an error card for unavailable media, the watchlist entry for that item was not being removed, causing it to reappear on the discover watchlist page after deletion.
The PR fixes this by removing the watchlist entry first before deleting the media record, then mutates the watchlist discover endpoint so the UI reflects the removal immediately, and silently swallows 404s on the watchlist delete since the entry may not exist.
On the server side, concurrent or repeated delete requests for the same media record could hit a race where the entity is already gone, resulting in an unhandled
EntityNotFoundErrorbeing logged as an error and returning 404 and this PR fixes that by catching that case and returning 204 instead since the desired end state is already achieved.How Has This Been Tested?
preview-clean-up-watchlist-error-cardScreenshots / Logs (if applicable)
Checklist:
pnpm buildpnpm i18n:extractSummary by CodeRabbit