5
5
"os"
6
6
"os/exec"
7
7
"path/filepath"
8
+ "time"
8
9
9
10
tea "github.com/charmbracelet/bubbletea"
10
11
@@ -171,7 +172,8 @@ func (m *RunL1NodeMonikerInput) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
171
172
if done {
172
173
m .state .moniker = input .Text
173
174
m .state .weave .PreviousResponse += styles .RenderPreviousResponse (styles .DotsSeparator , m .GetQuestion (), []string {"moniker" }, input .Text )
174
- return NewExistingAppChecker (m .state ), utils .DoTick ()
175
+ model := NewExistingAppChecker (m .state )
176
+ return model , model .Init ()
175
177
}
176
178
m .TextInput = input
177
179
return m , cmd
@@ -182,45 +184,58 @@ func (m *RunL1NodeMonikerInput) View() string {
182
184
}
183
185
184
186
type ExistingAppChecker struct {
185
- state * RunL1NodeState
187
+ state * RunL1NodeState
188
+ loading utils.Loading
186
189
}
187
190
188
191
func NewExistingAppChecker (state * RunL1NodeState ) * ExistingAppChecker {
189
192
return & ExistingAppChecker {
190
- state : state ,
193
+ state : state ,
194
+ loading : utils .NewLoading ("Checking for an existing Initia app..." , WaitExistingAppChecker (state )),
191
195
}
192
196
}
193
197
194
198
func (m * ExistingAppChecker ) Init () tea.Cmd {
195
- return utils . DoTick ()
199
+ return m . loading . Init ()
196
200
}
197
201
198
- func (m * ExistingAppChecker ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
199
- switch msg .(type ) {
200
- case utils.TickMsg :
202
+ func WaitExistingAppChecker (state * RunL1NodeState ) tea.Cmd {
203
+ return func () tea.Msg {
201
204
homeDir , err := os .UserHomeDir ()
202
205
if err != nil {
203
- fmt .Printf ("[error] Failed to get user home directory: %v\n " , err )
204
- return m , tea .Quit
206
+ return utils.ErrorLoading {Err : err }
205
207
}
206
208
207
209
initiaConfigPath := filepath .Join (homeDir , utils .InitiaConfigDirectory )
208
210
appTomlPath := filepath .Join (initiaConfigPath , "app.toml" )
209
211
configTomlPath := filepath .Join (initiaConfigPath , "config.toml" )
212
+ time .Sleep (1500 * time .Millisecond )
210
213
if ! utils .FileOrFolderExists (configTomlPath ) || ! utils .FileOrFolderExists (appTomlPath ) {
211
- m .state .existingApp = false
214
+ state .existingApp = false
215
+ return utils.EndLoading {}
216
+ } else {
217
+ state .existingApp = true
218
+ return utils.EndLoading {}
219
+ }
220
+ }
221
+ }
222
+
223
+ func (m * ExistingAppChecker ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
224
+ loader , cmd := m .loading .Update (msg )
225
+ m .loading = loader
226
+ if m .loading .Completing {
227
+
228
+ if ! m .state .existingApp {
212
229
return NewMinGasPriceInput (m .state ), nil
213
230
} else {
214
- m .state .existingApp = true
215
231
return NewExistingAppReplaceSelect (m .state ), nil
216
232
}
217
- default :
218
- return m , nil
219
233
}
234
+ return m , cmd
220
235
}
221
236
222
237
func (m * ExistingAppChecker ) View () string {
223
- return m .state .weave .PreviousResponse + "Checking for an existing Initia app..."
238
+ return m .state .weave .PreviousResponse + "\n " + m . loading . View ()
224
239
}
225
240
226
241
type ExistingAppReplaceSelect struct {
@@ -443,7 +458,8 @@ func (m *PersistentPeersInput) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
443
458
if done {
444
459
m .state .persistentPeers = input .Text
445
460
m .state .weave .PreviousResponse += styles .RenderPreviousResponse (styles .DotsSeparator , m .GetQuestion (), []string {"persistent_peers" }, input .Text )
446
- return NewExistingGenesisChecker (m .state ), utils .DoTick ()
461
+ model := NewExistingGenesisChecker (m .state )
462
+ return model , model .Init ()
447
463
}
448
464
m .TextInput = input
449
465
return m , cmd
@@ -454,48 +470,62 @@ func (m *PersistentPeersInput) View() string {
454
470
}
455
471
456
472
type ExistingGenesisChecker struct {
457
- state * RunL1NodeState
473
+ state * RunL1NodeState
474
+ loading utils.Loading
458
475
}
459
476
460
477
func NewExistingGenesisChecker (state * RunL1NodeState ) * ExistingGenesisChecker {
461
478
return & ExistingGenesisChecker {
462
- state : state ,
479
+ state : state ,
480
+ loading : utils .NewLoading ("Checking for an existing Initia genesis file..." , WaitExistingGenesisChecker (state )),
463
481
}
464
482
}
465
483
466
484
func (m * ExistingGenesisChecker ) Init () tea.Cmd {
467
- return utils . DoTick ()
485
+ return m . loading . Init ()
468
486
}
469
487
470
- func (m * ExistingGenesisChecker ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
471
- switch msg .(type ) {
472
- case utils.TickMsg :
488
+ func WaitExistingGenesisChecker (state * RunL1NodeState ) tea.Cmd {
489
+ return func () tea.Msg {
473
490
homeDir , err := os .UserHomeDir ()
474
491
if err != nil {
475
492
fmt .Printf ("[error] Failed to get user home directory: %v\n " , err )
476
- return m , tea . Quit
493
+ return utils. ErrorLoading { Err : err }
477
494
}
478
-
479
495
initiaConfigPath := filepath .Join (homeDir , utils .InitiaConfigDirectory )
480
496
genesisFilePath := filepath .Join (initiaConfigPath , "genesis.json" )
497
+
498
+ time .Sleep (1500 * time .Millisecond )
499
+
481
500
if ! utils .FileOrFolderExists (genesisFilePath ) {
482
- m .state .existingGenesis = false
501
+ state .existingGenesis = false
502
+ return utils.EndLoading {}
503
+ } else {
504
+ state .existingGenesis = true
505
+ return utils.EndLoading {}
506
+ }
507
+ }
508
+ }
509
+
510
+ func (m * ExistingGenesisChecker ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
511
+ loader , cmd := m .loading .Update (msg )
512
+ m .loading = loader
513
+ if m .loading .Completing {
514
+ if ! m .state .existingGenesis {
483
515
if m .state .network == string (Local ) {
484
516
newLoader := NewInitializingAppLoading (m .state )
485
517
return newLoader , newLoader .Init ()
486
518
}
487
519
return NewGenesisEndpointInput (m .state ), nil
488
520
} else {
489
- m .state .existingGenesis = true
490
521
return NewExistingGenesisReplaceSelect (m .state ), nil
491
522
}
492
- default :
493
- return m , nil
494
523
}
524
+ return m , cmd
495
525
}
496
526
497
527
func (m * ExistingGenesisChecker ) View () string {
498
- return m .state .weave .PreviousResponse + "Checking for an existing Initia genesis file..."
528
+ return m .state .weave .PreviousResponse + "\n " + m . loading . View ()
499
529
}
500
530
501
531
type ExistingGenesisReplaceSelect struct {
@@ -676,7 +706,8 @@ func (m *SyncMethodSelect) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
676
706
if selected != nil {
677
707
m .state .syncMethod = string (* selected )
678
708
m .state .weave .PreviousResponse += styles .RenderPreviousResponse (styles .ArrowSeparator , m .GetQuestion (), []string {"" }, string (* selected ))
679
- return NewExistingDataChecker (m .state ), utils .DoTick ()
709
+ model := NewExistingDataChecker (m .state )
710
+ return model , model .Init ()
680
711
}
681
712
682
713
return m , cmd
@@ -691,31 +722,47 @@ func (m *SyncMethodSelect) View() string {
691
722
}
692
723
693
724
type ExistingDataChecker struct {
694
- state * RunL1NodeState
725
+ state * RunL1NodeState
726
+ loading utils.Loading
695
727
}
696
728
697
729
func NewExistingDataChecker (state * RunL1NodeState ) * ExistingDataChecker {
698
730
return & ExistingDataChecker {
699
- state : state ,
731
+ state : state ,
732
+ loading : utils .NewLoading ("Checking for an existing Initia data..." , WaitExistingDataChecker (state )),
700
733
}
701
734
}
702
735
703
736
func (m * ExistingDataChecker ) Init () tea.Cmd {
704
- return utils . DoTick ()
737
+ return m . loading . Init ()
705
738
}
706
739
707
- func (m * ExistingDataChecker ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
708
- switch msg .(type ) {
709
- case utils.TickMsg :
740
+ func WaitExistingDataChecker (state * RunL1NodeState ) tea.Cmd {
741
+ return func () tea.Msg {
710
742
homeDir , err := os .UserHomeDir ()
711
743
if err != nil {
712
744
fmt .Printf ("[error] Failed to get user home directory: %v\n " , err )
713
- return m , tea . Quit
745
+ return utils. ErrorLoading { Err : err }
714
746
}
715
747
716
748
initiaDataPath := filepath .Join (homeDir , utils .InitiaDataDirectory )
749
+ time .Sleep (1500 * time .Millisecond )
750
+
717
751
if ! utils .FileOrFolderExists (initiaDataPath ) {
718
- m .state .existingData = false
752
+ state .existingData = false
753
+ return utils.EndLoading {}
754
+ } else {
755
+ state .existingData = true
756
+ return utils.EndLoading {}
757
+ }
758
+ }
759
+ }
760
+
761
+ func (m * ExistingDataChecker ) Update (msg tea.Msg ) (tea.Model , tea.Cmd ) {
762
+ loader , cmd := m .loading .Update (msg )
763
+ m .loading = loader
764
+ if m .loading .Completing {
765
+ if ! m .state .existingData {
719
766
switch m .state .syncMethod {
720
767
case string (Snapshot ):
721
768
return NewSnapshotEndpointInput (m .state ), nil
@@ -727,13 +774,12 @@ func (m *ExistingDataChecker) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
727
774
m .state .existingData = true
728
775
return NewExistingDataReplaceSelect (m .state ), nil
729
776
}
730
- default :
731
- return m , nil
732
777
}
778
+ return m , cmd
733
779
}
734
780
735
781
func (m * ExistingDataChecker ) View () string {
736
- return m .state .weave .PreviousResponse + "Checking for an existing Initia data..."
782
+ return m .state .weave .PreviousResponse + "\n " + m . loading . View ()
737
783
}
738
784
739
785
type ExistingDataReplaceSelect struct {
0 commit comments