Following an account brings its earlier posts to its profile
Once a follow holds, OutboxBackfill reads the account's latest public posts from its outbox's first page (twenty at most, once a day) and keeps them as any fetched post: its profile shows them at once instead of only what it posts from then on. Homes still get only what arrives afterwards, as on Mastodon. Announces and other servers' objects in the outbox are left out. Checked live against Mastodon (scenarios/pins.sh, now 9 checks). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
b218768904
commit
b45321f28d
11 files changed
+203
-10
No files matched your search
@@ -20,10 +20,12 @@ namespace PrivaPub.Federation.Inbox.Handlers
|
||||
readonly IInteractionApprovals _approvals;
|
||||
readonly IParticipations _participations;
|
||||
readonly Relays.IRelays _relays;
|
||||
readonly Infrastructure.Jobs.IJobQueue _queue;
|
||||
|
||||
public AcceptHandler(DbEntities dbEntities, ILocalActorService localActors, IQuoteService quotes, IInteractionApprovals approvals = default,
|
||||
IParticipations participations = default, Relays.IRelays relays = default)
|
||||
IParticipations participations = default, Relays.IRelays relays = default, Infrastructure.Jobs.IJobQueue queue = default)
|
||||
{
|
||||
_queue = queue;
|
||||
_relays = relays;
|
||||
_participations = participations;
|
||||
_dbEntities = dbEntities;
|
||||
@@ -67,8 +69,14 @@ namespace PrivaPub.Federation.Inbox.Handlers
|
||||
await Apply(following, token);
|
||||
}
|
||||
|
||||
protected virtual Task Apply(Following following, CancellationToken token) =>
|
||||
DB.Default.Update<Following>().MatchID(following.ID).Modify(f => f.State, FollowState.Accepted).ExecuteAsync(token);
|
||||
// the follow holds: the account's latest public posts are read from its outbox (OutboxBackfill), once a day at most
|
||||
protected virtual async Task Apply(Following following, CancellationToken token)
|
||||
{
|
||||
await DB.Default.Update<Following>().MatchID(following.ID).Modify(f => f.State, FollowState.Accepted).ExecuteAsync(token);
|
||||
if (_queue != default)
|
||||
await _queue.Enqueue(Models.Jobs.JobKind.BackfillOutbox, following.TargetActorURI, new Uri(following.TargetActorURI).Host,
|
||||
Actors.OutboxBackfill.DedupeKey(following.TargetActorURI, DateTime.UtcNow), token);
|
||||
}
|
||||
|
||||
public static async Task<Following> FindFollowing(JsonNode follow, ForeignAvatar target, DbEntities dbEntities, ILocalActorService localActors,
|
||||
CancellationToken token)
|
||||
@@ -96,7 +104,7 @@ namespace PrivaPub.Federation.Inbox.Handlers
|
||||
{
|
||||
public RejectHandler(DbEntities dbEntities, ILocalActorService localActors, IQuoteService quotes, IInteractionApprovals approvals = default,
|
||||
IParticipations participations = default, Relays.IRelays relays = default)
|
||||
: base(dbEntities, localActors, quotes, approvals, participations, relays)
|
||||
: base(dbEntities, localActors, quotes, approvals, participations, relays, queue: default)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user