Skip to content
Open
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
2 changes: 1 addition & 1 deletion src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
}

Expand Down
34 changes: 8 additions & 26 deletions src/main/kotlin/com/odoo/odools/OdooLSLspServerSupportProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,53 +8,35 @@ 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")
}

private val HAS_MANIFEST_KEY = Key.create<Boolean>("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<Boolean>(ODOO_LSP_INSTALLED)
if (isInstalled != true) {
return
}
// Only run if project is loaded
if (project.isDisposed) return

if (!findManifest(project)) return
if (project.service<OdooProjectSettingsService>().state.selectedProfile == "disabled") 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
Expand Down
27 changes: 10 additions & 17 deletions src/main/kotlin/com/odoo/odools/OdooStatusBarWidget.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class OdooLspStatusWidget(
) : EditorBasedStatusBarPopup(project, false) {

private var widgetState = WidgetState("Odoo", "Odoo (not started)", true)
private var listProfiles: List<String> = listOf("default", "disabled")
private var listProfiles: List<String> = listOf("default", "Disabled")
private var gotProfiles: Boolean = false
private var configHtml: Map<String, Any> = mapOf();
private var currentStatus = "stop"
Expand All @@ -55,7 +55,7 @@ class OdooLspStatusWidget(
val currentProfile = project.service<OdooProjectSettingsService>().state.selectedProfile
var config = configHtml[currentProfile]
if (config == null) {
config = "No configuration for this name"
config = "No configuration for this name: $currentProfile"
}
return Pair<String, String>(
currentProfile,
Expand Down Expand Up @@ -102,7 +102,7 @@ class OdooLspStatusWidget(
override fun setSelected(e: AnActionEvent, state: Boolean) {
if (state) {
project.service<OdooProjectSettingsService>().state.selectedProfile = option
if (option == "disabled") {
if (option == "Disabled") {
LspServerManager.getInstance(project)
.stopServers(OdooLSLspServerSupportProvider::class.java)
updateStatus()
Expand Down Expand Up @@ -147,16 +147,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;
Expand All @@ -176,13 +174,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,
Expand Down