57 lines
2 KiB
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
|
|
}
|