dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit d9b11d704535b272b02c67fc440d31e8629a786e
parent 4efc72e85bc085221ee7ec549033b56eb6854c77
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon, 22 May 2023 04:17:01 -0700

deduplicate code

Diffstat:
Mpkg/web/handlers/api/v1/data.go | 19++++++++++++-------
Mpkg/web/handlers/api/v1/handlers.go | 69++++++++++++++++++++++++++++++++++++++++-----------------------------
Mpkg/web/handlers/api/v1/messages.qtpl | 6+++---
Mpkg/web/handlers/api/v1/messages.qtpl.go | 14+++++++-------
Mpkg/web/handlers/handlers.go | 33++-------------------------------
5 files changed, 64 insertions(+), 77 deletions(-)

diff --git a/pkg/web/handlers/api/v1/data.go b/pkg/web/handlers/api/v1/data.go @@ -18,20 +18,25 @@ type chatTopBarData struct { CommandsList []string } +type ChatMenuData struct { + InboxCount int64 + OfficialRooms []database.ChatRoomAug + SubscribedRooms []database.ChatRoomAug + Members []managers.UserInfo + MembersInChat []managers.UserInfo + VisibleMemberInChat bool // either or not at least 1 user is "visible" (not hellbanned) + RoomName string + TopBarQueryParams string +} + type ChatMessagesData struct { + ChatMenuData NbButtons int64 Messages []database.ChatMessage - Members []managers.UserInfo - MembersInChat []managers.UserInfo - VisibleMemberInChat bool // either or not at least 1 user is "visibile" (not hellbanned) PreventRefresh bool - TopBarQueryParams string RoomName string - InboxCount int64 ManualRefreshTimeout int64 ReadMarker database.ChatReadMarker - OfficialRooms []database.ChatRoomAug - SubscribedRooms []database.ChatRoomAug ForceManualRefresh bool NewMessageSound bool TaggedSound bool diff --git a/pkg/web/handlers/api/v1/handlers.go b/pkg/web/handlers/api/v1/handlers.go @@ -86,8 +86,44 @@ var memeRenameRgx = regexp.MustCompile(`^/meme ([a-zA-Z0-9_-]{3,50}) ([a-zA-Z0-9 var memeRemoveRgx = regexp.MustCompile(`^/memerm ([a-zA-Z0-9_-]{3,50})$`) var memesRgx = regexp.MustCompile(`^/memes$`) -func chatMessages(c echo.Context) (status int, data ChatMessagesData) { +func GetChatMenuData(c echo.Context, room database.ChatRoom) ChatMenuData { + db := c.Get("database").(*database.DkfDB) + authUser := c.Get("authUser").(*database.User) + + data := ChatMenuData{} + sessionToken := "" authCookie, _ := c.Cookie(hutils.AuthCookieName) + if authCookie != nil { + sessionToken = authCookie.Value + } + data.InboxCount = global.GetUserNotificationCount(db, authUser.ID, sessionToken) + data.OfficialRooms, _ = db.GetOfficialChatRooms1(authUser.ID) + data.SubscribedRooms, _ = db.GetUserRoomSubscriptions(authUser.ID) + + ignoredSet := hashset.New[string]() + // Only fill the ignored set if the user does not display the ignored users ("Toggle ignored" chat setting) + // and if the user has "Hide ignored users from users lists" enabled (user setting) + if !authUser.DisplayIgnored && authUser.HideIgnoredUsersFromList { + ignoredUsersUsernames, _ := db.GetIgnoredUsersUsernames(authUser.ID) + for _, ignoredUserUsername := range ignoredUsersUsernames { + ignoredSet.Insert(ignoredUserUsername) + } + } + + membersInRoom, membersInChat := managers.ActiveUsers.GetRoomUsers(room, ignoredSet) + data.Members = membersInRoom + data.MembersInChat = membersInChat + for _, user := range membersInChat { + if !user.IsHellbanned { + data.VisibleMemberInChat = true + break + } + } + data.RoomName = room.Name + return data +} + +func chatMessages(c echo.Context) (status int, data ChatMessagesData) { authUser := c.Get("authUser").(*database.User) db := c.Get("database").(*database.DkfDB) roomName := c.Param("roomName") @@ -105,17 +141,6 @@ func chatMessages(c echo.Context) (status int, data ChatMessagesData) { managers.ActiveUsers.UpdateUserInRoom(room, managers.NewUserInfo(*authUser, nil)) - ignoredSet := hashset.New[string]() - // Only fill the ignored set if the user does not display the ignored users ("Toggle ignored" chat setting) - // and if the user has "Hide ignored users from users lists" enabled (user setting) - if !authUser.DisplayIgnored && authUser.HideIgnoredUsersFromList { - ignoredUsersUsernames, _ := db.GetIgnoredUsersUsernames(authUser.ID) - for _, ignoredUserUsername := range ignoredUsersUsernames { - ignoredSet.Insert(ignoredUserUsername) - } - } - - membersInRoom, membersInChat := managers.ActiveUsers.GetRoomUsers(room, ignoredSet) displayHellbanned := authUser.DisplayHellbanned || authUser.IsHellbanned displayIgnoredMessages := false msgs, _ := db.GetChatMessages(room.ID, authUser.Username, authUser.ID, pmOnlyQuery, mentionsOnlyQuery, displayHellbanned, authUser.DisplayIgnored, authUser.DisplayModerators, displayIgnoredMessages) @@ -150,15 +175,7 @@ func chatMessages(c echo.Context) (status int, data ChatMessagesData) { data.ManualRefreshTimeout = authUser.RefreshRate + 25 data.Messages = msgs - data.Members = membersInRoom - data.MembersInChat = membersInChat - for _, user := range membersInChat { - if !user.IsHellbanned { - data.VisibleMemberInChat = true - break - } - } - data.RoomName = room.Name + if _, found := c.QueryParams()["ml"]; found { topBarQueryParams := url.Values{} topBarQueryParams.Set("ml", "1") @@ -170,15 +187,7 @@ func chatMessages(c echo.Context) (status int, data ChatMessagesData) { } data.PreventRefresh = utils.DoParseBool(c.QueryParam("r")) - sessionToken := "" - if authCookie != nil { - sessionToken = authCookie.Value - } - data.InboxCount = global.GetUserNotificationCount(db, authUser.ID, sessionToken) - data.ReadMarker, _ = db.GetUserReadMarker(authUser.ID, room.ID) - data.OfficialRooms, _ = db.GetOfficialChatRooms1(authUser.ID) - data.SubscribedRooms, _ = db.GetUserRoomSubscriptions(authUser.ID) bools := []bool{authUser.DisplayDeleteButton} if authUser.IsModerator() { @@ -198,6 +207,8 @@ func chatMessages(c echo.Context) (status int, data ChatMessagesData) { data.TaggedSound = utils.TernaryOrZero(authUser.NotifyTagged, taggedSound) } + data.ChatMenuData = GetChatMenuData(c, room) + return http.StatusOK, data } diff --git a/pkg/web/handlers/api/v1/messages.qtpl b/pkg/web/handlers/api/v1/messages.qtpl @@ -208,7 +208,7 @@ </div> {% if !AuthUser.HideRightColumn %} - {%-= RenderRightColumn(AuthUser, Data) -%} + {%-= RenderRightColumn(AuthUser, Data.ChatMenuData) -%} {%- endif -%} {%- if AuthUser.CollectMetadata -%} <div class="div_1"></div> @@ -220,7 +220,7 @@ {% endfunc %} -{%- func RenderRightColumn(AuthUser *database.User, Data ChatMessagesData) -%} +{%- func RenderRightColumn(AuthUser *database.User, Data ChatMenuData) -%} <div id="rgt-pane"> <div class="mb-20px"> <div class="rgt-title">Inbox (<a href="/settings/inbox" target="_top"{% if Data.InboxCount > 0 %}class="notif"{% endif %}>{%dl Data.InboxCount %}</a>)</div> @@ -389,7 +389,7 @@ {%- endfunc -%} -{% func Member(AuthUser *database.User, Data ChatMessagesData, El managers.UserInfo) %} +{% func Member(AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) %} {%- code baseTopBarURL := "/api/v1/chat/top-bar/" + Data.RoomName -%} {%- if El.Username == AuthUser.Username -%} <div> diff --git a/pkg/web/handlers/api/v1/messages.qtpl.go b/pkg/web/handlers/api/v1/messages.qtpl.go @@ -362,7 +362,7 @@ func StreamMessages(qw422016 *qt422016.Writer, VERSION, CSRF, NullUsername strin qw422016.N().S(` `) //line messages.qtpl:211 - StreamRenderRightColumn(qw422016, AuthUser, Data) + StreamRenderRightColumn(qw422016, AuthUser, Data.ChatMenuData) //line messages.qtpl:212 } //line messages.qtpl:213 @@ -408,7 +408,7 @@ func Messages(VERSION, CSRF, NullUsername string, AuthUser *database.User, Data } //line messages.qtpl:223 -func StreamRenderRightColumn(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMessagesData) { +func StreamRenderRightColumn(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMenuData) { //line messages.qtpl:223 qw422016.N().S(`<div id="rgt-pane"> <div class="mb-20px"> @@ -575,7 +575,7 @@ func StreamRenderRightColumn(qw422016 *qt422016.Writer, AuthUser *database.User, } //line messages.qtpl:268 -func WriteRenderRightColumn(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMessagesData) { +func WriteRenderRightColumn(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMenuData) { //line messages.qtpl:268 qw422016 := qt422016.AcquireWriter(qq422016) //line messages.qtpl:268 @@ -586,7 +586,7 @@ func WriteRenderRightColumn(qq422016 qtio422016.Writer, AuthUser *database.User, } //line messages.qtpl:268 -func RenderRightColumn(AuthUser *database.User, Data ChatMessagesData) string { +func RenderRightColumn(AuthUser *database.User, Data ChatMenuData) string { //line messages.qtpl:268 qb422016 := qt422016.AcquireByteBuffer() //line messages.qtpl:268 @@ -1091,7 +1091,7 @@ func RenderMessage(idx int, e database.ChatMessage, AuthUser *database.User, } //line messages.qtpl:392 -func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMessagesData, El managers.UserInfo) { +func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) { //line messages.qtpl:392 qw422016.N().S(` `) @@ -1235,7 +1235,7 @@ func StreamMember(qw422016 *qt422016.Writer, AuthUser *database.User, Data ChatM } //line messages.qtpl:428 -func WriteMember(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMessagesData, El managers.UserInfo) { +func WriteMember(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) { //line messages.qtpl:428 qw422016 := qt422016.AcquireWriter(qq422016) //line messages.qtpl:428 @@ -1246,7 +1246,7 @@ func WriteMember(qq422016 qtio422016.Writer, AuthUser *database.User, Data ChatM } //line messages.qtpl:428 -func Member(AuthUser *database.User, Data ChatMessagesData, El managers.UserInfo) string { +func Member(AuthUser *database.User, Data ChatMenuData, El managers.UserInfo) string { //line messages.qtpl:428 qb422016 := qt422016.AcquireByteBuffer() //line messages.qtpl:428 diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -4892,39 +4892,10 @@ func ChatStreamMenuHandler(c echo.Context) error { return c.NoContent(http.StatusForbidden) } - data := v1.ChatMessagesData{} - sessionToken := "" - authCookie, _ := c.Cookie(hutils.AuthCookieName) - if authCookie != nil { - sessionToken = authCookie.Value - } - data.InboxCount = global.GetUserNotificationCount(db, authUser.ID, sessionToken) - data.OfficialRooms, _ = db.GetOfficialChatRooms1(authUser.ID) - data.SubscribedRooms, _ = db.GetUserRoomSubscriptions(authUser.ID) - - ignoredSet := hashset.New[string]() - // Only fill the ignored set if the user does not display the ignored users ("Toggle ignored" chat setting) - // and if the user has "Hide ignored users from users lists" enabled (user setting) - if !authUser.DisplayIgnored && authUser.HideIgnoredUsersFromList { - ignoredUsersUsernames, _ := db.GetIgnoredUsersUsernames(authUser.ID) - for _, ignoredUserUsername := range ignoredUsersUsernames { - ignoredSet.Insert(ignoredUserUsername) - } - } + data := v1.GetChatMenuData(c, room) - membersInRoom, membersInChat := managers.ActiveUsers.GetRoomUsers(room, ignoredSet) - data.Members = membersInRoom - data.MembersInChat = membersInChat - for _, user := range membersInChat { - if !user.IsHellbanned { - data.VisibleMemberInChat = true - break - } - } - data.RoomName = room.Name - //data.TopBarQueryParams s := `<meta http-equiv="refresh" content="5" />` - s += v1.GenerateStyle(authUser, data) + s += v1.GenerateStyle(authUser, v1.ChatMessagesData{}) s += v1.RenderRightColumn(authUser, data) return c.HTML(http.StatusOK, s) }