OSDN Git Service

HttpTwitter.DirectMessage/DirectMessageSentをTwitterApiクラスに置き換え
authorKimura Youichi <kim.upsilon@bucyou.net>
Sun, 1 May 2016 12:21:42 +0000 (21:21 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Mon, 2 May 2016 18:56:34 +0000 (03:56 +0900)
OpenTween.Tests/Api/TwitterApiTest.cs
OpenTween/Api/TwitterApi.cs
OpenTween/Connection/HttpTwitter.cs
OpenTween/Tween.cs
OpenTween/Twitter.cs

index f42d827..eaf4331 100644 (file)
@@ -311,6 +311,66 @@ namespace OpenTween.Api
         }
 
         [Fact]
+        public async Task DirectMessagesRecv_Test()
+        {
+            using (var twitterApi = new TwitterApi())
+            {
+                var mock = new Mock<IApiConnection>();
+                mock.Setup(x =>
+                    x.GetAsync<TwitterDirectMessage[]>(
+                        new Uri("direct_messages.json", UriKind.Relative),
+                        new Dictionary<string, string> {
+                            { "full_text", "true" },
+                            { "include_entities", "true" },
+                            { "include_ext_alt_text", "true" },
+                            { "count", "200" },
+                            { "max_id", "900" },
+                            { "since_id", "100" },
+                        },
+                        "/direct_messages")
+                )
+                .ReturnsAsync(new TwitterDirectMessage[0]);
+
+                twitterApi.apiConnection = mock.Object;
+
+                await twitterApi.DirectMessagesRecv(count: 200, maxId: 900L, sinceId: 100L)
+                    .ConfigureAwait(false);
+
+                mock.VerifyAll();
+            }
+        }
+
+        [Fact]
+        public async Task DirectMessagesSent_Test()
+        {
+            using (var twitterApi = new TwitterApi())
+            {
+                var mock = new Mock<IApiConnection>();
+                mock.Setup(x =>
+                    x.GetAsync<TwitterDirectMessage[]>(
+                        new Uri("direct_messages/sent.json", UriKind.Relative),
+                        new Dictionary<string, string> {
+                            { "full_text", "true" },
+                            { "include_entities", "true" },
+                            { "include_ext_alt_text", "true" },
+                            { "count", "200" },
+                            { "max_id", "900" },
+                            { "since_id", "100" },
+                        },
+                        "/direct_messages/sent")
+                )
+                .ReturnsAsync(new TwitterDirectMessage[0]);
+
+                twitterApi.apiConnection = mock.Object;
+
+                await twitterApi.DirectMessagesSent(count: 200, maxId: 900L, sinceId: 100L)
+                    .ConfigureAwait(false);
+
+                mock.VerifyAll();
+            }
+        }
+
+        [Fact]
         public async Task DirectMessagesNew_Test()
         {
             using (var twitterApi = new TwitterApi())
index 2eff941..ff95b24 100644 (file)
@@ -183,6 +183,46 @@ namespace OpenTween.Api
             return this.apiConnection.GetAsync<TwitterStatus[]>(endpoint, param, "/lists/statuses");
         }
 
+        public Task<TwitterDirectMessage[]> DirectMessagesRecv(int? count = null, long? maxId = null, long? sinceId = null)
+        {
+            var endpoint = new Uri("direct_messages.json", UriKind.Relative);
+            var param = new Dictionary<string, string>
+            {
+                ["full_text"] = "true",
+                ["include_entities"] = "true",
+                ["include_ext_alt_text"] = "true",
+            };
+
+            if (count != null)
+                param["count"] = count.ToString();
+            if (maxId != null)
+                param["max_id"] = maxId.ToString();
+            if (sinceId != null)
+                param["since_id"] = sinceId.ToString();
+
+            return this.apiConnection.GetAsync<TwitterDirectMessage[]>(endpoint, param, "/direct_messages");
+        }
+
+        public Task<TwitterDirectMessage[]> DirectMessagesSent(int? count = null, long? maxId = null, long? sinceId = null)
+        {
+            var endpoint = new Uri("direct_messages/sent.json", UriKind.Relative);
+            var param = new Dictionary<string, string>
+            {
+                ["full_text"] = "true",
+                ["include_entities"] = "true",
+                ["include_ext_alt_text"] = "true",
+            };
+
+            if (count != null)
+                param["count"] = count.ToString();
+            if (maxId != null)
+                param["max_id"] = maxId.ToString();
+            if (sinceId != null)
+                param["since_id"] = sinceId.ToString();
+
+            return this.apiConnection.GetAsync<TwitterDirectMessage[]>(endpoint, param, "/direct_messages/sent");
+        }
+
         public Task<LazyJson<TwitterDirectMessage>> DirectMessagesNew(string status, string sendTo)
         {
             var endpoint = new Uri("direct_messages/new.json", UriKind.Relative);
index 4d738ee..ef44e73 100644 (file)
@@ -152,48 +152,6 @@ namespace OpenTween
             this.Initialize("", "", "", 0);
         }
 
-        public HttpStatusCode DirectMessages(int? count, long? max_id, long? since_id, ref string content)
-        {
-            Dictionary<string, string> param = new Dictionary<string, string>();
-            if (count != null)
-                param.Add("count", count.ToString());
-            if (max_id != null)
-                param.Add("max_id", max_id.ToString());
-            if (since_id != null)
-                param.Add("since_id", since_id.ToString());
-            param.Add("full_text", "true");
-            param.Add("include_entities", "true");
-            param.Add("include_ext_alt_text", "true");
-
-            return httpCon.GetContent(GetMethod,
-                this.CreateTwitterUri("/1.1/direct_messages.json"),
-                param,
-                ref content,
-                this.CreateRatelimitHeadersDict(),
-                this.CreateApiCalllback("/direct_messages"));
-        }
-
-        public HttpStatusCode DirectMessagesSent(int? count, long? max_id, long? since_id, ref string content)
-        {
-            Dictionary<string, string> param = new Dictionary<string, string>();
-            if (count != null)
-                param.Add("count", count.ToString());
-            if (max_id != null)
-                param.Add("max_id", max_id.ToString());
-            if (since_id != null)
-                param.Add("since_id", since_id.ToString());
-            param.Add("full_text", "true");
-            param.Add("include_entities", "true");
-            param.Add("include_ext_alt_text", "true");
-
-            return httpCon.GetContent(GetMethod,
-                this.CreateTwitterUri("/1.1/direct_messages/sent.json"),
-                param,
-                ref content,
-                this.CreateRatelimitHeadersDict(),
-                this.CreateApiCalllback("/direct_messages/sent"));
-        }
-
         public HttpStatusCode Favorites(int? count, ref string content)
         {
             Dictionary<string, string> param = new Dictionary<string, string>();
index ccaba4f..1dd267e 100644 (file)
@@ -2409,7 +2409,7 @@ namespace OpenTween
             catch (WebApiException ex)
             {
                 this._myStatusError = true;
-                this.StatusLabel.Text = ex.Message;
+                this.StatusLabel.Text = $"Err:{ex.Message}(GetDirectMessage)";
             }
             finally
             {
@@ -2433,10 +2433,12 @@ namespace OpenTween
 
             p.Report(string.Format(Properties.Resources.GetTimelineWorker_RunWorkerCompletedText8, loadMore ? -1 : 1));
 
-            await Task.Run(() =>
+            await Task.Run(async () =>
             {
-                this.tw.GetDirectMessageApi(read, MyCommon.WORKERTYPE.DirectMessegeRcv, loadMore);
-                this.tw.GetDirectMessageApi(read, MyCommon.WORKERTYPE.DirectMessegeSnt, loadMore);
+                await this.tw.GetDirectMessageApi(read, MyCommon.WORKERTYPE.DirectMessegeRcv, loadMore)
+                    .ConfigureAwait(false);
+                await this.tw.GetDirectMessageApi(read, MyCommon.WORKERTYPE.DirectMessegeSnt, loadMore)
+                    .ConfigureAwait(false);
 
                 this._statuses.DistributePosts();
             });
index ffb59a4..f8bf3f6 100644 (file)
@@ -1454,31 +1454,8 @@ namespace OpenTween
                 tab.OldestId = minimumId.Value;
         }
 
-        private void CreateDirectMessagesFromJson(string content, MyCommon.WORKERTYPE gType, bool read)
+        private void CreateDirectMessagesFromJson(TwitterDirectMessage[] item, MyCommon.WORKERTYPE gType, bool read)
         {
-            TwitterDirectMessage[] item;
-            try
-            {
-                if (gType == MyCommon.WORKERTYPE.UserStream)
-                {
-                    item = new[] { TwitterStreamEventDirectMessage.ParseJson(content).DirectMessage };
-                }
-                else
-                {
-                    item = TwitterDirectMessage.ParseJsonArray(content);
-                }
-            }
-            catch(SerializationException ex)
-            {
-                MyCommon.TraceOut(ex.Message + Environment.NewLine + content);
-                throw new WebApiException("Json Parse Error(DataContractJsonSerializer)", content, ex);
-            }
-            catch(Exception ex)
-            {
-                MyCommon.TraceOut(ex, MethodBase.GetCurrentMethod().Name + " " + content);
-                throw new WebApiException("Invalid Json!", content, ex);
-            }
-
             foreach (var message in item)
             {
                 var post = new PostClass();
@@ -1561,7 +1538,7 @@ namespace OpenTween
                 }
                 catch(Exception ex)
                 {
-                    MyCommon.TraceOut(ex, MethodBase.GetCurrentMethod().Name + " " + content);
+                    MyCommon.TraceOut(ex, MethodBase.GetCurrentMethod().Name);
                     MessageBox.Show("Parse Error(CreateDirectMessagesFromJson)");
                     continue;
                 }
@@ -1577,50 +1554,42 @@ namespace OpenTween
             }
         }
 
-        public void GetDirectMessageApi(bool read,
-                                MyCommon.WORKERTYPE gType,
-                                bool more)
+        public async Task GetDirectMessageApi(bool read, MyCommon.WORKERTYPE gType, bool more)
         {
             this.CheckAccountState();
             this.CheckAccessLevel(TwitterApiAccessLevel.ReadWriteAndDirectMessage);
 
-            HttpStatusCode res;
-            var content = "";
             var count = GetApiResultCount(gType, more, false);
 
-            try
+            TwitterDirectMessage[] messages;
+            if (gType == MyCommon.WORKERTYPE.DirectMessegeRcv)
             {
-                if (gType == MyCommon.WORKERTYPE.DirectMessegeRcv)
+                if (more)
                 {
-                    if (more)
-                    {
-                        res = twCon.DirectMessages(count, minDirectmessage, null, ref content);
-                    }
-                    else
-                    {
-                        res = twCon.DirectMessages(count, null, null, ref content);
-                    }
+                    messages = await this.Api.DirectMessagesRecv(count, maxId: this.minDirectmessage)
+                        .ConfigureAwait(false);
                 }
                 else
                 {
-                    if (more)
-                    {
-                        res = twCon.DirectMessagesSent(count, minDirectmessageSent, null, ref content);
-                    }
-                    else
-                    {
-                        res = twCon.DirectMessagesSent(count, null, null, ref content);
-                    }
+                    messages = await this.Api.DirectMessagesRecv(count)
+                        .ConfigureAwait(false);
                 }
             }
-            catch(Exception ex)
+            else
             {
-                throw new WebApiException("Err:" + ex.Message, ex);
+                if (more)
+                {
+                    messages = await this.Api.DirectMessagesSent(count, maxId: this.minDirectmessageSent)
+                        .ConfigureAwait(false);
+                }
+                else
+                {
+                    messages = await this.Api.DirectMessagesSent(count)
+                        .ConfigureAwait(false);
+                }
             }
 
-            this.CheckStatusCode(res, content);
-
-            CreateDirectMessagesFromJson(content, gType, read);
+            CreateDirectMessagesFromJson(messages, gType, read);
         }
 
         public void GetFavoritesApi(bool read,
@@ -2481,7 +2450,15 @@ namespace OpenTween
 
                 if (isDm)
                 {
-                    CreateDirectMessagesFromJson(line, MyCommon.WORKERTYPE.UserStream, false);
+                    try
+                    {
+                        var message = TwitterStreamEventDirectMessage.ParseJson(line).DirectMessage;
+                        this.CreateDirectMessagesFromJson(new[] { message }, MyCommon.WORKERTYPE.UserStream, false);
+                    }
+                    catch (SerializationException ex)
+                    {
+                        throw TwitterApiException.CreateFromException(ex, line);
+                    }
                 }
                 else
                 {