mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 06:15:39 -04:00
feat: add filtering and sorting across library, explore, and upcoming (#21)
* feat: add filtering and sorting across library, explore, and upcoming Add comprehensive filtering and sorting to all list views on both web and mobile. Library (new dedicated page): - New /library route (web) with URL search param persistence - New Library tab (5th tab, mobile) with FlashList grid - Filters: status (multi-select), type, genre (library-only), user rating range, release year (decade presets + custom), content rating, available to stream - Sort by: title, date added, release date, popularity, user rating, TMDB rating - Text search within collection - Filter popover (web) / bottom sheet with Apply (mobile) - Remove old dashboard.library endpoint in favor of library.list Explore/Discover: - New Discover section on Explore page with inline filter controls - TMDB filters: genre (now optional), year range, min rating, sort order, original language, streaming provider - Watch provider list endpoint (WATCH_REGION env var, default "US") - Default to popular content when no filters selected Upcoming: - Type filter (All/Movies/TV Shows) and status filter (All/Watching/Watchlist) - Toggle chips on both web (URL params) and mobile - Backend: mediaType and statusFilter params on upcoming endpoint Navigation: - Library added to web nav bar (desktop + mobile tab bar) - Library added as 5th tab on mobile (between Home and Explore) - Dashboard library section simplified to compact preview with "See all" link Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add user streaming platform subscriptions and redesign filter UI Replace the denormalized availabilityOffers table with a normalized platforms + titleAvailability + userPlatforms schema. Users can now declare which streaming services they subscribe to, enabling personalized "On your services" availability display and filtered library/explore results. Backend: new platforms table seeded from TMDB provider data on startup, new API endpoints (platforms.list, account.platforms, account.updatePlatforms), title detail annotates availability with isUserSubscribed flag, library "on my services" filter checks user's subscribed platforms. Web UI: post-registration onboarding page for platform selection, streaming services settings section, title detail split into "On your services" / "Also available on", explore dropdown uses platforms table with active filter highlighting. Library filters redesigned from cluttered popover to clean collapsible inline strip with consolidated dropdowns. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: address race conditions, stale state, and edge cases in platforms feature - Fix debounced autosave race in streaming services settings: use ref for latest selection + counter guard so only the most recent save updates UI. Clean up timers on unmount. - Fix explore provider dropdown desyncing from query filter when switching Movie/TV type: reset selectedPlatformId alongside providerId. - Fix platformIdsExist rejecting duplicate valid IDs by deduplicating input before comparing against DB results. - Fix stale platform metadata: always upsert name/logo on TMDB refresh instead of skipping when platform already exists. - Fix invisible ratingMax filter: clear ratingMax when user changes ratingMin since the UI only exposes a single rating dropdown now. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: clear stale saved-state timer and preserve falsy filter values - Clear previous savedTimerRef timeout before scheduling a new one in streaming-services-section, preventing an older timer from hiding the "Saved" indicator too early on rapid successive saves - Replace `value || undefined` with explicit empty-value check in library filter handler so numeric 0 (e.g. ratingMin=0) is not incorrectly dropped Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add TanStack Form and migrate auth + change password forms Set up TanStack Form v1 composition layer with createFormHook, pre-bound field components (TextField, TextareaField, CheckboxField, SwitchField, SubmitButton), and migrate the two traditional submit-based forms: - AuthForm: replace 4 useState calls with useAppForm, use form.Field for each input while preserving motion animation layout - ChangePasswordDialog: replace 6 useState calls with useAppForm + Zod schema validation (cross-field password match, min length), per-field error display, form.reset() on dialog close Also adds @tanstack/react-form to the monorepo catalog and updates both web and native apps to reference it via catalog:. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -177,6 +177,10 @@ msgstr "{ratingCount} ratings"
|
||||
msgid "{star, plural, one {# star} other {# stars}}"
|
||||
msgstr "{star, plural, one {# star} other {# stars}}"
|
||||
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "{totalResults, plural, one {# result} other {# results}}"
|
||||
msgstr "{totalResults, plural, one {# result} other {# results}}"
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
msgstr "{unresolvedCount} items have no external IDs and will be resolved by title search, which may be less accurate."
|
||||
@@ -302,11 +306,36 @@ msgstr ""
|
||||
msgid "age {age}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/native/src/components/explore/filterable-title-row.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "All genres"
|
||||
msgstr "All genres"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "All providers"
|
||||
msgstr "All providers"
|
||||
|
||||
#: apps/web/src/components/settings/registration-section.tsx
|
||||
msgid "Allow new users to create accounts"
|
||||
msgstr ""
|
||||
@@ -329,6 +358,22 @@ msgstr ""
|
||||
msgid "Anonymous usage reporting"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Any"
|
||||
msgstr "Any"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Any language"
|
||||
msgstr "Any language"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Any rating"
|
||||
msgstr "Any rating"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Any year"
|
||||
msgstr "Any year"
|
||||
|
||||
#: apps/web/src/routes/_app/settings.tsx
|
||||
msgid "App Settings"
|
||||
msgstr ""
|
||||
@@ -337,6 +382,10 @@ msgstr ""
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
msgid "Apply"
|
||||
msgstr "Apply"
|
||||
|
||||
#: apps/native/src/components/settings/integration-card.tsx
|
||||
msgid "Are you sure you want to disconnect {label}? The current URL will stop working."
|
||||
msgstr ""
|
||||
@@ -374,6 +423,13 @@ msgstr ""
|
||||
msgid "Availability"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Available to stream"
|
||||
msgstr "Available to stream"
|
||||
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Back to Login"
|
||||
msgstr ""
|
||||
@@ -458,8 +514,10 @@ msgstr ""
|
||||
msgid "Catch up"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Caught Up"
|
||||
@@ -509,6 +567,10 @@ msgstr ""
|
||||
msgid "Checking…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Chinese"
|
||||
msgstr "Chinese"
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
#~ msgid "Choose how to import your {0} data."
|
||||
#~ msgstr ""
|
||||
@@ -521,6 +583,7 @@ msgstr "Choose how to import your {sourceLabel} data."
|
||||
#~ msgid "Choose your preferred display language"
|
||||
#~ msgstr "Choose your preferred display language"
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
|
||||
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
|
||||
#: apps/native/src/components/search/recently-viewed-list.tsx
|
||||
@@ -529,9 +592,18 @@ msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Clear all"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/routes/_app/library.tsx
|
||||
msgid "Clear all filters"
|
||||
msgstr "Clear all filters"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
msgid "Clear filters"
|
||||
msgstr "Clear filters"
|
||||
|
||||
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
|
||||
#: apps/native/src/components/search/recently-viewed-list.tsx
|
||||
msgid "Clear Recently Viewed?"
|
||||
@@ -561,9 +633,11 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/stats-display.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
msgid "Completed"
|
||||
@@ -631,6 +705,16 @@ msgstr ""
|
||||
msgid "Connecting…"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Content rating"
|
||||
msgstr "Content rating"
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Content Rating"
|
||||
msgstr "Content Rating"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
@@ -731,10 +815,23 @@ msgstr ""
|
||||
msgid "Database restored. Reloading..."
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Date Added"
|
||||
msgstr "Date Added"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Day:"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Decade"
|
||||
msgstr "Decade"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Default"
|
||||
msgstr "Default"
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Delete"
|
||||
@@ -784,6 +881,10 @@ msgstr ""
|
||||
msgid "Disconnect {label}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Discover"
|
||||
msgstr "Discover"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "Display name"
|
||||
msgstr "Display name"
|
||||
@@ -869,6 +970,10 @@ msgstr ""
|
||||
msgid "Enable the <0>Playback</0> event category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "English"
|
||||
msgstr "English"
|
||||
|
||||
#: apps/native/src/app/(auth)/login.tsx
|
||||
#: apps/native/src/app/(auth)/register.tsx
|
||||
msgid "Enter a valid email address"
|
||||
@@ -1184,6 +1289,12 @@ msgstr ""
|
||||
msgid "Filmography"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Filters"
|
||||
msgstr "Filters"
|
||||
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
msgid "Finished importing from {source}."
|
||||
msgstr ""
|
||||
@@ -1200,6 +1311,10 @@ msgstr ""
|
||||
msgid "Free up disk space by clearing cached metadata and images"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "French"
|
||||
msgstr "French"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Frequency"
|
||||
msgstr ""
|
||||
@@ -1208,6 +1323,24 @@ msgstr ""
|
||||
msgid "Friday"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "From"
|
||||
msgstr "From"
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Genre"
|
||||
msgstr "Genre"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "German"
|
||||
msgstr "German"
|
||||
|
||||
#: apps/web/src/components/landing-page.tsx
|
||||
msgid "Get Started"
|
||||
msgstr ""
|
||||
@@ -1247,6 +1380,14 @@ msgstr ""
|
||||
msgid "Here's what's happening with your library"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Highest rated"
|
||||
msgstr "Highest rated"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Hindi"
|
||||
msgstr "Hindi"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/_layout.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
@@ -1377,6 +1518,14 @@ msgstr ""
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Italian"
|
||||
msgstr "Italian"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Japanese"
|
||||
msgstr "Japanese"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "Job"
|
||||
msgstr ""
|
||||
@@ -1394,8 +1543,15 @@ msgstr "Keeping"
|
||||
msgid "Keyboard Shortcuts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Korean"
|
||||
msgstr "Korean"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/settings/language-section.tsx
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
@@ -1444,7 +1600,12 @@ msgstr ""
|
||||
msgid "Last run succeeded"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/_layout.tsx
|
||||
#: apps/native/src/components/navigation/native-tab-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/routes/_app/library.tsx
|
||||
msgid "Library"
|
||||
msgstr "Library"
|
||||
|
||||
@@ -1559,14 +1720,32 @@ msgstr ""
|
||||
#~ msgid "Marked as watching"
|
||||
#~ msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Max"
|
||||
msgstr "Max"
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Maximum rating"
|
||||
msgstr "Maximum rating"
|
||||
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
msgid "Member since {memberSince}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Min"
|
||||
msgstr "Min"
|
||||
|
||||
#: apps/web/src/components/auth-form.tsx
|
||||
msgid "Min 8 characters…"
|
||||
msgstr "Min 8 characters…"
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Minimum rating"
|
||||
msgstr "Minimum rating"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Monday"
|
||||
msgstr ""
|
||||
@@ -1579,18 +1758,28 @@ msgstr ""
|
||||
msgid "More Settings"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Most popular"
|
||||
msgstr "Most popular"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/native/src/components/search/search-result-row.tsx
|
||||
#: apps/native/src/components/search/search-result-row.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "Movie"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/settings/account-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
msgid "Movies"
|
||||
msgstr ""
|
||||
|
||||
@@ -1676,6 +1865,7 @@ msgstr ""
|
||||
msgid "New Season"
|
||||
msgstr "New Season"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Newest"
|
||||
@@ -1708,10 +1898,18 @@ msgstr ""
|
||||
msgid "No internet connection"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
msgid "No matching titles"
|
||||
msgstr "No matching titles"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(search)/index.tsx
|
||||
msgid "No results for \"{debouncedQuery}\""
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
msgid "No results for \"{debouncedSearch}\""
|
||||
msgstr "No results for \"{debouncedSearch}\""
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "No results found."
|
||||
msgstr ""
|
||||
@@ -1721,6 +1919,14 @@ msgstr ""
|
||||
msgid "No titles found for this genre."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "No titles found. Try adjusting your filters."
|
||||
msgstr "No titles found. Try adjusting your filters."
|
||||
|
||||
#: apps/web/src/routes/_app/library.tsx
|
||||
msgid "No titles match your filters"
|
||||
msgstr "No titles match your filters"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
msgid "No upcoming episodes or releases in the next 90 days."
|
||||
@@ -1736,6 +1942,14 @@ msgstr ""
|
||||
msgid "Not Found"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Older"
|
||||
msgstr "Older"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Oldest"
|
||||
msgstr "Oldest"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
@@ -1904,6 +2118,20 @@ msgstr ""
|
||||
msgid "Popular TV Shows"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Popularity"
|
||||
msgstr "Popularity"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Portuguese"
|
||||
msgstr "Portuguese"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Pre-1970"
|
||||
msgstr "Pre-1970"
|
||||
|
||||
#: apps/web/src/components/settings/backup-section.tsx
|
||||
msgid "Pre-restore backup"
|
||||
msgstr ""
|
||||
@@ -1929,6 +2157,12 @@ msgstr ""
|
||||
msgid "Profile picture updated"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Provider"
|
||||
msgstr "Provider"
|
||||
|
||||
#: apps/web/src/components/settings/danger-section.tsx
|
||||
#: apps/web/src/components/settings/danger-section.tsx
|
||||
msgid "Purge all"
|
||||
@@ -2008,6 +2242,10 @@ msgstr "Rated {ratingStars, plural, one {# star} other {# stars}}"
|
||||
msgid "Rated {stars, plural, one {# star} other {# stars}}"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/star-rating.tsx
|
||||
@@ -2117,6 +2355,11 @@ msgstr "Registration failed"
|
||||
msgid "Registration opened"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Release Date"
|
||||
msgstr "Release Date"
|
||||
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
@@ -2305,6 +2548,14 @@ msgstr ""
|
||||
msgid "Search for movies, TV shows, or run commands"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Search library"
|
||||
msgstr "Search library"
|
||||
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Search library..."
|
||||
msgstr "Search library..."
|
||||
|
||||
#: apps/web/src/components/command-palette.tsx
|
||||
msgid "Search movies & TV shows…"
|
||||
msgstr ""
|
||||
@@ -2313,6 +2564,10 @@ msgstr ""
|
||||
msgid "Search movies, shows, people..."
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
msgid "Search your library..."
|
||||
msgstr "Search your library..."
|
||||
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
#: apps/web/src/components/nav-bar.tsx
|
||||
msgid "Search…"
|
||||
@@ -2524,15 +2779,28 @@ msgstr ""
|
||||
msgid "Sonarr List URL"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Sort"
|
||||
msgstr "Sort"
|
||||
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
msgid "Sort filmography"
|
||||
msgstr "Sort filmography"
|
||||
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
msgid "Spanish"
|
||||
msgstr "Spanish"
|
||||
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Start exploring"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
msgid "Start tracking movies and shows"
|
||||
msgstr ""
|
||||
|
||||
@@ -2549,6 +2817,11 @@ msgstr ""
|
||||
msgid "Starting import..."
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: apps/native/src/hooks/use-title-actions.ts
|
||||
msgid "Status updated"
|
||||
msgstr ""
|
||||
@@ -2561,6 +2834,11 @@ msgstr ""
|
||||
msgid "Stream"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Streaming"
|
||||
msgstr "Streaming"
|
||||
|
||||
#: apps/web/src/components/settings/backup-schedule-section.tsx
|
||||
msgid "Sunday"
|
||||
msgstr ""
|
||||
@@ -2677,11 +2955,21 @@ msgstr ""
|
||||
msgid "Time:"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Title A-Z"
|
||||
msgstr "Title A-Z"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/routes/_app/titles.$id.tsx
|
||||
msgid "Title not found"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "Title Z-A"
|
||||
msgstr "Title Z-A"
|
||||
|
||||
#: apps/native/src/components/settings/integration-configs.ts
|
||||
#: apps/web/src/components/settings/integration-configs.tsx
|
||||
msgid "Titles on your Sofa watchlist will be automatically added for download when Radarr polls this list (every 12 hours by default)"
|
||||
@@ -2692,6 +2980,15 @@ msgstr ""
|
||||
msgid "Titles on your Sofa watchlist will be automatically added for download when Sonarr polls this list (every 6 hours by default)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "TMDB Rating"
|
||||
msgstr "TMDB Rating"
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "To"
|
||||
msgstr "To"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
msgid "today"
|
||||
msgstr "today"
|
||||
@@ -2736,6 +3033,10 @@ msgstr ""
|
||||
msgid "Trigger job"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
msgid "Try adjusting your filters"
|
||||
msgstr "Try adjusting your filters"
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/web/src/components/route-error.tsx
|
||||
#: apps/web/src/routes/__root.tsx
|
||||
@@ -2747,9 +3048,12 @@ msgid "Tuesday"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/title/[id].tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/search/recently-viewed-row-content.tsx
|
||||
#: apps/native/src/components/search/search-result-row.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/hero-banner.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/people/filmography-grid.tsx
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "TV"
|
||||
@@ -2763,6 +3067,17 @@ msgstr ""
|
||||
msgid "TV show"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
msgid "TV Shows"
|
||||
msgstr "TV Shows"
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#: apps/web/src/components/settings/system-health-section.tsx
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
@@ -2898,6 +3213,11 @@ msgstr "Use at least 8 characters"
|
||||
msgid "User menu"
|
||||
msgstr "User menu"
|
||||
|
||||
#: apps/native/src/components/library/sort-menu.tsx
|
||||
#: apps/web/src/components/library/library-toolbar.tsx
|
||||
msgid "User Rating"
|
||||
msgstr "User Rating"
|
||||
|
||||
#: apps/web/src/components/titles/title-hero.tsx
|
||||
msgid "View on TMDB"
|
||||
msgstr "View on TMDB"
|
||||
@@ -2958,17 +3278,27 @@ msgstr ""
|
||||
msgid "Watched S{sNum} E{eNum}"
|
||||
msgstr "Watched S{sNum} E{eNum}"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/dashboard/upcoming-item.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/title-card.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
msgid "Watching"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/native/src/components/titles/status-action-button.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
#: apps/web/src/components/settings/imports-section.tsx
|
||||
#: apps/web/src/components/titles/status-button.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
#: apps/web/src/routes/_app/upcoming.tsx
|
||||
msgid "Watchlist"
|
||||
msgstr ""
|
||||
|
||||
@@ -3014,6 +3344,21 @@ msgstr ""
|
||||
msgid "Writer"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/components/library/filter-sheet.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/explore/discover-section.tsx
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Year"
|
||||
msgstr "Year"
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Year from"
|
||||
msgstr "Year from"
|
||||
|
||||
#: apps/web/src/components/library/library-filters.tsx
|
||||
msgid "Year to"
|
||||
msgstr "Year to"
|
||||
|
||||
#: apps/native/src/app/(tabs)/(settings)/index.tsx
|
||||
msgid "You'll be signed out to change the server URL."
|
||||
msgstr ""
|
||||
@@ -3031,6 +3376,7 @@ msgid "Your code:"
|
||||
msgstr ""
|
||||
|
||||
#: apps/native/src/app/(tabs)/(home)/index.tsx
|
||||
#: apps/native/src/app/(tabs)/(library)/index.tsx
|
||||
#: apps/web/src/components/dashboard/stats-section.tsx
|
||||
msgid "Your library is empty"
|
||||
msgstr ""
|
||||
|
||||
Reference in New Issue
Block a user