diff options
| author | Xe Iaso <me@xeiaso.net> | 2025-01-12 16:34:49 -0500 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2025-01-12 16:35:37 -0500 |
| commit | 70e85fdb545a8c653690d5bf12c56ba9bccfd3bb (patch) | |
| tree | c30f217d840255159ca7035f653e3c546d610228 /cmd/mi | |
| parent | 6064ecc2481f95570a0b5225ab7826e3f9cec546 (diff) | |
| download | x-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.go | 2 | ||||
| -rw-r--r-- | cmd/mi/services/glance/glance.go | 33 | ||||
| -rw-r--r-- | cmd/mi/services/glance/glance.templ | 18 | ||||
| -rw-r--r-- | cmd/mi/services/glance/glance_templ.go | 127 |
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 |
