diff --git a/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt b/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt index 77fbc98..1972e4b 100644 --- a/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt +++ b/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt @@ -36,7 +36,7 @@ class OdooCustomLsp4jClient(val project: Project, handler: LspServerNotification fun setConfiguration(payload: SetConfigurationParams) { var html = payload.getHtml() var profiles = html.keys.filter { it != "__all__" }.toMutableList() - profiles.add("disabled") + profiles.add("Disabled") val statusBar = WindowManager.getInstance().getStatusBar(project) val widget = statusBar?.getWidget("OdooLspStatusWidget") as? OdooLspStatusWidget widget?.updateListProfiles(profiles) diff --git a/src/main/kotlin/com/odoo/odools/OdooLSInstallationProjectActivity.kt b/src/main/kotlin/com/odoo/odools/OdooLSInstallationProjectActivity.kt index 0ac0305..6c96100 100644 --- a/src/main/kotlin/com/odoo/odools/OdooLSInstallationProjectActivity.kt +++ b/src/main/kotlin/com/odoo/odools/OdooLSInstallationProjectActivity.kt @@ -13,6 +13,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.startup.ProjectActivity import com.intellij.openapi.util.Key import com.intellij.openapi.util.SystemInfo +import com.intellij.platform.lsp.api.LspServerManager import java.nio.charset.StandardCharsets import java.nio.file.FileSystems import java.nio.file.Files @@ -47,8 +48,9 @@ class OdooLSInstallationProjectActivity : ProjectActivity, DumbAware { if (isInstalled == null || !isInstalled) { installFromResources(pathToInstallation) { project.putUserData(ODOO_LSP_INSTALLED, true) + LspServerManager.getInstance(project) + .stopAndRestartIfNeeded(OdooLSLspServerSupportProvider::class.java) } - return } } diff --git a/src/main/kotlin/com/odoo/odools/OdooLSLspServerSupportProvider.kt b/src/main/kotlin/com/odoo/odools/OdooLSLspServerSupportProvider.kt index ce31d76..b95084e 100644 --- a/src/main/kotlin/com/odoo/odools/OdooLSLspServerSupportProvider.kt +++ b/src/main/kotlin/com/odoo/odools/OdooLSLspServerSupportProvider.kt @@ -8,20 +8,19 @@ import com.intellij.openapi.util.SystemInfo import com.intellij.openapi.vfs.VirtualFile import com.intellij.platform.lsp.api.* import com.intellij.platform.lsp.api.customization.* -import com.intellij.psi.search.FilenameIndex -import com.intellij.psi.search.GlobalSearchScope +import com.intellij.util.system.CpuArch import org.eclipse.lsp4j.ConfigurationItem val osName = System.getProperty("os.name").lowercase() val arch = System.getProperty("os.arch").lowercase() val targetOs = when { - SystemInfo.isWindows && !SystemInfo.isAarch64 -> "win32-x64" - SystemInfo.isWindows && SystemInfo.isAarch64 -> "win32-arm64" - SystemInfo.isLinux && !SystemInfo.isAarch64 -> "linux-x64" - SystemInfo.isLinux && SystemInfo.isAarch64 -> "linux-arm64" - SystemInfo.isMac && !SystemInfo.isAarch64 -> "darwin-x64" - SystemInfo.isMac && SystemInfo.isAarch64 -> "darwin-arm64" + SystemInfo.isWindows && !CpuArch.isArm64() -> "win32-x64" + SystemInfo.isWindows && CpuArch.isArm64() -> "win32-arm64" + SystemInfo.isLinux && !CpuArch.isArm64() -> "linux-x64" + SystemInfo.isLinux && CpuArch.isArm64() -> "linux-arm64" + SystemInfo.isMac && !CpuArch.isArm64() -> "darwin-x64" + SystemInfo.isMac && CpuArch.isArm64() -> "darwin-arm64" else -> throw IllegalStateException("Unsupported OS: $osName $arch") } @@ -29,31 +28,15 @@ private val HAS_MANIFEST_KEY = Key.create("OdooLS.HasManifest") internal class OdooLSLspServerSupportProvider : LspServerSupportProvider { - fun findManifest(project: Project): Boolean { - project.getUserData(HAS_MANIFEST_KEY)?.let { return it } - val scope = GlobalSearchScope.projectScope(project) - val found = FilenameIndex.getVirtualFilesByName("__manifest__.py", scope).isNotEmpty() - - project.putUserData(HAS_MANIFEST_KEY, found) - return found - } - override fun fileOpened(project: Project, file: VirtualFile, serverStarter: LspServerSupportProvider.LspServerStarter) { - val isInstalled = project.getUserData(ODOO_LSP_INSTALLED) - if (isInstalled != true) { - return - } // Only run if project is loaded if (project.isDisposed) return - if (!findManifest(project)) return - println("__manifest__.py file detected in project. Starting OdooLS") - serverStarter.ensureServerStarted(OdooLsServerDescriptor(project)) } } -private class OdooLsServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "OdooLS") { +class OdooLsServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "OdooLS") { override val lspServerListener: LspServerListener? get() = OdooLspServerListener(project) override val lspCustomization: LspCustomization diff --git a/src/main/kotlin/com/odoo/odools/OdooStatusBarWidget.kt b/src/main/kotlin/com/odoo/odools/OdooStatusBarWidget.kt index 03b9925..69e608f 100644 --- a/src/main/kotlin/com/odoo/odools/OdooStatusBarWidget.kt +++ b/src/main/kotlin/com/odoo/odools/OdooStatusBarWidget.kt @@ -32,7 +32,7 @@ class OdooLspStatusWidget( ) : EditorBasedStatusBarPopup(project, false) { private var widgetState = WidgetState("Odoo", "Odoo (not started)", true) - private var listProfiles: List = listOf("default", "disabled") + private var listProfiles: List = listOf("default", "Disabled") private var gotProfiles: Boolean = false private var configHtml: Map = mapOf(); private var currentStatus = "stop" @@ -55,7 +55,7 @@ class OdooLspStatusWidget( val currentProfile = project.service().state.selectedProfile var config = configHtml[currentProfile] if (config == null) { - config = "No configuration for this name" + config = "No configuration for this name: $currentProfile" } return Pair( currentProfile, @@ -106,7 +106,7 @@ class OdooLspStatusWidget( override fun setSelected(e: AnActionEvent, state: Boolean) { if (state) { project.service().state.selectedProfile = option - if (option == "disabled") { + if (option == "Disabled") { LspServerManager.getInstance(project) .stopServers(OdooLSLspServerSupportProvider::class.java) updateStatus() @@ -151,16 +151,14 @@ class OdooLspStatusWidget( } }) } - var textStart = "Start Server" if (isRunning) { - textStart = "Restart Server" + add(object : AnAction("Restart Server") { + override fun actionPerformed(e: AnActionEvent) { + LspServerManager.getInstance(project) + .stopAndRestartIfNeeded(OdooLSLspServerSupportProvider::class.java) + } + }) } - add(object : AnAction(textStart) { - override fun actionPerformed(e: AnActionEvent) { - LspServerManager.getInstance(project) - .stopAndRestartIfNeeded(OdooLSLspServerSupportProvider::class.java) - } - }) add(object : AnAction("Open Logs") { override fun actionPerformed(e: AnActionEvent) { val pathToInstallation = OdooLSApplicationSettings.getInstance().state.dataPath; @@ -180,13 +178,8 @@ class OdooLspStatusWidget( }) } - var title = "Odoo LS: Stopped" - if (isRunning) { - title = "Odoo LS: Running" - } - val popup = JBPopupFactory.getInstance().createActionGroupPopup( - title, + "Odoo LS", group, context, JBPopupFactory.ActionSelectionAid.SPEEDSEARCH,