Skip to content
Snippets Groups Projects
Commit b2c8b380 authored by Christian ZHENG's avatar Christian ZHENG
Browse files

refactor(storage): move code & fix minor bugs

parent 65da8502
No related branches found
No related tags found
2 merge requests!16feat: publish extension on marketplace with ci,!15feat(Sprint1): add authentication + directory picking + redirection link
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));
}
}
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment