merged from gramsrv upstream
This commit is contained in:
parent
79c64ee916
commit
21a0856587
651 changed files with 54774 additions and 4590 deletions
|
|
@ -8,7 +8,16 @@ import (
|
|||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
func (r *Router) suggestedPostApprovalUpdates(ctx context.Context, viewerUserID int64, result domain.ToggleSuggestedPostApprovalResult) *tg.Updates {
|
||||
func (r *Router) suggestedPostApprovalUpdatesStrict(ctx context.Context, viewerUserID int64, result domain.ToggleSuggestedPostApprovalResult) (*tg.Updates, error) {
|
||||
return r.suggestedPostApprovalUpdatesWithPeerCacheAndOverlaysStrict(ctx, viewerUserID, result, nil, nil)
|
||||
}
|
||||
|
||||
func (r *Router) suggestedPostApprovalUpdatesWithPeerCacheAndOverlays(ctx context.Context, viewerUserID int64, result domain.ToggleSuggestedPostApprovalResult, cache *viewerPeerCache, overlays *monoforumPeerOverlays) *tg.Updates {
|
||||
updates, _ := r.suggestedPostApprovalUpdatesWithPeerCacheAndOverlaysStrict(ctx, viewerUserID, result, cache, overlays)
|
||||
return updates
|
||||
}
|
||||
|
||||
func (r *Router) suggestedPostApprovalUpdatesWithPeerCacheAndOverlaysStrict(ctx context.Context, viewerUserID int64, result domain.ToggleSuggestedPostApprovalResult, cache *viewerPeerCache, overlays *monoforumPeerOverlays) (*tg.Updates, error) {
|
||||
updates := make([]tg.UpdateClass, 0, 4)
|
||||
if result.OriginalEvent.Pts > 0 {
|
||||
if update := tgChannelUpdate(viewerUserID, result.OriginalEvent); update != nil {
|
||||
|
|
@ -39,12 +48,24 @@ func (r *Router) suggestedPostApprovalUpdates(ctx context.Context, viewerUserID
|
|||
if result.Published != nil {
|
||||
messages = append(messages, result.Published.Message)
|
||||
}
|
||||
if cache == nil {
|
||||
cache = newViewerPeerCache(r)
|
||||
}
|
||||
if overlays == nil {
|
||||
ids := monoforumSubscriberUserIDs([]domain.MonoforumDialog{{SavedPeer: result.SavedPeer}}, messages)
|
||||
overlays = r.loadMonoforumPeerOverlays(ctx, monoforumProjectionPeers(result.Monoforum.ID, result.Parent.ID, ids))
|
||||
}
|
||||
users, err := r.monoforumSubscriberUsersWithPeerCacheAndOverlaysStrict(ctx, viewerUserID, []domain.MonoforumDialog{{SavedPeer: result.SavedPeer}}, messages, cache, overlays)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
applyMonoforumPeerOverlays(nil, chats, overlays)
|
||||
return &tg.Updates{
|
||||
Updates: updates,
|
||||
Chats: chats,
|
||||
Users: r.monoforumSubscriberUsers(ctx, viewerUserID, []domain.MonoforumDialog{{SavedPeer: result.SavedPeer}}, messages),
|
||||
Users: users,
|
||||
Date: int(r.clock.Now().Unix()),
|
||||
}
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *Router) enqueueSuggestedPostApprovalFanout(ctx context.Context, originUserID int64, result domain.ToggleSuggestedPostApprovalResult) {
|
||||
|
|
@ -52,9 +73,29 @@ func (r *Router) enqueueSuggestedPostApprovalFanout(ctx context.Context, originU
|
|||
monoOnly.Published = nil
|
||||
nudge := max(result.OriginalEvent.Pts, result.ServiceEvent.Pts)
|
||||
if nudge > 0 {
|
||||
r.enqueueChannelFanout(ctx, channelFanoutExplicit, originUserID, result.Monoforum.ID, nudge, result.Recipients, func(bgCtx context.Context, viewerUserID int64) *tg.Updates {
|
||||
return r.suggestedPostApprovalUpdates(bgCtx, viewerUserID, monoOnly)
|
||||
})
|
||||
messages := make([]domain.ChannelMessage, 0, 2)
|
||||
if monoOnly.OriginalMessage.ID != 0 {
|
||||
messages = append(messages, monoOnly.OriginalMessage)
|
||||
}
|
||||
if monoOnly.ServiceMessage.ID != 0 {
|
||||
messages = append(messages, monoOnly.ServiceMessage)
|
||||
}
|
||||
ownerIDs := monoforumSubscriberUserIDs([]domain.MonoforumDialog{{SavedPeer: monoOnly.SavedPeer}}, messages)
|
||||
fanoutCache := newViewerPeerCache(r)
|
||||
projectionPeers := monoforumProjectionPeers(monoOnly.Monoforum.ID, monoOnly.Parent.ID, ownerIDs)
|
||||
var overlays *monoforumPeerOverlays
|
||||
r.enqueueChannelFanoutWithPrefetch(ctx, channelFanoutExplicit, originUserID, result.Monoforum.ID, nudge, result.Recipients,
|
||||
0,
|
||||
func(bgCtx context.Context, viewers []int64) bool {
|
||||
if !r.prefetchChannelFanoutUsers(bgCtx, fanoutCache, viewers, ownerIDs) {
|
||||
return false
|
||||
}
|
||||
overlays = r.loadMonoforumPeerOverlays(bgCtx, projectionPeers)
|
||||
return true
|
||||
},
|
||||
func(bgCtx context.Context, viewerUserID int64) *tg.Updates {
|
||||
return r.suggestedPostApprovalUpdatesWithPeerCacheAndOverlays(bgCtx, viewerUserID, monoOnly, fanoutCache, overlays)
|
||||
})
|
||||
}
|
||||
if result.Published != nil && result.Published.Event.Pts > 0 {
|
||||
r.enqueueChannelMessageFanout(ctx, originUserID, *result.Published, nil)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue