From b17b508a22e460b019c1491761a9cc96ffd90f17 Mon Sep 17 00:00:00 2001 From: "@mazikiou" <mazikiou@takima.fr> Date: Wed, 20 Jul 2022 12:23:31 +0200 Subject: [PATCH] feat: watch workspace to update started missions --- .../deadlock-extension/src/core/controller.ts | 4 +++ .../deadlock-extension/src/extension.ts | 6 ++--- .../src/view/startedMissionsView.ts | 26 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/deadlock-plugins/deadlock-extension/src/core/controller.ts b/deadlock-plugins/deadlock-extension/src/core/controller.ts index 5541b401..a60950a5 100644 --- a/deadlock-plugins/deadlock-extension/src/core/controller.ts +++ b/deadlock-plugins/deadlock-extension/src/core/controller.ts @@ -18,11 +18,13 @@ import { getReviewedStudentWorkdirPath } from './utils/mission.utils'; import { join } from 'path'; import Mission from '../model/mission'; import ApiService from './api.service'; +import StartedMissionsView from '../view/startedMissionsView'; export default class Controller { private static _instance: Controller; private briefingView?: BriefingView; private quickSetupView: QuickSetupView; + public readonly startedMissions?: StartedMissionsView; public constructor(public readonly context: ExtensionContext) { if (Controller._instance) { @@ -31,6 +33,8 @@ export default class Controller { Controller._instance = this; if (isDocker()) { this.briefingView = new BriefingView(); + } else { + this.startedMissions = new StartedMissionsView(); } this.quickSetupView = new QuickSetupView(); diff --git a/deadlock-plugins/deadlock-extension/src/extension.ts b/deadlock-plugins/deadlock-extension/src/extension.ts index 093a4d10..95cd3b2c 100644 --- a/deadlock-plugins/deadlock-extension/src/extension.ts +++ b/deadlock-plugins/deadlock-extension/src/extension.ts @@ -4,7 +4,6 @@ import Recorder from './recorder/recorder'; import { extensionError as error } from './recorder/utils/log'; import { DepNodeProvider } from './view/deadlockPanel'; import { CommandTreeProvider } from './view/CommandTree'; -import StartedMissionsView from './view/startedMissionsView'; import Controller from './core/controller'; export async function activate(context: ExtensionContext) { @@ -15,8 +14,9 @@ export async function activate(context: ExtensionContext) { if (!workspaceFolders) window.showInformationMessage('Pas de répertoires ouverts'); const deadlockPanelProvider = new DepNodeProvider(); window.registerTreeDataProvider('deadlockPanel', deadlockPanelProvider); - window.registerWebviewViewProvider('startedMissions', new StartedMissionsView()); - + if (Controller.instance.startedMissions) { + window.registerWebviewViewProvider('startedMissions', Controller.instance.startedMissions); + } if (isDocker()) { commands.executeCommand('setContext', 'deadlock.inContainer', true); window.registerTreeDataProvider('commandTree', new CommandTreeProvider()); diff --git a/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts b/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts index dda4a28e..e52d9943 100644 --- a/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts +++ b/deadlock-plugins/deadlock-extension/src/view/startedMissionsView.ts @@ -6,10 +6,36 @@ import Controller from '../core/controller'; import { extensionWarn } from '../recorder/utils/log'; import { getUri } from './webviewBase'; import { missionWorkdir } from '../core/config'; +import { watch } from 'chokidar'; import UserMission from '../core/mission/model/userMission'; import { getExtensionUri } from '../recorder/utils/workdir'; + export default class StartedMissionsView implements WebviewViewProvider { + constructor() { + if (existsSync(missionWorkdir)) { + console.log('Watching mission directory'); + const watcher = watch(missionWorkdir, { + ignoreInitial: true, + ignorePermissionErrors: true, + depth: 3, + }); + watcher.on('all', (event, path) => { + if (event === 'add' || event === 'unlink' || (event === 'change' && path.includes('user-challenge.json'))) { + if (this.webviewView?.webview.html) { + this.webviewView.webview.html = this._getHtmlForWebview(this.webviewView?.webview); + } + } + }); + } + } + private webviewView?: WebviewView; + public refresh(): void { + if (this.webviewView) { + this.webviewView.webview.html = this._getHtmlForWebview(this.webviewView?.webview); + } + } resolveWebviewView(webviewView: WebviewView): void | Thenable<void> { + this.webviewView = webviewView; webviewView.webview.options = { enableScripts: true, localResourceRoots: [getExtensionUri()], -- GitLab