dendrite/syncapi/storage/shared/stream_invite.go
2021-01-06 14:37:09 +00:00

58 lines
1.1 KiB
Go

package shared
import (
"context"
"github.com/matrix-org/dendrite/syncapi/types"
)
type InviteStreamProvider struct {
StreamProvider
}
func (p *InviteStreamProvider) Setup() {
p.StreamProvider.Setup()
p.latestMutex.Lock()
defer p.latestMutex.Unlock()
latest, err := p.DB.Invites.SelectMaxInviteID(context.Background(), nil)
if err != nil {
return
}
p.latest = types.StreamPosition(latest)
}
func (p *InviteStreamProvider) Range(
ctx context.Context,
req *types.SyncRequest,
from, to types.StreamPosition,
) (newPos types.StreamPosition) {
r := types.Range{
From: from,
To: to,
}
invites, retiredInvites, err := p.DB.Invites.SelectInviteEventsInRange(
ctx, nil, req.Device.UserID, r,
)
if err != nil {
return // fmt.Errorf("d.Invites.SelectInviteEventsInRange: %w", err)
}
for roomID, inviteEvent := range invites {
ir := types.NewInviteResponse(inviteEvent)
req.Response.Rooms.Invite[roomID] = *ir
}
for roomID := range retiredInvites {
if _, ok := req.Response.Rooms.Join[roomID]; !ok {
lr := types.NewLeaveResponse()
req.Response.Rooms.Leave[roomID] = *lr
}
}
return to
}