diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..52f01a6 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "tabWidth": 2, + "useTabs": false, + "singleQuote": false, + "printWidth": 120 +} diff --git a/app/+not-found.tsx b/app/+not-found.tsx index d057dbc..af77bca 100644 --- a/app/+not-found.tsx +++ b/app/+not-found.tsx @@ -1,13 +1,14 @@ -import {Link, Stack} from 'expo-router'; -import {StyleSheet} from 'react-native'; +import { Link, Stack } from "expo-router"; +import { StyleSheet } from "react-native"; -import {ThemedText} from '@/components/ThemedText'; -import {ThemedView} from '@/components/ThemedView'; +import { ThemedText } from "@/components/ThemedText"; +import { ThemedView } from "@/components/ThemedView"; +import React from "react"; export default function NotFoundScreen() { return ( <> - + This screen doesn't exist. @@ -21,8 +22,8 @@ export default function NotFoundScreen() { const styles = StyleSheet.create({ container: { flex: 1, - alignItems: 'center', - justifyContent: 'center', + alignItems: "center", + justifyContent: "center", padding: 20, }, link: { diff --git a/app/index.tsx b/app/index.tsx index 0587dea..7b1d9a1 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -1,18 +1,18 @@ -import React, { useEffect, useCallback, useRef } from 'react'; -import { View, StyleSheet, ActivityIndicator, FlatList, Pressable, Dimensions } from 'react-native'; -import { ThemedView } from '@/components/ThemedView'; -import { ThemedText } from '@/components/ThemedText'; -import { api } from '@/services/api'; -import VideoCard from '@/components/VideoCard.tv'; -import { useFocusEffect, useRouter } from 'expo-router'; -import { useColorScheme } from 'react-native'; -import { Search, Settings } from 'lucide-react-native'; -import { SettingsModal } from '@/components/SettingsModal'; -import useHomeStore, { RowItem, Category } from '@/stores/homeStore'; -import { useSettingsStore } from '@/stores/settingsStore'; +import React, { useEffect, useCallback, useRef } from "react"; +import { View, StyleSheet, ActivityIndicator, FlatList, Pressable, Dimensions } from "react-native"; +import { ThemedView } from "@/components/ThemedView"; +import { ThemedText } from "@/components/ThemedText"; +import { api } from "@/services/api"; +import VideoCard from "@/components/VideoCard.tv"; +import { useFocusEffect, useRouter } from "expo-router"; +import { useColorScheme } from "react-native"; +import { Search, Settings } from "lucide-react-native"; +import { SettingsModal } from "@/components/SettingsModal"; +import useHomeStore, { RowItem, Category } from "@/stores/homeStore"; +import { useSettingsStore } from "@/stores/settingsStore"; const NUM_COLUMNS = 5; -const { width } = Dimensions.get('window'); +const { width } = Dimensions.get("window"); const ITEM_WIDTH = width / NUM_COLUMNS - 24; export default function HomeScreen() { @@ -33,7 +33,7 @@ export default function HomeScreen() { refreshPlayRecords, } = useHomeStore(); - const showSettingsModal = useSettingsStore(state => state.showModal); + const showSettingsModal = useSettingsStore((state) => state.showModal); useFocusEffect( useCallback(() => { @@ -99,15 +99,15 @@ export default function HomeScreen() { [styles.searchButton, focused && styles.searchButtonFocused]} - onPress={() => router.push({ pathname: '/search' })} + onPress={() => router.push({ pathname: "/search" })} > - + [styles.searchButton, focused && styles.searchButtonFocused]} onPress={showSettingsModal} > - + @@ -117,7 +117,7 @@ export default function HomeScreen() { item.title} + keyExtractor={(item) => item.title} horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.categoryListContent} @@ -166,25 +166,25 @@ const styles = StyleSheet.create({ centerContainer: { flex: 1, paddingTop: 20, - justifyContent: 'center', - alignItems: 'center', + justifyContent: "center", + alignItems: "center", }, // Header headerContainer: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", paddingHorizontal: 24, marginBottom: 10, }, headerTitle: { fontSize: 32, - fontWeight: 'bold', + fontWeight: "bold", paddingTop: 16, }, rightHeaderButtons: { - flexDirection: 'row', - alignItems: 'center', + flexDirection: "row", + alignItems: "center", }, searchButton: { padding: 10, @@ -192,7 +192,7 @@ const styles = StyleSheet.create({ marginLeft: 10, }, searchButtonFocused: { - backgroundColor: '#007AFF', + backgroundColor: "#007AFF", transform: [{ scale: 1.1 }], }, // Category Selector @@ -209,18 +209,18 @@ const styles = StyleSheet.create({ marginHorizontal: 5, }, categoryButtonSelected: { - backgroundColor: '#007AFF', // A bright blue for selected state + backgroundColor: "#007AFF", // A bright blue for selected state }, categoryButtonFocused: { - backgroundColor: '#0056b3', // A darker blue for focused state + backgroundColor: "#0056b3", // A darker blue for focused state elevation: 5, }, categoryText: { fontSize: 16, - fontWeight: '500', + fontWeight: "500", }, categoryTextSelected: { - color: '#FFFFFF', + color: "#FFFFFF", }, // Content Grid listContent: { @@ -230,6 +230,6 @@ const styles = StyleSheet.create({ itemContainer: { margin: 8, width: ITEM_WIDTH, - alignItems: 'center', + alignItems: "center", }, }); diff --git a/app/play.tsx b/app/play.tsx index e5fc92e..834dd8d 100644 --- a/app/play.tsx +++ b/app/play.tsx @@ -1,15 +1,16 @@ -import React, { useEffect, useRef } from 'react'; -import { View, StyleSheet, TouchableOpacity, ActivityIndicator } from 'react-native'; -import { useLocalSearchParams } from 'expo-router'; -import { Video, ResizeMode } from 'expo-av'; -import { useKeepAwake } from 'expo-keep-awake'; -import { ThemedView } from '@/components/ThemedView'; -import { PlayerControls } from '@/components/PlayerControls'; -import { EpisodeSelectionModal } from '@/components/EpisodeSelectionModal'; -import { NextEpisodeOverlay } from '@/components/NextEpisodeOverlay'; -import { LoadingOverlay } from '@/components/LoadingOverlay'; -import usePlayerStore from '@/stores/playerStore'; -import { useTVRemoteHandler } from '@/hooks/useTVRemoteHandler'; +import React, { useEffect, useRef } from "react"; +import { View, StyleSheet, TouchableOpacity, ActivityIndicator } from "react-native"; +import { useLocalSearchParams } from "expo-router"; +import { Video, ResizeMode } from "expo-av"; +import { useKeepAwake } from "expo-keep-awake"; +import { ThemedView } from "@/components/ThemedView"; +import { PlayerControls } from "@/components/PlayerControls"; +import { EpisodeSelectionModal } from "@/components/EpisodeSelectionModal"; +import { SeekingBar } from "@/components/SeekingBar"; +import { NextEpisodeOverlay } from "@/components/NextEpisodeOverlay"; +import { LoadingOverlay } from "@/components/LoadingOverlay"; +import usePlayerStore from "@/stores/playerStore"; +import { useTVRemoteHandler } from "@/hooks/useTVRemoteHandler"; export default function PlayScreen() { const videoRef = useRef