chatControlsHandler.go (2852B)
1 package v1 2 3 import ( 4 "dkforest/pkg/database" 5 "dkforest/pkg/utils" 6 hutils "dkforest/pkg/web/handlers/utils" 7 "github.com/labstack/echo" 8 "net/http" 9 ) 10 11 // Handle the forms/actions in the chat controls, bottom of the page, iframe. 12 // Such as toggle "@"/"PM"/"Ignored"/"afk"... 13 14 func ChatControlsHandler(c echo.Context) error { 15 authUser := c.Get("authUser").(*database.User) 16 db := c.Get("database").(*database.DkfDB) 17 18 var data chatControlsData 19 data.RoomName = c.Param("roomName") 20 data.IsStream = utils.DoParseBool(c.Param("isStream")) 21 data.TogglePms = utils.DoParseInt64(c.QueryParam("pmonly")) 22 data.ToggleMentions = utils.DoParseBool(c.QueryParam("mentionsOnly")) 23 v := c.QueryParams() 24 if data.TogglePms != 0 { 25 v.Set("pmonly", utils.FormatInt64(data.TogglePms)) 26 } 27 if data.ToggleMentions { 28 v.Set("mentionsOnly", "1") 29 } 30 data.ChatQueryParams = "?" + v.Encode() 31 32 if c.Request().Method == http.MethodPost { 33 return handlePost(db, c, data, authUser) 34 } 35 36 return c.Render(http.StatusOK, "chat-controls", data) 37 } 38 39 func handlePost(db *database.DkfDB, c echo.Context, data chatControlsData, authUser *database.User) error { 40 formName := c.Request().PostFormValue("formName") 41 switch formName { 42 case "toggle-hb": 43 return handleToggleHBPost(db, c, authUser) 44 case "toggle-m": 45 return handleToggleMPost(db, c, authUser) 46 case "toggle-ignored": 47 return handleToggleIgnoredPost(db, c, authUser) 48 case "afk": 49 return handleAfkPost(db, c, authUser) 50 case "update-read-marker": 51 if room, err := db.GetChatRoomByName(data.RoomName); err == nil { 52 return handleUpdateReadMarkerPost(db, c, room, authUser) 53 } 54 } 55 return hutils.RedirectReferer(c) 56 } 57 58 func handleToggleHBPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { 59 if authUser.CanSeeHB() { 60 authUser.ToggleDisplayHellbanned(db) 61 database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{}) 62 } 63 return hutils.RedirectReferer(c) 64 } 65 66 func handleToggleMPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { 67 if authUser.IsModerator() { 68 authUser.ToggleDisplayModerators(db) 69 database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{}) 70 } 71 return hutils.RedirectReferer(c) 72 } 73 74 func handleToggleIgnoredPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { 75 authUser.ToggleDisplayIgnored(db) 76 database.MsgPubSub.Pub("refresh_"+string(authUser.Username), database.ChatMessageType{}) 77 return hutils.RedirectReferer(c) 78 } 79 80 func handleAfkPost(db *database.DkfDB, c echo.Context, authUser *database.User) error { 81 authUser.ToggleAFK(db) 82 return hutils.RedirectReferer(c) 83 } 84 85 func handleUpdateReadMarkerPost(db *database.DkfDB, c echo.Context, room database.ChatRoom, authUser *database.User) error { 86 db.UpdateChatReadMarker(authUser.ID, room.ID) 87 return hutils.RedirectReferer(c) 88 }