import { useState, useEffect } from "react"; import "./index.css"; import { invoke } from "@tauri-apps/api/tauri"; import { listen } from '@tauri-apps/api/event'; import { appWindow } from '@tauri-apps/api/window'; import { ThemeProvider } from "@/components/theme-provider"; import { Button } from "@/components/ui/button"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { InstalledPrograms, WebSocketMessage, } from "./types"; import { compareVersions, extractVersion, isInstalled, sendStreamInfo } from "./lib/utils"; import { CircleCheck, TriangleAlert, CircleAlert } from 'lucide-react'; function App() { useEffect(() => { const handleCloseRequested = (event: any) => { event.preventDefault(); appWindow.hide(); }; appWindow.onCloseRequested(handleCloseRequested); }, []); const [installedPrograms, setInstalledPrograms] = useState({ winget: { installed: false, version: null, }, python: { installed: false, version: null, }, pip: { installed: false, version: null, }, ffmpeg: { installed: false, version: null, }, pytubepp: { installed: false, version: null, }, }); useEffect(() => { const unlisten = listen('websocket-message', (event) => { if(event.payload.command === 'send-stream-info') { sendStreamInfo(event.payload.url); } else if(event.payload.command === 'download-stream') { const startDownload = async () => { try { await invoke('download_stream', { url: event.payload.url, stream: event.payload.argument }); await invoke('receive_frontend_response', { response: 'Download started' }); } catch (error) { console.error(error); } }; startDownload(); } else if (event.payload.command === 'autostart') { const handleAppAutostart = async () => { appWindow.hide(); await invoke('receive_frontend_response', { response: 'Appwindow Hidden' }); }; handleAppAutostart(); } }); return () => { unlisten.then(f => f()); }; }, []); function checkAllPrograms() { isInstalled('winget', '--version').then((result) => { setInstalledPrograms((prevState) => ({ ...prevState, winget: { installed: result.installed, version: result.output ? extractVersion(result.output) : null, } })); }); isInstalled('python', '--version').then((result) => { setInstalledPrograms((prevState) => ({ ...prevState, python: { installed: result.installed, version: result.output ? extractVersion(result.output) : null, } })); }); isInstalled('pip', '--version').then((result) => { setInstalledPrograms((prevState) => ({ ...prevState, pip: { installed: result.installed, version: result.output ? extractVersion(result.output) : null, } })); }); isInstalled('ffmpeg', '-version').then((result) => { setInstalledPrograms((prevState) => ({ ...prevState, ffmpeg: { installed: result.installed, version: result.output ? extractVersion(result.output) : null, } })); }); isInstalled('pytubepp', '--version').then((result) => { setInstalledPrograms((prevState) => ({ ...prevState, pytubepp: { installed: result.installed, version: result.output ? extractVersion(result.output) : null, } })); }); } useEffect(() => { checkAllPrograms(); } , []); return (

PytubePP Helper

Python: {installedPrograms.python.installed ? 'installed' : 'not installed'} {installedPrograms.python.version ? `(${installedPrograms.python.version})` : ''}

{installedPrograms.python.installed ? installedPrograms.python.version ? compareVersions(installedPrograms.python.version, '3.8') < 0 ? : : installedPrograms.winget.installed ? : : null}

FFmpeg: {installedPrograms.ffmpeg.installed ? 'installed' : 'not installed'} {installedPrograms.ffmpeg.version ? `(${installedPrograms.ffmpeg.version})` : ''}

{installedPrograms.ffmpeg.installed ? : installedPrograms.winget.installed ? : null}

PytubePP: {installedPrograms.pytubepp.installed ? 'installed' : 'not installed'} {installedPrograms.pytubepp.version ? `(${installedPrograms.pytubepp.version})` : ''}

{installedPrograms.pytubepp.installed ? : installedPrograms.pip.installed ? : null}
{(!installedPrograms.winget.installed && (!installedPrograms.python.installed || !installedPrograms.ffmpeg.installed)) ? WinGet Not Found WinGet is required to install necessary packages. Please install it manually from here. : null} {(installedPrograms.python.installed && installedPrograms.ffmpeg.installed && installedPrograms.pytubepp.installed) ? Ready Everything looks ok! You can close this window now. Make sure it's always running in the background. : null}
); } export default App;