fix(native): keep cached screens on refetch errors and show errors instead of empty states

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jakeandClaude Opus 5.5 committed 2026-10-05 02:51:57 -04:00
1 parent 25cf4f1bc8
commit 07ea8f68f2
20 files changed
+513 -56

No files matched your search

+22 -1
View File
@@ -97,7 +97,28 @@ export default function RegisterScreen() {
}
};
if (!registrationOpen && !publicInfo.isPending) {
if (publicInfo.isError && !publicInfo.data) {
return (
<AuthScreen title={t`Can't reach the server`}>
<Animated.View entering={FadeInDown.duration(300).delay(200)}>
<Button className="bg-primary mt-6" onPress={() => publicInfo.refetch()}>
<ButtonLabel className="text-primary-foreground">
<Trans>Retry</Trans>
</ButtonLabel>
</Button>
<Link href="/(auth)/login" asChild>
<Button variant="secondary" className="mt-3">
<ButtonLabel>
<Trans>Back to Login</Trans>
</ButtonLabel>
</Button>
</Link>
</Animated.View>
</AuthScreen>
);
}
if (publicInfo.data && !registrationOpen) {
return (
<AuthScreen
title={t`Registration Closed`}
@@ -1,6 +1,7 @@
import { useLingui } from "@lingui/react/macro";
import { FlashList } from "@shopify/flash-list";
import {
IconAlertTriangle,
IconBooks,
IconCheck,
IconDeviceTvOld,
@@ -199,6 +200,14 @@ export default function DashboardScreen() {
<HorizontalPosterRow items={[]} isLoading />
) : hasLibrary ? (
<HorizontalPosterRow items={library.data?.items ?? []} />
) : library.isError && !library.data ? (
<EmptyState
icon={IconAlertTriangle}
title={t`Something went wrong`}
description={t`Couldn't load your library`}
actionLabel={t`Retry`}
onAction={() => library.refetch()}
/>
) : (
<EmptyState
title={t`Your library is empty`}
+64 -49
View File
@@ -1,5 +1,5 @@
import { Trans, useLingui } from "@lingui/react/macro";
import { IconCalendarEvent } from "@tabler/icons-react-native";
import { IconAlertTriangle, IconCalendarEvent } from "@tabler/icons-react-native";
import { useInfiniteQuery } from "@tanstack/react-query";
import { Stack } from "expo-router";
import { useCallback, useMemo, useState } from "react";
@@ -8,6 +8,7 @@ import Animated, { FadeInDown } from "react-native-reanimated";
import { useCSSVariable, useResolveClassNames } from "uniwind";
import { UpcomingRow } from "@/components/dashboard/upcoming-row";
import { EmptyState } from "@/components/ui/empty-state";
import { ScaledIcon } from "@/components/ui/scaled-icon";
import { Text } from "@/components/ui/text";
import { orpc } from "@/lib/orpc";
@@ -55,20 +56,28 @@ export default function UpcomingScreen() {
const [mediaType, setMediaType] = useState<"all" | "movie" | "tv">("all");
const [statusFilter, setStatusFilter] = useState<"all" | "watching" | "watchlist">("all");
const { data, isPending, fetchNextPage, hasNextPage, isFetchingNextPage, isRefetching } =
useInfiniteQuery(
orpc.library.upcoming.infiniteOptions({
input: (pageParam: string | undefined) => ({
days: 90,
limit: 20,
cursor: pageParam,
mediaType: mediaType !== "all" ? mediaType : undefined,
statusFilter: statusFilter !== "all" ? [statusFilter] : undefined,
}),
initialPageParam: undefined as string | undefined,
getNextPageParam: (lastPage) => lastPage.nextCursor ?? undefined,
const {
data,
isPending,
isError,
refetch,
fetchNextPage,
hasNextPage,
isFetchingNextPage,
isRefetching,
} = useInfiniteQuery(
orpc.library.upcoming.infiniteOptions({
input: (pageParam: string | undefined) => ({
days: 90,
limit: 20,
cursor: pageParam,
mediaType: mediaType !== "all" ? mediaType : undefined,
statusFilter: statusFilter !== "all" ? [statusFilter] : undefined,
}),
);
initialPageParam: undefined as string | undefined,
getNextPageParam: (lastPage) => lastPage.nextCursor ?? undefined,
}),
);
const allItems = useMemo(() => data?.pages.flatMap((p) => p.items) ?? [], [data]);
const sections = useMemo(
@@ -141,44 +150,50 @@ export default function UpcomingScreen() {
{t`Upcoming`}
</Stack.Screen.Title>
<Stack.Screen.BackButton displayMode="minimal" />
{!isPending && allItems.length === 0 ? (
<Animated.View
entering={FadeInDown.duration(300)}
className="flex-1 items-center justify-center px-4"
>
{filterChips}
<View className="flex-1 items-center justify-center">
<ScaledIcon icon={IconCalendarEvent} size={48} color={`${mutedColor}66`} />
<Text className="text-muted-foreground mt-4 text-center text-sm">
<Trans>No upcoming episodes or releases in the next 90 days.</Trans>
<SectionList
sections={sections}
keyExtractor={(item, i) => `${item.titleId}-${item.date}-${i}`}
ListHeaderComponent={filterChips}
renderItem={({ item }) => (
<View className="px-4 py-1">
<UpcomingRow item={item} />
</View>
)}
renderSectionHeader={({ section: { title } }) => (
<View className="bg-background px-4 pt-3 pb-1">
<Text className="text-muted-foreground text-xs font-semibold tracking-wider uppercase">
{title}
</Text>
</View>
</Animated.View>
) : (
<SectionList
sections={sections}
keyExtractor={(item, i) => `${item.titleId}-${item.date}-${i}`}
ListHeaderComponent={filterChips}
renderItem={({ item }) => (
<View className="px-4 py-1">
<UpcomingRow item={item} />
</View>
)}
renderSectionHeader={({ section: { title } }) => (
<View className="bg-background px-4 pt-3 pb-1">
<Text className="text-muted-foreground text-xs font-semibold tracking-wider uppercase">
{title}
)}
stickySectionHeadersEnabled
contentContainerStyle={contentContainerStyle}
contentInsetAdjustmentBehavior="automatic"
onEndReached={onEndReached}
onEndReachedThreshold={0.5}
refreshControl={<RefreshControl refreshing={isRefetching} onRefresh={onRefresh} />}
ListEmptyComponent={
isPending ? null : isError && allItems.length === 0 ? (
<EmptyState
icon={IconAlertTriangle}
title={t`Something went wrong`}
description={t`Couldn't load upcoming releases`}
actionLabel={t`Retry`}
onAction={() => refetch()}
/>
) : (
<Animated.View
entering={FadeInDown.duration(300)}
className="items-center justify-center px-4 py-16"
>
<ScaledIcon icon={IconCalendarEvent} size={48} color={`${mutedColor}66`} />
<Text className="text-muted-foreground mt-4 text-center text-sm">
<Trans>No upcoming episodes or releases in the next 90 days.</Trans>
</Text>
</View>
)}
stickySectionHeadersEnabled
contentContainerStyle={contentContainerStyle}
contentInsetAdjustmentBehavior="automatic"
onEndReached={onEndReached}
onEndReachedThreshold={0.5}
refreshControl={<RefreshControl refreshing={isRefetching} onRefresh={onRefresh} />}
/>
)}
</Animated.View>
)
}
/>
</>
);
}
+13 -2
View File
@@ -377,7 +377,7 @@ export default function LibraryScreen() {
<View className="flex-1 items-center justify-center">
<Spinner colorClassName="accent-primary" />
</View>
) : libraryQuery.isError ? (
) : libraryQuery.isError && allItems.length === 0 ? (
<EmptyState
icon={IconAlertTriangle}
title={t`Something went wrong`}
@@ -418,7 +418,11 @@ export default function LibraryScreen() {
}}
refreshControl={<RefreshControl refreshing={isRefreshing} onRefresh={onRefresh} />}
onEndReached={() => {
if (libraryQuery.hasNextPage && !libraryQuery.isFetchingNextPage) {
if (
libraryQuery.hasNextPage &&
!libraryQuery.isFetchingNextPage &&
!libraryQuery.isFetchNextPageError
) {
libraryQuery.fetchNextPage();
}
}}
@@ -428,6 +432,13 @@ export default function LibraryScreen() {
<View className="items-center py-4">
<Spinner />
</View>
) : libraryQuery.isFetchNextPageError ? (
<View className="flex-row items-center justify-center gap-3 py-4">
<Text className="text-muted-foreground text-sm">{t`Couldn't load more`}</Text>
<Pressable onPress={() => libraryQuery.fetchNextPage()}>
<Text className="text-primary font-sans text-sm font-medium">{t`Retry`}</Text>
</Pressable>
</View>
) : null
}
/>
@@ -1,5 +1,6 @@
import { Trans, useLingui } from "@lingui/react/macro";
import { FlashList } from "@shopify/flash-list";
import { IconAlertTriangle } from "@tabler/icons-react-native";
import { skipToken, useInfiniteQuery } from "@tanstack/react-query";
import { Stack } from "expo-router";
import { useCallback, useMemo, useState } from "react";
@@ -8,6 +9,7 @@ import Animated, { FadeIn } from "react-native-reanimated";
import { RecentlyViewedList } from "@/components/search/recently-viewed-list";
import { type SearchResultItem, SearchResultRow } from "@/components/search/search-result-row";
import { EmptyState } from "@/components/ui/empty-state";
import { Spinner } from "@/components/ui/spinner";
import { Text } from "@/components/ui/text";
import { useDebounce } from "@/hooks/use-debounce";
@@ -89,6 +91,14 @@ export default function SearchScreen() {
<View className="flex-1 items-center justify-center">
<Spinner colorClassName="accent-primary" />
</View>
) : searchResults.isError && allResults.length === 0 ? (
<EmptyState
icon={IconAlertTriangle}
title={t`Something went wrong`}
description={t`Couldn't search right now`}
actionLabel={t`Retry`}
onAction={() => searchResults.refetch()}
/>
) : allResults.length === 0 ? (
<Animated.View
entering={FadeIn.duration(300)}
+1 -1
View File
@@ -252,7 +252,7 @@ export default function TitleDetailScreen() {
);
}
if (detail.isError || !title) {
if (!title) {
return (
<ModalLayout>
<View className="flex-1 items-center justify-center px-6">
@@ -2,7 +2,7 @@ import { Trans, useLingui } from "@lingui/react/macro";
import type { Icon } from "@tabler/icons-react-native";
import { skipToken, useInfiniteQuery } from "@tanstack/react-query";
import { useMemo, useState } from "react";
import { ScrollView, View } from "react-native";
import { Pressable, ScrollView, View } from "react-native";
import {
HorizontalPosterRow,
@@ -129,7 +129,14 @@ export function FilterableTitleRow({
</ScrollView>
)}
{!showLoading && items.length === 0 && selectedGenre !== null ? (
{!showLoading && items.length === 0 && selectedGenre !== null && discover.isError ? (
<View className="items-center gap-2 py-6">
<Text className="text-muted-foreground text-sm">{t`Couldn't load titles`}</Text>
<Pressable onPress={() => discover.refetch()}>
<Text className="text-primary font-sans text-sm font-medium">{t`Retry`}</Text>
</Pressable>
</View>
) : !showLoading && items.length === 0 && selectedGenre !== null ? (
<View className="items-center py-6">
<Text className="text-muted-foreground text-sm">
<Trans>No titles found for this genre.</Trans>
@@ -24,7 +24,7 @@ export function IntegrationsSection() {
<View className="items-center py-4">
<Spinner colorClassName="accent-primary" />
</View>
) : integrations.isError ? (
) : integrations.isError && !integrations.data ? (
<View className="items-center gap-2 py-4">
<Text className="text-muted-foreground text-sm">
<Trans>Could not load integrations</Trans>
+32
View File
@@ -563,6 +563,10 @@ msgstr "إدارة ذاكرة التخزين المؤقت"
msgid "Can't reach server"
msgstr "تعذر الوصول إلى الخادم"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "تعذّر تحميل مكتبتك"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "الإبلاغ عن الأعطال"
@@ -2746,7 +2770,12 @@ msgstr "النتائج"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "جارٍ استرداد سجل المشاهدة وقائمة المشاهدة والتقييمات..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} متاح"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "سيقوم Sofa تلقائياً بتسجيل الأفلام والحلقات عند الانتهاء من مشاهدتها"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "Cache-Verwaltung"
msgid "Can't reach server"
msgstr "Server nicht erreichbar"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "Bibliothek konnte nicht geladen werden"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Absturzberichte"
@@ -2746,7 +2770,12 @@ msgstr "Ergebnisse"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "Verlauf, Merkliste und Bewertungen werden abgerufen..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} ist verfügbar"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "Sofa protokolliert Filme und Episoden automatisch, wenn du sie zu Ende gesehen hast"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr ""
msgid "Can't reach server"
msgstr ""
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr "Can't reach the server"
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "Could not load your library"
msgid "Could not reach the server. Check your connection and the URL."
msgstr "Could not reach the server. Check your connection and the URL."
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr "Couldn't load more"
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr "Couldn't load titles"
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr "Couldn't load upcoming releases"
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr "Couldn't load your library"
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr "Couldn't search right now"
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Crash reporting"
@@ -2746,7 +2770,12 @@ msgstr ""
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr ""
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} is available"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "Gestión de caché"
msgid "Can't reach server"
msgstr "No se puede contactar con el servidor"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "No se pudo cargar tu biblioteca"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Informe de fallos"
@@ -2746,7 +2770,12 @@ msgstr "Resultados"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "Obteniendo tu historial de visionado, lista y valoraciones..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} está disponible"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "Sofa registrará automáticamente películas y episodios cuando termines de verlos"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "Gestion du cache"
msgid "Can't reach server"
msgstr "Impossible de joindre le serveur"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "Impossible de charger votre bibliothèque"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Signalement de plantages"
@@ -2746,7 +2770,12 @@ msgstr "Résultats"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "Récupération de votre historique, liste de suivi et notes..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} est disponible"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "Sofa enregistrera automatiquement les films et épisodes lorsque vous aurez fini de les regarder"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "ניהול מטמון"
msgid "Can't reach server"
msgstr "לא ניתן להגיע לשרת"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "לא ניתן לטעון את הספרייה שלך"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "דיווח על קריסות"
@@ -2746,7 +2770,12 @@ msgstr "תוצאות"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "מאחזר את היסטוריית הצפייה, רשימת הצפייה והדירוגים שלך..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} זמין"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "Sofa יתעד אוטומטית סרטים ופרקים כשתסיים לצפות בהם"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "Gestione cache"
msgid "Can't reach server"
msgstr "Impossibile raggiungere il server"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "Impossibile caricare la tua libreria"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Segnalazione degli arresti anomali"
@@ -2746,7 +2770,12 @@ msgstr "Risultati"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "Recupero della cronologia, watchlist e valutazioni..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} è disponibile"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "Sofa registrerà automaticamente film ed episodi quando finisci di guardarli"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "キャッシュ管理"
msgid "Can't reach server"
msgstr "サーバーに接続できません"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "ライブラリを読み込めませんでした"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "クラッシュレポート"
@@ -2746,7 +2770,12 @@ msgstr "結果"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "視聴履歴、ウォッチリスト、評価を取得中..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion}が利用可能です"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "視聴完了後、Sofaが自動的に映画やエピソードを記録します"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "캐시 관리"
msgid "Can't reach server"
msgstr "서버에 연결할 수 없습니다"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "라이브러리를 불러올 수 없습니다"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "충돌 보고"
@@ -2746,7 +2770,12 @@ msgstr "결과"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "시청 기록, 시청 목록, 평점을 가져오는 중..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion}을 사용할 수 있습니다"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "시청을 완료하면 Sofa가 자동으로 영화와 에피소드를 기록합니다"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "Cachebeheer"
msgid "Can't reach server"
msgstr "Server niet bereikbaar"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "Kon je bibliotheek niet laden"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Crashrapportage"
@@ -2746,7 +2770,12 @@ msgstr "Resultaten"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "Kijkgeschiedenis, watchlist en beoordelingen ophalen..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} is beschikbaar"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "Sofa registreert automatisch films en afleveringen wanneer je klaar bent met kijken"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "Gerenciamento de cache"
msgid "Can't reach server"
msgstr "Não foi possível alcançar o servidor"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "Não foi possível carregar a sua biblioteca"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "Relatório de falhas"
@@ -2746,7 +2770,12 @@ msgstr "Resultados"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "Buscando seu histórico de exibição, lista de desejos e avaliações..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} disponível"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "O Sofa registrará automaticamente filmes e episódios quando você terminar de assisti-los"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx
+32
View File
@@ -563,6 +563,10 @@ msgstr "缓存管理"
msgid "Can't reach server"
msgstr "无法连接服务器"
#: apps/native/src/app/(auth)/register.tsx
msgid "Can't reach the server"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
#: apps/native/src/components/header-avatar.tsx
#: apps/native/src/components/search/recently-viewed-list.ios.tsx
@@ -861,6 +865,26 @@ msgstr "无法加载您的媒体库"
msgid "Could not reach the server. Check your connection and the URL."
msgstr ""
#: apps/native/src/app/(tabs)/(library)/index.tsx
msgid "Couldn't load more"
msgstr ""
#: apps/native/src/components/explore/filterable-title-row.tsx
msgid "Couldn't load titles"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
msgid "Couldn't load upcoming releases"
msgstr ""
#: apps/native/src/app/(tabs)/(home)/index.tsx
msgid "Couldn't load your library"
msgstr ""
#: apps/native/src/app/(tabs)/(search)/index.tsx
msgid "Couldn't search right now"
msgstr ""
#: apps/native/src/app/(tabs)/(settings)/index.tsx
msgid "Crash reporting"
msgstr "崩溃报告"
@@ -2746,7 +2770,12 @@ msgstr "结果"
msgid "Retrieving your watch history, watchlist, and ratings..."
msgstr "正在获取您的观看记录、观看列表和评分..."
#: apps/native/src/app/(auth)/register.tsx
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/components/explore/filterable-title-row.tsx
#: apps/native/src/components/settings/integrations-section.tsx
#: apps/native/src/components/ui/server-unreachable-banner.ios.tsx
#: apps/native/src/components/ui/server-unreachable-banner.tsx
@@ -3054,7 +3083,10 @@ msgstr "Sofa v{latestVersion} 已发布"
msgid "Sofa will automatically log movies and episodes when you finish watching them"
msgstr "当您看完电影或剧集时,Sofa 将自动记录"
#: apps/native/src/app/(tabs)/(home)/index.tsx
#: apps/native/src/app/(tabs)/(home)/upcoming.tsx
#: apps/native/src/app/(tabs)/(library)/index.tsx
#: apps/native/src/app/(tabs)/(search)/index.tsx
#: apps/native/src/app/change-password.tsx
#: apps/native/src/app/person/[id].tsx
#: apps/native/src/app/title/[id].tsx