86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package chat
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
"gitnet.fr/deblan/owncast-webhook/assets"
|
|
"gitnet.fr/deblan/owncast-webhook/internal/store"
|
|
. "maragu.dev/gomponents"
|
|
. "maragu.dev/gomponents/components"
|
|
. "maragu.dev/gomponents/html"
|
|
)
|
|
|
|
type Controller struct {
|
|
}
|
|
|
|
func New(e *echo.Echo) *Controller {
|
|
c := Controller{}
|
|
|
|
e.GET("/chat/messages", c.Messages)
|
|
|
|
return &c
|
|
}
|
|
|
|
func (ctrl *Controller) Messages(c echo.Context) error {
|
|
createMessage := func(message store.MessageInterface) Node {
|
|
var containerStyle Node
|
|
var userStyle Node
|
|
var originIcon Node
|
|
|
|
switch message.Origin() {
|
|
case store.MessageOriginOwncast:
|
|
msg := message.(store.OwncastMessage)
|
|
|
|
containerStyle = StyleAttr(fmt.Sprintf(
|
|
"border-color: var(--theme-color-users-%d)",
|
|
msg.WebhookMessage.User.DisplayColor,
|
|
))
|
|
|
|
userStyle = StyleAttr(fmt.Sprintf(
|
|
"color: var(--theme-color-users-%d)",
|
|
msg.WebhookMessage.User.DisplayColor,
|
|
))
|
|
|
|
originIcon = Img(Src(assets.Asset("dist/img/owncast.png")), Class("message-origin"))
|
|
case store.MessageOriginTwitch:
|
|
originIcon = Img(Src(assets.Asset("dist/img/twitch.png")), Class("message-origin"))
|
|
}
|
|
|
|
return Div(
|
|
Class("message"),
|
|
ID(message.ID()),
|
|
containerStyle,
|
|
Div(
|
|
Class("message-user"),
|
|
userStyle,
|
|
Group([]Node{originIcon, Text(message.Author())}),
|
|
),
|
|
Div(
|
|
Class("message-body"),
|
|
Raw(message.Content()),
|
|
),
|
|
)
|
|
}
|
|
|
|
page := HTML5(HTML5Props{
|
|
Title: "Chat",
|
|
Language: "fr",
|
|
Head: []Node{
|
|
Group(assets.EntrypointCss("main")),
|
|
Link(Rel("icon"), Type("image/x-icon"), Href(assets.Asset("dist/img/favicon.png"))),
|
|
},
|
|
Body: []Node{
|
|
ID("chat"),
|
|
Div(
|
|
Class("messages"),
|
|
Map(store.GetMessageStore().All(), createMessage),
|
|
),
|
|
Group(assets.EntrypointJs("main")),
|
|
},
|
|
})
|
|
|
|
page.Render(c.Response().Writer)
|
|
|
|
return nil
|
|
}
|