1414import * as vscode from "vscode" ;
1515
1616import { FolderContext } from "../FolderContext" ;
17- import { WorkspaceContext } from "../WorkspaceContext" ;
17+ import { SwiftLogger } from "../logging/SwiftLogger" ;
18+ import { StatusItem } from "../ui/StatusItem" ;
1819import { execSwift , poll } from "../utilities/utilities" ;
20+ import { TaskManager } from "./TaskManager" ;
1921
2022export interface SwiftOperationOptions {
2123 // Should I show a status item
@@ -39,7 +41,8 @@ export interface SwiftOperation {
3941 isBuildOperation : boolean ;
4042 // run operation
4143 run (
42- workspaceContext : WorkspaceContext ,
44+ taskManager : TaskManager ,
45+ logger : SwiftLogger ,
4346 token : vscode . CancellationToken | undefined
4447 ) : Promise < number | undefined > ;
4548}
@@ -82,14 +85,15 @@ export class TaskOperation implements SwiftOperation {
8285 }
8386
8487 run (
85- workspaceContext : WorkspaceContext ,
88+ taskManager : TaskManager ,
89+ logger : SwiftLogger ,
8690 token ?: vscode . CancellationToken
8791 ) : Promise < number | undefined > {
8892 if ( token ?. isCancellationRequested ) {
8993 return Promise . resolve ( undefined ) ;
9094 }
91- workspaceContext . logger . info ( `Exec Task: ${ this . task . detail ?? this . task . name } ` ) ;
92- return workspaceContext . tasks . executeTaskAndWait ( this . task , token ) ;
95+ logger . info ( `Exec Task: ${ this . task . detail ?? this . task . name } ` ) ;
96+ return taskManager . executeTaskAndWait ( this . task , token ) ;
9397 }
9498}
9599
@@ -153,8 +157,8 @@ class QueuedOperation {
153157 public token ?: vscode . CancellationToken
154158 ) { }
155159
156- run ( workspaceContext : WorkspaceContext ) : Promise < number | undefined > {
157- return this . operation . run ( workspaceContext , this . token ) ;
160+ run ( taskManager : TaskManager , logger : SwiftLogger ) : Promise < number | undefined > {
161+ return this . operation . run ( taskManager , logger , this . token ) ;
158162 }
159163}
160164
@@ -164,17 +168,16 @@ class QueuedOperation {
164168 * Queue swift task operations to be executed serially
165169 */
166170export class TaskQueue implements vscode . Disposable {
167- queue : QueuedOperation [ ] ;
171+ queue : QueuedOperation [ ] = [ ] ;
168172 activeOperation ?: QueuedOperation ;
169- workspaceContext : WorkspaceContext ;
170- disabled : boolean ;
173+ disabled : boolean = false ;
171174
172- constructor ( private folderContext : FolderContext ) {
173- this . queue = [ ] ;
174- this . workspaceContext = folderContext . workspaceContext ;
175- this . activeOperation = undefined ;
176- this . disabled = false ;
177- }
175+ constructor (
176+ private taskManager : TaskManager ,
177+ private statusItem : StatusItem ,
178+ private logger : SwiftLogger ,
179+ private name : string
180+ ) { }
178181
179182 dispose ( ) {
180183 this . queue = [ ] ;
@@ -244,34 +247,25 @@ export class TaskQueue implements vscode.Disposable {
244247 this . activeOperation = operation ;
245248 // show active task status item
246249 if ( operation . showStatusItem === true ) {
247- this . workspaceContext . statusItem . start ( operation . operation . statusItemId ) ;
250+ this . statusItem . start ( operation . operation . statusItemId ) ;
248251 }
249252 // wait while queue is disabled before running task
250253 await this . waitWhileDisabled ( ) ;
251254 // log start
252255 if ( operation . log ) {
253- this . workspaceContext . logger . info (
254- `${ operation . log } : starting ... ` ,
255- this . folderContext . name
256- ) ;
256+ this . logger . info ( `${ operation . log } : starting ... ` , this . name ) ;
257257 }
258258 operation
259- . run ( this . workspaceContext )
259+ . run ( this . taskManager , this . logger )
260260 . then ( result => {
261261 // log result
262262 if ( operation . log && ! operation . token ?. isCancellationRequested ) {
263263 switch ( result ) {
264264 case 0 :
265- this . workspaceContext . logger . info (
266- `${ operation . log } : ... done.` ,
267- this . folderContext . name
268- ) ;
265+ this . logger . info ( `${ operation . log } : ... done.` , this . name ) ;
269266 break ;
270267 default :
271- this . workspaceContext . logger . error (
272- `${ operation . log } : ... failed.` ,
273- this . folderContext . name
274- ) ;
268+ this . logger . error ( `${ operation . log } : ... failed.` , this . name ) ;
275269 break ;
276270 }
277271 }
@@ -280,10 +274,7 @@ export class TaskQueue implements vscode.Disposable {
280274 . catch ( error => {
281275 // log error
282276 if ( operation . log ) {
283- this . workspaceContext . logger . error (
284- `${ operation . log } : ${ error } ` ,
285- this . folderContext . name
286- ) ;
277+ this . logger . error ( `${ operation . log } : ${ error } ` , this . name ) ;
287278 }
288279 this . finishTask ( operation , { fail : error } ) ;
289280 } ) ;
@@ -294,7 +285,7 @@ export class TaskQueue implements vscode.Disposable {
294285 private finishTask ( operation : QueuedOperation , result : TaskQueueResult ) {
295286 operation . cb ( result ) ;
296287 if ( operation . showStatusItem === true ) {
297- this . workspaceContext . statusItem . end ( operation . operation . statusItemId ) ;
288+ this . statusItem . end ( operation . operation . statusItemId ) ;
298289 }
299290 this . activeOperation = undefined ;
300291 void this . processQueue ( ) ;
0 commit comments