5
5
package io.gitpod.toolbox.gateway
6
6
7
7
import com.jetbrains.toolbox.api.remoteDev.AbstractRemoteProviderEnvironment
8
+ import com.jetbrains.toolbox.api.remoteDev.AfterDisconnectHook
9
+ import com.jetbrains.toolbox.api.remoteDev.BeforeConnectionHook
8
10
import com.jetbrains.toolbox.api.remoteDev.EnvironmentVisibilityState
9
11
import com.jetbrains.toolbox.api.remoteDev.environments.EnvironmentContentsView
10
12
import com.jetbrains.toolbox.api.remoteDev.states.CustomRemoteEnvironmentState
@@ -16,6 +18,7 @@ import com.jetbrains.toolbox.api.ui.observables.ObservableList
16
18
import com.jetbrains.toolbox.api.ui.observables.ObservablePropertiesFactory
17
19
import io.gitpod.publicapi.experimental.v1.Workspaces.WorkspaceInstanceStatus
18
20
import io.gitpod.toolbox.auth.GitpodAuthManager
21
+ import io.gitpod.toolbox.components.SimpleButton
19
22
import io.gitpod.toolbox.service.ConnectParams
20
23
import io.gitpod.toolbox.service.GitpodPublicApiManager
21
24
import io.gitpod.toolbox.service.Utils
@@ -24,7 +27,9 @@ import kotlinx.coroutines.Job
24
27
import kotlinx.coroutines.channels.BufferOverflow
25
28
import kotlinx.coroutines.flow.MutableSharedFlow
26
29
import kotlinx.coroutines.launch
30
+ import java.net.URI
27
31
import java.util.concurrent.CompletableFuture
32
+ import java.util.function.Consumer
28
33
29
34
class GitpodRemoteEnvironment (
30
35
private val connectParams : ConnectParams ,
@@ -44,6 +49,14 @@ class GitpodRemoteEnvironment(
44
49
lastWSEnvState.collect { lastState ->
45
50
val state = lastState.getState()
46
51
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
+ }
47
60
actionList.clear()
48
61
actionList.addAll(actions)
49
62
listenerSet.forEach { it.consume(state) }
@@ -89,6 +102,34 @@ class GitpodRemoteEnvironment(
89
102
override fun dispose () {
90
103
watchWorkspaceJob?.cancel()
91
104
}
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
+ }
92
133
}
93
134
94
135
0 commit comments