OSDN Git Service

リプライ制限されたツイートのRTがParseTweetでエラーになる不具合の修正
[opentween/open-tween.git] / OpenTween / Api / GraphQL / TimelineTweet.cs
index 8507df4..f8bb804 100644 (file)
@@ -52,14 +52,7 @@ namespace OpenTween.Api.GraphQL
             try
             {
                 var resultElm = this.Element.Element("tweet_results")?.Element("result") ?? throw CreateParseError();
-                var tweetElm = resultElm.Element("__typename")?.Value switch
-                {
-                    "Tweet" => resultElm,
-                    "TweetWithVisibilityResults" => resultElm.Element("tweet") ?? throw CreateParseError(),
-                    _ => throw CreateParseError(),
-                };
-
-                return this.ParseTweet(tweetElm);
+                return this.ParseTweetUnion(resultElm);
             }
             catch (WebApiException ex)
             {
@@ -69,6 +62,18 @@ namespace OpenTween.Api.GraphQL
             }
         }
 
+        private TwitterStatus ParseTweetUnion(XElement tweetUnionElm)
+        {
+            var tweetElm = tweetUnionElm.Element("__typename")?.Value switch
+            {
+                "Tweet" => tweetUnionElm,
+                "TweetWithVisibilityResults" => tweetUnionElm.Element("tweet") ?? throw CreateParseError(),
+                _ => throw CreateParseError(),
+            };
+
+            return this.ParseTweet(tweetElm);
+        }
+
         private TwitterStatus ParseTweet(XElement tweetElm)
         {
             var tweetLegacyElm = tweetElm.Element("legacy") ?? throw CreateParseError();
@@ -142,7 +147,7 @@ namespace OpenTween.Api.GraphQL
                     ScreenName = GetText(userLegacyElm, "screen_name"),
                     Protected = GetTextOrNull(userLegacyElm, "protected") == "true",
                 },
-                RetweetedStatus = retweetedTweetElm != null ? this.ParseTweet(retweetedTweetElm) : null,
+                RetweetedStatus = retweetedTweetElm != null ? this.ParseTweetUnion(retweetedTweetElm) : null,
             };
         }