From 82b517ed2c959918152f44ed0fb93b6a1dbd3d4a Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 3 Jan 2026 01:43:16 +0800 Subject: [PATCH] :lipstick: Optimize Like activity delivery --- .../ActivityPub/ActivityPubDeliveryService.cs | 16 ++++++++++------ DysonNetwork.Sphere/Post/PostService.cs | 9 ++++++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs b/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs index edd17237..0531afc4 100644 --- a/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs +++ b/DysonNetwork.Sphere/ActivityPub/ActivityPubDeliveryService.cs @@ -341,7 +341,8 @@ public class ActivityPubDeliveryService( public async Task SendLikeActivityToLocalPostAsync( SnFediverseActor actor, - Guid postId + Guid postId, + SnFediverseActor postSenderActor ) { var actorUrl = actor.Uri; @@ -356,12 +357,13 @@ public class ActivityPubDeliveryService( ["actor"] = actor.Uri, ["object"] = postUrl, ["to"] = new[] { "https://www.w3.org/ns/activitystreams#Public" }, - ["cc"] = new[] { $"{actorUrl}/followers" } + ["cc"] = new[] { $"{actorUrl}/followers", postSenderActor.Uri, postSenderActor.FollowersUri } }; var followers = await GetRemoteFollowersAsync(actor.Id); + var ogFollowers = await GetRemoteFollowersAsync(postSenderActor.Id); - foreach (var follower in followers) + foreach (var follower in followers.Concat(ogFollowers)) { if (follower.InboxUri == null) continue; await EnqueueActivityDeliveryAsync("Like", activity, actorUrl, follower.InboxUri, activityId); @@ -372,7 +374,8 @@ public class ActivityPubDeliveryService( public async Task SendUndoLikeActivityAsync( SnFediverseActor actor, - Guid postId + Guid postId, + SnFediverseActor postSenderActor ) { var actorUrl = actor.Uri; @@ -391,12 +394,13 @@ public class ActivityPubDeliveryService( ["object"] = postUrl }, ["to"] = new[] { "https://www.w3.org/ns/activitystreams#Public" }, - ["cc"] = new[] { $"{actorUrl}/followers" } + ["cc"] = new[] { $"{actorUrl}/followers", postSenderActor.Uri, postSenderActor.FollowersUri } }; var followers = await GetRemoteFollowersAsync(actor.Id); + var ogFollowers = await GetRemoteFollowersAsync(postSenderActor.Id); - foreach (var follower in followers) + foreach (var follower in followers.Concat(ogFollowers)) { if (follower.InboxUri == null) continue; await EnqueueActivityDeliveryAsync("Undo", activity, actorUrl, follower.InboxUri, activityId); diff --git a/DysonNetwork.Sphere/Post/PostService.cs b/DysonNetwork.Sphere/Post/PostService.cs index 89cb10fe..70064804 100644 --- a/DysonNetwork.Sphere/Post/PostService.cs +++ b/DysonNetwork.Sphere/Post/PostService.cs @@ -647,8 +647,9 @@ public partial class PostService( var accountActor = accountPublisher is null ? null : await objFactory.GetLocalActorAsync(accountPublisher.Id); + var publisherActor = await objFactory.GetLocalActorAsync(post.PublisherId.Value); - if (accountActor != null && reaction.Attitude == Shared.Models.PostReactionAttitude.Positive) + if (accountActor != null && publisherActor != null && reaction.Attitude == Shared.Models.PostReactionAttitude.Positive) { if (!isRemoving) { @@ -662,7 +663,8 @@ public partial class PostService( .GetRequiredService(); await deliveryService.SendLikeActivityToLocalPostAsync( accountActor, - post.Id + post.Id, + publisherActor ); } catch (Exception ex) @@ -683,7 +685,8 @@ public partial class PostService( .GetRequiredService(); await deliveryService.SendUndoLikeActivityAsync( accountActor, - post.Id + post.Id, + publisherActor ); } catch (Exception ex)