feat: add "Mark Unwatched" toggle for movies on web and native (#52)

- Replace the static "Mark Watched" button with a toggle that shows "Mark Unwatched" (destructive style) when a movie is already completed
- Add `handleUnwatchMovie` to web `useTitleActions` with optimistic update (reverts status to `in_watchlist` on error)
- Add `unwatchMovie` mutation to native `useTitleActions` hook and `titleActions` imperative helper
- Update poster-card and upcoming-row context menus to show the correct action based on current watch status
- Wire the `M` keyboard shortcut on the title detail page to unwatch when the movie is already marked watched
- Add i18n strings for "Mark Unwatched", "Marked as unwatched", and "Failed to mark as unwatched"
This commit is contained in:
2026-07-12 16:53:52 -04:00
committed by GitHub
parent 0c747a9275
commit 553fe98013
9 changed files with 143 additions and 21 deletions
+28 -3
View File
@@ -346,7 +346,6 @@ msgstr ""
msgid "Added \"{titleName}\" to watchlist"
msgstr ""
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/lib/title-actions.ts
#: apps/web/src/components/titles/use-title-actions.ts
@@ -1236,7 +1235,6 @@ msgstr "Export"
msgid "Failed"
msgstr ""
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/lib/title-actions.ts
msgid "Failed to add to watchlist"
msgstr ""
@@ -1293,6 +1291,12 @@ msgstr ""
msgid "Failed to mark all episodes as watched"
msgstr ""
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/lib/title-actions.ts
#: apps/web/src/components/titles/use-title-actions.ts
msgid "Failed to mark as unwatched"
msgstr "Failed to mark as unwatched"
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/lib/title-actions.ts
#: apps/web/src/components/titles/use-title-actions.ts
@@ -1386,7 +1390,6 @@ msgstr ""
msgid "Failed to update rating"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/web/src/components/settings/registration-section.tsx
msgid "Failed to update registration setting"
msgstr ""
@@ -1860,6 +1863,13 @@ msgstr "Mark episode {epNum} watched"
msgid "Mark Episode Watched"
msgstr "Mark Episode Watched"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/components/dashboard/upcoming-row.tsx
#: apps/native/src/components/ui/poster-card.tsx
#: apps/web/src/components/titles/title-actions.tsx
msgid "Mark Unwatched"
msgstr "Mark Unwatched"
#: apps/web/src/components/command-palette.tsx
msgid "Mark watched"
msgstr "Mark watched"
@@ -1871,6 +1881,10 @@ msgstr "Mark watched"
msgid "Mark Watched"
msgstr ""
#: apps/native/src/app/title/[id].tsx
msgid "Marked \"{name}\" as unwatched"
msgstr "Marked \"{name}\" as unwatched"
#: apps/native/src/app/title/[id].tsx
msgid "Marked \"{name}\" as watched"
msgstr "Marked \"{name}\" as watched"
@@ -1879,6 +1893,11 @@ msgstr "Marked \"{name}\" as watched"
#~ msgid "Marked \"{titleName}\" as completed"
#~ msgstr ""
#: apps/native/src/lib/title-actions.ts
#: apps/web/src/components/titles/use-title-actions.ts
msgid "Marked \"{titleName}\" as unwatched"
msgstr "Marked \"{titleName}\" as unwatched"
#: apps/native/src/lib/title-actions.ts
#: apps/web/src/components/titles/use-title-actions.ts
msgid "Marked \"{titleName}\" as watched"
@@ -1898,6 +1917,12 @@ msgstr "Marked all episodes of \"{titleName}\" as watched"
#~ msgid "Marked as completed"
#~ msgstr ""
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/lib/title-actions.ts
msgid "Marked as unwatched"
msgstr "Marked as unwatched"
#: apps/native/src/app/title/[id].tsx
#: apps/native/src/hooks/use-title-actions.ts
#: apps/native/src/lib/title-actions.ts