Skip to content

Commit 95e8259

Browse files
committed
1
1 parent dd33851 commit 95e8259

File tree

3 files changed

+57
-9
lines changed

3 files changed

+57
-9
lines changed

components/ide/jetbrains/toolbox/src/main/kotlin/io/gitpod/toolbox/gateway/GitpodRemoteEnvironment.kt

+41
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package io.gitpod.toolbox.gateway
66

77
import com.jetbrains.toolbox.api.remoteDev.AbstractRemoteProviderEnvironment
8+
import com.jetbrains.toolbox.api.remoteDev.AfterDisconnectHook
9+
import com.jetbrains.toolbox.api.remoteDev.BeforeConnectionHook
810
import com.jetbrains.toolbox.api.remoteDev.EnvironmentVisibilityState
911
import com.jetbrains.toolbox.api.remoteDev.environments.EnvironmentContentsView
1012
import com.jetbrains.toolbox.api.remoteDev.states.CustomRemoteEnvironmentState
@@ -16,6 +18,7 @@ import com.jetbrains.toolbox.api.ui.observables.ObservableList
1618
import com.jetbrains.toolbox.api.ui.observables.ObservablePropertiesFactory
1719
import io.gitpod.publicapi.experimental.v1.Workspaces.WorkspaceInstanceStatus
1820
import io.gitpod.toolbox.auth.GitpodAuthManager
21+
import io.gitpod.toolbox.components.SimpleButton
1922
import io.gitpod.toolbox.service.ConnectParams
2023
import io.gitpod.toolbox.service.GitpodPublicApiManager
2124
import io.gitpod.toolbox.service.Utils
@@ -24,7 +27,9 @@ import kotlinx.coroutines.Job
2427
import kotlinx.coroutines.channels.BufferOverflow
2528
import kotlinx.coroutines.flow.MutableSharedFlow
2629
import kotlinx.coroutines.launch
30+
import java.net.URI
2731
import java.util.concurrent.CompletableFuture
32+
import java.util.function.Consumer
2833

2934
class GitpodRemoteEnvironment(
3035
private val connectParams: ConnectParams,
@@ -44,6 +49,14 @@ class GitpodRemoteEnvironment(
4449
lastWSEnvState.collect { lastState ->
4550
val state = lastState.getState()
4651
val actions = mutableListOf<ActionDescription>()
52+
if (lastState.phase == WorkspaceInstanceStatus.Phase.PHASE_STOPPED) {
53+
actions.add(SimpleButton("Restart") {
54+
if (publicApi.gitpodHost.isNullOrBlank()) {
55+
return@SimpleButton
56+
}
57+
Utils.localDesktopManager.openUrl(URI("https://${publicApi.gitpodHost}/start#${connectParams.workspaceId}").toURL())
58+
})
59+
}
4760
actionList.clear()
4861
actionList.addAll(actions)
4962
listenerSet.forEach { it.consume(state) }
@@ -89,6 +102,34 @@ class GitpodRemoteEnvironment(
89102
override fun dispose() {
90103
watchWorkspaceJob?.cancel()
91104
}
105+
106+
override fun getAfterDisconnectHooks(): MutableList<AfterDisconnectHook> {
107+
return mutableListOf(object: AfterDisconnectHook {
108+
override fun afterDisconnect() {
109+
Utils.logger.info("=============afterDisconnect")
110+
}
111+
})
112+
}
113+
114+
override fun getBeforeConnectionHooks(): MutableList<BeforeConnectionHook> {
115+
return mutableListOf(object: BeforeConnectionHook {
116+
override fun beforeConnection() {
117+
Utils.logger.info("=============beforeConnection")
118+
}
119+
})
120+
}
121+
122+
fun connect() {
123+
connectionRequestListenerSet.forEach {
124+
it.accept(true)
125+
}
126+
}
127+
128+
fun disconnect() {
129+
connectionRequestListenerSet.forEach {
130+
it.accept(false)
131+
}
132+
}
92133
}
93134

94135

components/ide/jetbrains/toolbox/src/main/kotlin/io/gitpod/toolbox/gateway/GitpodRemoteProvider.kt

+14-9
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class GitpodRemoteProvider(
4949
private suspend fun setEnvironmentVisibility(connectParams: ConnectParams) {
5050
val workspaceId = connectParams.workspaceId
5151
Utils.logger.debug("setEnvironmentVisibility $workspaceId, $connectParams")
52-
val obj = environmentMap[connectParams.uniqueID]
52+
var obj = environmentMap[connectParams.uniqueID]
5353
var (workspace) = obj ?: Pair(null, null)
5454
if (obj == null) {
5555
workspace = publicApi.getWorkspace(workspaceId)
@@ -60,15 +60,20 @@ class GitpodRemoteProvider(
6060
)
6161
environmentMap[connectParams.uniqueID] = Pair(workspace, env)
6262
consumer.consumeEnvironments(environmentMap.values.map { it.second }, true)
63+
obj = environmentMap[connectParams.uniqueID]
64+
}
65+
if (obj != null) {
66+
val joinLinkInfo = publicApi.fetchJoinLink2Info(workspaceId, workspace!!.getIDEUrl())
67+
// TODO(hw): verify if it's working
68+
Utils.clientHelper.prepareClient(joinLinkInfo.ideVersion)
69+
Utils.clientHelper.setAutoConnectOnEnvironmentReady(
70+
connectParams.uniqueID,
71+
joinLinkInfo.ideVersion,
72+
joinLinkInfo.projectPath
73+
)
74+
obj.second.disconnect()
75+
obj.second.connect()
6376
}
64-
val joinLinkInfo = publicApi.fetchJoinLink2Info(workspaceId, workspace!!.getIDEUrl())
65-
// TODO(hw): verify if it's working
66-
Utils.clientHelper.prepareClient(joinLinkInfo.ideVersion)
67-
Utils.clientHelper.setAutoConnectOnEnvironmentReady(
68-
connectParams.uniqueID,
69-
joinLinkInfo.ideVersion,
70-
joinLinkInfo.projectPath
71-
)
7277
}
7378

7479
private fun showWorkspacesList() {

components/ide/jetbrains/toolbox/src/main/kotlin/io/gitpod/toolbox/service/GitpodPublicApiManager.kt

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class GitpodPublicApiManager(private val authManger: GitpodAuthManager) {
2828
private var organizationApi: TeamsServiceClientInterface? = null
2929
private var userApi: UserServiceClientInterface? = null
3030
private var account: GitpodAccount? = null
31+
var gitpodHost: String? = null
3132

3233
init {
3334
authManger.addLogoutListener {
@@ -46,6 +47,7 @@ class GitpodPublicApiManager(private val authManger: GitpodAuthManager) {
4647
workspaceApi = WorkspacesServiceClient(client)
4748
organizationApi = TeamsServiceClient(client)
4849
userApi = UserServiceClient(client)
50+
gitpodHost = account.getHost()
4951
}
5052

5153
fun watchWorkspaceStatus(workspaceId: String, consumer: (String, Workspaces.WorkspaceInstanceStatus) -> Unit): Job {

0 commit comments

Comments
 (0)