aboutsummaryrefslogtreecommitdiff
path: root/screens
diff options
context:
space:
mode:
authorBobby <[email protected]>2024-09-08 18:34:58 -0400
committerBobby <[email protected]>2024-09-08 18:34:58 -0400
commite25611bde49fe2db28a006aca3ea49eece046c5f (patch)
treedae68f8784010ff9002fe0e3c5d228879c15a25f /screens
parent61bc5b38044bc52442415f83390ba72ed3b27491 (diff)
downloadyato-main.tar.xz
yato-main.zip
Image Rendering. Recommendations Thingy. Basic HomeHEADmain
Diffstat (limited to 'screens')
-rw-r--r--screens/home.go78
-rw-r--r--screens/screens.go8
2 files changed, 80 insertions, 6 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)
}
diff --git a/screens/screens.go b/screens/screens.go
index 1675ec7..f04878f 100644
--- a/screens/screens.go
+++ b/screens/screens.go
@@ -2,6 +2,7 @@ package screens
import (
"os"
+ "yato/lib"
tea "github.com/charmbracelet/bubbletea"
"golang.org/x/term"
@@ -12,8 +13,9 @@ type ScreenSwitcher struct {
}
type Globals struct {
- width int
- height int
+ width int
+ height int
+ CurrentUser *lib.MALUser
}
var globals Globals
@@ -65,5 +67,7 @@ func Initialize() tea.Model {
globals.width = width
globals.height = height
+ globals.CurrentUser, _ = lib.CurrentUser()
+
return screen()
}