diff --git a/app.json b/app.json
index 8569d05b..19876abf 100644
--- a/app.json
+++ b/app.json
@@ -49,13 +49,6 @@
"@react-native-tvos/config-tv",
"expo-router",
"expo-font",
- "@config-plugins/ffmpeg-kit-react-native",
- [
- "react-native-google-cast",
- {
- "useDefaultExpandedMediaControls": true
- }
- ],
[
"react-native-video",
{
@@ -69,18 +62,6 @@
}
}
],
- [
- "expo-build-properties",
- {
- "ios": {
- "deploymentTarget": "14.0"
- },
- "android": {
- "minSdkVersion": 24,
- "usesCleartextTraffic": true
- }
- }
- ],
[
"expo-screen-orientation",
{
diff --git a/app/(auth)/(tabs)/home/_layout.tsx b/app/(auth)/(tabs)/home/_layout.tsx
index 94a68602..0330d0ed 100644
--- a/app/(auth)/(tabs)/home/_layout.tsx
+++ b/app/(auth)/(tabs)/home/_layout.tsx
@@ -17,18 +17,6 @@ export default function IndexLayout() {
headerBlurEffect: "prominent",
headerTransparent: Platform.OS === "ios" ? true : false,
headerShadowVisible: false,
- headerLeft: () => (
- {
- router.push("/(auth)/downloads");
- }}
- >
-
-
- ),
headerRight: () => (
diff --git a/app/(auth)/(tabs)/home/index.tsx b/app/(auth)/(tabs)/home/index.tsx
index ccca5777..87b97c3c 100644
--- a/app/(auth)/(tabs)/home/index.tsx
+++ b/app/(auth)/(tabs)/home/index.tsx
@@ -217,21 +217,6 @@ export default function index() {
return (
No Internet
-
- No worries, you can still watch{"\n"}downloaded content.
-
-
-
-
);
}
diff --git a/app/(auth)/downloads.tsx b/app/(auth)/downloads.tsx
deleted file mode 100644
index 73603158..00000000
--- a/app/(auth)/downloads.tsx
+++ /dev/null
@@ -1,179 +0,0 @@
-import { Text } from "@/components/common/Text";
-import { MovieCard } from "@/components/downloads/MovieCard";
-import { SeriesCard } from "@/components/downloads/SeriesCard";
-import { Loader } from "@/components/Loader";
-import { runningProcesses } from "@/utils/atoms/downloads";
-import { queueAtom } from "@/utils/atoms/queue";
-import { Ionicons } from "@expo/vector-icons";
-import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
-import AsyncStorage from "@react-native-async-storage/async-storage";
-import { useQuery } from "@tanstack/react-query";
-import { router } from "expo-router";
-import { FFmpegKit } from "ffmpeg-kit-react-native";
-import { useAtom } from "jotai";
-import { useMemo } from "react";
-import { ScrollView, TouchableOpacity, View } from "react-native";
-
-const downloads: React.FC = () => {
- const [process, setProcess] = useAtom(runningProcesses);
- const [queue, setQueue] = useAtom(queueAtom);
-
- const { data: downloadedFiles, isLoading } = useQuery({
- queryKey: ["downloaded_files", process?.item.Id],
- queryFn: async () =>
- JSON.parse(
- (await AsyncStorage.getItem("downloaded_files")) || "[]"
- ) as BaseItemDto[],
- staleTime: 0,
- });
-
- const movies = useMemo(
- () => downloadedFiles?.filter((f) => f.Type === "Movie") || [],
- [downloadedFiles]
- );
-
- const groupedBySeries = useMemo(() => {
- const episodes = downloadedFiles?.filter((f) => f.Type === "Episode");
- const series: { [key: string]: BaseItemDto[] } = {};
- episodes?.forEach((e) => {
- if (!series[e.SeriesName!]) series[e.SeriesName!] = [];
- series[e.SeriesName!].push(e);
- });
- return Object.values(series);
- }, [downloadedFiles]);
-
- const eta = useMemo(() => {
- const length = process?.item?.RunTimeTicks || 0;
-
- if (!process?.speed || !process?.progress) return "";
-
- const timeLeft =
- (length - length * (process.progress / 100)) / process.speed;
-
- return formatNumber(timeLeft / 10000);
- }, [process]);
-
- if (isLoading) {
- return (
-
-
-
- );
- }
-
- return (
-
-
-
-
- Queue
-
- {queue.map((q) => (
- router.push(`/(auth)/items/${q.item.Id}`)}
- className="relative bg-neutral-900 border border-neutral-800 p-4 rounded-2xl overflow-hidden flex flex-row items-center justify-between"
- >
-
- {q.item.Name}
- {q.item.Type}
-
- {
- setQueue((prev) => prev.filter((i) => i.id !== q.id));
- }}
- >
-
-
-
- ))}
-
-
- {queue.length === 0 && (
- No items in queue
- )}
-
-
-
- Active download
- {process?.item ? (
- router.push(`/(auth)/items/${process.item.Id}`)}
- className="relative bg-neutral-900 border border-neutral-800 p-4 rounded-2xl overflow-hidden flex flex-row items-center justify-between"
- >
-
- {process.item.Name}
-
- {process.item.Type}
-
-
-
- {process.progress.toFixed(0)}%
-
-
- {process.speed?.toFixed(2)}x
-
-
- ETA {eta}
-
-
-
- {
- FFmpegKit.cancel();
- setProcess(null);
- }}
- >
-
-
-
-
- ) : (
- No active downloads
- )}
-
-
- {movies.length > 0 && (
-
-
- Movies
-
- {movies?.length}
-
-
- {movies?.map((item: BaseItemDto) => (
-
-
-
- ))}
-
- )}
- {groupedBySeries?.map((items: BaseItemDto[], index: number) => (
-
- ))}
-
-
- );
-};
-
-export default downloads;
-
-/*
- * Format a number (Date.getTime) to a human readable string ex. 2m 34s
- * @param {number} num - The number to format
- *
- * @returns {string} - The formatted string
- */
-const formatNumber = (num: number) => {
- const minutes = Math.floor(num / 60000);
- const seconds = ((num % 60000) / 1000).toFixed(0);
- return `${minutes}m ${seconds}s`;
-};
diff --git a/app/(auth)/items/[id].tsx b/app/(auth)/items/[id].tsx
index 91cbc7cf..98bdfb89 100644
--- a/app/(auth)/items/[id].tsx
+++ b/app/(auth)/items/[id].tsx
@@ -5,7 +5,6 @@ import {
fullScreenAtom,
playingAtom,
} from "@/components/CurrentlyPlayingBar";
-import { DownloadItem } from "@/components/DownloadItem";
import { Loader } from "@/components/Loader";
import { OverviewText } from "@/components/OverviewText";
import { PlayButton } from "@/components/PlayButton";
@@ -245,11 +244,6 @@ const page: React.FC = () => {
- {playbackUrl ? (
-
- ) : (
-
- )}
diff --git a/app/(auth)/settings.tsx b/app/(auth)/settings.tsx
index 348d3a24..87560a1f 100644
--- a/app/(auth)/settings.tsx
+++ b/app/(auth)/settings.tsx
@@ -7,12 +7,10 @@ import { useQuery } from "@tanstack/react-query";
import { useAtom } from "jotai";
import { ScrollView, View } from "react-native";
import * as Haptics from "expo-haptics";
-import { useFiles } from "@/hooks/useFiles";
import { SettingToggles } from "@/components/settings/SettingToggles";
export default function settings() {
const { logout } = useJellyfin();
- const { deleteAllFiles } = useFiles();
const [api] = useAtom(apiAtom);
const [user] = useAtom(userAtom);
@@ -39,23 +37,12 @@ export default function settings() {
-