WhspBrd/internal/tui/sidebar.go
2025-09-04 16:03:49 +02:00

100 lines
1.9 KiB
Go

package tui
import (
"errors"
"fmt"
//"math"
//"strings"
//"whspbrd/pkg/cell_size"
"whspbrd/pkg/render_image"
//"whspbrd/pkg/resize_image"
"github.com/jroimartin/gocui"
//"os"
)
// LAYOUT
func layoutSidebar(g *gocui.Gui, maxY int) error {
if v, err := g.SetView("users", 0, 0, 20, maxY-1); err != nil {
if err != gocui.ErrUnknownView {
return err
}
v.Title = " Users "
v.Clear()
updateContactsView(g)
}
return nil
}
func updateContactsView(g *gocui.Gui) error {
v, err := g.View("users")
if err != nil {
return err
}
v.Clear()
// TODO: If no contacts then error, create some add contacts window or hello to WhspBrd
LoadMessages(users[selectedUserIdx])
// TODO: Render profile image of users and change colors of each user maybe?
if len(users) == 0 {
fmt.Fprintln(v, "No Contacts")
return errors.New("no contacts in the list, find some friends")
}
_, maxY := g.Size()
h := min(len(users), (maxY / 2) - 1)
startI := max(0, min(selectedUserIdx - (h / 2), len(users) - h))
fmt.Fprint(v, "\n\n")
for i := startI; i < startI + h; i++ {
u := users[i]
fmt.Fprint(v, "\t\t\t\t")
icon_path := fmt.Sprintf("./configs/servers/default/users/%s/icon.png", u)
render_image.RenderImage(icon_path, 3 + 2 * (i - startI), 2, 30, 30, false)
if i == selectedUserIdx {
fmt.Fprintln(v, "\x1b[7m"+u+"\x1b[0m\n")
} else {
fmt.Fprintln(v, u+"\n")
}
}
return nil
}
// KEYBINDINGS
func nextContact(g *gocui.Gui, v *gocui.View) error {
if len(users) == 0 {
return nil
}
selectedUserIdx++
if selectedUserIdx == len(users) {
selectedUserIdx = 0
}
err := updateContactsView(g)
updateChatView(g.Views()[1])
return err
}
func prevContact(g *gocui.Gui, v *gocui.View) error {
if len(users) == 0 {
return nil
}
selectedUserIdx--
if selectedUserIdx == -1 {
selectedUserIdx = len(users) - 1
}
err := updateContactsView(g)
updateChatView(g.Views()[1])
return err
}