@@ -23,6 +23,8 @@ import (
23
23
type nodeInfoScreen struct {
24
24
ctx context.Context
25
25
ctxCancel context.CancelFunc
26
+
27
+ executingStatus bool
26
28
}
27
29
28
30
func makeNodeInfoScreen (_ fyne.Window , g * Gui ) fyne.CanvasObject {
@@ -222,10 +224,37 @@ func makeNodeInfoTab(g *Gui) fyne.CanvasObject {
222
224
widget .NewFormItem ("Gen.SHA256:" , genesisChecksumLabel ),
223
225
)
224
226
225
- execFunc := func (arg types.Cmd ) {
227
+ loadingData := binding .NewFloat ()
228
+
229
+ loadMessage := binding .NewString ()
230
+ txExecLoadingWidget := container .NewHBox (
231
+ widget .NewProgressBarWithData (loadingData ), widget .NewLabelWithData (loadMessage ),
232
+ )
233
+
234
+ startTXexec := func (command string ) {
235
+ txExecLoadingWidget .Show ()
236
+ g .NodeInfo .executingStatus = true
237
+
238
+ loadMessage .Set (fmt .Sprintf ("Executing <%v> command" , command ))
239
+ validatorControlButton .Disable ()
240
+ maxRange := 40
241
+ for i := range maxRange {
242
+ time .Sleep (time .Second * time .Duration (i ))
243
+ percentage := (i * 100 ) / maxRange
244
+ loadingData .Set (float64 (percentage ))
245
+
246
+ }
247
+ txExecLoadingWidget .Hide ()
248
+ g .NodeInfo .executingStatus = false
249
+ refreshBinding .DataChanged ()
250
+ }
251
+
252
+ execFunc := func (args types.ExecSekaiCmd ) {
253
+ go startTXexec (string (args .TX ))
226
254
g .WaitDialog .ShowWaitDialog ()
227
- payload , err := json .Marshal (types.ExecSekaiCmd {TX : arg })
228
- log .Printf ("Executing: %v" , arg )
255
+ payload , err := json .Marshal (args )
256
+
257
+ log .Printf ("Executing: %v" , args )
229
258
if err != nil {
230
259
g .showErrorDialog (err , binding .NewDataListener (func () {}))
231
260
}
@@ -235,22 +264,27 @@ func makeNodeInfoTab(g *Gui) fyne.CanvasObject {
235
264
refreshBinding .DataChanged ()
236
265
}
237
266
267
+ monikerEntryData := binding .NewString ()
268
+ claimDataListener := binding .NewDataListener (func () {
269
+ moniker , _ := monikerEntryData .Get ()
270
+ execFunc (types.ExecSekaiCmd {TX : types .ClaimValidatorSeat , Moniker : moniker })
271
+ })
272
+
238
273
claimSeatButton .OnTapped = func () {
239
274
//claim seat
240
- execFunc ( types . ClaimValidatorSeat )
275
+ showMonikerEntryDialog ( g , monikerEntryData , claimDataListener )
241
276
}
242
277
pauseValidatorFunc := func () {
243
278
// pause
244
- execFunc (types .Pause )
279
+ execFunc (types.ExecSekaiCmd { TX : types . Pause } )
245
280
}
246
281
unpauseValidatorFunc := func () {
247
282
// unpause tx
248
- execFunc (types .Unpause )
283
+ execFunc (types.ExecSekaiCmd { TX : types . Unpause } )
249
284
}
250
285
activateValidatorFunc := func () {
251
286
// activate
252
- execFunc (types .Activate )
253
-
287
+ execFunc (types.ExecSekaiCmd {TX : types .Activate })
254
288
}
255
289
256
290
errBinding := binding .NewUntyped ()
@@ -271,7 +305,7 @@ func makeNodeInfoTab(g *Gui) fyne.CanvasObject {
271
305
claimSeatButton .Hide ()
272
306
}
273
307
274
- if dashboardData .ValidatorStatus != "Unknown" {
308
+ if dashboardData .ValidatorStatus != "Unknown" && ! g . NodeInfo . executingStatus {
275
309
status := strings .ToUpper (dashboardData .ValidatorStatus )
276
310
switch status {
277
311
case string (shidai .Active ):
0 commit comments