From 3b889a5554903408a0983f8165488b23f5ae872b Mon Sep 17 00:00:00 2001 From: M Mahrous Date: Tue, 7 Oct 2025 15:19:34 +0200 Subject: [PATCH 1/2] [IMP] report recent messages on crash report --- .../com/odoo/odools/forms/CrashReportForm.java | 12 ++++++++---- .../com/odoo/odools/OdooCustomLsp4jClient.kt | 3 ++- .../params/DisplayCrashNotificationParams.kt | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/odoo/odools/forms/CrashReportForm.java b/src/main/java/com/odoo/odools/forms/CrashReportForm.java index 52677af..b663db5 100644 --- a/src/main/java/com/odoo/odools/forms/CrashReportForm.java +++ b/src/main/java/com/odoo/odools/forms/CrashReportForm.java @@ -42,8 +42,9 @@ public class CrashReportForm extends DialogWrapper { private String logContent; private String crashInfo; private String currentConfig; + private final String recentMessages; - public CrashReportForm(Project project, VirtualFile currentFile, String crash_info, String currentConfig, String logs_path) { + public CrashReportForm(Project project, VirtualFile currentFile, String crash_info, String currentConfig, String logs_path, String recentMessages) { super(project); this.currentFile = currentFile; this.logsPath = logs_path; @@ -52,6 +53,7 @@ public CrashReportForm(Project project, VirtualFile currentFile, String crash_in if (currentConfig == null) { this.currentConfig = "Config not found"; } + this.recentMessages = recentMessages; setTitle("OdooLS Crash Report"); init(); // required! } @@ -107,7 +109,7 @@ public void actionPerformed(ActionEvent e) { } private void sendReport(VirtualFile currentFile, String currentFileContent, String logsPath) { - String url = "https://iap-services.odoo.com/api/odools/vscode/2/crash_report"; + String url = "https://iap-services.odoo.com/api/odools/vscode/3/crash_report"; String json = buildJson(currentFile, currentFileContent, logsPath); try (HttpClient client = HttpClient.newHttpClient()) { HttpRequest request = HttpRequest.newBuilder() @@ -155,7 +157,8 @@ private String buildJson(VirtualFile currentFile, String currentFileContent, Str "additional_info": "%s", "version": "%s", "python_version": "%s", - "configuration": "%s" + "configuration": "%s", + "recent_messages": "%s" } } """.formatted( @@ -168,7 +171,8 @@ private String buildJson(VirtualFile currentFile, String currentFileContent, Str escapeForJson(this.tDescr.getText()), pluginVersion, "See configuration", - escapeForJson(this.currentConfig) + escapeForJson(this.currentConfig), + escapeForJson(this.recentMessages) ); } diff --git a/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt b/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt index 1edee5b..77fbc98 100644 --- a/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt +++ b/src/main/kotlin/com/odoo/odools/OdooCustomLsp4jClient.kt @@ -80,7 +80,8 @@ class OdooCustomLsp4jClient(val project: Project, handler: LspServerNotification val widget = statusBar?.getWidget("OdooLspStatusWidget") as? OdooLspStatusWidget val currentConfig = widget?.getCurrentConfiguration()?.second if (logs != null) { - CrashReportForm(project, currentFile, params.getCrashInfo(), currentConfig, logs).show() + CrashReportForm(project, currentFile, params.getCrashInfo(), currentConfig, + logs, params.getRecentMessages()).show() } } }) diff --git a/src/main/kotlin/com/odoo/odools/params/DisplayCrashNotificationParams.kt b/src/main/kotlin/com/odoo/odools/params/DisplayCrashNotificationParams.kt index 9a20aef..b7e0dca 100644 --- a/src/main/kotlin/com/odoo/odools/params/DisplayCrashNotificationParams.kt +++ b/src/main/kotlin/com/odoo/odools/params/DisplayCrashNotificationParams.kt @@ -8,15 +8,18 @@ class DisplayCrashNotificationParams { private var crashInfo: String private var pid: Long + private var recentMessages: String constructor() { crashInfo = String() pid = 0 + recentMessages = String() } - constructor(@NonNull crashInfo: String, @NonNull pid: Long) { + constructor(@NonNull crashInfo: String, @NonNull pid: Long, @NonNull recentMessages: String) { this.crashInfo = Preconditions.checkNotNull(crashInfo, "crashInfo") this.pid = Preconditions.checkNotNull(pid, "pid") + this.recentMessages = Preconditions.checkNotNull(crashInfo, "recentMessages") } @NonNull @@ -33,10 +36,19 @@ class DisplayCrashNotificationParams { return this.crashInfo } - fun setCrashInfo(@NonNull configFile: List>) { + fun setCrashInfo(@NonNull crashInfo: String) { this.crashInfo = Preconditions.checkNotNull(crashInfo, "crashInfo") } + @NonNull + fun getRecentMessages(): String { + return this.recentMessages + } + + fun setRecentMessages(@NonNull recentMessages: String) { + this.recentMessages = Preconditions.checkNotNull(recentMessages, "recentMessages") + } + override fun toString(): String { val b = ToStringBuilder(this) b.add("configFile", this.crashInfo) From 85694fc748b2d4b871213a90ca96610650c18277 Mon Sep 17 00:00:00 2001 From: M Mahrous Date: Wed, 8 Oct 2025 09:48:38 +0200 Subject: [PATCH 2/2] [IMP] add configuration wiki link in settings --- .../kotlin/com/odoo/odools/OdooLSPathConfigurable.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/kotlin/com/odoo/odools/OdooLSPathConfigurable.kt b/src/main/kotlin/com/odoo/odools/OdooLSPathConfigurable.kt index d935358..a7c5e9f 100644 --- a/src/main/kotlin/com/odoo/odools/OdooLSPathConfigurable.kt +++ b/src/main/kotlin/com/odoo/odools/OdooLSPathConfigurable.kt @@ -1,9 +1,11 @@ package com.odoo.odools +import com.intellij.ide.BrowserUtil import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.options.Configurable import com.intellij.openapi.ui.TextFieldWithBrowseButton import com.intellij.ui.JBColor +import com.intellij.ui.components.ActionLink import com.intellij.ui.components.JBLabel import javax.swing.JComponent import javax.swing.JPanel @@ -44,6 +46,7 @@ class OdooLSPathConfigurable : Configurable { The plugin will use this path to install needed resources and logs.
+ OdooLS is configures through configuration files. To create one, please refer to our wiki: """.trimIndent() @@ -51,6 +54,13 @@ class OdooLSPathConfigurable : Configurable { description.font = description.font.deriveFont(description.font.size2D - 1f) description.foreground = JBColor.GRAY container.add(description, gbc) + val externalLink = ActionLink("The configuration wiki") { + BrowserUtil.browse("https://github.com/odoo/odoo-ls/wiki/3.-Configuration-files") + }.apply { + setContextHelpIcon() + } + gbc.gridy = 3 + container.add(externalLink, gbc) //outerPanel to keep everything at top of the window val outerPanel = JPanel(BorderLayout())