public async Task <UserWithTweetsToSync[]> ProcessAsync(SyncTwitterUser[] syncTwitterUsers, CancellationToken ct)
        {
            var usersWtTweets = new List <UserWithTweetsToSync>();

            //TODO multithread this
            foreach (var user in syncTwitterUsers)
            {
                var tweets = RetrieveNewTweets(user);
                if (tweets.Length > 0 && user.LastTweetPostedId != -1)
                {
                    var userWtTweets = new UserWithTweetsToSync
                    {
                        User   = user,
                        Tweets = tweets
                    };
                    usersWtTweets.Add(userWtTweets);
                }
                else if (tweets.Length > 0 && user.LastTweetPostedId == -1)
                {
                    var tweetId = tweets.Last().Id;
                    var now     = DateTime.UtcNow;
                    await _twitterUserDal.UpdateTwitterUserAsync(user.Id, tweetId, tweetId, now);
                }
                else
                {
                    var now = DateTime.UtcNow;
                    await _twitterUserDal.UpdateTwitterUserAsync(user.Id, user.LastTweetPostedId, user.LastTweetSynchronizedForAllFollowersId, now);
                }
            }

            return(usersWtTweets.ToArray());
        }
        public async Task ProcessAsync(UserWithTweetsToSync userWithTweetsToSync, CancellationToken ct)
        {
            try
            {
                if (userWithTweetsToSync.Tweets.Length == 0)
                {
                    _logger.LogWarning("No tweets synchronized");
                    return;
                }
                if (userWithTweetsToSync.Followers.Length == 0)
                {
                    _logger.LogWarning("No Followers found for {User}", userWithTweetsToSync.User.Acct);
                    return;
                }

                var userId = userWithTweetsToSync.User.Id;
                var followingSyncStatuses = userWithTweetsToSync.Followers.Select(x => x.FollowingsSyncStatus[userId]).ToList();

                if (followingSyncStatuses.Count == 0)
                {
                    _logger.LogWarning("No Followers sync found for {User}, Id: {UserId}", userWithTweetsToSync.User.Acct, userId);
                    return;
                }

                var lastPostedTweet = userWithTweetsToSync.Tweets.Select(x => x.Id).Max();
                var minimumSync     = followingSyncStatuses.Min();
                var now             = DateTime.UtcNow;
                await _twitterUserDal.UpdateTwitterUserAsync(userId, lastPostedTweet, minimumSync, now);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "SaveProgressionProcessor.ProcessAsync() Exception");
                throw;
            }
        }
예제 #3
0
 public async Task ProcessAsync(UserWithTweetsToSync userWithTweetsToSync, CancellationToken ct)
 {
     var userId          = userWithTweetsToSync.User.Id;
     var lastPostedTweet = userWithTweetsToSync.Tweets.Select(x => x.Id).Max();
     var minimumSync     = userWithTweetsToSync.Followers.Select(x => x.FollowingsSyncStatus[userId]).Min();
     var now             = DateTime.UtcNow;
     await _twitterUserDal.UpdateTwitterUserAsync(userId, lastPostedTweet, minimumSync, now);
 }