diff --git a/src-tauri/tauri.linux-flatpak.conf.json b/src-tauri/tauri.linux-flatpak.conf.json index d7f3e0b..d8bc6b1 100644 --- a/src-tauri/tauri.linux-flatpak.conf.json +++ b/src-tauri/tauri.linux-flatpak.conf.json @@ -29,7 +29,6 @@ "targets": ["deb"], "createUpdaterArtifacts": true, "licenseFile": "../LICENSE", - "category": "Utility", "icon": [ "icons/32x32.png", "icons/128x128.png", diff --git a/src/App.tsx b/src/App.tsx index b9dca06..bfc99c5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,7 +4,7 @@ import { AppContext } from "@/providers/appContextProvider"; import { useEffect, useRef, useState } from "react"; import { arch, exeExtension } from "@tauri-apps/plugin-os"; import { downloadDir, join, resourceDir, tempDir } from "@tauri-apps/api/path"; -import { useBasePathsStore, useCurrentVideoMetadataStore, useDownloaderPageStatesStore, useDownloadStatesStore, useEnvironmentStore, useKvPairsStatesStore, useSettingsPageStatesStore } from "@/services/store"; +import { useBasePathsStore, useCurrentVideoMetadataStore, useDownloaderPageStatesStore, useDownloadStatesStore, useKvPairsStatesStore, useSettingsPageStatesStore } from "@/services/store"; import { isObjEmpty} from "@/utils"; import { Command } from "@tauri-apps/plugin-shell"; import { useUpdateDownloadStatus } from "@/services/mutations"; @@ -39,10 +39,6 @@ export default function App({ children }: { children: React.ReactNode }) { const globalDownloadStates = useDownloadStatesStore((state) => state.downloadStates); const setDownloadStates = useDownloadStatesStore((state) => state.setDownloadStates); const setPath = useBasePathsStore((state) => state.setPath); - const isFlatpak = useEnvironmentStore(state => state.isFlatpak); - const setIsFlatpak = useEnvironmentStore((state) => state.setIsFlatpak); - const setIsAppimage = useEnvironmentStore((state) => state.setIsAppimage); - const setAppDirPath = useEnvironmentStore((state) => state.setAppDirPath); const setIsUsingDefaultSettings = useSettingsPageStatesStore((state) => state.setIsUsingDefaultSettings); const setSettingsKey = useSettingsPageStatesStore((state) => state.setSettingsKey); @@ -126,26 +122,6 @@ export default function App({ children }: { children: React.ReactNode }) { }; }, [stopPotServer]); - // Detect sandboxed environments - useEffect(() => { - const detectEnvironment = async () => { - try { - const flatpak = await invoke('is_flatpak'); - setIsFlatpak(flatpak); - const appimage = await invoke('is_appimage'); - if (appimage) { - setIsAppimage(true); - setAppDirPath(appimage); - } else { - setIsAppimage(false); - } - } catch (e) { - console.error('Failed to detect environment:', e); - } - }; - detectEnvironment(); - }, [setIsFlatpak, setIsAppimage, setAppDirPath]); - // Listen for websocket messages useEffect(() => { const unlisten = listen('websocket-message', (event) => { @@ -208,6 +184,7 @@ export default function App({ children }: { children: React.ReactNode }) { try { const currentArch = arch(); const currentExeExtension = exeExtension(); + const isFlatpak = await invoke('is_flatpak'); const downloadDirPath = await downloadDir(); const tempDirPath = await tempDir(); const resourceDirPath = await resourceDir(); @@ -232,7 +209,7 @@ export default function App({ children }: { children: React.ReactNode }) { } }; initPaths(); - }, [DOWNLOAD_DIR, setPath, isFlatpak]); + }, [DOWNLOAD_DIR, setPath]); // Fetch app version useEffect(() => { @@ -294,34 +271,38 @@ export default function App({ children }: { children: React.ReactNode }) { // Check for yt-dlp auto-update useEffect(() => { - // Only run once when both settings and KV pairs are loaded - if (!isSettingsStatePropagated || !isKvPairsStatePropagated) { - console.log("Skipping yt-dlp auto-update check, waiting for configs to load..."); - return; - } - // Skip if we've already run the auto-update once - if (hasRunYtDlpAutoUpdateRef.current) { - console.log("Auto-update check already performed in this session, skipping"); - return; - } - if (isFlatpak) { - console.log("Flatpak detected! Skipping yt-dlp auto-update"); - return; - } - hasRunYtDlpAutoUpdateRef.current = true; - console.log("Checking yt-dlp auto-update with loaded config values:", { - autoUpdate: YTDLP_AUTO_UPDATE, - updateChannel: YTDLP_UPDATE_CHANNEL, - lastCheck: ytDlpUpdateLastCheck - }); - const currentTimestamp = Date.now() - const YTDLP_UPDATE_INTERVAL = 86400000 // 24H; - if (YTDLP_AUTO_UPDATE && (ytDlpUpdateLastCheck === null || currentTimestamp - ytDlpUpdateLastCheck > YTDLP_UPDATE_INTERVAL)) { - console.log("Running auto-update for yt-dlp..."); - updateYtDlp(); - } else { - console.log("Skipping yt-dlp auto-update, either disabled or recently updated."); + const handleYtDlpAutoUpdate = async () => { + // Only run once when both settings and KV pairs are loaded + if (!isSettingsStatePropagated || !isKvPairsStatePropagated) { + console.log("Skipping yt-dlp auto-update check, waiting for configs to load..."); + return; + } + // Skip if we've already run the auto-update once + if (hasRunYtDlpAutoUpdateRef.current) { + console.log("Auto-update check already performed in this session, skipping"); + return; + } + const isFlatpak = await invoke('is_flatpak'); + if (isFlatpak) { + console.log("Flatpak detected! Skipping yt-dlp auto-update"); + return; + } + hasRunYtDlpAutoUpdateRef.current = true; + console.log("Checking yt-dlp auto-update with loaded config values:", { + autoUpdate: YTDLP_AUTO_UPDATE, + updateChannel: YTDLP_UPDATE_CHANNEL, + lastCheck: ytDlpUpdateLastCheck + }); + const currentTimestamp = Date.now() + const YTDLP_UPDATE_INTERVAL = 86400000 // 24H; + if (YTDLP_AUTO_UPDATE && (ytDlpUpdateLastCheck === null || currentTimestamp - ytDlpUpdateLastCheck > YTDLP_UPDATE_INTERVAL)) { + console.log("Running auto-update for yt-dlp..."); + updateYtDlp(); + } else { + console.log("Skipping yt-dlp auto-update, either disabled or recently updated."); + } } + handleYtDlpAutoUpdate() }, [isSettingsStatePropagated, isKvPairsStatePropagated]); // Check POT server status and auto-start if enabled diff --git a/src/helpers/use-linux-registerer.ts b/src/helpers/use-linux-registerer.ts index 94be1cd..2ffa3fe 100644 --- a/src/helpers/use-linux-registerer.ts +++ b/src/helpers/use-linux-registerer.ts @@ -1,8 +1,9 @@ import { join, resourceDir, homeDir } from "@tauri-apps/api/path"; import * as fs from "@tauri-apps/plugin-fs"; import { useKvPairs } from "@/helpers/use-kvpairs"; -import { useEnvironmentStore, useSettingsPageStatesStore } from "@/services/store"; +import { useSettingsPageStatesStore } from "@/services/store"; import { Command } from "@tauri-apps/plugin-shell"; +import { invoke } from "@tauri-apps/api/core"; interface FileMap { source: string; @@ -17,7 +18,7 @@ export function useLinuxRegisterer() { const registerToLinux = async () => { try { - const isFlatpak = useEnvironmentStore(state => state.isFlatpak); + const isFlatpak = await invoke('is_flatpak'); const resourceDirPath = isFlatpak ? '/app/lib/neodlp' : await resourceDir(); const homeDirPath = await homeDir(); const flatpakChromeManifestContent = { diff --git a/src/helpers/use-ytdlp-updater.ts b/src/helpers/use-ytdlp-updater.ts index 9484612..fc6cec1 100644 --- a/src/helpers/use-ytdlp-updater.ts +++ b/src/helpers/use-ytdlp-updater.ts @@ -1,4 +1,4 @@ -import { useEnvironmentStore, useSettingsPageStatesStore } from "@/services/store"; +import { useSettingsPageStatesStore } from "@/services/store"; import { useKvPairs } from "@/helpers/use-kvpairs"; import { Command } from "@tauri-apps/plugin-shell"; import { invoke } from "@tauri-apps/api/core"; @@ -17,7 +17,7 @@ export function useYtDlpUpdater() { const updateYtDlp = async () => { const CURRENT_TIMESTAMP = Date.now(); - const isFlatpak = useEnvironmentStore(state => state.isFlatpak); + const isFlatpak = await invoke('is_flatpak'); setIsUpdatingYtDlp(true); LOG.info('NEODLP', 'Updating yt-dlp to latest version'); try { diff --git a/src/services/store.ts b/src/services/store.ts index 277a87c..cb33561 100644 --- a/src/services/store.ts +++ b/src/services/store.ts @@ -1,4 +1,4 @@ -import { BasePathsStore, CurrentVideoMetadataStore, DownloadActionStatesStore, DownloaderPageStatesStore, DownloadStatesStore, EnvironmentStore, KvPairsStatesStore, LibraryPageStatesStore, LogsStore, SettingsPageStatesStore } from '@/types/store'; +import { BasePathsStore, CurrentVideoMetadataStore, DownloadActionStatesStore, DownloaderPageStatesStore, DownloadStatesStore, KvPairsStatesStore, LibraryPageStatesStore, LogsStore, SettingsPageStatesStore } from '@/types/store'; import { create } from 'zustand'; export const useBasePathsStore = create((set) => ({ @@ -352,12 +352,3 @@ export const useLogsStore = create((set) => ({ addLog: (log) => set((state) => ({ logs: [...state.logs, log] })), clearLogs: () => set(() => ({ logs: [] })) })); - -export const useEnvironmentStore = create((set) => ({ - isFlatpak: false, - isAppimage: false, - appDirPath: null, - setIsFlatpak: (isFlatpak) => set(() => ({ isFlatpak })), - setIsAppimage: (isAppimage) => set(() => ({ isAppimage })), - setAppDirPath: (path) => set(() => ({ appDirPath: path })) -})); diff --git a/src/types/store.ts b/src/types/store.ts index 524be4a..5643eae 100644 --- a/src/types/store.ts +++ b/src/types/store.ts @@ -152,12 +152,3 @@ export interface LogsStore { addLog: (log: Log) => void; clearLogs: () => void; } - -export interface EnvironmentStore { - isFlatpak: boolean; - isAppimage: boolean; - appDirPath: string | null; - setIsFlatpak: (isFlatpak: boolean) => void; - setIsAppimage: (isAppimage: boolean) => void; - setAppDirPath: (path: string) => void; -}