A Follow was resent only when the persona followed again. Lemmy 1.0 sends nothing it queued for a server before it started sending there, so the Accept of a community follow made on first contact was lost for good: the village's persona stayed "requested" a day while Lemmy listed her as a follower, and every post the community announced was refused as not followed. A request still unanswered is now sent again, the same activity, after 15 minutes, an hour, 6 hours, a day, two and four days (FollowResender, every 15 minutes); a server that holds the follow answers the copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
28 lines
957 B
C#
28 lines
957 B
C#
namespace PrivaPub.Domain.Social
|
|
{
|
|
// sends again, now and then, the follow requests still unanswered (FollowService.ResendPending)
|
|
public sealed class FollowResender(IServiceScopeFactory scopes, ILogger<FollowResender> logger) : BackgroundService
|
|
{
|
|
static readonly TimeSpan Every = TimeSpan.FromMinutes(15);
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken token)
|
|
{
|
|
using var timer = new PeriodicTimer(Every);
|
|
while (await timer.WaitForNextTickAsync(token))
|
|
{
|
|
try
|
|
{
|
|
using var scope = scopes.CreateScope();
|
|
var sent = await scope.ServiceProvider.GetRequiredService<IFollowService>().ResendPending(DateTime.UtcNow, token);
|
|
if (sent > 0)
|
|
logger.LogInformation("Sent {Count} unanswered follow requests again", sent);
|
|
}
|
|
catch (Exception ex) when (ex is not OperationCanceledException)
|
|
{
|
|
logger.LogWarning(ex, "Unanswered follow requests could not be sent again");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|