💄 Optimize create activitypub delivery
This commit is contained in:
@@ -160,6 +160,30 @@ public class ActivityPubDeliveryService(
|
|||||||
var postUrl = $"https://{Domain}/posts/{post.Id}";
|
var postUrl = $"https://{Domain}/posts/{post.Id}";
|
||||||
var activityId = $"{postUrl}/activity";
|
var activityId = $"{postUrl}/activity";
|
||||||
|
|
||||||
|
var postReceivers = new List<string> { $"{actorUrl}/followers" };
|
||||||
|
|
||||||
|
if (post.RepliedPostId != null)
|
||||||
|
{
|
||||||
|
var repliedPost = await db.Posts
|
||||||
|
.Where(p => p.Id == post.RepliedPostId)
|
||||||
|
.Include(p => p.Publisher)
|
||||||
|
.Include(p => p.Actor)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
post.RepliedPost = repliedPost;
|
||||||
|
|
||||||
|
// Local post
|
||||||
|
if (repliedPost?.Publisher != null)
|
||||||
|
{
|
||||||
|
var actor = await objFactory.GetLocalActorAsync(repliedPost.PublisherId!.Value);
|
||||||
|
if (actor?.FollowersUri != null)
|
||||||
|
postReceivers.Add(actor.FollowersUri);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fediverse post
|
||||||
|
if (repliedPost?.Actor?.FollowersUri != null)
|
||||||
|
postReceivers.Add(post.Actor!.FollowersUri!);
|
||||||
|
}
|
||||||
|
|
||||||
var activity = new Dictionary<string, object>
|
var activity = new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
["@context"] = "https://www.w3.org/ns/activitystreams",
|
["@context"] = "https://www.w3.org/ns/activitystreams",
|
||||||
@@ -168,11 +192,24 @@ public class ActivityPubDeliveryService(
|
|||||||
["actor"] = actorUrl,
|
["actor"] = actorUrl,
|
||||||
["published"] = (post.PublishedAt ?? post.CreatedAt).ToDateTimeOffset(),
|
["published"] = (post.PublishedAt ?? post.CreatedAt).ToDateTimeOffset(),
|
||||||
["to"] = new[] { ActivityPubObjectFactory.PublicTo },
|
["to"] = new[] { ActivityPubObjectFactory.PublicTo },
|
||||||
["cc"] = new[] { $"{actorUrl}/followers" },
|
["cc"] = postReceivers.ToArray(),
|
||||||
["object"] = await objFactory.CreatePostObject(post, actorUrl)
|
["object"] = await objFactory.CreatePostObject(post, actorUrl)
|
||||||
};
|
};
|
||||||
|
|
||||||
var followers = await GetRemoteFollowersAsync();
|
var followers = await GetRemoteFollowersAsync(localActor.Id);
|
||||||
|
if (post.RepliedPost != null)
|
||||||
|
{
|
||||||
|
if (post.RepliedPost.PublisherId.HasValue)
|
||||||
|
{
|
||||||
|
var repliedLocalActor = await objFactory.GetLocalActorAsync(post.RepliedPost.PublisherId.Value);
|
||||||
|
if (repliedLocalActor != null)
|
||||||
|
followers.AddRange(await GetRemoteFollowersAsync(repliedLocalActor.Id));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (post.RepliedPost.ActorId.HasValue)
|
||||||
|
followers.AddRange(await GetRemoteFollowersAsync(post.RepliedPost.ActorId.Value));
|
||||||
|
}
|
||||||
|
|
||||||
logger.LogInformation("Enqueuing Create activity for {Count} followers", followers.Count);
|
logger.LogInformation("Enqueuing Create activity for {Count} followers", followers.Count);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
foreach (var follower in followers)
|
||||||
|
|||||||
Reference in New Issue
Block a user