From b2c8b38059927f6eaa864d1ec8f18472de80d0b8 Mon Sep 17 00:00:00 2001 From: Christian Zheng <czheng@takima.fr> Date: Wed, 13 Apr 2022 14:36:27 +0200 Subject: [PATCH] refactor(storage): move code & fix minor bugs --- .../src/core/commandHandler.ts | 33 +++++-------------- .../deadlock-extension/src/core/controller.ts | 30 +++++++++++++---- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts b/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts index 73999d20..616740ca 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 4a8cc8a1..d5cfd569 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(); -- GitLab