(context: vscode.ExtensionContext)
| 17 | // this method is called when your extension is activated |
| 18 | // your extension is activated the very first time the command is executed |
| 19 | export async function activate(context: vscode.ExtensionContext) { |
| 20 | |
| 21 | let outputChannel = vscode.window.createOutputChannel("Botloader"); |
| 22 | context.subscriptions.push(outputChannel); |
| 23 | |
| 24 | let token = await context.secrets.get("botloader-api-key"); |
| 25 | |
| 26 | const config = vscode.workspace.getConfiguration("botloader"); |
| 27 | const apiBase: string = config.get("apiHost")!; |
| 28 | const apiHttps: boolean = config.get("apiHttpsEnabled")!; |
| 29 | |
| 30 | const httpApiBase = apiHttps ? "https://" + apiBase : "http://" + apiBase; |
| 31 | const wsApiBase = apiHttps ? "wss://" + apiBase : "ws://" + apiBase; |
| 32 | |
| 33 | let ws = new BotloaderWS(wsApiBase, handleLogMessage, token); |
| 34 | let apiClient = new ApiClient(createFetcher(), httpApiBase, token); |
| 35 | |
| 36 | let manager = new WorkspaceManager(apiClient, ws, outputChannel); |
| 37 | context.subscriptions.push(manager); |
| 38 | |
| 39 | await updateTypeDecls(context); |
| 40 | |
| 41 | context.subscriptions.push(vscode.commands.registerCommand('botloader-vscode.setup-workspace', async () => { |
| 42 | // The code you place here will be executed every time your command is executed |
| 43 | // Display a message box to the user |
| 44 | let resp = await apiClient.getCurrentUserGuilds(); |
| 45 | if (isErrorResponse(resp)) { |
| 46 | vscode.window.showErrorMessage("Invalid token:" + JSON.stringify(resp)); |
| 47 | return; |
| 48 | } |
| 49 | |
| 50 | let typeSelection = await vscode.window.showQuickPick(["Temp folder", "Pick folder"], { |
| 51 | canPickMany: false, |
| 52 | title: "Workspace folder", |
| 53 | }); |
| 54 | |
| 55 | let folder: vscode.Uri | undefined = undefined; |
| 56 | if (typeSelection === "Temp folder") { |
| 57 | let tmpDir = await mkdtemp(join(tmpdir(), "botloader")); |
| 58 | folder = vscode.Uri.parse("file:/" + tmpDir); |
| 59 | } else { |
| 60 | let selected = await vscode.window.showOpenDialog({ |
| 61 | canSelectFiles: false, |
| 62 | canSelectFolders: true, |
| 63 | canSelectMany: false, |
| 64 | title: "Folder to set up guild workspace in", |
| 65 | }); |
| 66 | if (selected && selected.length > 0) { |
| 67 | folder = selected[0]; |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | if (!folder) { |
| 72 | return; |
| 73 | } |
| 74 | |
| 75 | const filtered = resp.guilds.filter(elem => elem.connected && hasAdmin(elem.guild)); |
| 76 | let selection = await vscode.window.showQuickPick(filtered.map(elem => `${elem.guild.name} (${elem.guild.id})`), { |
nothing calls this directly
no test coverage detected