Skip to content

Commit d2c91fd

Browse files
Configure Ethersync Binary Path
In case the PATH variable is not set correctly for Intellij it is sometime necessary to set the binary path manually. In development it might be also helpful to set the binary path.
1 parent a5b5de6 commit d2c91fd

File tree

5 files changed

+126
-3
lines changed

5 files changed

+126
-3
lines changed

src/main/kotlin/io/github/ethersync/EthersyncServiceImpl.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.intellij.util.io.await
2222
import com.intellij.util.io.awaitExit
2323
import com.intellij.util.io.readLineAsync
2424
import io.github.ethersync.protocol.*
25+
import io.github.ethersync.settings.AppSettings
2526
import kotlinx.coroutines.CoroutineScope
2627
import kotlinx.coroutines.Dispatchers
2728
import kotlinx.coroutines.launch
@@ -180,7 +181,13 @@ class EthersyncServiceImpl(
180181
}
181182

182183
LOG.info("Starting ethersync daemon")
183-
val daemonProcessBuilder = ProcessBuilder("ethersync", "daemon", "--peer", peer, "--socket-name", socket)
184+
185+
// TODO: try catch not existing binary
186+
val daemonProcessBuilder = ProcessBuilder(
187+
AppSettings.getInstance().state.ethersyncBinaryPath,
188+
"daemon",
189+
"--peer", peer,
190+
"--socket-name", socket)
184191
.directory(projectDirectory)
185192
daemonProcess = daemonProcessBuilder.start()
186193
val daemonProcess = daemonProcess!!
@@ -239,7 +246,7 @@ class EthersyncServiceImpl(
239246
val fileEditorManager = FileEditorManager.getInstance(project)
240247

241248
val fileEditor = fileEditorManager.allEditors
242-
.first { editor -> editor.file.url == cursorEvent.documentUri } ?: return
249+
.firstOrNull { editor -> editor.file.url == cursorEvent.documentUri } ?: return
243250

244251
if (fileEditor is TextEditor) {
245252
val editor = fileEditor.editor
@@ -327,7 +334,10 @@ class EthersyncServiceImpl(
327334
private fun launchEthersyncClient(socket: String, projectDirectory: File) {
328335
cs.launch {
329336
LOG.info("Starting ethersync client")
330-
val clientProcessBuilder = ProcessBuilder("ethersync", "client", "--socket-name", socket)
337+
// TODO: try catch not existing binary
338+
val clientProcessBuilder = ProcessBuilder(
339+
AppSettings.getInstance().state.ethersyncBinaryPath,
340+
"client", "--socket-name", socket)
331341
.directory(projectDirectory)
332342
clientProcess = clientProcessBuilder.start()
333343
val clientProcess = clientProcess!!
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.github.ethersync.settings
2+
3+
import com.intellij.openapi.application.ApplicationManager
4+
import com.intellij.openapi.components.PersistentStateComponent
5+
import com.intellij.openapi.components.State
6+
import com.intellij.openapi.components.Storage
7+
import org.jetbrains.annotations.NonNls
8+
9+
@State(
10+
name = "io.github.ethersync.settings.AppSettings",
11+
storages = [Storage("EthersyncSettingsPlugin.xml")]
12+
)
13+
class AppSettings : PersistentStateComponent<AppSettings.State> {
14+
15+
data class State(
16+
@NonNls
17+
var ethersyncBinaryPath: String = "ethersync"
18+
)
19+
20+
private var state: State = State()
21+
22+
companion object {
23+
fun getInstance() : AppSettings {
24+
return ApplicationManager.getApplication().getService(AppSettings::class.java)
25+
}
26+
}
27+
28+
override fun getState(): State {
29+
return state
30+
}
31+
32+
override fun loadState(state: State) {
33+
this.state = state
34+
}
35+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.github.ethersync.settings
2+
3+
import com.intellij.ui.components.JBLabel
4+
import com.intellij.ui.components.JBTextField
5+
import com.intellij.util.ui.FormBuilder
6+
import javax.swing.JPanel
7+
8+
class AppSettingsComponent {
9+
10+
val panel: JPanel
11+
private val ethersyncBinaryTF: JBTextField = JBTextField()
12+
13+
init {
14+
panel = FormBuilder.createFormBuilder()
15+
.addLabeledComponent(JBLabel("Ethersync binary:"), ethersyncBinaryTF, 1, false)
16+
.addComponentFillVertically(JPanel(), 0)
17+
.panel
18+
}
19+
20+
var ethersyncBinary: String
21+
get() {
22+
return if (ethersyncBinaryTF.text.isNullOrBlank()) {
23+
"ethersync"
24+
} else {
25+
ethersyncBinaryTF.text.toString()
26+
}
27+
}
28+
set(value) {
29+
ethersyncBinaryTF.setText(value)
30+
}
31+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.github.ethersync.settings
2+
3+
import com.intellij.openapi.options.Configurable
4+
import org.jetbrains.annotations.Nls
5+
import javax.swing.JComponent
6+
7+
class AppSettingsConfigurable : Configurable {
8+
9+
private var compoment: AppSettingsComponent? = null
10+
11+
override fun createComponent(): JComponent {
12+
compoment = AppSettingsComponent()
13+
return compoment!!.panel
14+
}
15+
16+
override fun isModified(): Boolean {
17+
val state = AppSettings.getInstance().state
18+
return state.ethersyncBinaryPath != compoment!!.ethersyncBinary
19+
}
20+
21+
override fun apply() {
22+
val state = AppSettings.getInstance().state
23+
state.ethersyncBinaryPath = compoment!!.ethersyncBinary
24+
}
25+
26+
@Nls(capitalization = Nls.Capitalization.Title)
27+
override fun getDisplayName(): String {
28+
return "Ethersync"
29+
}
30+
31+
override fun reset() {
32+
val state = AppSettings.getInstance().state
33+
compoment!!.ethersyncBinary = state.ethersyncBinaryPath
34+
}
35+
36+
override fun disposeUIResources() {
37+
compoment = null
38+
}
39+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
<depends>com.intellij.modules.platform</depends>
1212

1313
<extensions defaultExtensionNs="com.intellij">
14+
<applicationService
15+
serviceImplementation="io.github.ethersync.settings.AppSettings"/>
16+
<applicationConfigurable
17+
parentId="tools"
18+
instance="io.github.ethersync.settings.AppSettingsConfigurable"
19+
id="io.github.ethersync.settings.AppSettingsConfigurable"
20+
displayName="Ethersync"/>
21+
1422
<projectService
1523
serviceInterface="io.github.ethersync.EthersyncService"
1624
serviceImplementation="io.github.ethersync.EthersyncServiceImpl"/>

0 commit comments

Comments
 (0)