1package tui
2
3import (
4 "fmt"
5 "net/url"
6 "strings"
7
8 tea "github.com/charmbracelet/bubbletea"
9 "github.com/charmbracelet/soft-serve/internal/config"
10 "github.com/gliderlabs/ssh"
11)
12
13func SessionHandler(cfg *config.Config) func(ssh.Session) (tea.Model, []tea.ProgramOption) {
14 return func(s ssh.Session) (tea.Model, []tea.ProgramOption) {
15 cmd := s.Command()
16 scfg := &SessionConfig{Session: s}
17 switch len(cmd) {
18 case 0:
19 scfg.InitialRepo = ""
20 case 1:
21 p, err := url.Parse(cmd[0])
22 if err != nil || strings.Contains(p.Path, "/") {
23 return nil, nil
24 }
25 scfg.InitialRepo = cmd[0]
26 default:
27 return nil, nil
28 }
29 pty, _, active := s.Pty()
30 if !active {
31 fmt.Println("not active")
32 return nil, nil
33 }
34 scfg.Width = pty.Window.Width
35 scfg.Height = pty.Window.Height
36 if cfg.Cfg.Callbacks != nil {
37 cfg.Cfg.Callbacks.Tui("view")
38 }
39 return NewBubble(cfg, scfg), []tea.ProgramOption{
40 tea.WithAltScreen(),
41 tea.WithoutCatchPanics(),
42 }
43 }
44}