Parent directory

channels_pages.go

2489 bytes
 1package ytrssil
 2
 3import (
 4	"errors"
 5	"fmt"
 6	"net/http"
 7
 8	"github.com/gin-gonic/gin"
 9	datastar "github.com/starfederation/datastar-go/datastar"
10
11	"github.com/TheEdgeOfRage/ytrssil-api/db"
12	"github.com/TheEdgeOfRage/ytrssil-api/pages"
13)
14
15func (srv *server) ChannelsPage(c *gin.Context) {
16	channels, err := srv.handler.ListChannels(c.Request.Context())
17	if err != nil {
18		returnErr(c, http.StatusInternalServerError, err)
19		return
20	}
21
22	r := pages.TemplRenderer{
23		Ctx:       c.Request.Context(),
24		Component: pages.ChannelsPage(channels),
25	}
26	c.Render(http.StatusOK, r)
27}
28
29func (srv *server) SubscribeToChannelPage(c *gin.Context) {
30	var signals struct {
31		ChannelID string `json:"channelID"`
32	}
33	if err := datastar.ReadSignals(c.Request, &signals); err != nil {
34		sse := newSSE(c)
35		sse.ExecuteScript(fmt.Sprintf(`showFormError("subscription-modal", %q)`, err.Error()))
36		return
37	}
38
39	_, err := srv.handler.SubscribeToChannel(c.Request.Context(), signals.ChannelID)
40	if err != nil {
41		sse := newSSE(c)
42		sse.ExecuteScript(fmt.Sprintf(`showFormError("subscription-modal", %q)`, err.Error()))
43		return
44	}
45
46	sse := newSSE(c)
47	sse.ExecuteScript(`
48		bootstrap.Modal.getInstance(document.getElementById("subscription-modal")).hide();
49		location.reload()
50	`)
51}
52
53func (srv *server) UnsubscribeFromChannelPage(c *gin.Context) {
54	channelID := c.Param("channel_id")
55	err := srv.handler.UnsubscribeFromChannel(c.Request.Context(), channelID)
56	if err != nil {
57		if errors.Is(err, db.ErrChannelNotFound) {
58			returnErr(c, http.StatusNotFound, err)
59			return
60		}
61
62		returnErr(c, http.StatusInternalServerError, err)
63		return
64	}
65
66	sse := newSSE(c)
67	sse.ExecuteScript(fmt.Sprintf(`animateRemove("#channel-card-%s")`, channelID))
68}
69
70func (srv *server) ToggleChannelShortsPage(c *gin.Context) {
71	var signals struct {
72		Enable bool `json:"enable"`
73	}
74	if err := datastar.ReadSignals(c.Request, &signals); err != nil {
75		returnErr(c, http.StatusBadRequest, err)
76		return
77	}
78
79	channelID := c.Param("channel_id")
80	err := srv.handler.ToggleChannelShorts(c.Request.Context(), channelID, signals.Enable)
81	if err != nil {
82		if errors.Is(err, db.ErrChannelNotFound) {
83			returnErr(c, http.StatusNotFound, err)
84			return
85		}
86
87		returnErr(c, http.StatusInternalServerError, err)
88		return
89	}
90
91	channel, err := srv.handler.GetChannelByID(c.Request.Context(), channelID)
92	if err != nil {
93		returnErr(c, http.StatusInternalServerError, err)
94		return
95	}
96
97	sse := newSSE(c)
98	sse.PatchElementTempl(pages.ChannelCard(*channel))
99}