aboutsummaryrefslogtreecommitdiff
path: root/cmd/mi
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2025-01-12 16:34:49 -0500
committerXe Iaso <me@xeiaso.net>2025-01-12 16:35:37 -0500
commit70e85fdb545a8c653690d5bf12c56ba9bccfd3bb (patch)
treec30f217d840255159ca7035f653e3c546d610228 /cmd/mi
parent6064ecc2481f95570a0b5225ab7826e3f9cec546 (diff)
downloadx-70e85fdb545a8c653690d5bf12c56ba9bccfd3bb.tar.xz
x-70e85fdb545a8c653690d5bf12c56ba9bccfd3bb.zip
cmd/mi: add glance plugin
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/mi')
-rw-r--r--cmd/mi/main.go2
-rw-r--r--cmd/mi/services/glance/glance.go33
-rw-r--r--cmd/mi/services/glance/glance.templ18
-rw-r--r--cmd/mi/services/glance/glance_templ.go127
4 files changed, 180 insertions, 0 deletions
diff --git a/cmd/mi/main.go b/cmd/mi/main.go
index b9f72a7..fa3527c 100644
--- a/cmd/mi/main.go
+++ b/cmd/mi/main.go
@@ -15,6 +15,7 @@ import (
"google.golang.org/grpc"
"within.website/x/cmd/mi/models"
"within.website/x/cmd/mi/services/events"
+ "within.website/x/cmd/mi/services/glance"
"within.website/x/cmd/mi/services/homefrontshim"
"within.website/x/cmd/mi/services/importer"
"within.website/x/cmd/mi/services/posse"
@@ -112,6 +113,7 @@ func main() {
mux.Handle(pb.EventsPathPrefix, pb.NewEventsServer(es))
mux.Handle("/front", homefrontshim.New(dao))
mux.Handle("/twitch", te)
+ mux.Handle("/glance", glance.New(dao))
i := importer.New(dao)
i.Mount(http.DefaultServeMux)
diff --git a/cmd/mi/services/glance/glance.go b/cmd/mi/services/glance/glance.go
new file mode 100644
index 0000000..1396b0b
--- /dev/null
+++ b/cmd/mi/services/glance/glance.go
@@ -0,0 +1,33 @@
+package glance
+
+import (
+ "log/slog"
+ "net/http"
+
+ "github.com/a-h/templ"
+ "within.website/x/cmd/mi/models"
+)
+
+//go:generate go run github.com/a-h/templ/cmd/templ@latest generate
+
+func New(dao *models.DAO) *Glance {
+ return &Glance{dao: dao}
+}
+
+type Glance struct {
+ dao *models.DAO
+}
+
+func (g *Glance) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ w.Header().Add("Widget-Title", "Who is front?")
+ w.Header().Add("Widget-Content-Type", "html")
+
+ sw, err := g.dao.WhoIsFront(r.Context())
+ if err != nil {
+ slog.Error("can't query front", "err", err)
+ templ.Handler(ohNoes(err), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r)
+ return
+ }
+
+ templ.Handler(whoIsFront(sw)).ServeHTTP(w, r)
+}
diff --git a/cmd/mi/services/glance/glance.templ b/cmd/mi/services/glance/glance.templ
new file mode 100644
index 0000000..19928c1
--- /dev/null
+++ b/cmd/mi/services/glance/glance.templ
@@ -0,0 +1,18 @@
+package glance
+
+import (
+ "fmt"
+
+ "within.website/x/cmd/mi/models"
+)
+
+templ whoIsFront(sw *models.Switch) {
+ <p><span class="color-primary">{sw.Member.Name}</span> is front</p>
+ <p>Change logged <span data-dynamic-relative-time={ fmt.Sprint(sw.CreatedAt.Unix()) }></span> ago</p>
+ <img src={ sw.Member.AvatarURL } alt="" loading="lazy" />
+}
+
+templ ohNoes(err error) {
+ <p class="color-negative size-h4">Error</p>
+ <p>{ err.Error() }</p>
+} \ No newline at end of file
diff --git a/cmd/mi/services/glance/glance_templ.go b/cmd/mi/services/glance/glance_templ.go
new file mode 100644
index 0000000..cc1e928
--- /dev/null
+++ b/cmd/mi/services/glance/glance_templ.go
@@ -0,0 +1,127 @@
+// Code generated by templ - DO NOT EDIT.
+
+// templ: version: v0.3.819
+package glance
+
+//lint:file-ignore SA4006 This context is only used if a nested component is present.
+
+import "github.com/a-h/templ"
+import templruntime "github.com/a-h/templ/runtime"
+
+import (
+ "fmt"
+
+ "within.website/x/cmd/mi/models"
+)
+
+func whoIsFront(sw *models.Switch) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var1 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var1 == nil {
+ templ_7745c5c3_Var1 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<p><span class=\"color-primary\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var2 string
+ templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(sw.Member.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `glance.templ`, Line: 10, Col: 48}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</span> is front</p><p>Change logged <span data-dynamic-relative-time=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var3 string
+ templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprint(sw.CreatedAt.Unix()))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `glance.templ`, Line: 11, Col: 85}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "\"></span> ago</p><img src=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var4 string
+ templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(sw.Member.AvatarURL)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `glance.templ`, Line: 12, Col: 32}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "\" alt=\"\" loading=\"lazy\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func ohNoes(err error) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var5 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var5 == nil {
+ templ_7745c5c3_Var5 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<p class=\"color-negative size-h4\">Error</p><p>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var6 string
+ templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(err.Error())
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `glance.templ`, Line: 17, Col: 18}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "</p>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+var _ = templruntime.GeneratedTemplate