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