|
1 | | -import { Subject, Observable } from 'rxjs'; |
2 | 1 | import { FileService } from './files.service.js'; |
3 | 2 | import { FileWorkerService } from './files.worker.service.js'; |
4 | | -import { ScanOptions } from '@core/index.js'; |
5 | 3 | import { StreamService } from '../stream.service.js'; |
6 | | -import { rm } from 'fs/promises'; |
7 | | -import { DeletionStrategyManager } from './strategies/index.js'; |
| 4 | +import { DeletionStrategyManager } from './strategies/strategy-manager.js'; |
| 5 | +import { |
| 6 | + RobocopyDeletionStrategy, |
| 7 | + PowerShellDeletionStrategy, |
| 8 | + NodeRmDeletionStrategy, |
| 9 | +} from './strategies/index.js'; |
8 | 10 |
|
9 | 11 | export class WindowsFilesService extends FileService { |
10 | 12 | constructor( |
11 | | - private readonly streamService: StreamService, |
| 13 | + protected streamService: StreamService, |
12 | 14 | public override fileWorkerService: FileWorkerService, |
13 | 15 | delstrategyManager: DeletionStrategyManager, |
14 | 16 | ) { |
15 | 17 | super(fileWorkerService, delstrategyManager); |
| 18 | + this.initializeStrategies(); |
16 | 19 | } |
17 | 20 |
|
18 | 21 | async deleteDir(path: string): Promise<boolean> { |
19 | | - await rm(path, { recursive: true, force: true }); |
20 | | - return true; |
| 22 | + try { |
| 23 | + return await this.delStrategyManager.deleteDirectory(path); |
| 24 | + } catch (error) { |
| 25 | + throw new Error(`Failed to delete directory ${path}: ${error}`); |
| 26 | + } |
| 27 | + } |
| 28 | + |
| 29 | + getSelectedDeletionStrategy(): string | null { |
| 30 | + const strategy = this.delStrategyManager.getSelectedStrategy(); |
| 31 | + return strategy ? strategy.name : null; |
| 32 | + } |
| 33 | + |
| 34 | + resetDeletionStrategy(): void { |
| 35 | + this.delStrategyManager.resetStrategy(); |
| 36 | + } |
| 37 | + |
| 38 | + private initializeStrategies() { |
| 39 | + // Order matters! |
| 40 | + this.delStrategyManager.registerStrategy(new RobocopyDeletionStrategy()); |
| 41 | + this.delStrategyManager.registerStrategy(new PowerShellDeletionStrategy()); |
| 42 | + this.delStrategyManager.registerStrategy(new NodeRmDeletionStrategy()); |
21 | 43 | } |
22 | 44 | } |
0 commit comments