From d956d49b344af71ee7e7b22a787e614622b2865a Mon Sep 17 00:00:00 2001 From: Vincent Cloutier Date: Sat, 27 May 2023 15:24:04 -0400 Subject: [PATCH] replicate alt-text of images --- src/BirdsiteLive.ActivityPub/Models/Attachment.cs | 7 ++++++- src/BirdsiteLive.Domain/StatusService.cs | 3 ++- src/BirdsiteLive.Twitter/Models/ExtractedMedia.cs | 1 + src/BirdsiteLive.Twitter/TwitterTweetsService.cs | 11 +++++++++-- src/Tests/BirdsiteLive.Twitter.Tests/TweetTests.cs | 13 ++++++++++++- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/BirdsiteLive.ActivityPub/Models/Attachment.cs b/src/BirdsiteLive.ActivityPub/Models/Attachment.cs index d7b86dd..4dee06c 100644 --- a/src/BirdsiteLive.ActivityPub/Models/Attachment.cs +++ b/src/BirdsiteLive.ActivityPub/Models/Attachment.cs @@ -1,9 +1,14 @@ -namespace BirdsiteLive.ActivityPub +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace BirdsiteLive.ActivityPub { public class Attachment { public string type { get; set; } public string mediaType { get; set; } public string url { get; set; } + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string name { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.Domain/StatusService.cs b/src/BirdsiteLive.Domain/StatusService.cs index f831324..e390b95 100644 --- a/src/BirdsiteLive.Domain/StatusService.cs +++ b/src/BirdsiteLive.Domain/StatusService.cs @@ -137,7 +137,8 @@ namespace BirdsiteLive.Domain { type = "Document", url = x.Url, - mediaType = x.MediaType + mediaType = x.MediaType, + name = x.AltText }; }).ToArray(); } diff --git a/src/BirdsiteLive.Twitter/Models/ExtractedMedia.cs b/src/BirdsiteLive.Twitter/Models/ExtractedMedia.cs index cdab034..396e5c4 100644 --- a/src/BirdsiteLive.Twitter/Models/ExtractedMedia.cs +++ b/src/BirdsiteLive.Twitter/Models/ExtractedMedia.cs @@ -4,5 +4,6 @@ { public string MediaType { get; set; } public string Url { get; set; } + public string AltText { get; set; } } } \ No newline at end of file diff --git a/src/BirdsiteLive.Twitter/TwitterTweetsService.cs b/src/BirdsiteLive.Twitter/TwitterTweetsService.cs index a852d17..7db3001 100644 --- a/src/BirdsiteLive.Twitter/TwitterTweetsService.cs +++ b/src/BirdsiteLive.Twitter/TwitterTweetsService.cs @@ -272,7 +272,8 @@ namespace BirdsiteLive.Twitter { var type = media.GetProperty("type").GetString(); string url = ""; - if (type == "video" || type == "animated_gif") + string altText = null; + if (media.TryGetProperty("video_info", out _)) { var bitrate = -1; foreach (JsonElement v in media.GetProperty("video_info").GetProperty("variants").EnumerateArray()) @@ -291,10 +292,16 @@ namespace BirdsiteLive.Twitter { url = media.GetProperty("media_url_https").GetString(); } + + if (media.TryGetProperty("ext_alt_text", out JsonElement altNode)) + { + altText = altNode.GetString(); + } var m = new ExtractedMedia { - MediaType = GetMediaType(type, media.GetProperty("media_url_https").GetString()), + MediaType = GetMediaType(type, url), Url = url, + AltText = altText }; Media.Add(m); diff --git a/src/Tests/BirdsiteLive.Twitter.Tests/TweetTests.cs b/src/Tests/BirdsiteLive.Twitter.Tests/TweetTests.cs index b40674b..575233a 100644 --- a/src/Tests/BirdsiteLive.Twitter.Tests/TweetTests.cs +++ b/src/Tests/BirdsiteLive.Twitter.Tests/TweetTests.cs @@ -57,7 +57,7 @@ namespace BirdsiteLive.ActivityPub.Tests Assert.AreEqual(tweet.Media[0].MediaType, "image/jpeg"); Assert.AreEqual(tweet.Media.Length, 1); - // TODO test alt-text of images + Assert.AreEqual(tweet.Media[0].AltText, "President Obama with Speaker Nancy Pelosi in DC."); } [TestMethod] @@ -75,7 +75,18 @@ namespace BirdsiteLive.ActivityPub.Tests Assert.AreEqual(tweet.Media.Length, 1); Assert.AreEqual(tweet.Media[0].MediaType, "video/mp4"); + Assert.IsNull(tweet.Media[0].AltText); Assert.IsTrue(tweet.Media[0].Url.StartsWith("https://video.twimg.com/")); + + + var tweet2 = await _tweetService.GetTweetAsync(1657913781006258178); + Assert.AreEqual(tweet2.MessageContent, + "Coinbase has big international expansion plans\n\nTom Duff Gordon (@tomduffgordon), VP of International Policy @coinbase has the deets"); + + Assert.AreEqual(tweet2.Media.Length, 1); + Assert.AreEqual(tweet2.Media[0].MediaType, "video/mp4"); + Assert.IsNull(tweet2.Media[0].AltText); + Assert.IsTrue(tweet2.Media[0].Url.StartsWith("https://video.twimg.com/")); } [Ignore]