Keep implementing the path-like way for the screens. Should think about renaming the ScreenId to the Path or ScreenPath.
This commit is contained in:
parent
88d4310db5
commit
c96c2a7559
2 changed files with 65 additions and 0 deletions
|
@ -106,6 +106,21 @@ var (
|
||||||
).Reply()
|
).Reply()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var theNode = tg.NewNode(
|
||||||
|
"/", tg.WidgetFunc(func(c *tg.Context){
|
||||||
|
c.Go("/start")
|
||||||
|
}),
|
||||||
|
tg.NewNode(
|
||||||
|
"start", tg.WidgetFunc(func(c *tg.Context){}),
|
||||||
|
tg.NewNode(
|
||||||
|
"profile", tg.WidgetFunc(func(c *tg.Context){}),
|
||||||
|
),
|
||||||
|
tg.NewNode(
|
||||||
|
"upper-case", tg.WidgetFunc(func(c *tg.Context){}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
var beh = tg.NewBehaviour().
|
var beh = tg.NewBehaviour().
|
||||||
WithInitFunc(func(c *tg.Context) {
|
WithInitFunc(func(c *tg.Context) {
|
||||||
// The session initialization.
|
// The session initialization.
|
||||||
|
@ -224,6 +239,8 @@ var gBeh = tg.NewGroupBehaviour().
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
log.Println(theNode.ScreenMap())
|
||||||
|
return
|
||||||
token := os.Getenv("BOT_TOKEN")
|
token := os.Getenv("BOT_TOKEN")
|
||||||
|
|
||||||
bot, err := tg.NewBot(token)
|
bot, err := tg.NewBot(token)
|
||||||
|
|
48
tg/screen.go
48
tg/screen.go
|
@ -13,6 +13,54 @@ type Screen struct {
|
||||||
Widget Widget
|
Widget Widget
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The node is a simple way to represent
|
||||||
|
// tree-like structured applications.
|
||||||
|
type Node struct {
|
||||||
|
Screen *Screen
|
||||||
|
Subs []*Node
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNode(id ScreenId, widget Widget, subs ...*Node) *Node {
|
||||||
|
ret := &Node{}
|
||||||
|
ret.Screen = NewScreen(id, widget)
|
||||||
|
ret.Subs = subs
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Node) ScreenMap() ScreenMap {
|
||||||
|
m := make(ScreenMap)
|
||||||
|
id := n.Screen.Id
|
||||||
|
m[id] = n.Screen
|
||||||
|
n.Screen.Id = id
|
||||||
|
var root ScreenId
|
||||||
|
if id == "/" {
|
||||||
|
root = ""
|
||||||
|
} else {
|
||||||
|
root = id
|
||||||
|
}
|
||||||
|
for _, sub := range n.Subs {
|
||||||
|
buf := sub.screenMap(root + "/")
|
||||||
|
for k, v := range buf {
|
||||||
|
m[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Node) screenMap(root ScreenId) ScreenMap {
|
||||||
|
m := make(ScreenMap)
|
||||||
|
id := root+ n.Screen.Id
|
||||||
|
m[id] = n.Screen
|
||||||
|
n.Screen.Id = id
|
||||||
|
for _, sub := range n.Subs {
|
||||||
|
buf := sub.screenMap(id + "/")
|
||||||
|
for k, v := range buf {
|
||||||
|
m[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
// Map structure for the screens.
|
// Map structure for the screens.
|
||||||
type ScreenMap map[ScreenId]*Screen
|
type ScreenMap map[ScreenId]*Screen
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue