Logic for closing active tabs

This commit is contained in:
Carl-Robert Linnupuu 2023-03-24 11:41:48 +00:00
parent 5a9897dbfa
commit fbabf96463
9 changed files with 127 additions and 30 deletions

View file

@ -1,15 +1,14 @@
package ee.carlrobert.codegpt.toolwindow;
import com.intellij.openapi.project.Project;
import ee.carlrobert.codegpt.client.ClientProvider;
import ee.carlrobert.codegpt.client.CompletionRequestProvider;
import ee.carlrobert.codegpt.client.EventListener;
import ee.carlrobert.codegpt.conversations.Conversation;
import ee.carlrobert.codegpt.conversations.message.Message;
import ee.carlrobert.codegpt.settings.SettingsState;
import ee.carlrobert.codegpt.toolwindow.chat.ChatToolWindowTabPanel;
import ee.carlrobert.codegpt.toolwindow.components.SyntaxTextArea;
import java.util.List;
import java.util.function.Consumer;
import javax.swing.SwingWorker;
import okhttp3.sse.EventSource;
@ -18,18 +17,20 @@ public class ToolWindowService {
public void startRequest(
String prompt,
SyntaxTextArea textArea,
Project project,
boolean isRetry,
ChatToolWindowTabPanel toolWindow,
Conversation conversation) {
Conversation conversation,
Runnable onStop,
Consumer<EventSource> onStart,
Runnable onScrollToBottom) {
var conversationMessage = new Message(prompt);
new SwingWorker<Void, String>() {
protected Void doInBackground() {
var eventListener = new EventListener(
conversation,
conversationMessage,
textArea::append,
() -> toolWindow.stopGenerating(prompt, textArea, project),
onStop,
isRetry) {
public void onMessage(String message) {
publish(message);
@ -46,7 +47,7 @@ public class ToolWindowService {
call = ClientProvider.getTextCompletionClient().stream(
requestProvider.buildTextCompletionRequest(settings.textCompletionBaseModel), eventListener);
}
toolWindow.displayGenerateButton(call::cancel);
onStart.accept(call);
return null;
}
@ -55,7 +56,7 @@ public class ToolWindowService {
try {
textArea.append(text);
conversationMessage.setResponse(textArea.getText());
toolWindow.scrollToBottom();
onScrollToBottom.run();
} catch (Exception e) {
textArea.append("Something went wrong. Please try again later.");
throw new RuntimeException(e);