summaryrefslogtreecommitdiff
path: root/internal/server/api
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-02-05 19:41:34 +0200
committerKyren223 <Kyren223@proton.me>2025-02-05 19:41:34 +0200
commit0bf5515629f1cfe1557dba4f8d588ac64b77d408 (patch)
tree2bfc56b990c6edd6bab6ddf7b10964b0efb1dbcb /internal/server/api
parent8a8c4e9abc1006da92969e0234bb2d42f587c149 (diff)
When a user sends a message "signal" and the receiving user doesn't have
the signal already open, it will be added as the first signal
Diffstat (limited to 'internal/server/api')
-rw-r--r--internal/server/api/api.go10
-rw-r--r--internal/server/api/helpers.go7
2 files changed, 14 insertions, 3 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 92679b8..e087268 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -156,6 +156,16 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen
return &ErrInternalError
}
+ err = queries.InsertLastReadMessage(ctx, data.InsertLastReadMessageParams{
+ UserID: *request.ReceiverID,
+ SourceID: sess.ID(),
+ LastRead: 0,
+ })
+ if err != nil {
+ log.Println("database error 7:", err)
+ return &ErrInternalError
+ }
+
return UserPropagate(ctx, sess, user.ID, &packet.MessagesInfo{
Messages: []data.Message{message},
RemovedMessages: nil,
diff --git a/internal/server/api/helpers.go b/internal/server/api/helpers.go
index 2daeb9f..4327a49 100644
--- a/internal/server/api/helpers.go
+++ b/internal/server/api/helpers.go
@@ -151,15 +151,16 @@ SELECT
e.source_id, e.last_read,
CASE
WHEN COUNT(m.id) = 0 THEN NULL
- ELSE SUM(CASE WHEN (m.ping = 0 OR (m.ping = 1 AND pf.is_admin = true) OR m.ping = ?) THEN 1 ELSE 0 END)
+ ELSE SUM(CASE WHEN (m.frequency_id IS NULL OR
+ m.ping = 0 OR (m.ping = 1 AND pf.is_admin = true) OR m.ping = ?) THEN 1 ELSE 0 END)
-- 0 is @everyone, 1 is @admins, otherwise it's user_id
END AS pings
FROM entries e
+LEFT JOIN permitted_frequencies pf ON e.source_id = pf.id
LEFT JOIN messages m ON m.id > e.last_read
- AND (m.frequency_id = e.source_id OR
+ AND ((m.frequency_id = e.source_id AND pf.id IS NOT NULL) OR
(m.receiver_id = e.source_id AND m.sender_id = ?) OR
(m.sender_id = e.source_id AND m.receiver_id = ?))
-JOIN permitted_frequencies pf ON e.source_id = pf.id
GROUP BY e.source_id, e.last_read;
`