diff --git a/src/BirdsiteLive.Domain/StatusService.cs b/src/BirdsiteLive.Domain/StatusService.cs index c669779..4983de1 100644 --- a/src/BirdsiteLive.Domain/StatusService.cs +++ b/src/BirdsiteLive.Domain/StatusService.cs @@ -46,6 +46,17 @@ namespace BirdsiteLive.Domain var extractedTags = _statusExtractor.Extract(tweet.MessageContent); _statisticsHandler.ExtractedStatus(extractedTags.tags.Count(x => x.type == "Mention")); + // Replace RT by a link + var content = extractedTags.content; + if (content.Contains("{RT}") && tweet.IsRetweet) + { + if (!string.IsNullOrWhiteSpace(tweet.RetweetUrl)) + content = content.Replace("{RT}", + $@"RT"); + else + content = content.Replace("{RT}", "RT"); + } + string inReplyTo = null; if (tweet.InReplyToStatusId != default) inReplyTo = $"https://{_instanceSettings.Domain}/users/{tweet.InReplyToAccount.ToLowerInvariant()}/statuses/{tweet.InReplyToStatusId}"; @@ -67,7 +78,7 @@ namespace BirdsiteLive.Domain cc = new string[0], sensitive = false, - content = $"

{extractedTags.content}

", + content = $"

{content}

", attachment = Convert(tweet.Media), tag = extractedTags.tags }; diff --git a/src/BirdsiteLive.Twitter/Extractors/TweetExtractor.cs b/src/BirdsiteLive.Twitter/Extractors/TweetExtractor.cs index 573385c..5f339fd 100644 --- a/src/BirdsiteLive.Twitter/Extractors/TweetExtractor.cs +++ b/src/BirdsiteLive.Twitter/Extractors/TweetExtractor.cs @@ -26,11 +26,25 @@ namespace BirdsiteLive.Twitter.Extractors Media = ExtractMedia(tweet.Media), CreatedAt = tweet.CreatedAt.ToUniversalTime(), IsReply = tweet.InReplyToUserId != null, - IsThread = tweet.InReplyToUserId != null && tweet.InReplyToUserId == tweet.CreatedBy.Id + IsThread = tweet.InReplyToUserId != null && tweet.InReplyToUserId == tweet.CreatedBy.Id, + IsRetweet = tweet.IsRetweet, + RetweetUrl = ExtractRetweetUrl(tweet) }; + return extractedTweet; } + private string ExtractRetweetUrl(ITweet tweet) + { + if (tweet.IsRetweet && tweet.FullText.Contains("https://t.co/")) + { + var retweetId = tweet.FullText.Split(new[] { "https://t.co/" }, StringSplitOptions.RemoveEmptyEntries).Last(); + return $"https://t.co/{retweetId}"; + } + + return null; + } + public string ExtractMessage(ITweet tweet) { var tweetUrls = tweet.Media.Select(x => x.URL).Distinct(); @@ -38,13 +52,13 @@ namespace BirdsiteLive.Twitter.Extractors foreach (var tweetUrl in tweetUrls) message = message.Replace(tweetUrl, string.Empty).Trim(); - if (tweet.QuotedTweet != null) message = $"[Quote RT]{Environment.NewLine}{message}"; + if (tweet.QuotedTweet != null) message = $"[Quote {{RT}}]{Environment.NewLine}{message}"; if (tweet.IsRetweet) { if (tweet.RetweetedTweet != null) - message = $"[RT @{tweet.RetweetedTweet.CreatedBy.ScreenName}]{Environment.NewLine}{tweet.RetweetedTweet.FullText}"; + message = $"[{{RT}} @{tweet.RetweetedTweet.CreatedBy.ScreenName}]{Environment.NewLine}{message}"; else - message = message.Replace("RT", "[RT]"); + message = message.Replace("RT", "[{{RT}}]"); } // Expand URLs diff --git a/src/BirdsiteLive.Twitter/Models/ExtractedTweet.cs b/src/BirdsiteLive.Twitter/Models/ExtractedTweet.cs index 1f6bcea..f7f4e59 100644 --- a/src/BirdsiteLive.Twitter/Models/ExtractedTweet.cs +++ b/src/BirdsiteLive.Twitter/Models/ExtractedTweet.cs @@ -13,5 +13,7 @@ namespace BirdsiteLive.Twitter.Models public string InReplyToAccount { get; set; } public bool IsReply { get; set; } public bool IsThread { get; set; } + public bool IsRetweet { get; set; } + public string RetweetUrl { get; set; } } } \ No newline at end of file