dkforest

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

commit 638397a51d25781f9d1596170cfa7e92a4a078dd
parent aeb945782004d69f04c2c93c11c08f39d080a9cb
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Wed, 24 May 2023 10:29:40 -0700

implement self-refresh pubsub; use it for ignore/unignore

Diffstat:
Mpkg/web/handlers/api/v1/slashInterceptor.go | 2++
Mpkg/web/handlers/handlers.go | 13+++++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/pkg/web/handlers/api/v1/slashInterceptor.go b/pkg/web/handlers/api/v1/slashInterceptor.go @@ -1485,6 +1485,7 @@ func handleIgnoreCmd(c *Command) (handled bool) { return true } c.db.IgnoreUser(c.authUser.ID, user.ID) + database.MsgPubSub.Pub("refresh_"+c.authUser.Username, database.ChatMessageType{Typ: database.ForceRefresh}) c.err = ErrRedirect return true } else if strings.HasPrefix(c.message, "/ignore ") || strings.HasPrefix(c.message, "/i ") { @@ -1503,6 +1504,7 @@ func handleUnIgnoreCmd(c *Command) (handled bool) { return true } c.db.UnIgnoreUser(c.authUser.ID, user.ID) + database.MsgPubSub.Pub("refresh_"+c.authUser.Username, database.ChatMessageType{Typ: database.ForceRefresh}) c.err = ErrRedirect return true } else if strings.HasPrefix(c.message, "/unignore ") || strings.HasPrefix(c.message, "/ui ") { diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -4990,7 +4990,11 @@ func ChatStreamMessagesHandler(c echo.Context) error { _, _ = c.Response().Write([]byte("<div>" + v1.RenderMessages(authUser, data, csrf, config.NullUsername) + "</div>")) c.Response().Flush() - authorizedChannels := []string{"refresh", "room_" + room.ID.String()} + selfRefreshTopic := "refresh_" + authUser.Username + authorizedChannels := []string{ + "refresh", + selfRefreshTopic, + "room_" + room.ID.String()} sub := database.MsgPubSub.Subscribe(authorizedChannels) defer sub.Close() @@ -5017,7 +5021,7 @@ Loop: c.Response().Flush() indicatorSelector = !indicatorSelector - _, msgTyp, err := sub.ReceiveTimeout2(5*time.Second, quit) + topic, msgTyp, err := sub.ReceiveTimeout2(5*time.Second, quit) if err != nil { if err == pubsub.ErrCancelled { break Loop @@ -5025,6 +5029,11 @@ Loop: continue } + if topic == selfRefreshTopic { + _, _ = c.Response().Write([]byte(`<meta http-equiv="refresh" content="0" />`)) + return nil + } + if msgTyp.Typ == database.ForceRefresh { _, _ = c.Response().Write([]byte(`<meta http-equiv="refresh" content="0" />`)) return nil