OSDN Git Service

TwitterEntityUrl.DisplayUrl, ExpandedUrl をNullableに変更
authorKimura Youichi <kim.upsilon@bucyou.net>
Sat, 2 Dec 2023 07:37:23 +0000 (16:37 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 2 Dec 2023 07:46:51 +0000 (16:46 +0900)
古いツイートおよびプロフィールに含まれる display_url, expanded_url を含まない Entity に対応するための修正

OpenTween/Api/DataModel/TwitterEntity.cs
OpenTween/Models/TwitterPostFactory.cs
OpenTween/TweetFormatter.cs
OpenTween/UserInfoDialog.cs

index cd7e2e0..e39cbc0 100644 (file)
@@ -162,11 +162,11 @@ namespace OpenTween.Api.DataModel
     [DataContract]
     public class TwitterEntityUrl : TwitterEntity
     {
-        [DataMember(Name = "display_url")]
-        public string DisplayUrl { get; set; }
+        [DataMember(Name = "display_url", IsRequired = false)]
+        public string? DisplayUrl { get; set; }
 
-        [DataMember(Name = "expanded_url")]
-        public string ExpandedUrl { get; set; }
+        [DataMember(Name = "expanded_url", IsRequired = false)]
+        public string? ExpandedUrl { get; set; }
 
         [DataMember(Name = "url")]
         public string Url { get; set; }
index 6fb82e1..b540d2a 100644 (file)
@@ -114,7 +114,7 @@ namespace OpenTween.Models
                 .ToArray();
 
             var expandedUrls = entities.OfType<TwitterEntityUrl>()
-                .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl))
+                .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl ?? x.Url))
                 .ToArray();
 
             // メモリ使用量削減 (同一のテキストであれば同一の string インスタンスを参照させる)
@@ -229,7 +229,7 @@ namespace OpenTween.Models
                 .ToArray();
 
             var expandedUrls = entities.OfType<TwitterEntityUrl>()
-                .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl))
+                .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl ?? x.Url))
                 .ToArray();
 
             // 以下、ユーザー情報
@@ -512,7 +512,7 @@ namespace OpenTween.Models
         {
             entities ??= Enumerable.Empty<TwitterEntity>();
 
-            var urls = entities.OfType<TwitterEntityUrl>().Select(x => x.ExpandedUrl);
+            var urls = entities.OfType<TwitterEntityUrl>().Select(x => x.ExpandedUrl ?? x.Url);
 
             if (quotedStatusLink != null)
                 urls = urls.Append(quotedStatusLink.Expanded);
index 557e613..a036bd2 100644 (file)
@@ -132,7 +132,7 @@ namespace OpenTween
 
             // 過去に存在した壊れたエンティティの対策
             // 参照: https://dev.twitter.com/discussions/12628
-            if (entity.DisplayUrl == null)
+            if (entity.DisplayUrl == null || entity.ExpandedUrl == null)
             {
                 expandedUrl = MyCommon.ConvertToReadableUrl(targetText);
                 return $"""<a href="{E(entity.Url)}" title="{E(expandedUrl)}">{T(E(targetText))}</a>""";
index ac778d1..176ac2e 100644 (file)
@@ -169,7 +169,12 @@ namespace OpenTween
                 var urlEntities = entities?.Urls ?? Array.Empty<TwitterEntityUrl>();
 
                 foreach (var entity in urlEntities)
+                {
+                    if (entity.ExpandedUrl == null)
+                        continue;
+
                     entity.ExpandedUrl = await ShortUrl.Instance.ExpandUrlAsync(entity.ExpandedUrl);
+                }
 
                 // user.entities には urls 以外のエンティティが含まれていないため、テキストをもとに生成する
                 var mergedEntities = urlEntities.AsEnumerable<TwitterEntity>()
@@ -253,7 +258,7 @@ namespace OpenTween
                 var urlEntities = entities.Urls ?? Array.Empty<TwitterEntityUrl>();
 
                 foreach (var entity in urlEntities)
-                    entity.ExpandedUrl = await ShortUrl.Instance.ExpandUrlAsync(entity.ExpandedUrl);
+                    entity.ExpandedUrl = await ShortUrl.Instance.ExpandUrlAsync(entity.ExpandedUrl ?? entity.Url);
 
                 var mergedEntities = entities.Concat(TweetExtractor.ExtractEmojiEntities(status.FullText));