Skip to content

Commit 912e8d8

Browse files
committed
Validate that the last used directory still exists when rehydrating it
1 parent f18417e commit 912e8d8

File tree

2 files changed

+16
-30
lines changed

2 files changed

+16
-30
lines changed

apps/array/src/renderer/features/task-detail/components/TaskInput.tsx

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function TaskInput() {
2525

2626
const { view } = useNavigationStore();
2727
const { lastUsedDirectory } = useTaskDirectoryStore();
28-
const { folders, isLoaded: foldersLoaded } = useRegisteredFoldersStore();
28+
const { folders } = useRegisteredFoldersStore();
2929
const { lastUsedRunMode, lastUsedLocalWorkspaceMode } = useSettingsStore();
3030

3131
const [selectedDirectory, setSelectedDirectory] = useState(
@@ -41,35 +41,6 @@ export function TaskInput() {
4141
useState<LocalWorkspaceMode>(lastUsedLocalWorkspaceMode);
4242
const [selectedBranch, setSelectedBranch] = useState<string | null>(null);
4343

44-
useEffect(() => {
45-
if (!foldersLoaded || selectedDirectory) return;
46-
47-
if (view.folderId) {
48-
const folder = folders.find((f) => f.id === view.folderId);
49-
if (folder) {
50-
setSelectedDirectory(folder.path);
51-
return;
52-
}
53-
}
54-
55-
if (lastUsedDirectory) {
56-
const folderExists = folders.some((f) => f.path === lastUsedDirectory);
57-
if (folderExists) {
58-
setSelectedDirectory(lastUsedDirectory);
59-
} else if (folders.length > 0) {
60-
setSelectedDirectory(folders[0].path);
61-
}
62-
} else if (folders.length > 0) {
63-
setSelectedDirectory(folders[0].path);
64-
}
65-
}, [
66-
foldersLoaded,
67-
folders,
68-
lastUsedDirectory,
69-
view.folderId,
70-
selectedDirectory,
71-
]);
72-
7344
const { githubIntegration } = useRepositoryIntegration();
7445

7546
useEffect(() => {

apps/array/src/renderer/stores/taskDirectoryStore.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface TaskDirectoryState {
1010
getTaskDirectory: (taskId: string, repoKey?: string) => string | null;
1111
setRepoDirectory: (repoKey: string, directory: string) => void;
1212
clearRepoDirectory: (repoKey: string) => void;
13+
validateLastUsedDirectory: () => Promise<void>;
1314
}
1415

1516
const isValidPath = (path: string): boolean => {
@@ -54,6 +55,17 @@ export const useTaskDirectoryStore = create<TaskDirectoryState>()(
5455
repoDirectories: omitKey(state.repoDirectories, repoKey),
5556
}));
5657
},
58+
59+
validateLastUsedDirectory: async () => {
60+
const { lastUsedDirectory } = get();
61+
if (!lastUsedDirectory) return;
62+
63+
const exists =
64+
await window.electronAPI?.validateRepo(lastUsedDirectory);
65+
if (!exists) {
66+
set({ lastUsedDirectory: null });
67+
}
68+
},
5769
}),
5870
{
5971
name: "task-directory-mappings",
@@ -84,6 +96,9 @@ export const useTaskDirectoryStore = create<TaskDirectoryState>()(
8496
state.repoDirectories = cleanedRepoDirs;
8597
state.lastUsedDirectory = cleanedLastUsed;
8698
}
99+
100+
// Validate that lastUsedDirectory still exists on disk
101+
state.validateLastUsedDirectory();
87102
},
88103
},
89104
),

0 commit comments

Comments
 (0)