purge cache when TL retrieval fails, fix #79

This commit is contained in:
Nicolas Constant 2021-02-01 20:07:53 -05:00
parent 52e2868deb
commit ec420346b6
No known key found for this signature in database
GPG key ID: 1E9F677FB01A5688
3 changed files with 51 additions and 33 deletions

View file

@ -9,6 +9,7 @@ using BirdsiteLive.Pipeline.Contracts;
using BirdsiteLive.Pipeline.Models; using BirdsiteLive.Pipeline.Models;
using BirdsiteLive.Twitter; using BirdsiteLive.Twitter;
using BirdsiteLive.Twitter.Models; using BirdsiteLive.Twitter.Models;
using Microsoft.Extensions.Logging;
using Tweetinvi.Models; using Tweetinvi.Models;
namespace BirdsiteLive.Pipeline.Processors namespace BirdsiteLive.Pipeline.Processors
@ -16,13 +17,17 @@ namespace BirdsiteLive.Pipeline.Processors
public class RetrieveTweetsProcessor : IRetrieveTweetsProcessor public class RetrieveTweetsProcessor : IRetrieveTweetsProcessor
{ {
private readonly ITwitterTweetsService _twitterTweetsService; private readonly ITwitterTweetsService _twitterTweetsService;
private readonly ITwitterUserService _twitterUserService;
private readonly ITwitterUserDal _twitterUserDal; private readonly ITwitterUserDal _twitterUserDal;
private readonly ILogger<RetrieveTweetsProcessor> _logger;
#region Ctor #region Ctor
public RetrieveTweetsProcessor(ITwitterTweetsService twitterTweetsService, ITwitterUserDal twitterUserDal) public RetrieveTweetsProcessor(ITwitterTweetsService twitterTweetsService, ITwitterUserDal twitterUserDal, ITwitterUserService twitterUserService, ILogger<RetrieveTweetsProcessor> logger)
{ {
_twitterTweetsService = twitterTweetsService; _twitterTweetsService = twitterTweetsService;
_twitterUserDal = twitterUserDal; _twitterUserDal = twitterUserDal;
_twitterUserService = twitterUserService;
_logger = logger;
} }
#endregion #endregion
@ -61,11 +66,25 @@ namespace BirdsiteLive.Pipeline.Processors
private ExtractedTweet[] RetrieveNewTweets(SyncTwitterUser user) private ExtractedTweet[] RetrieveNewTweets(SyncTwitterUser user)
{ {
ExtractedTweet[] tweets; var tweets = new ExtractedTweet[0];
try
{
if (user.LastTweetPostedId == -1) if (user.LastTweetPostedId == -1)
tweets = _twitterTweetsService.GetTimeline(user.Acct, 1); tweets = _twitterTweetsService.GetTimeline(user.Acct, 1);
else else
tweets = _twitterTweetsService.GetTimeline(user.Acct, 200, user.LastTweetSynchronizedForAllFollowersId); tweets = _twitterTweetsService.GetTimeline(user.Acct, 200, user.LastTweetSynchronizedForAllFollowersId);
}
catch (Exception e)
{
_logger.LogError(e, "Error retrieving TL of {Username} from {LastTweetPostedId}", user.Acct, user.LastTweetPostedId);
if (_twitterUserService is CachedTwitterUserService service)
{
_logger.LogInformation("Purge {Username} from cache", user.Acct);
service.PurgeUser(user.Acct);
}
}
return tweets; return tweets;
} }

View file

@ -38,5 +38,10 @@ namespace BirdsiteLive.Twitter
return user; return user;
} }
public void PurgeUser(string username)
{
_userCache.Remove(username);
}
} }
} }

View file

@ -61,8 +61,7 @@ namespace BirdsiteLive.Twitter
public ExtractedTweet[] GetTimeline(string username, int nberTweets, long fromTweetId = -1) public ExtractedTweet[] GetTimeline(string username, int nberTweets, long fromTweetId = -1)
{ {
var tweets = new List<ITweet>(); var tweets = new List<ITweet>();
try
{
_twitterAuthenticationInitializer.EnsureAuthenticationIsInitialized(); _twitterAuthenticationInitializer.EnsureAuthenticationIsInitialized();
ExceptionHandler.SwallowWebExceptions = false; ExceptionHandler.SwallowWebExceptions = false;
TweetinviConfig.CurrentThreadSettings.TweetMode = TweetMode.Extended; TweetinviConfig.CurrentThreadSettings.TweetMode = TweetMode.Extended;
@ -87,11 +86,6 @@ namespace BirdsiteLive.Twitter
_statisticsHandler.CalledTimelineApi(); _statisticsHandler.CalledTimelineApi();
if (timeline != null) tweets.AddRange(timeline); if (timeline != null) tweets.AddRange(timeline);
} }
}
catch (Exception e)
{
_logger.LogError(e, "Error retrieving timeline from {Username}, from {TweetId}", username, fromTweetId);
}
return tweets.Select(_tweetExtractor.Extract).ToArray(); return tweets.Select(_tweetExtractor.Extract).ToArray();
} }