github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/cmd/syft/cli/ui/handler.go (about) 1 package ui 2 3 import ( 4 "sync" 5 6 tea "github.com/charmbracelet/bubbletea" 7 "github.com/wagoodman/go-partybus" 8 9 "github.com/anchore/bubbly" 10 "github.com/anchore/bubbly/bubbles/taskprogress" 11 stereoscopeEvent "github.com/anchore/stereoscope/pkg/event" 12 syftEvent "github.com/anchore/syft/syft/event" 13 ) 14 15 var _ interface { 16 bubbly.EventHandler 17 bubbly.MessageListener 18 bubbly.HandleWaiter 19 } = (*Handler)(nil) 20 21 type HandlerConfig struct { 22 TitleWidth int 23 AdjustDefaultTask func(taskprogress.Model) taskprogress.Model 24 } 25 26 type Handler struct { 27 WindowSize tea.WindowSizeMsg 28 Running *sync.WaitGroup 29 Config HandlerConfig 30 31 bubbly.EventHandler 32 } 33 34 func DefaultHandlerConfig() HandlerConfig { 35 return HandlerConfig{ 36 TitleWidth: 30, 37 } 38 } 39 40 func New(cfg HandlerConfig) *Handler { 41 d := bubbly.NewEventDispatcher() 42 43 h := &Handler{ 44 EventHandler: d, 45 Running: &sync.WaitGroup{}, 46 Config: cfg, 47 } 48 49 // register all supported event types with the respective handler functions 50 d.AddHandlers(map[partybus.EventType]bubbly.EventHandlerFn{ 51 stereoscopeEvent.PullDockerImage: h.handlePullDockerImage, 52 stereoscopeEvent.ReadImage: h.handleReadImage, 53 stereoscopeEvent.FetchImage: h.handleFetchImage, 54 syftEvent.PackageCatalogerStarted: h.handlePackageCatalogerStarted, 55 syftEvent.FileDigestsCatalogerStarted: h.handleFileDigestsCatalogerStarted, 56 syftEvent.FileMetadataCatalogerStarted: h.handleFileMetadataCatalogerStarted, 57 syftEvent.FileIndexingStarted: h.handleFileIndexingStarted, 58 syftEvent.AttestationStarted: h.handleAttestationStarted, 59 syftEvent.CatalogerTaskStarted: h.handleCatalogerTaskStarted, 60 61 // deprecated 62 syftEvent.SecretsCatalogerStarted: h.handleSecretsCatalogerStarted, 63 }) 64 65 return h 66 } 67 68 func (m *Handler) OnMessage(msg tea.Msg) { 69 if msg, ok := msg.(tea.WindowSizeMsg); ok { 70 m.WindowSize = msg 71 } 72 } 73 74 func (m *Handler) Wait() { 75 m.Running.Wait() 76 }