| /*--------------------------------------------------------- | |
| * Copyright (C) Microsoft Corporation. All rights reserved. | |
| * Licensed under the MIT License. See LICENSE in the project root for license information. | |
| *--------------------------------------------------------*/ | |
| import vscode = require('vscode'); | |
| import { CommandFactory } from './commands'; | |
| let globalState: vscode.Memento; | |
| let workspaceState: vscode.Memento; | |
| export function getFromGlobalState(key: string, defaultValue?: any): any { | |
| if (!globalState) { | |
| return defaultValue; | |
| } | |
| return globalState.get(key, defaultValue); | |
| } | |
| export function updateGlobalState(key: string, value: any) { | |
| if (!globalState) { | |
| return Promise.resolve(); | |
| } | |
| return globalState.update(key, value); | |
| } | |
| export function setGlobalState(state: vscode.Memento) { | |
| globalState = state; | |
| } | |
| export function getGlobalState() { | |
| return globalState; | |
| } | |
| export const resetGlobalState: CommandFactory = () => () => { | |
| void resetStateQuickPick(globalState, updateGlobalState); | |
| }; | |
| export function getFromWorkspaceState(key: string, defaultValue?: any) { | |
| if (!workspaceState) { | |
| return defaultValue; | |
| } | |
| return workspaceState.get(key, defaultValue); | |
| } | |
| export function updateWorkspaceState(key: string, value: any) { | |
| if (!workspaceState) { | |
| return Promise.resolve(); | |
| } | |
| return workspaceState.update(key, value); | |
| } | |
| export function setWorkspaceState(state: vscode.Memento) { | |
| workspaceState = state; | |
| } | |
| export function getWorkspaceState(): vscode.Memento { | |
| return workspaceState; | |
| } | |
| export const resetWorkspaceState: CommandFactory = () => () => { | |
| void resetStateQuickPick(workspaceState, updateWorkspaceState); | |
| }; | |
| export function getMementoKeys(state: vscode.Memento): string[] { | |
| if (!state) { | |
| return []; | |
| } | |
| // tslint:disable-next-line: no-empty | |
| const keys = state.keys(); | |
| // Filter out keys with undefined values, so they are not shown | |
| // in the quick pick menu. | |
| return keys.filter((key) => state.get(key) !== undefined); | |
| } | |
| async function resetStateQuickPick(state: vscode.Memento, updateFn: (key: string, value: any) => Thenable<void>) { | |
| const items = await vscode.window.showQuickPick(getMementoKeys(state), { | |
| canPickMany: true, | |
| placeHolder: 'Select the keys to reset.' | |
| }); | |
| if (items) { | |
| resetItemsState(items, updateFn); | |
| } | |
| } | |
| export function resetItemsState(items: string[] | undefined, updateFn: (key: string, value: any) => Thenable<void>) { | |
| if (!items) { | |
| return; | |
| } | |
| items.forEach((item) => updateFn(item, undefined)); | |
| } |