From 60284004eff257a52c2267eb84419aef8d02f61a Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Thu, 3 Apr 2025 14:38:02 +0100 Subject: [PATCH] fix: EDT issues when reading files --- .../chat/ChatToolWindowTabPanel.java | 44 +++++++++---------- .../textarea/header/UserInputHeaderPanel.kt | 7 ++- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java index d7cead65..1a68b0ce 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java @@ -222,29 +222,27 @@ public class ChatToolWindowTabPanel implements Disposable { ConversationType conversationType, Set psiStructure ) { - ApplicationManager.getApplication().invokeLater(() -> { - var callParameters = getCallParameters(message, conversationType, psiStructure); - if (callParameters.getImageDetails() != null) { - project.getService(ChatToolWindowContentManager.class) - .tryFindChatToolWindowPanel() - .ifPresent(panel -> panel.clearImageNotifications(project)); - } + var callParameters = getCallParameters(message, conversationType, psiStructure); + if (callParameters.getImageDetails() != null) { + project.getService(ChatToolWindowContentManager.class) + .tryFindChatToolWindowPanel() + .ifPresent(panel -> panel.clearImageNotifications(project)); + } - totalTokensPanel.updateConversationTokens(conversation); - if (callParameters.getReferencedFiles() != null) { - totalTokensPanel.updateReferencedFilesTokens( - callParameters.getReferencedFiles().stream().map(ReferencedFile::fileContent).toList()); - } + totalTokensPanel.updateConversationTokens(conversation); + if (callParameters.getReferencedFiles() != null) { + totalTokensPanel.updateReferencedFilesTokens( + callParameters.getReferencedFiles().stream().map(ReferencedFile::fileContent).toList()); + } - var userMessagePanel = createUserMessagePanel(message, callParameters); - var responseMessagePanel = createResponseMessagePanel(callParameters); + var userMessagePanel = createUserMessagePanel(message, callParameters); + var responseMessagePanel = createResponseMessagePanel(callParameters); - var messagePanel = toolWindowScrollablePanel.addMessage(message.getId()); - messagePanel.add(userMessagePanel); - messagePanel.add(responseMessagePanel); + var messagePanel = toolWindowScrollablePanel.addMessage(message.getId()); + messagePanel.add(userMessagePanel); + messagePanel.add(responseMessagePanel); - call(callParameters, responseMessagePanel, userMessagePanel); - }); + call(callParameters, responseMessagePanel, userMessagePanel); } public void clearAllTags() { @@ -348,6 +346,10 @@ public class ChatToolWindowTabPanel implements Disposable { return; } + userInputPanel.setSubmitEnabled(false); + userMessagePanel.disableActions(List.of("RELOAD", "DELETE")); + responseMessagePanel.disableActions(List.of("COPY")); + requestHandler = new ToolwindowChatCompletionRequestHandler( project, new ToolWindowCompletionResponseEventListener( @@ -361,10 +363,6 @@ public class ChatToolWindowTabPanel implements Disposable { call(callParameters, responseMessagePanel, userMessagePanel); } }); - userInputPanel.setSubmitEnabled(false); - userMessagePanel.disableActions(List.of("RELOAD", "DELETE")); - responseMessagePanel.disableActions(List.of("COPY")); - ApplicationManager.getApplication() .executeOnPooledThread(() -> requestHandler.call(callParameters)); } diff --git a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/header/UserInputHeaderPanel.kt b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/header/UserInputHeaderPanel.kt index 9e94f6c2..77d51cb1 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/header/UserInputHeaderPanel.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/header/UserInputHeaderPanel.kt @@ -1,6 +1,7 @@ package ee.carlrobert.codegpt.ui.textarea.header import com.intellij.icons.AllIcons +import com.intellij.openapi.application.runInEdt import com.intellij.openapi.application.runUndoTransparentWriteAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.EditorKind @@ -180,7 +181,7 @@ class UserInputHeaderPanel( } private fun updateReferencedFilesTokens(tags: Set) { - CoroutineScope(Dispatchers.IO).launch { + CoroutineScope(Dispatchers.Default).launch { val referencedFileContents = tags.asSequence() .filter { it.selected } .mapNotNull { tag -> @@ -191,7 +192,9 @@ class UserInputHeaderPanel( } } .toList() - totalTokensPanel.updateReferencedFilesTokens(referencedFileContents) + runInEdt { + totalTokensPanel.updateReferencedFilesTokens(referencedFileContents) + } } }