Count unread messages on mark-as-unread
This commit is contained in:
@@ -17,6 +17,7 @@ type (
|
||||
FindMessageByID(id uint64) (*types.Message, error)
|
||||
FindMessages(filter *types.MessageFilter) (types.MessageSet, error)
|
||||
FindThreads(filter *types.MessageFilter) (types.MessageSet, error)
|
||||
CountFromMessageID(channelID, threadID, messageID uint64) (uint32, error)
|
||||
PrefillThreadParticipants(mm types.MessageSet) error
|
||||
CreateMessage(mod *types.Message) (*types.Message, error)
|
||||
UpdateMessage(mod *types.Message) (*types.Message, error)
|
||||
@@ -66,6 +67,8 @@ const (
|
||||
|
||||
sqlThreadParticipantsByMessageID = "SELECT DISTINCT reply_to, rel_user FROM messages WHERE reply_to IN (?)"
|
||||
|
||||
sqlCountFromMessageID = "SELECT COUNT(1) AS count FROM messages WHERE rel_channel = ? AND reply_to = ? AND id > ?"
|
||||
|
||||
sqlMessageRepliesIncCount = `UPDATE messages SET replies = replies + 1 WHERE id = ? AND reply_to = 0`
|
||||
sqlMessageRepliesDecCount = `UPDATE messages SET replies = replies - 1 WHERE id = ? AND reply_to = 0`
|
||||
|
||||
@@ -185,6 +188,11 @@ func (r *message) FindThreads(filter *types.MessageFilter) (types.MessageSet, er
|
||||
return rval, r.db().Select(&rval, sql, params...)
|
||||
}
|
||||
|
||||
func (r *message) CountFromMessageID(channelID, threadID, messageID uint64) (uint32, error) {
|
||||
rval := struct{ Count uint32 }{}
|
||||
return rval.Count, r.db().Get(&rval, sqlCountFromMessageID, channelID, threadID, messageID)
|
||||
}
|
||||
|
||||
func (r *message) PrefillThreadParticipants(mm types.MessageSet) error {
|
||||
var rval = []struct {
|
||||
ReplyTo uint64 `db:"reply_to"`
|
||||
|
||||
+12
-2
@@ -315,16 +315,26 @@ func (svc *message) MarkAsUnread(messageID uint64) error {
|
||||
return svc.db.Transaction(func() (err error) {
|
||||
// Broadcast queue
|
||||
var message *types.Message
|
||||
var count uint32
|
||||
|
||||
message, err = svc.message.FindMessageByID(messageID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
count, err = svc.message.CountFromMessageID(message.ChannelID, message.ReplyTo, message.ID)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Inc counter so that we take
|
||||
// this message into account
|
||||
count++
|
||||
|
||||
if message.ReplyTo > 0 {
|
||||
return svc.unreads.Record(currentUserID, message.ChannelID, message.ReplyTo, messageID, 0)
|
||||
return svc.unreads.Record(currentUserID, message.ChannelID, message.ReplyTo, messageID, count)
|
||||
} else {
|
||||
return svc.unreads.Record(currentUserID, message.ChannelID, 0, messageID, 0)
|
||||
return svc.unreads.Record(currentUserID, message.ChannelID, 0, messageID, count)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user