1
1
mirror of https://github.com/neosubhamoy/pytubepp-helper.git synced 2026-02-04 11:22:22 +05:30
Files
pytubepp-helper/src/App.tsx

99 lines
3.3 KiB
TypeScript

import React from "react"
import { useEffect, useState } from "react";
import { invoke } from "@tauri-apps/api/core";
import { listen } from "@tauri-apps/api/event";
import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow";
import { ThemeProvider } from "@/components/theme-provider";
import { WebSocketMessage } from "@/types";
import { sendStreamInfo } from "@/lib/utils";
import { Toaster } from "@/components/ui/toaster";
import { TooltipProvider } from "@/components/ui/tooltip";
import { check as checkAppUpdate } from "@tauri-apps/plugin-updater";
import { isPermissionGranted, requestPermission, sendNotification } from "@tauri-apps/plugin-notification";
function App({ children }: { children: React.ReactNode }) {
const appWindow = getCurrentWebviewWindow()
const [isAppUpdateChecked, setIsAppUpdateChecked] = useState(false);
// Prevent context menu in production
if (!import.meta.env.DEV) {
document.oncontextmenu = (event) => {
event.preventDefault()
}
}
useEffect(() => {
const handleCloseRequested = (event: any) => {
event.preventDefault();
appWindow.hide();
};
appWindow.onCloseRequested(handleCloseRequested);
}, []);
useEffect(() => {
const unlisten = listen<WebSocketMessage>('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.split(' ')[0], caption: event.payload.argument.split(' ')[1] });
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());
};
}, []);
useEffect(() => {
const checkForUpdates = async () => {
let permissionGranted = await isPermissionGranted();
if (!permissionGranted) {
const permission = await requestPermission();
permissionGranted = permission === 'granted';
}
setIsAppUpdateChecked(true);
try {
const update = await checkAppUpdate();
if (update) {
console.log(`found update ${update.version} from ${update.date} with notes ${update.body}`);
if (permissionGranted) {
sendNotification({ title: 'Update Available', body: 'A new version of pytubepp-helper is available. Please update to the latest version.' });
}
}
} catch (error) {
console.error(error);
}
};
if (!isAppUpdateChecked) {
checkForUpdates();
}
}, [])
return (
<ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme">
<TooltipProvider delayDuration={1000}>
{children}
<Toaster />
</TooltipProvider>
</ThemeProvider>
);
}
export default App;