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}