2021-01-23 03:23:27 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
2020-07-23 01:27:25 +02:00
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using BirdsiteLive.DAL.Contracts;
|
2022-02-10 06:34:51 +01:00
|
|
|
|
using BirdsiteLive.DAL.Models;
|
|
|
|
|
using BirdsiteLive.Moderation.Actions;
|
2020-07-23 01:27:25 +02:00
|
|
|
|
using BirdsiteLive.Pipeline.Contracts;
|
|
|
|
|
using BirdsiteLive.Pipeline.Models;
|
2021-02-16 00:54:52 +01:00
|
|
|
|
using Microsoft.Extensions.Logging;
|
2020-07-23 01:27:25 +02:00
|
|
|
|
|
|
|
|
|
namespace BirdsiteLive.Pipeline.Processors
|
|
|
|
|
{
|
|
|
|
|
public class SaveProgressionProcessor : ISaveProgressionProcessor
|
|
|
|
|
{
|
|
|
|
|
private readonly ITwitterUserDal _twitterUserDal;
|
2021-02-16 00:54:52 +01:00
|
|
|
|
private readonly ILogger<SaveProgressionProcessor> _logger;
|
2022-02-10 06:34:51 +01:00
|
|
|
|
private readonly IRemoveTwitterAccountAction _removeTwitterAccountAction;
|
2021-02-16 00:54:52 +01:00
|
|
|
|
|
2020-07-23 01:27:25 +02:00
|
|
|
|
#region Ctor
|
2022-02-10 06:34:51 +01:00
|
|
|
|
public SaveProgressionProcessor(ITwitterUserDal twitterUserDal, ILogger<SaveProgressionProcessor> logger, IRemoveTwitterAccountAction removeTwitterAccountAction)
|
2020-07-23 01:27:25 +02:00
|
|
|
|
{
|
|
|
|
|
_twitterUserDal = twitterUserDal;
|
2021-02-16 00:54:52 +01:00
|
|
|
|
_logger = logger;
|
2022-02-10 06:34:51 +01:00
|
|
|
|
_removeTwitterAccountAction = removeTwitterAccountAction;
|
2020-07-23 01:27:25 +02:00
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
2021-09-05 19:58:33 +02:00
|
|
|
|
public async Task ProcessAsync(UserWithDataToSync userWithTweetsToSync, CancellationToken ct)
|
2020-07-23 01:27:25 +02:00
|
|
|
|
{
|
2021-02-16 00:54:52 +01:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (userWithTweetsToSync.Tweets.Length == 0)
|
|
|
|
|
{
|
2022-02-10 06:34:51 +01:00
|
|
|
|
_logger.LogInformation("No tweets synchronized");
|
|
|
|
|
await UpdateUserSyncDateAsync(userWithTweetsToSync.User);
|
2021-02-16 00:54:52 +01:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(userWithTweetsToSync.Followers.Length == 0)
|
|
|
|
|
{
|
2022-02-10 06:34:51 +01:00
|
|
|
|
_logger.LogInformation("No Followers found for {User}", userWithTweetsToSync.User.Acct);
|
|
|
|
|
await _removeTwitterAccountAction.ProcessAsync(userWithTweetsToSync.User);
|
2021-02-16 00:54:52 +01:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var userId = userWithTweetsToSync.User.Id;
|
|
|
|
|
var followingSyncStatuses = userWithTweetsToSync.Followers.Select(x => x.FollowingsSyncStatus[userId]).ToList();
|
|
|
|
|
var lastPostedTweet = userWithTweetsToSync.Tweets.Select(x => x.Id).Max();
|
|
|
|
|
var minimumSync = followingSyncStatuses.Min();
|
|
|
|
|
var now = DateTime.UtcNow;
|
2022-12-14 04:55:22 +01:00
|
|
|
|
await _twitterUserDal.UpdateTwitterUserAsync(userId, lastPostedTweet, minimumSync, userWithTweetsToSync.User.FetchingErrorCount, now, userWithTweetsToSync.User.MovedTo, userWithTweetsToSync.User.MovedToAcct, userWithTweetsToSync.User.Deleted);
|
2021-02-16 00:54:52 +01:00
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError(e, "SaveProgressionProcessor.ProcessAsync() Exception");
|
|
|
|
|
throw;
|
|
|
|
|
}
|
2020-07-23 01:27:25 +02:00
|
|
|
|
}
|
2022-02-10 06:34:51 +01:00
|
|
|
|
|
|
|
|
|
private async Task UpdateUserSyncDateAsync(SyncTwitterUser user)
|
|
|
|
|
{
|
|
|
|
|
user.LastSync = DateTime.UtcNow;
|
|
|
|
|
await _twitterUserDal.UpdateTwitterUserAsync(user);
|
|
|
|
|
}
|
2020-07-23 01:27:25 +02:00
|
|
|
|
}
|
|
|
|
|
}
|