diff options
Diffstat (limited to 'screens/home.go')
| -rw-r--r-- | screens/home.go | 78 |
1 files changed, 74 insertions, 4 deletions
diff --git a/screens/home.go b/screens/home.go index 64e4705..fa88fb5 100644 --- a/screens/home.go +++ b/screens/home.go @@ -1,12 +1,33 @@ package screens -import tea "github.com/charmbracelet/bubbletea" +import ( + "fmt" + "yato/config" + "yato/lib" + + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" +) type HomeScreen struct { + RecentAnimeRecommendations []lib.Recommendation + RecentMangaRecommendations []lib.Recommendation + imageCache *lib.ImageCache + imageRenderer *lib.ImageRenderer } func homeScreen() tea.Model { - return HomeScreen{} + recentAnimeRecommendations, _ := lib.GetRecentAnimeRecommendations() + recentMangaRecommendations, _ := lib.GetRecentMangaRecommendations() + imageCache := lib.NewImageCache() + imageRenderer := lib.NewImageRenderer() + + return HomeScreen{ + RecentAnimeRecommendations: recentAnimeRecommendations, + RecentMangaRecommendations: recentMangaRecommendations, + imageCache: imageCache, + imageRenderer: imageRenderer, + } } func (h HomeScreen) Init() tea.Cmd { @@ -15,7 +36,7 @@ func (h HomeScreen) Init() tea.Cmd { func (h HomeScreen) Update(msg tea.Msg) (tea.Model, tea.Cmd) { if msg, ok := msg.(tea.KeyMsg); ok { - if msg.Type == tea.KeyCtrlC { + if msg.String() == "q" { return h, tea.Quit } } @@ -24,5 +45,54 @@ func (h HomeScreen) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (h HomeScreen) View() string { - return "Home" + w := lipgloss.Width + + // Top bar, Content, Status bar + topBarStyle := lipgloss.NewStyle(). + Foreground(config.Colors.Text). + Background(config.Colors.Primary) + + mainText := topBarStyle.Padding(0, 0, 0, 1).Render(config.PrettyAppName + " | [H]ome | [A]nime | [M]anga | [S]earch | [C]ommunity | [P]rofile | [O]ptions | [Q]uit") + userText := topBarStyle.Padding(0, 1, 0, 0).Render("User: " + globals.CurrentUser.Name + " | [L]ogout") + separator := topBarStyle.Width(globals.width - w(mainText) - w(userText)).Render("") + + topBar := lipgloss.JoinHorizontal( + lipgloss.Top, + mainText, + separator, + userText, + ) + + content := "" + // Top 5 recommendations + for i, rec := range h.RecentAnimeRecommendations { + if i == 5 { + break + } + content += h.renderRecommendation("anime", rec) + } + + for i, rec := range h.RecentMangaRecommendations { + if i == 5 { + break + } + content += h.renderRecommendation("manga", rec) + } + + return lipgloss.JoinVertical( + lipgloss.Top, + topBar, + content, + ) + +} + +func (h HomeScreen) renderRecommendation(mediaType string, rec lib.Recommendation) string { + img, err := h.imageCache.GetImage(mediaType, rec.Entry[0].MALId, "small", rec.Entry[0].Images.JPG.SmallImageURL) + if err != nil { + return fmt.Sprintf("%s -> %s\n", rec.Entry[0].Title, rec.Entry[1].Title) + } + + renderedImage := h.imageRenderer.RenderImage(img, 20, 30) + return fmt.Sprintf("%s%s -> %s\n", renderedImage, rec.Entry[0].Title, rec.Entry[1].Title) } |
