diff --git a/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts b/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts index 73999d209c0c0af9da3239d4e5333e446d3026a4..616740ca80375832649cee57aae292a7ca85053d 100644 --- a/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts +++ b/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts @@ -1,39 +1,22 @@ -import { commands, Uri, window } from 'vscode'; +import { commands } from 'vscode'; import { Command } from '../theia/command'; import Controller from './controller'; import ExtensionStore from './extensionStore'; export class CommandHandler { private extensionStore: ExtensionStore; - constructor(private parent: Controller) { + constructor(private controller: Controller) { this.extensionStore = ExtensionStore.getInstance(); this.initCommandHandler(); } initCommandHandler() { - commands.registerCommand(CHOOSE_MISSION_WORKDIR_COMMAND.cmd, this.chooseMissionWorkdir.bind(this)); - commands.registerCommand(AUTHENTICATE_COMMAND.cmd, this.parent.authenticate.bind(this.parent)); - commands.registerCommand(CLEAR_COMMAND.cmd, this.parent.clear.bind(this.parent)); - } - - async chooseMissionWorkdir() { - const actualMissionWorkDir = this.extensionStore.getMissionWorkdir(); - - const folderUri = await window.showOpenDialog({ - defaultUri: actualMissionWorkDir ? Uri.file(actualMissionWorkDir) : undefined, - canSelectFolders: true, - canSelectFiles: false, - title: 'Choisis le dossier qui contiendra tes missions', - }); - - if (!folderUri) { - if (this.extensionStore.getMissionWorkdir()) { - return; - } - this.chooseMissionWorkdir(); - } else { - this.extensionStore.setMissionWorkdir(folderUri[0].path); - } + commands.registerCommand( + CHOOSE_MISSION_WORKDIR_COMMAND.cmd, + this.controller.chooseMissionWorkdir.bind(this.controller), + ); + commands.registerCommand(AUTHENTICATE_COMMAND.cmd, this.controller.authenticate.bind(this.controller)); + commands.registerCommand(CLEAR_COMMAND.cmd, this.controller.clear.bind(this.controller)); } } diff --git a/deadlock-plugins/deadlock-extension/src/core/controller.ts b/deadlock-plugins/deadlock-extension/src/core/controller.ts index 4a8cc8a1b8183c315e8097a79aa0167989f4f1de..d5cfd5692b4dffd54621a24a32ed3bdb3c8a4421 100644 --- a/deadlock-plugins/deadlock-extension/src/core/controller.ts +++ b/deadlock-plugins/deadlock-extension/src/core/controller.ts @@ -12,6 +12,7 @@ export default class Controller { private commandHandler: CommandHandler; private briefingView: BriefingView; private gettingStartedView: GettingStartedView; + private extensionStore: ExtensionStore; constructor(private context: vscode.ExtensionContext) { this.briefingView = new BriefingView(); this.gettingStartedView = new GettingStartedView(context.extensionUri); @@ -21,6 +22,7 @@ export default class Controller { KEYCLOAK_TOKEN_CREATE_URL, KEYCLOAK_USER_INFO_URL, ); + this.extensionStore = ExtensionStore.getInstance(); this.init(); } @@ -45,7 +47,25 @@ export default class Controller { const exensionStorage = ExtensionStore.getInstance(); this.gettingStartedView.isAlreadyConnected = !!(await exensionStorage.getAccessToken()); } + async chooseMissionWorkdir() { + const actualMissionWorkDir = this.extensionStore.getMissionWorkdir(); + const folderUri = await vscode.window.showOpenDialog({ + defaultUri: actualMissionWorkDir ? vscode.Uri.file(actualMissionWorkDir) : undefined, + canSelectFolders: true, + canSelectFiles: false, + title: 'Choisis le dossier qui contiendra tes missions', + }); + + if (!folderUri) { + if (this.extensionStore.getMissionWorkdir()) { + return; + } + this.chooseMissionWorkdir(); + } else { + this.extensionStore.setMissionWorkdir(folderUri[0].path); + } + } public async clear() { const exensionStorage = ExtensionStore.getInstance(); await exensionStorage.clear(); @@ -57,9 +77,8 @@ export default class Controller { // The answer might be 'yes' because when the student is already authenticated, the log in button should be disabled. await this.connection.registerDevice(); const tokens = await this.connection.getToken({ openLink: Controller.openBrowserWithUrl }); - const exensionStorage = ExtensionStore.getInstance(); - await exensionStorage.setAccessToken(tokens.accessToken); - await exensionStorage.setRefreshToken(tokens.refreshToken); + await this.extensionStore.setAccessToken(tokens.accessToken); + await this.extensionStore.setRefreshToken(tokens.refreshToken); this.gettingStartedView.isAlreadyConnected = true; } public static openBrowserWithUrl(url: string) { @@ -69,13 +88,12 @@ export default class Controller { public async launchMission(missionId: string | null) { if (missionId) { vscode.window.showInformationMessage(`vous lancez la mission ${missionId}`); - const extensionStore = ExtensionStore.getInstance(); - const hadMissionWorkdir = extensionStore.getMissionWorkdir() !== undefined; + const hadMissionWorkdir = this.extensionStore.getMissionWorkdir() !== undefined; if (!hadMissionWorkdir) { await vscode.commands.executeCommand(CHOOSE_MISSION_WORKDIR_COMMAND.cmd); } - const hadBeenConnected = (await extensionStore.getAccessToken()) !== undefined; + const hadBeenConnected = (await this.extensionStore.getAccessToken()) !== undefined; if (!hadBeenConnected) { this.authenticate();