feat: complete initial submission UI
This commit is contained in:
parent
9bdf0026f0
commit
501084ca58
@ -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) {
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user