diff --git a/Makefile b/Makefile
index 2e231f5..d36296c 100644
--- a/Makefile
+++ b/Makefile
@@ -2,8 +2,7 @@ CGO_ENABLED = 0
GO_ARCH_AMD = amd64
GO_OS_LINUX = linux
-EXECUTABLE_SERVER = budget-go
-EXECUTABLE_CMD = budget-go-client
+EXECUTABLE_SERVER = owncast-webhook
CC = go build
CFLAGS = -trimpath
@@ -11,9 +10,7 @@ LDFLAGS = -d -s -w -extldflags=-static
GCFLAGS = all=
ASMFLAGS = all=
-
all: build
-#docker
.PHONY:
rice:
@@ -23,16 +20,12 @@ rice:
front:
NODE_ENV=prod ./node_modules/.bin/webpack
-.PHONY:
-tpl:
- TEMPL_EXPERIMENT=rawgo templ generate
-
lint:
npm run lint || true
npm run format
.PHONY:
-build: tpl front rice
+build: front rice
CGO_ENABLED=$(CGO_ENABLED) \
GOARCH=$(GO_ARCH_AMD) \
GOOS=$(GO_OS_LINUX) \
diff --git a/backend/controller/chat/controller.go b/backend/controller/chat/controller.go
index 63a4a2b..a04e5e8 100644
--- a/backend/controller/chat/controller.go
+++ b/backend/controller/chat/controller.go
@@ -1,10 +1,14 @@
package chat
import (
+ "fmt"
+
"github.com/labstack/echo/v4"
+ "gitnet.fr/deblan/owncast-webhook/backend/store"
"gitnet.fr/deblan/owncast-webhook/backend/view"
- tpl "gitnet.fr/deblan/owncast-webhook/backend/view/template/chat"
- "gitnet.fr/deblan/owncast-webhook/backend/webhook"
+ . "maragu.dev/gomponents"
+ . "maragu.dev/gomponents/components"
+ . "maragu.dev/gomponents/html"
)
type Controller struct {
@@ -18,8 +22,57 @@ func New(e *echo.Echo) *Controller {
return &c
}
-var messages []webhook.Message
-
func (ctrl *Controller) Messages(c echo.Context) error {
- return view.Render(c, 200, tpl.Messages("Chat - Messages", messages))
+ page := HTML5(HTML5Props{
+ Title: "Chat",
+ Language: "fr",
+ Head: []Node{
+ Group(view.EntrypointCss("main")),
+ Link(Rel("icon"), Type("image/x-icon"), Href(view.Asset("static/img/favicon.png"))),
+ },
+ Body: []Node{
+ ID("chat"),
+ Div(
+ Class("messages"),
+ Map(store.GetMessageStore().All(), func(message store.MessageInterface) Node {
+ var containerStyle Node
+ var userStyle Node
+
+ if message.Origin() == 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,
+ ))
+ }
+
+ return Div(
+ Class("message"),
+ ID(message.ID()),
+ containerStyle,
+ Div(
+ Class("message-user"),
+ userStyle,
+ Text(message.Author()),
+ ),
+ Div(
+ Class("message-body"),
+ Raw(message.Content()),
+ ),
+ )
+ }),
+ ),
+ Group(view.EntrypointJs("main")),
+ },
+ })
+
+ page.Render(c.Response().Writer)
+
+ return nil
}
diff --git a/backend/controller/webhook/owncast/chat_message.go b/backend/controller/webhook/owncast/chat_message.go
index e4c662e..cb9b7c1 100644
--- a/backend/controller/webhook/owncast/chat_message.go
+++ b/backend/controller/webhook/owncast/chat_message.go
@@ -1,10 +1,10 @@
package owncast
import (
+ "net/http"
+
"github.com/labstack/echo/v4"
"gitnet.fr/deblan/owncast-webhook/backend/store"
- "gitnet.fr/deblan/owncast-webhook/backend/view"
- tpl "gitnet.fr/deblan/owncast-webhook/backend/view/template/chat"
"gitnet.fr/deblan/owncast-webhook/backend/webhook"
)
@@ -19,24 +19,16 @@ func New(e *echo.Echo) *Controller {
return &c
}
-var messages []webhook.Message
-
-func (ctrl *Controller) Messages(c echo.Context) error {
- return view.Render(c, 200, tpl.Messages("Chat - Messages", messages))
-}
-
func (ctrl *Controller) ChatMessage(c echo.Context) error {
value := new(webhook.WebhookNewMessage)
if err := c.Bind(value); err != nil {
- return c.JSON(400, nil)
+ return c.JSON(http.StatusBadRequest, map[string]string{"status": "ko"})
}
store.GetMessageStore().Add(store.OwncastMessage{
WebhookMessage: value.EventData,
})
- messages = append(messages, value.EventData)
-
- return c.JSON(200, nil)
+ return c.JSON(http.StatusCreated, map[string]string{"status": "ok"})
}
diff --git a/backend/router/router.go b/backend/router/router.go
index 5862ebe..5a57fdf 100644
--- a/backend/router/router.go
+++ b/backend/router/router.go
@@ -3,8 +3,10 @@ package router
import (
"github.com/labstack/echo/v4"
"gitnet.fr/deblan/owncast-webhook/backend/controller/chat"
+ "gitnet.fr/deblan/owncast-webhook/backend/controller/webhook/owncast"
)
func RegisterControllers(e *echo.Echo) {
chat.New(e)
+ owncast.New(e)
}
diff --git a/backend/store/message.go b/backend/store/message.go
index 6b39a1e..385a8c1 100644
--- a/backend/store/message.go
+++ b/backend/store/message.go
@@ -1,7 +1,5 @@
package store
-import "gitnet.fr/deblan/owncast-webhook/backend/webhook"
-
type MessageOrigin int
var messageStore *MessageStore
@@ -32,28 +30,9 @@ func GetMessageStore() *MessageStore {
}
type MessageInterface interface {
- IsVisible() bool
- GetOrigin() MessageOrigin
- GetAuthor() string
- GetContent() string
-}
-
-type OwncastMessage struct {
- WebhookMessage webhook.Message
-}
-
-func (o *OwncastMessage) IsVisible() bool {
- return o.WebhookMessage.Visible
-}
-
-func (o *OwncastMessage) GetOrigin() MessageOrigin {
- return MessageOriginTwitch
-}
-
-func (o *OwncastMessage) GetAuthor() string {
- return o.WebhookMessage.User.DisplayName
-}
-
-func (o *OwncastMessage) GetContent() string {
- return o.WebhookMessage.GetBody()
+ ID() string
+ Visible() bool
+ Origin() MessageOrigin
+ Author() string
+ Content() string
}
diff --git a/backend/store/owncast_message.go b/backend/store/owncast_message.go
new file mode 100644
index 0000000..70a0ce2
--- /dev/null
+++ b/backend/store/owncast_message.go
@@ -0,0 +1,39 @@
+package store
+
+import (
+ "fmt"
+ "strings"
+
+ "gitnet.fr/deblan/owncast-webhook/backend/webhook"
+ "gitnet.fr/deblan/owncast-webhook/config"
+)
+
+type OwncastMessage struct {
+ WebhookMessage webhook.Message
+}
+
+func (o OwncastMessage) ID() string {
+ return o.WebhookMessage.Id
+}
+
+func (o OwncastMessage) Visible() bool {
+ return o.WebhookMessage.Visible
+}
+
+func (o OwncastMessage) Origin() MessageOrigin {
+ return MessageOriginOwncast
+}
+
+func (o OwncastMessage) Author() string {
+ return o.WebhookMessage.User.DisplayName
+}
+
+func (o OwncastMessage) Content() string {
+ content := strings.ReplaceAll(
+ o.WebhookMessage.Body,
+ `
-}
-
-templ Head(title string) {
-