Parcourir la source

mol-state: fix transation error reporting & improve task abort

David Sehnal il y a 4 ans
Parent
commit
760298c6bf
2 fichiers modifiés avec 13 ajouts et 3 suppressions
  1. 12 2
      src/mol-plugin/util/task-manager.ts
  2. 1 1
      src/mol-state/state.ts

+ 12 - 2
src/mol-plugin/util/task-manager.ts

@@ -24,10 +24,20 @@ class TaskManager {
         finished: this.ev<{ id: number }>()
     };
 
+    private tryGetAbortTaskId(node: Progress.Node): number | undefined {
+        if (this.abortRequests.has(node.progress.taskId)) return node.progress.taskId;
+        for (const c of node.children) {
+            const abort = this.tryGetAbortTaskId(c);
+            if (abort !== void 0) return abort;
+        }
+        return void 0;
+    }
+
     private track(internalId: number, taskId: number) {
         return (progress: Progress) => {
-            if (progress.canAbort && progress.requestAbort && this.abortRequests.has(progress.root.progress.taskId)) {
-                progress.requestAbort(this.abortRequests.get(taskId));
+            if (progress.canAbort && progress.requestAbort) {
+                const abortTaskId = this.tryGetAbortTaskId(progress.root);
+                if (abortTaskId !== void 0) progress.requestAbort(this.abortRequests.get(abortTaskId));
             }
             const elapsed = now() - progress.root.progress.startedTime;
             this.events.progress.next({

+ 1 - 1
src/mol-state/state.ts

@@ -201,7 +201,7 @@ class State {
                 if (!restored) {
                     restored = true;
                     await this.updateTree(snapshot).runInContext(ctx);
-                    this.events.log.error(e);
+                    this.events.log.next(LogEntry.error('' + e));
                 }
                 if (isNested) {
                     this.inTransactionError = true;