chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
102
internal/rpc/media_count.go
Normal file
102
internal/rpc/media_count.go
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/gotd/td/tg"
|
||||
|
||||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
func (r *Router) mediaCountsForPeer(ctx context.Context, userID int64, peer domain.Peer) (domain.MediaCategoryCounts, error) {
|
||||
if userID == 0 || peer.ID == 0 {
|
||||
return domain.MediaCategoryCounts{}, nil
|
||||
}
|
||||
key := fmt.Sprintf("%d:%s:%d", userID, peer.Type, peer.ID)
|
||||
v, err, _ := r.mediaCountSF.Do(key, func() (any, error) {
|
||||
counts, err := r.loadMediaCountsForPeer(ctx, userID, peer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cloneMediaCategoryCounts(counts), nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
counts, _ := v.(domain.MediaCategoryCounts)
|
||||
return cloneMediaCategoryCounts(counts), nil
|
||||
}
|
||||
|
||||
func (r *Router) loadMediaCountsForPeer(ctx context.Context, userID int64, peer domain.Peer) (domain.MediaCategoryCounts, error) {
|
||||
switch peer.Type {
|
||||
case domain.PeerTypeChannel:
|
||||
if r.deps.Channels == nil {
|
||||
return domain.MediaCategoryCounts{}, nil
|
||||
}
|
||||
return r.deps.Channels.CountChannelMediaCategories(ctx, userID, peer.ID)
|
||||
case domain.PeerTypeUser:
|
||||
if r.deps.Messages == nil {
|
||||
return domain.MediaCategoryCounts{}, nil
|
||||
}
|
||||
return r.deps.Messages.CountPrivateMediaCategories(ctx, userID, peer.ID)
|
||||
default:
|
||||
return domain.MediaCategoryCounts{}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func cloneMediaCategoryCounts(in domain.MediaCategoryCounts) domain.MediaCategoryCounts {
|
||||
if len(in) == 0 {
|
||||
return domain.MediaCategoryCounts{}
|
||||
}
|
||||
out := make(domain.MediaCategoryCounts, len(in))
|
||||
for category, count := range in {
|
||||
out[category] = count
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func mediaSearchCountOnlyRequest(req *tg.MessagesSearchRequest) bool {
|
||||
if req == nil {
|
||||
return false
|
||||
}
|
||||
if req.Q != "" || req.Limit != 0 || req.OffsetID != 0 || req.AddOffset != 0 ||
|
||||
req.MaxID != 0 || req.MinID != 0 || req.MinDate != 0 || req.MaxDate != 0 || req.Hash != 0 {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetFromID(); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetSavedPeerID(); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetSavedReaction(); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetTopMsgID(); ok {
|
||||
return false
|
||||
}
|
||||
return searchFilterNeedsMediaStore(req.Filter)
|
||||
}
|
||||
|
||||
func mediaSearchCanReusePeerWideCount(req *tg.MessagesSearchRequest) bool {
|
||||
if req == nil {
|
||||
return false
|
||||
}
|
||||
if req.Q != "" || req.MaxID != 0 || req.MinID != 0 || req.MinDate != 0 || req.MaxDate != 0 {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetFromID(); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetSavedPeerID(); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetSavedReaction(); ok {
|
||||
return false
|
||||
}
|
||||
if _, ok := req.GetTopMsgID(); ok {
|
||||
return false
|
||||
}
|
||||
return searchFilterNeedsMediaStore(req.Filter)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue