diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index dd682c8..99170c3 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -3,6 +3,7 @@ import { Card, CardBody, Checkbox, + Chip, Dropdown, DropdownItem, DropdownMenu, @@ -27,8 +28,8 @@ import { getCurrentWindow } from '@tauri-apps/api/window' import { disable, enable } from '@tauri-apps/plugin-autostart' import { writeText } from '@tauri-apps/plugin-clipboard-manager' import { ask, message } from '@tauri-apps/plugin-dialog' -import { remove } from '@tauri-apps/plugin-fs' -import { openUrl } from '@tauri-apps/plugin-opener' +import { readTextFileLines, remove } from '@tauri-apps/plugin-fs' +import { openUrl, revealItemInDir } from '@tauri-apps/plugin-opener' import { version as osVersion, type } from '@tauri-apps/plugin-os' import { relaunch } from '@tauri-apps/plugin-process' import { type Update, check } from '@tauri-apps/plugin-updater' @@ -36,7 +37,6 @@ import { CheckIcon, CodeIcon, CogIcon, - CopyIcon, EyeIcon, ImportIcon, InfoIcon, @@ -51,6 +51,7 @@ import { type HTMLAttributes, useCallback, useEffect, + useRef, useState, } from 'react' import { revokeMachineLicense, validateLicense } from '../../lib/license' @@ -449,14 +450,15 @@ function GeneralSection() { } try { + setStartOnBoot(value) + if (value) { await enable() } else { await disable() } - - setStartOnBoot(value) } catch (error) { + setStartOnBoot(!value) await message( `An error occurred while toggling start on boot. ${error}`, { @@ -467,7 +469,12 @@ function GeneralSection() { } }} > - Start on boot +
+

Start on boot

+ + New + +
([]) const fetchInfo = useCallback(async () => { const defaultPaths = await getDefaultPaths() @@ -1146,17 +1154,129 @@ function AboutSection() { } }, [currentConfig]) + const fetchLogs = useCallback(async (logFilePath: string) => { + if (isLoadingLogs.current) { + return [] + } + isLoadingLogs.current = true + const logLines = await readTextFileLines(logFilePath) + const lines = [] + for await (const line of logLines) { + lines.push(line) + } + isLoadingLogs.current = false + return lines.slice(-30) + }, []) + useEffect(() => { fetchInfo().then(setInfo) }, [fetchInfo]) + useEffect(() => { + if (!info) { + return + } + if (last30Lines.length > 0) { + return + } + fetchLogs(info.dirs.appLog + '/Rclone UI.log').then(setLast30Lines) + }, [fetchLogs, info, last30Lines.length]) + return (
-
- {!info && } - {info && ( + {!info && } + + {info && ( +
+ + + + +
+ )} + + {info && ( +