dkforest

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

commit f46957b63a00d968c01f785a7f29aa69bd5c7b38
parent 8acfdde1887d8138c3087d84bfd228a2866ff12f
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Mon, 22 May 2023 03:08:53 -0700

add menu to stream page

Diffstat:
Mpkg/web/handlers/handlers.go | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Mpkg/web/public/views/pages/chat.gohtml | 12++++++++++++
Mpkg/web/web.go | 1+
3 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -4879,6 +4879,56 @@ func ChatStreamHandler(c echo.Context) error { return chatHandler(c, false, true) } +func ChatStreamMenuHandler(c echo.Context) error { + db := c.Get("database").(*database.DkfDB) + authUser := c.Get("authUser").(*database.User) + roomName := c.Param("roomName") + + room, err := db.GetChatRoomByName(roomName) + if err != nil { + return c.NoContent(http.StatusNotFound) + } + if !room.HasAccess(c) { + 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) + } + } + + 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.RenderRightColumn(authUser, data) + return c.HTML(http.StatusOK, s) +} + func ChatStreamMessagesHandler(c echo.Context) error { db := c.Get("database").(*database.DkfDB) authUser := c.Get("authUser").(*database.User) @@ -4949,6 +4999,7 @@ Loop: default: } + managers.ActiveUsers.UpdateUserInRoom(room, managers.NewUserInfo(*authUser, nil)) _, msg, err := sub.ReceiveTimeout(1 * time.Second) if err != nil { continue diff --git a/pkg/web/public/views/pages/chat.gohtml b/pkg/web/public/views/pages/chat.gohtml @@ -15,6 +15,16 @@ width: 100%; height: calc(100vh - {{ if .Data.Multiline }}300{{ else }}200{{ end }}px); } + #chat-menu { + border: 0; + width: 150px; + height: calc(100vh - {{ if .Data.Multiline }}300{{ else }}200{{ end }}px); + float: left; + position: fixed; + right: 15px; + overflow-y: auto; + line-height: 1.15; + } .btn-xs { margin: 0 !important; padding: 0 4px !important; @@ -148,6 +158,7 @@ {{ if .AuthUser.ChatBarAtBottom }} <div> <iframe id="chat-content" name="iframe2" src="/api/v1/chat/messages/{{ .Data.Room.Name }}{{ if .Data.IsStream }}/stream{{ end }}{{ .Data.ChatQueryParams }}"></iframe> + {{ if .Data.IsStream }}<iframe id="chat-menu" src="/api/v1/chat/messages/{{ .Data.Room.Name }}/stream/menu"></iframe>{{ end }} </div> {{ end }} <div> @@ -222,6 +233,7 @@ allow-popups-to-escape-sandbox" */}} <iframe id="chat-content" name="iframe2" src="/api/v1/chat/messages/{{ .Data.Room.Name }}{{ if .Data.IsStream }}/stream{{ end }}{{ .Data.ChatQueryParams }}"></iframe> + {{ if .Data.IsStream }}<iframe id="chat-menu" src="/api/v1/chat/messages/{{ .Data.Room.Name }}/stream/menu"></iframe>{{ end }} </div> {{ end }} <div> diff --git a/pkg/web/web.go b/pkg/web/web.go @@ -144,6 +144,7 @@ func getMainServer(db *database.DkfDB, i18nBundle *i18n.Bundle, renderer *tmp.Te authGroup.POST("/api/v1/chat/top-bar/:roomName", v1.ChatTopBarHandler, middlewares.AuthRateLimitMiddleware(1*time.Second, 3)) authGroup.GET("/api/v1/chat/messages/:roomName", v1.ChatMessagesHandler) authGroup.GET("/api/v1/chat/messages/:roomName/stream", handlers.ChatStreamMessagesHandler) + authGroup.GET("/api/v1/chat/messages/:roomName/stream/menu", handlers.ChatStreamMenuHandler) authGroup.POST("/api/v1/notifications/delete/:notificationID", v1.DeleteNotificationHandler) authGroup.POST("/api/v1/session-notifications/delete/:sessionNotificationID", v1.DeleteSessionNotificationHandler) authGroup.POST("/api/v1/inbox/delete/:messageID", v1.ChatInboxDeleteMessageHandler)