owpengram-server/internal/rpc/messages_recent_locations.go

57 lines
2 KiB
Go

package rpc
import (
"context"
"github.com/iamxvbaba/td/tg"
"telesrv/internal/domain"
)
// onMessagesGetRecentLocations returns the peer's newest live-location
// messages through the existing media seek indexes. Expired/stopped items are
// deliberately retained: iOS tags every messageMediaGeoLive in its local
// history and applies the active-period check in PeerLiveLocationsContext.
func (r *Router) onMessagesGetRecentLocations(ctx context.Context, req *tg.MessagesGetRecentLocationsRequest) (tg.MessagesMessagesClass, error) {
if req == nil || req.Limit < 0 || req.Limit > maxSearchResultsLimit {
return nil, limitInvalidErr()
}
userID, _, err := r.currentUserID(ctx)
if err != nil {
return nil, internalErr()
}
peer, err := r.checkedDomainPeerFromInputPeer(ctx, userID, req.Peer)
if err != nil {
return nil, err
}
if input, ok := req.Peer.(*tg.InputPeerUser); ok && input != nil {
if err := r.validateInputUser(ctx, &tg.InputUser{UserID: input.UserID, AccessHash: input.AccessHash}); err != nil {
return nil, err
}
}
search := domain.MediaSearchRequest{
Categories: []domain.MediaCategory{domain.MediaCategoryGeoLive},
Limit: req.Limit,
}
if peer.Type == domain.PeerTypeChannel {
if r.deps.Channels == nil {
return &tg.MessagesMessages{Messages: []tg.MessageClass{}, Chats: []tg.ChatClass{}, Users: []tg.UserClass{}}, nil
}
history, err := r.deps.Channels.SearchChannelMedia(ctx, userID, peer.ID, search)
if err != nil {
return nil, channelInvalidErr(err)
}
history = r.enrichChannelHistory(ctx, userID, history)
r.trackChannelInterest(ctx, userID, peer.ID)
return r.tgChannelHistoryMessages(ctx, userID, history), nil
}
r.clearChannelInterest(ctx, userID)
if r.deps.Messages == nil {
return &tg.MessagesMessages{Messages: []tg.MessageClass{}, Chats: []tg.ChatClass{}, Users: []tg.UserClass{}}, nil
}
list, err := r.deps.Messages.SearchPrivateMedia(ctx, userID, peer.ID, search)
if err != nil {
return nil, internalErr()
}
return r.tgMessagesMessages(ctx, userID, r.enrichMessageList(ctx, userID, list)), nil
}