fix: add sudo support for listFiles and improve permission error handling #511

Closed
ZacharyZcR wants to merge 52 commits from feat/file-manager-sudo-support into main
4 changed files with 48 additions and 7 deletions
Showing only changes of commit 80c09aef7d - Show all commits
+3
View File
@@ -1958,6 +1958,9 @@
"terminalSettings": "Terminal", "terminalSettings": "Terminal",
"hostSidebarSettings": "Host & Sidebar", "hostSidebarSettings": "Host & Sidebar",
"snippetsSettings": "Snippets", "snippetsSettings": "Snippets",
"updateSettings": "Updates",
"disableUpdateCheck": "Disable Update Check",
"disableUpdateCheckDesc": "Stop checking for new versions on startup and dashboard. Reduces network requests.",
"currentPassword": "Current Password", "currentPassword": "Current Password",
"passwordChangedSuccess": "Password changed successfully! Please log in again.", "passwordChangedSuccess": "Password changed successfully! Please log in again.",
"failedToChangePassword": "Failed to change password. Please check your current password and try again.", "failedToChangePassword": "Failed to change password. Please check your current password and try again.",
@@ -160,6 +160,8 @@ export function Dashboard({
const uptimeInfo = await getUptime(); const uptimeInfo = await getUptime();
setUptime(uptimeInfo.formatted); setUptime(uptimeInfo.formatted);
const updateCheckDisabled = localStorage.getItem("disableUpdateCheck") === "true";
if (!updateCheckDisabled) {
const versionInfo = await getVersionInfo(); const versionInfo = await getVersionInfo();
setVersionText(`v${versionInfo.localVersion}`); setVersionText(`v${versionInfo.localVersion}`);
if ( if (
@@ -168,6 +170,7 @@ export function Dashboard({
) { ) {
setVersionStatus(versionInfo.status); setVersionStatus(versionInfo.status);
} }
}
try { try {
await getDatabaseHealth(); await getDatabaseHealth();
@@ -30,6 +30,11 @@ export function ElectronVersionCheck({
const lineColor = isDarkMode ? "#151517" : "#f9f9f9"; const lineColor = isDarkMode ? "#151517" : "#f9f9f9";
useEffect(() => { useEffect(() => {
const updateCheckDisabled = localStorage.getItem("disableUpdateCheck") === "true";
if (updateCheckDisabled) {
onContinue();
return;
}
if (isElectron()) { if (isElectron()) {
checkForUpdates(); checkForUpdates();
} else { } else {
+30
View File
@@ -133,6 +133,9 @@ export function UserProfile({
const saved = localStorage.getItem("showHostTags"); const saved = localStorage.getItem("showHostTags");
return saved !== null ? saved === "true" : true; return saved !== null ? saved === "true" : true;
}); });
const [disableUpdateCheck, setDisableUpdateCheck] = useState<boolean>(
localStorage.getItem("disableUpdateCheck") === "true",
);
const [userRoles, setUserRoles] = useState<UserRole[]>([]); const [userRoles, setUserRoles] = useState<UserRole[]>([]);
useEffect(() => { useEffect(() => {
@@ -212,6 +215,11 @@ export function UserProfile({
window.dispatchEvent(new Event("showHostTagsChanged")); window.dispatchEvent(new Event("showHostTagsChanged"));
}; };
const handleDisableUpdateCheckToggle = (enabled: boolean) => {
setDisableUpdateCheck(enabled);
localStorage.setItem("disableUpdateCheck", enabled.toString());
};
const handleDeleteAccount = async (e: React.FormEvent) => { const handleDeleteAccount = async (e: React.FormEvent) => {
e.preventDefault(); e.preventDefault();
setDeleteLoading(true); setDeleteLoading(true);
@@ -613,6 +621,28 @@ export function UserProfile({
</div> </div>
</div> </div>
</div> </div>
<div className="rounded-lg border-2 border-edge bg-elevated p-4">
<h3 className="text-lg font-semibold mb-4">
{t("profile.updateSettings")}
</h3>
<div className="space-y-4">
<div className="flex items-center justify-between">
<div>
<Label className="text-foreground-secondary">
{t("profile.disableUpdateCheck")}
</Label>
<p className="text-sm text-muted-foreground mt-1">
{t("profile.disableUpdateCheckDesc")}
</p>
</div>
<Switch
checked={disableUpdateCheck}
onCheckedChange={handleDisableUpdateCheckToggle}
/>
</div>
</div>
</div>
</TabsContent> </TabsContent>
<TabsContent value="security" className="space-y-4"> <TabsContent value="security" className="space-y-4">