blogssh/post.go

76 lines
1.4 KiB
Go

package main
import (
"strings"
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/glamour"
)
type childMessage struct{}
type postModel struct {
viewport viewport.Model
}
func (m postModel) Init() tea.Cmd {
return nil
}
func (m postModel) View() string {
return m.viewport.View()
}
func (m postModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyMsg:
switch msg.String() {
case tea.KeyEsc.String():
return m, func() tea.Msg {
return childMessage{}
}
default:
var cmd tea.Cmd
m.viewport, cmd = m.viewport.Update(msg)
return m, cmd
}
case tea.WindowSizeMsg:
//TODO: something. What should happen on height change.
}
return m, nil
}
func createPostModel(post string, termRender *glamour.TermRenderer, viewPort viewport.Model) (postModel, error) {
postContent, err := getPostWithoutMetaData(post)
if err != nil {
return postModel{}, err
}
postInfo, err := getPostInfo(post)
if err != nil {
return postModel{}, err
}
// This is stupid
lines := strings.Split(postContent, "\n")
lines = append([]string{"# " + postInfo.Title[1:len(postInfo.Title)-1]}, lines...)
post = strings.Join(lines, "\n")
m := postModel{
viewport: viewPort,
}
out, err := termRender.Render(post)
if err != nil {
// TODO: fix this shit
panic(err)
}
m.viewport.SetContent(out)
return m, nil
}