дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 19:25:54 +02:00
fix(tasks): Make every background task cancellable, queued or running (#177)
Background tasks often couldn't be cancelled, or cancelling didn't stop them: - A cancel that arrived before the backend registered the request was dropped (build while saving files, multi-repository fetch/pull between repositories). The host now remembers early cancels (bounded, 2 min), and request ids start at a random value per page. - There was no queue and no common cancel path: backend-reported tasks (LSP progress, deployment transfers) couldn't be cancelled, and tool installs, VCS operations and update checks had no cancel button in Background Tasks. - Only the direct child process was killed, and JDK / tool archives were extracted without checking for cancellation. Tool installs and JDK downloads now share a downloads queue; cancelling a queued task removes it without starting any work. Every task cancels through one path that shows "Cancelling…" and then removes it; tasks that can't be interrupted show a disabled cancel button with the reason. IdeEvent::Task carries `cancellable` with a cancel_task command, cancellable LSP progress sends window/workDoneProgress/cancel, installers, curl and tar run in their own process group and are killed as a group, and extraction checks for cancellation between entries. Claude-Session: https://claude.ai/code/session_01Dq6jQQn8ZhRfkkyj3PRutA
Цей коміт міститься в:
1 джерело
c6621c5c36
коміт
1c46a1cd04
40 files changed
+888
-148
No files matched your search
@@ -56,6 +56,11 @@ export const commands = {
|
||||
*/
|
||||
projectRoots: () => typedError<ProjectRoots, IdeError>(__TAURI_INVOKE("project_roots")),
|
||||
cancelRequest: (id: RequestId) => __TAURI_INVOKE<void>("cancel_request", { id }),
|
||||
/**
|
||||
* Stops a background task the backend reported with `cancellable` set; false when it
|
||||
* has ended or can't be cancelled.
|
||||
*/
|
||||
cancelTask: (id: TaskId) => __TAURI_INVOKE<boolean>("cancel_task", { id }),
|
||||
/** Routes frontend logs into the backend `tracing` pipeline. */
|
||||
logFrontend: (level: LogLevel, message: string) => __TAURI_INVOKE<void>("log_frontend", { level, message }),
|
||||
/** Streams the project's agent events to this window; returns every task. */
|
||||
@@ -3237,7 +3242,9 @@ export type IdeEvent =
|
||||
/** Full replacement of diagnostics for one file from one producer. */
|
||||
{ type: "diagnostics"; path: IpcPath; source: string; items: Diagnostic[] } |
|
||||
/** Progress of a background task; `fraction` is `None` when indeterminate. */
|
||||
{ type: "task"; id: TaskId; title: string; message: string | null; fraction: number | null; done: boolean } |
|
||||
{ type: "task"; id: TaskId; title: string; message: string | null; fraction: number | null; done: boolean;
|
||||
/** The UI may stop it with `cancel_task(id)` (see [`crate::task`]). */
|
||||
cancellable: boolean } |
|
||||
/** Project indexing state changed (dumb mode on/off). */
|
||||
{ type: "indexState"; indexing: boolean; files: number; symbols: number } |
|
||||
/** Git status / branch information should be refreshed. */
|
||||
|
||||
Reference in new issue
Заблокувати користувача