Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion desktop/build/windows/installer/project.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@ Section "uninstall"

RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath

RMDir /r $INSTDIR
; Precision uninstall: delete main application files
Delete "$INSTDIR\${PRODUCT_EXECUTABLE}"

Delete "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk"
Delete "$DESKTOP\${INFO_PRODUCTNAME}.lnk"
Expand All @@ -162,4 +163,7 @@ Section "uninstall"
!insertmacro wails.unassociateCustomProtocols

!insertmacro reasonix.deleteUninstaller

; Only remove the installation directory if it is empty to prevent data loss
RMDir $INSTDIR
SectionEnd
32 changes: 22 additions & 10 deletions desktop/frontend/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1532,16 +1532,24 @@ export default function App() {
if (isThemeMode(arg)) {
const next = arg;
const style = getThemeStyle(next);
await app.SetDesktopAppearance(next, style);
applyTheme(next, style);
notice(t("settings.themeChanged", { theme: next, style }));
try {
await app.SetDesktopAppearance(next, style);
applyTheme(next, style);
notice(t("settings.themeChanged", { theme: next, style }));
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
return;
}
if (isThemeStyle(arg)) {
const cur = getTheme();
await app.SetDesktopAppearance(cur, arg);
applyTheme(cur, arg);
notice(t("settings.themeChanged", { theme: cur, style: arg }));
try {
await app.SetDesktopAppearance(cur, arg);
applyTheme(cur, arg);
notice(t("settings.themeChanged", { theme: cur, style: arg }));
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
return;
}
notice(t("settings.themeUnknown", { name: arg }), "warn");
Expand All @@ -1553,7 +1561,7 @@ export default function App() {
if (goal.trim()) await setControllerGoal(goal);
commitThenSend(trimmed, submitText.trim());
},
[applyGoal, closeTransientOverlays, collaborationMode, composerProfile, goal, send, runShell, notice, setControllerCollaborationMode, setControllerGoal, setControllerToolApprovalMode, steer, switchModel, t, toolApprovalMode],
[applyGoal, closeTransientOverlays, collaborationMode, composerProfile, goal, send, runShell, notice, setControllerCollaborationMode, setControllerGoal, setControllerToolApprovalMode, steer, switchModel, t, toolApprovalMode, showToast],
);

const refreshTabMetas = useCallback(async (): Promise<TabMeta[]> => {
Expand Down Expand Up @@ -2283,9 +2291,13 @@ export default function App() {
const renameTopic = useCallback(async (topicId: string, title: string) => {
const nextTitle = title.trim();
if (!topicId || !nextTitle) return;
await app.RenameTopic(topicId, nextTitle);
await refreshProjectsAndTabs();
}, [refreshProjectsAndTabs]);
try {
await app.RenameTopic(topicId, nextTitle);
await refreshProjectsAndTabs();
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
}, [refreshProjectsAndTabs, showToast]);

const startActiveTopicRename = useCallback(() => {
if (!activeTab?.topicId) return;
Expand Down
26 changes: 14 additions & 12 deletions desktop/frontend/src/components/ProjectTree.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import type { CSSProperties, DragEvent as ReactDragEvent, KeyboardEvent as ReactKeyboardEvent, MouseEvent as ReactMouseEvent } from "react";
import { Archive, ArrowDown, Pencil, Plus, Folder, FolderPlus, Search, BriefcaseBusiness, Copy, FolderOpen, XCircle, History, Check, ListCollapse, ListRestart, MessageSquare, Clock, Pin, MoreHorizontal, Minimize2, Maximize2 } from "lucide-react";
import { asArray } from "../lib/array";
import { useToast } from "../lib/toast";
import { app } from "../lib/bridge";
import type { ProjectNode, ProjectTopicStatus } from "../lib/types";
import { topicActivityTime } from "../lib/session";
Expand Down Expand Up @@ -443,6 +444,7 @@ export function ProjectTree({
onTimeFilterChange,
}: ProjectTreeProps) {
const t = useT();
const { showToast } = useToast();
const compactTopics = variant === "workbench";
const [tree, setTree] = useState<ProjectNode[]>([]);
const [expanded, setExpanded] = useState<Set<string>>(new Set());
Expand Down Expand Up @@ -738,8 +740,8 @@ export function ProjectTree({
else await app.RenameTopic(topicId, title);
await refresh();
if (!onRenameTopic) await onTopicsChanged?.();
} catch {
/* ignore */
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
};

Expand All @@ -750,8 +752,8 @@ export function ProjectTree({
try {
await app.RenameProject(root, title);
await refresh();
} catch {
/* ignore */
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
};

Expand All @@ -763,8 +765,8 @@ export function ProjectTree({
setConfirmAction(null);
await refresh();
await onTopicsChanged?.();
} catch {
/* ignore */
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
};

Expand All @@ -775,8 +777,8 @@ export function ProjectTree({
setMenuPoint(null);
await refresh();
await onTopicsChanged?.();
} catch {
/* ignore */
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
};

Expand All @@ -788,8 +790,8 @@ export function ProjectTree({
setMenuPoint(null);
await refresh();
await onTopicsChanged?.();
} catch {
/* ignore */
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
};

Expand All @@ -810,8 +812,8 @@ export function ProjectTree({
setMenuPoint(null);
setConfirmRemoveProject(null);
await refresh();
} catch {
/* ignore */
} catch (err) {
showToast(err instanceof Error ? err.message : String(err), "error");
}
};

Expand Down
Loading
Loading