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