Skip to content

Commit ee4733f

Browse files
committed
fix: slow operation exception
- passwords can no longer be retrieved in EDT.
1 parent fc009cf commit ee4733f

1 file changed

Lines changed: 22 additions & 16 deletions

File tree

src/main/kotlin/org/wavescale/sourcesync/ui/ConnectionConfigurationDialog.kt

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.wavescale.sourcesync.ui
22

33
import com.intellij.CommonBundle
44
import com.intellij.icons.AllIcons
5+
import com.intellij.openapi.application.EDT
56
import com.intellij.openapi.components.service
67
import com.intellij.openapi.project.Project
78
import com.intellij.openapi.ui.DialogWrapper
@@ -17,16 +18,6 @@ import com.intellij.ui.util.minimumWidth
1718
import com.intellij.ui.util.preferredWidth
1819
import com.intellij.util.ui.JBUI
1920
import com.intellij.util.ui.tree.TreeUtil
20-
import org.wavescale.sourcesync.SourcesyncBundle
21-
import org.wavescale.sourcesync.configurations.ScpSyncConfiguration
22-
import org.wavescale.sourcesync.configurations.SshSyncConfiguration
23-
import org.wavescale.sourcesync.configurations.SyncConfigurationType
24-
import org.wavescale.sourcesync.configurations.SyncConfigurationType.SCP
25-
import org.wavescale.sourcesync.configurations.SyncConfigurationType.SFTP
26-
import org.wavescale.sourcesync.services.SyncRemoteConfigurationsService
27-
import org.wavescale.sourcesync.ui.tree.SyncConfigurationTreeRenderer
28-
import org.wavescale.sourcesync.ui.tree.SyncConnectionsTree
29-
import org.wavescale.sourcesync.ui.tree.SyncConnectionsTreeModel
3021
import java.awt.BorderLayout
3122
import java.awt.event.ActionEvent
3223
import java.awt.event.KeyEvent
@@ -40,8 +31,23 @@ import javax.swing.tree.DefaultMutableTreeNode
4031
import javax.swing.tree.TreeNode
4132
import javax.swing.tree.TreeSelectionModel
4233
import kotlin.math.max
34+
import kotlinx.coroutines.CoroutineScope
35+
import kotlinx.coroutines.Dispatchers
36+
import kotlinx.coroutines.launch
37+
import kotlinx.coroutines.withContext
38+
import org.wavescale.sourcesync.SourcesyncBundle
39+
import org.wavescale.sourcesync.configurations.ScpSyncConfiguration
40+
import org.wavescale.sourcesync.configurations.SshSyncConfiguration
41+
import org.wavescale.sourcesync.configurations.SyncConfigurationType
42+
import org.wavescale.sourcesync.configurations.SyncConfigurationType.SCP
43+
import org.wavescale.sourcesync.configurations.SyncConfigurationType.SFTP
44+
import org.wavescale.sourcesync.services.SyncRemoteConfigurationsService
45+
import org.wavescale.sourcesync.ui.tree.SyncConfigurationTreeRenderer
46+
import org.wavescale.sourcesync.ui.tree.SyncConnectionsTree
47+
import org.wavescale.sourcesync.ui.tree.SyncConnectionsTreeModel
4348

4449
class ConnectionConfigurationDialog(val project: Project) : DialogWrapper(project, true) {
50+
private val cs = CoroutineScope(Dispatchers.IO)
4551
private var syncRemoteConfigurationsService = project.service<SyncRemoteConfigurationsService>()
4652

4753
private val splitter = JBSplitter(false, "SourcesyncConnectionConfiguration.dividerProportion", 0.3f, 0.5f)
@@ -70,12 +76,12 @@ class ConnectionConfigurationDialog(val project: Project) : DialogWrapper(projec
7076
}
7177

7278
private fun onConfigModifications() {
73-
this.updateApplyButton()
74-
tree.updateUI()
75-
}
76-
77-
private fun updateApplyButton() {
78-
applyAction.isEnabled = treeModel.getAllComponents().hasModifications()
79+
cs.launch {
80+
applyAction.isEnabled = treeModel.getAllComponents().hasModifications()
81+
withContext(Dispatchers.EDT) {
82+
tree.updateUI()
83+
}
84+
}
7985
}
8086

8187
@Suppress("UnstableApiUsage")

0 commit comments

Comments
 (0)