commit f46957b63a00d968c01f785a7f29aa69bd5c7b38
parent 8acfdde1887d8138c3087d84bfd228a2866ff12f
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Mon, 22 May 2023 03:08:53 -0700
add menu to stream page
Diffstat:
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)