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:
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