From 501084ca58f3b6e1c51fbb7f66841190a1366d31 Mon Sep 17 00:00:00 2001 From: JFronny Date: Sun, 12 May 2024 17:12:22 +0200 Subject: [PATCH] feat: complete initial submission UI --- .../jfronny/sdom/actions/SDSubmitAction.kt | 13 +++++---- .../gitlab/jfronny/sdom/ui/SDResultPanel.kt | 29 ++++++++++--------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/io/gitlab/jfronny/sdom/actions/SDSubmitAction.kt b/src/main/kotlin/io/gitlab/jfronny/sdom/actions/SDSubmitAction.kt index 4beae03..3b087e1 100644 --- a/src/main/kotlin/io/gitlab/jfronny/sdom/actions/SDSubmitAction.kt +++ b/src/main/kotlin/io/gitlab/jfronny/sdom/actions/SDSubmitAction.kt @@ -7,10 +7,10 @@ import com.intellij.notification.NotificationGroupManager import com.intellij.notification.NotificationType import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.diagnostic.LogLevel import com.intellij.openapi.diagnostic.Logger -import com.intellij.testFramework.utils.editor.getVirtualFile +import com.intellij.openapi.fileEditor.FileEditorManager +import com.intellij.openapi.vfs.readText import io.gitlab.jfronny.sdom.SDom import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -26,9 +26,10 @@ class SDSubmitAction(text: String) : NotificationAction(text) { override fun actionPerformed(e: AnActionEvent, notification: Notification) = actionPerformed(e) override fun actionPerformed(e: AnActionEvent) { println("Submitting") - val editor = e.getData(CommonDataKeys.EDITOR) + //val virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE) e.project?.let { project -> - if (editor == null) { + val virtualFile = FileEditorManager.getInstance(project).selectedTextEditor?.virtualFile + if (virtualFile == null) { NotificationGroupManager.getInstance() .getNotificationGroup("sdom.notifications") .createNotification("You have to select a file", NotificationType.ERROR) @@ -37,8 +38,8 @@ class SDSubmitAction(text: String) : NotificationAction(text) { .notify(e.project) return } - val currentFile = editor.document.text - val fileName = editor.document.getVirtualFile().name + val currentFile = virtualFile.readText() + val fileName = virtualFile.name val contest = SDom.currentContest if (contest == null) { diff --git a/src/main/kotlin/io/gitlab/jfronny/sdom/ui/SDResultPanel.kt b/src/main/kotlin/io/gitlab/jfronny/sdom/ui/SDResultPanel.kt index 7572436..8486271 100644 --- a/src/main/kotlin/io/gitlab/jfronny/sdom/ui/SDResultPanel.kt +++ b/src/main/kotlin/io/gitlab/jfronny/sdom/ui/SDResultPanel.kt @@ -27,24 +27,25 @@ class SDResultPanel( private val panel = JPanel(BorderLayout()) init { + val loading = JLabel("Waiting for result...") + panel.add(loading, BorderLayout.CENTER) CoroutineScope(Job() + Dispatchers.IO).launch { val resultResult = resultFlow.first() - if (resultResult.isSuccess) { - val result = resultResult.getOrThrow() - if (!result.valid) { - panel.add(JLabel("Judgement failed"), BorderLayout.CENTER) - return@launch + resultResult.fold( + onSuccess = { result -> + val parsedResult = + result.judgementTypeId + ?.let { SDom.judgementTypes?.get(it) } + ?.let { it.name to it.solved } + ?: ("Unknown" to false) + panel.add(JLabel(parsedResult.first).apply { foreground = if (parsedResult.second) JBColor.GREEN else JBColor.RED }, BorderLayout.CENTER) + }, + onFailure = { e -> + panel.add(JLabel("Judgement failed: ${e.message}"), BorderLayout.CENTER) } - val parsedResult = - result.judgementTypeId - ?.let { SDom.judgementTypes?.get(it) } - ?.let { it.name to it.solved } - ?: ("Unknown" to false) - panel.add(JLabel(parsedResult.first).apply { foreground = if (parsedResult.second) JBColor.GREEN else JBColor.RED }, BorderLayout.CENTER) - } else { - panel.add(JLabel("Judgement failed"), BorderLayout.CENTER) - } + ) + panel.remove(loading) } }