2023-12-22 15:50:42 +01:00
|
|
|
package tui
|
|
|
|
|
|
|
|
import (
|
2023-12-23 12:08:58 +01:00
|
|
|
"ewintr.nl/emdb/client"
|
2023-12-22 15:50:42 +01:00
|
|
|
tea "github.com/charmbracelet/bubbletea"
|
2023-12-23 12:08:58 +01:00
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
|
|
"github.com/muesli/termenv"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
docStyle = lipgloss.NewStyle().Padding(1)
|
|
|
|
colorNormalForeground = lipgloss.ANSIColor(termenv.ANSIWhite)
|
|
|
|
colorHighLightForeGround = lipgloss.ANSIColor(termenv.ANSIBrightWhite)
|
|
|
|
windowStyle = lipgloss.NewStyle().
|
|
|
|
BorderForeground(colorHighLightForeGround).
|
|
|
|
Foreground(colorNormalForeground).
|
|
|
|
Padding(0, 1).
|
|
|
|
Border(lipgloss.NormalBorder(), true)
|
2023-12-23 12:44:58 +01:00
|
|
|
logLineCount = 5
|
2023-12-22 15:50:42 +01:00
|
|
|
)
|
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
type Logger struct {
|
|
|
|
p *tea.Program
|
|
|
|
Lines []string
|
2023-12-23 12:08:58 +01:00
|
|
|
}
|
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
func NewLogger() *Logger {
|
|
|
|
return &Logger{
|
|
|
|
Lines: make([]string, 0),
|
2023-12-22 15:50:42 +01:00
|
|
|
}
|
2023-12-23 12:08:58 +01:00
|
|
|
}
|
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
type LogMsg tea.Msg
|
2023-12-23 12:08:58 +01:00
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
func (l *Logger) SetProgram(p *tea.Program) {
|
|
|
|
l.p = p
|
2023-12-23 12:08:58 +01:00
|
|
|
}
|
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
func (l *Logger) Log(s string) {
|
|
|
|
l.Lines = append(l.Lines, s)
|
2023-12-23 12:08:58 +01:00
|
|
|
}
|
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
type TabSizeMsgType tea.WindowSizeMsg
|
2023-12-23 12:08:58 +01:00
|
|
|
|
2023-12-23 18:43:38 +01:00
|
|
|
func New(conf Config, logger *Logger) (*tea.Program, error) {
|
|
|
|
tabs := []string{"Erik's movie database", "The movie database"}
|
|
|
|
tmdb, err := client.NewTMDB(conf.TMDBAPIKey)
|
2023-12-23 12:08:58 +01:00
|
|
|
if err != nil {
|
2023-12-23 18:43:38 +01:00
|
|
|
return nil, err
|
2023-12-23 12:08:58 +01:00
|
|
|
}
|
2023-12-23 18:43:38 +01:00
|
|
|
m := baseModel{
|
|
|
|
config: conf,
|
|
|
|
emdb: client.NewEMDB(conf.EMDBBaseURL, conf.EMDBAPIKey),
|
|
|
|
tmdb: tmdb,
|
|
|
|
Tabs: tabs,
|
|
|
|
logger: logger,
|
2023-12-23 12:08:58 +01:00
|
|
|
}
|
2023-12-23 18:43:38 +01:00
|
|
|
m.TabContent = NewEMDBTab(&m, m.logger)
|
|
|
|
|
|
|
|
p := tea.NewProgram(m, tea.WithAltScreen())
|
|
|
|
|
|
|
|
return p, nil
|
2023-12-22 15:50:42 +01:00
|
|
|
}
|