diff --git a/client/src/addon_manager/commands/enable.ts b/client/src/addon_manager/commands/enable.ts index 8685d2a..dbee316 100644 --- a/client/src/addon_manager/commands/enable.ts +++ b/client/src/addon_manager/commands/enable.ts @@ -4,6 +4,7 @@ import { createChildLogger } from "../services/logging.service"; import { setConfig } from "../../languageserver"; import { WebVue } from "../panels/WebVue"; import { NotificationLevels } from "../types/webvue"; +import { ADDONS_DIRECTORY } from "../config"; type Message = { data: { @@ -20,7 +21,7 @@ export default async (context: vscode.ExtensionContext, message: Message) => { if (!addon || !workspaceFolders) { return; } - + let selectedFolders: vscode.WorkspaceFolder[]; if (workspaceFolders && workspaceFolders.length === 1) { @@ -38,16 +39,23 @@ export default async (context: vscode.ExtensionContext, message: Message) => { await addon.setLock(false); return; } - selectedFolders = pickResult.map((selection) => { - return workspaceFolders.find( - (folder) => folder.name === selection.label - ); - }).filter((folder) => !!folder); + selectedFolders = pickResult + .map((selection) => { + return workspaceFolders.find( + (folder) => folder.name === selection.label + ); + }) + .filter((folder) => !!folder); } for (const folder of selectedFolders) { try { - await addon.enable(folder); + const installLocation = vscode.Uri.joinPath( + context.globalStorageUri, + "addonManager", + ADDONS_DIRECTORY + ); + await addon.enable(folder, installLocation); } catch (e) { const message = `Failed to enable ${addon.name}!`; localLogger.error(message, { report: false }); diff --git a/client/src/addon_manager/models/addon.ts b/client/src/addon_manager/models/addon.ts index 7235ec9..3bb7f7d 100644 --- a/client/src/addon_manager/models/addon.ts +++ b/client/src/addon_manager/models/addon.ts @@ -173,10 +173,7 @@ export class Addon { * @param libraryPaths An array of paths from the `Lua.workspace.library` setting. */ public checkIfEnabled(libraryPaths: string[]) { - const regex = new RegExp( - `[/\\\\]+sumneko.lua[/\\\\]+addonManager[/\\\\]+addons[/\\\\]+${this.name}`, - "g" - ); + const regex = new RegExp(`${this.name}\/module\/library`, "g"); const index = libraryPaths.findIndex((path) => regex.test(path)); return index !== -1; @@ -207,7 +204,10 @@ export class Addon { return folderStates; } - public async enable(folder: vscode.WorkspaceFolder) { + public async enable( + folder: vscode.WorkspaceFolder, + installLocation: vscode.Uri + ) { const librarySetting = ((await getConfig( LIBRARY_SETTING, folder.uri @@ -240,7 +240,11 @@ export class Addon { } // Apply addon settings - const libraryUri = vscode.Uri.joinPath(this.uri, "module", "library"); + const libraryPath = vscode.Uri.joinPath( + this.uri, + "module", + "library" + ).path.replace(installLocation.path, "${addons}"); const configValues = await this.getConfigurationFile(); @@ -249,7 +253,7 @@ export class Addon { { action: "add", key: LIBRARY_SETTING, - value: filesystem.unixifyPath(libraryUri), + value: libraryPath, uri: folder.uri, }, ]); diff --git a/client/src/addon_manager/services/settings.service.ts b/client/src/addon_manager/services/settings.service.ts index 689da0b..9326b31 100644 --- a/client/src/addon_manager/services/settings.service.ts +++ b/client/src/addon_manager/services/settings.service.ts @@ -24,13 +24,7 @@ export const getLibraryPaths = async (): Promise< for (const folder of vscode.workspace.workspaceFolders) { const libraries = await getConfig(LIBRARY_SETTING, folder.uri); - const libraryPaths = libraries.map((libraryPath: string) => { - if (path.isAbsolute(libraryPath)) { - return libraryPath; - } - return path.join(folder.uri.fsPath, libraryPath); - }) - result.push({ folder, paths: libraryPaths ?? [] }); + result.push({ folder, paths: libraries }); } return result;