rpc: fix channel pinned search for Android
(cherry picked from commit 70978db98c3af3fe72100fa6646780c7a5a13daa)
This commit is contained in:
parent
b4e47c894f
commit
3642e37cfe
8 changed files with 97 additions and 16 deletions
|
|
@ -3133,6 +3133,9 @@ func (s *ChannelStore) ListChannelHistory(_ context.Context, viewerUserID int64,
|
|||
if msg.ID <= member.AvailableMinID {
|
||||
continue
|
||||
}
|
||||
if filter.PinnedOnly && msg.ID != channel.PinnedMessageID {
|
||||
continue
|
||||
}
|
||||
if query != "" && !strings.Contains(strings.ToLower(msg.Body), query) {
|
||||
continue
|
||||
}
|
||||
|
|
@ -3159,7 +3162,9 @@ func (s *ChannelStore) ListChannelHistory(_ context.Context, viewerUserID int64,
|
|||
}
|
||||
matched++
|
||||
if len(out) < limit {
|
||||
out = append(out, cloneChannelMessage(msg))
|
||||
item := cloneChannelMessage(msg)
|
||||
item.Pinned = channel.PinnedMessageID != 0 && item.ID == channel.PinnedMessageID
|
||||
out = append(out, item)
|
||||
}
|
||||
}
|
||||
s.populateChannelMessageRepliesLocked(viewerUserID, filter.ChannelID, out)
|
||||
|
|
@ -3402,7 +3407,9 @@ func (s *ChannelStore) GetChannelMessages(_ context.Context, viewerUserID, chann
|
|||
if msg.Deleted || msg.ID <= member.AvailableMinID {
|
||||
continue
|
||||
}
|
||||
messages = append(messages, cloneChannelMessage(msg))
|
||||
item := cloneChannelMessage(msg)
|
||||
item.Pinned = channel.PinnedMessageID != 0 && item.ID == channel.PinnedMessageID
|
||||
messages = append(messages, item)
|
||||
}
|
||||
sort.Slice(messages, func(i, j int) bool { return messages[i].ID > messages[j].ID })
|
||||
s.populateChannelMessageRepliesLocked(viewerUserID, channelID, messages)
|
||||
|
|
|
|||
|
|
@ -4435,6 +4435,13 @@ func (s *ChannelStore) ListChannelHistory(ctx context.Context, viewerUserID int6
|
|||
baseArgs = append(baseArgs, member.AvailableMinID)
|
||||
base += fmt.Sprintf(" AND id > $%d", len(baseArgs))
|
||||
}
|
||||
if filter.PinnedOnly {
|
||||
if channel.PinnedMessageID <= 0 {
|
||||
return domain.ChannelHistory{Channel: channel, Self: member}, nil
|
||||
}
|
||||
baseArgs = append(baseArgs, channel.PinnedMessageID)
|
||||
base += fmt.Sprintf(" AND id = $%d", len(baseArgs))
|
||||
}
|
||||
if filter.Query != "" {
|
||||
baseArgs = append(baseArgs, filter.Query)
|
||||
base += fmt.Sprintf(" AND body ILIKE '%%' || $%d || '%%'", len(baseArgs))
|
||||
|
|
@ -4577,6 +4584,7 @@ func (s *ChannelStore) ListChannelHistory(ctx context.Context, viewerUserID int6
|
|||
}
|
||||
out.Messages = older
|
||||
}
|
||||
markPinnedChannelMessages(channel, out.Messages)
|
||||
out.Count = len(out.Messages)
|
||||
if hasMoreOlder {
|
||||
out.Count = len(out.Messages) + 1
|
||||
|
|
@ -4830,6 +4838,7 @@ ORDER BY id DESC`, args...)
|
|||
if err := rows.Err(); err != nil {
|
||||
return domain.ChannelHistory{}, err
|
||||
}
|
||||
markPinnedChannelMessages(channel, out.Messages)
|
||||
out.Count = len(out.Messages)
|
||||
if err := s.populateChannelMessageReplies(ctx, s.db, viewerUserID, channel, out.Messages); err != nil {
|
||||
return domain.ChannelHistory{}, err
|
||||
|
|
@ -4840,6 +4849,17 @@ ORDER BY id DESC`, args...)
|
|||
return out, nil
|
||||
}
|
||||
|
||||
func markPinnedChannelMessages(channel domain.Channel, messages []domain.ChannelMessage) {
|
||||
if channel.PinnedMessageID <= 0 {
|
||||
return
|
||||
}
|
||||
for i := range messages {
|
||||
if messages[i].ChannelID == channel.ID && messages[i].ID == channel.PinnedMessageID {
|
||||
messages[i].Pinned = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ChannelStore) ReadChannelMessageContents(ctx context.Context, req domain.ReadChannelMessageContentsRequest) (domain.ReadChannelMessageContentsResult, error) {
|
||||
if req.UserID == 0 || req.ChannelID == 0 {
|
||||
return domain.ReadChannelMessageContentsResult{}, domain.ErrChannelInvalid
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue