From 800f0c3481d150afc1c5e3cb09230ce9d664c7e7 Mon Sep 17 00:00:00 2001 From: Adrian Castro <22133246+castdrian@users.noreply.github.com> Date: Tue, 26 Mar 2024 11:39:37 +0100 Subject: [PATCH] chore: add repro button for expo issue lol --- apps/expo/src/app/(tabs)/downloads.tsx | 32 +++++++++++++++++-- .../expo/src/hooks/DownloadManagerContext.tsx | 16 +++++++--- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/apps/expo/src/app/(tabs)/downloads.tsx b/apps/expo/src/app/(tabs)/downloads.tsx index 2c126ef..ad1c6d8 100644 --- a/apps/expo/src/app/(tabs)/downloads.tsx +++ b/apps/expo/src/app/(tabs)/downloads.tsx @@ -1,29 +1,57 @@ import type { Asset } from "expo-media-library"; import React from "react"; +import { Platform } from "react-native"; import { ScrollView } from "react-native-gesture-handler"; import { useRouter } from "expo-router"; +import { MaterialCommunityIcons } from "@expo/vector-icons"; +import { useTheme } from "tamagui"; import { DownloadItem } from "~/components/DownloadItem"; import ScreenLayout from "~/components/layout/ScreenLayout"; +import { MWButton } from "~/components/ui/Button"; import { useDownloadManager } from "~/hooks/DownloadManagerContext"; import { usePlayerStore } from "~/stores/player/store"; const DownloadsScreen: React.FC = () => { - const { downloads, removeDownload } = useDownloadManager(); + const { startDownload, downloads, removeDownload } = useDownloadManager(); const resetVideo = usePlayerStore((state) => state.resetVideo); + const setAsset = usePlayerStore((state) => state.setAsset); const router = useRouter(); + const theme = useTheme(); const handlePress = (asset?: Asset) => { if (!asset) return; resetVideo(); + setAsset(asset); router.push({ pathname: "/videoPlayer", - params: { data: JSON.stringify(asset) }, }); }; return ( + + } + onPress={async () => { + const asset = await startDownload( + "https://samplelib.com/lib/preview/mp4/sample-5s.mp4", + "mp4", + ).catch(console.error); + if (asset) { + handlePress(asset); + } + }} + > + test local playback (expo-av) + {downloads.map((item) => ( Promise; + startDownload: (url: string, type: "mp4" | "hls") => Promise; removeDownload: (id: string) => void; } @@ -66,7 +66,7 @@ export const DownloadManagerProvider: React.FC<{ children: ReactNode }> = ({ url: string, type: "mp4" | "hls", headers?: Record, - ) => { + ): Promise => { toastController.show("Download started", { burntOptions: { preset: "none" }, native: true, @@ -87,7 +87,8 @@ export const DownloadManagerProvider: React.FC<{ children: ReactNode }> = ({ setDownloads((currentDownloads) => [newDownload, ...currentDownloads]); if (type === "mp4") { - await downloadMP4(url, newDownload.id, headers ?? {}); + const asset = await downloadMP4(url, newDownload.id, headers ?? {}); + return asset; } else if (type === "hls") { // HLS stuff later } @@ -151,7 +152,11 @@ export const DownloadManagerProvider: React.FC<{ children: ReactNode }> = ({ const result = await downloadResumable.downloadAsync(); if (result) { console.log("Finished downloading to ", result.uri); - await saveFileToMediaLibraryAndDeleteOriginal(result.uri, downloadId); + const asset = await saveFileToMediaLibraryAndDeleteOriginal( + result.uri, + downloadId, + ); + return asset; } } catch (e) { console.error(e); @@ -161,7 +166,7 @@ export const DownloadManagerProvider: React.FC<{ children: ReactNode }> = ({ const saveFileToMediaLibraryAndDeleteOriginal = async ( fileUri: string, downloadId: string, - ) => { + ): Promise => { try { updateDownloadItem(downloadId, { statusText: "Importing" }); @@ -183,6 +188,7 @@ export const DownloadManagerProvider: React.FC<{ children: ReactNode }> = ({ burntOptions: { preset: "done" }, native: true, }); + return asset; } catch (error) { console.error("Error saving file to media library:", error); toastController.show("Download failed", {