Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/features/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import OptionProvider from '../observers/OptionProvider';
import reportIssue from './reportIssue';
import { IMonoResolver } from '../constants/IMonoResolver';
import { getDotnetInfo } from '../utils/getDotnetInfo';
import { getDecompilationAuthorization } from '../omnisharp/decompilationPrompt';
import { getDecompilationAuthorization, resetDecompilationAuthorization } from '../omnisharp/decompilationPrompt';

export default function registerCommands(context: vscode.ExtensionContext, server: OmniSharpServer, platformInfo: PlatformInformation, eventStream: EventStream, optionProvider: OptionProvider, monoResolver: IMonoResolver, packageJSON: any, extensionPath: string): CompositeDisposable {
let disposable = new CompositeDisposable();
Expand Down Expand Up @@ -62,13 +62,13 @@ export default function registerCommands(context: vscode.ExtensionContext, serve

async function showDecompilationTerms(context: vscode.ExtensionContext, server: OmniSharpServer, optionProvider: OptionProvider) {
// Reset the decompilation authorization so the user will be prompted on restart.
context.workspaceState.update("decompilationAuthorized", undefined);
resetDecompilationAuthorization(context);

await restartOmniSharp(context, server, optionProvider);
}

async function restartOmniSharp(context: vscode.ExtensionContext, server: OmniSharpServer, optionProvider: OptionProvider) {
// Update decompilation authorization for this workspace.
// Update decompilation authorization.
server.decompilationAuthorized = await getDecompilationAuthorization(context, optionProvider);

if (server.isRunning()) {
Expand Down
22 changes: 14 additions & 8 deletions src/omnisharp/decompilationPrompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,31 @@
import * as vscode from "vscode";
import OptionProvider from "../observers/OptionProvider";

const DecompilationAuthorizedOption = "csharp.decompilationAuthorized";

export async function resetDecompilationAuthorization(context: vscode.ExtensionContext) {
context.globalState.update(DecompilationAuthorizedOption, undefined);
}

export async function getDecompilationAuthorization(context: vscode.ExtensionContext, optionProvider: OptionProvider) {
// If decompilation is disabled the return false
// If decompilation is disabled, then return false
const options = optionProvider.GetLatestOptions();
if (options.enableDecompilationSupport === false) {
return false;
}

// If the terms have been acknowledged for this workspace then return.
let decompilationAutorized = context.workspaceState.get<boolean | undefined>("decompilationAuthorized");
if (decompilationAutorized !== undefined) {
return decompilationAutorized;
// If the terms have been acknowledged, then return whether it was authorized.
let decompilationAuthorized = context.globalState.get<boolean | undefined>(DecompilationAuthorizedOption);
if (decompilationAuthorized !== undefined) {
return decompilationAuthorized;
}

const result = await promptToAcceptDecompilationTerms();
decompilationAutorized = result === PromptResult.Yes;
decompilationAuthorized = result === PromptResult.Yes;

await context.workspaceState.update("decompilationAuthorized", decompilationAutorized);
await context.globalState.update(DecompilationAuthorizedOption, decompilationAuthorized);

return decompilationAutorized;
return decompilationAuthorized;
}

enum PromptResult {
Expand Down