1
1
package pui
2
2
3
3
import (
4
- "fmt "
4
+ "errors "
5
5
6
6
"github.com/TNK-Studio/gortal/core/sshd"
7
7
"github.com/TNK-Studio/gortal/utils/logger"
@@ -20,17 +20,17 @@ func (ui *PUI) SetSession(s *ssh.Session) {
20
20
}
21
21
22
22
// ShowMenu show menu
23
- func (ui * PUI ) ShowMenu (label string , menu * []MenuItem , BackOptionLabel string ) {
23
+ func (ui * PUI ) ShowMenu (label string , menu * []* MenuItem , BackOptionLabel string , selectedChain [] * MenuItem ) {
24
24
for {
25
25
menuLabels := make ([]string , 0 )
26
- menuItems := make ([]MenuItem , 0 )
26
+ menuItems := make ([]* MenuItem , 0 )
27
27
28
28
if menu == nil {
29
- return
29
+ break
30
30
}
31
31
32
32
for index , menuItem := range * menu {
33
- if menuItem .IsShow == nil || menuItem .IsShow (index , & menuItem , ui .sess ) {
33
+ if menuItem .IsShow == nil || menuItem .IsShow (index , menuItem , ui .sess , selectedChain ) {
34
34
menuLabels = append (menuLabels , menuItem .Label )
35
35
menuItems = append (menuItems , menuItem )
36
36
}
@@ -50,21 +50,22 @@ func (ui *PUI) ShowMenu(label string, menu *[]MenuItem, BackOptionLabel string)
50
50
51
51
logger .Logger .Debugf ("Selected index: %d subMenuLabel: %+v err: %s" , index , subMenuLabel , err )
52
52
if err != nil {
53
- fmt . Printf ("Select menu error %s\n " , err )
54
- return
53
+ logger . Logger . Infof ("Select menu error %s\n " , err )
54
+ break
55
55
}
56
56
57
57
if index == backIndex {
58
58
break
59
59
}
60
- selected := & (menuItems [index ])
60
+
61
+ selected := menuItems [index ]
61
62
62
63
logger .Logger .Debugf ("Selected: %+v" , selected )
63
64
64
65
if selected .GetSubMenu != nil {
65
66
66
67
getSubMenu := selected .GetSubMenu
67
- subMenu := getSubMenu (index , selected , ui .sess )
68
+ subMenu := getSubMenu (index , selected , ui .sess , selectedChain )
68
69
69
70
if subMenu != nil && len (* subMenu ) > 0 {
70
71
back := "back"
@@ -75,26 +76,33 @@ func (ui *PUI) ShowMenu(label string, menu *[]MenuItem, BackOptionLabel string)
75
76
if selected .SubMenuTitle != "" {
76
77
subMenuLabel = selected .SubMenuTitle
77
78
}
78
- ui .ShowMenu (subMenuLabel , subMenu , back )
79
+ ui .ShowMenu (subMenuLabel , subMenu , back , append (selectedChain , selected ))
80
+ } else {
81
+ noSubMenuInfo := "No options under this menu ... "
82
+ if selected .NoSubMenuInfo != "" {
83
+ noSubMenuInfo = selected .NoSubMenuInfo
84
+ }
85
+ sshd .ErrorInfo (errors .New (noSubMenuInfo ), ui .sess )
79
86
}
80
87
}
81
88
82
89
if selected .SelectedFunc != nil {
83
90
selectedFunc := selected .SelectedFunc
84
91
logger .Logger .Debugf ("Run selectFunc %+v" , selectedFunc )
85
- err := selectedFunc (index , selected , ui .sess )
92
+ err := selectedFunc (index , selected , ui .sess , selectedChain )
86
93
if err != nil {
87
94
logger .Logger .Errorf ("Run selected func err: %s" , err )
88
95
sshd .ErrorInfo (err , ui .sess )
89
96
}
90
97
if selected .BackAfterSelected == true {
91
- return
98
+ break
92
99
}
93
100
}
94
101
}
95
102
}
96
103
97
104
// ShowMainMenu show main menu
98
105
func (ui * PUI ) ShowMainMenu () {
99
- ui .ShowMenu ("Please select the function you need" , MainMenu , "Quit" )
106
+ selectedChain := make ([]* MenuItem , 0 )
107
+ ui .ShowMenu ("Please select the function you need" , MainMenu , "Quit" , selectedChain )
100
108
}
0 commit comments