OSDN Git Service

OpenTween.Thumbnail.Services 内のOTWebClientを使用している箇所をHttpClientに置き換え
authorKimura Youichi <kim.upsilon@bucyou.net>
Tue, 15 Apr 2014 17:41:03 +0000 (02:41 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 19 Apr 2014 06:15:30 +0000 (15:15 +0900)
OpenTween.Tests/Thumbnail/Services/ImgAzyobuziNetTest.cs
OpenTween.Tests/Thumbnail/Services/MetaThumbnailServiceTest.cs
OpenTween.Tests/Thumbnail/Services/SimpleThumbnailServiceTest.cs
OpenTween.Tests/Thumbnail/Services/TinamiTest.cs
OpenTween/Thumbnail/Services/MetaThumbnailService.cs
OpenTween/Thumbnail/Services/Pixiv.cs
OpenTween/Thumbnail/Services/Tinami.cs
OpenTween/Thumbnail/Services/ViaMe.cs
OpenTween/Thumbnail/Services/Vimeo.cs

index 11d3232..54edf40 100644 (file)
@@ -23,9 +23,12 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Net;
+using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using NSubstitute;
 using Xunit;
 using Xunit.Extensions;
 
@@ -67,6 +70,20 @@ namespace OpenTween.Thumbnail.Services
             }
         }
 
+        public ImgAzyobuziNetTest()
+        {
+            this.MyCommonSetup();
+        }
+
+        public void MyCommonSetup()
+        {
+            var mockAssembly = Substitute.For<_Assembly>();
+            mockAssembly.GetName().Returns(new AssemblyName("OpenTween"));
+            MyCommon.EntryAssembly = mockAssembly;
+
+            MyCommon.fileVersion = "1.0.0.0";
+        }
+
         [Fact]
         public void HostFallbackTest()
         {
index 6c87d70..f95635b 100644 (file)
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using NSubstitute;
 using Xunit;
 using Xunit.Extensions;
 
@@ -41,12 +44,26 @@ namespace OpenTween.Thumbnail.Services
             {
             }
 
-            protected override string FetchImageUrl(string url)
+            protected override Task<string> FetchImageUrlAsync(string url, CancellationToken token)
             {
-                return this.FakeHtml;
+                return Task.FromResult(this.FakeHtml);
             }
         }
 
+        public MetaThumbnailServiceTest()
+        {
+            this.MyCommonSetup();
+        }
+
+        public void MyCommonSetup()
+        {
+            var mockAssembly = Substitute.For<_Assembly>();
+            mockAssembly.GetName().Returns(new AssemblyName("OpenTween"));
+            MyCommon.EntryAssembly = mockAssembly;
+
+            MyCommon.fileVersion = "1.0.0.0";
+        }
+
         [Fact]
         public async Task OGPMetaTest()
         {
index e2298b9..b2cee9c 100644 (file)
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using NSubstitute;
 using Xunit;
 using Xunit.Extensions;
 
@@ -32,6 +35,20 @@ namespace OpenTween.Thumbnail.Services
 {
     public class SimpleThumbnailServiceTest
     {
+        public SimpleThumbnailServiceTest()
+        {
+            this.MyCommonSetup();
+        }
+
+        public void MyCommonSetup()
+        {
+            var mockAssembly = Substitute.For<_Assembly>();
+            mockAssembly.GetName().Returns(new AssemblyName("OpenTween"));
+            MyCommon.EntryAssembly = mockAssembly;
+
+            MyCommon.fileVersion = "1.0.0.0";
+        }
+
         [Fact]
         public async Task RegexMatchTest()
         {
index 0b3d27c..71faca4 100644 (file)
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Threading;
 using System.Threading.Tasks;
 using System.Xml.Linq;
+using NSubstitute;
 using Xunit;
 using Xunit.Extensions;
 
@@ -43,14 +46,28 @@ namespace OpenTween.Thumbnail.Services
             {
             }
 
-            protected override XDocument FetchContentInfoApi(string url)
+            protected override Task<XDocument> FetchContentInfoApiAsync(string url, CancellationToken token)
             {
                 Assert.True(Regex.IsMatch(url, @"http://api\.tinami\.com/content/info\?cont_id=.+&api_key=.+"));
 
-                return XDocument.Parse(this.FakeXml);
+                return Task.FromResult(XDocument.Parse(this.FakeXml));
             }
         }
 
+        public TinamiTest()
+        {
+            this.MyCommonSetup();
+        }
+
+        public void MyCommonSetup()
+        {
+            var mockAssembly = Substitute.For<_Assembly>();
+            mockAssembly.GetName().Returns(new AssemblyName("OpenTween"));
+            MyCommon.EntryAssembly = mockAssembly;
+
+            MyCommon.fileVersion = "1.0.0.0";
+        }
+
         [Fact]
         public async Task ApiTest()
         {
index 8fd0cf4..91697f9 100644 (file)
@@ -48,32 +48,30 @@ namespace OpenTween.Thumbnail.Services
         {
         }
 
-        public override Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
+        public override async Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
         {
-            return Task.Run(() =>
-            {
-                var pageUrl = this.ReplaceUrl(url);
-                if (pageUrl == null) return null;
+            var pageUrl = this.ReplaceUrl(url);
+            if (pageUrl == null) return null;
 
-                try
-                {
-                    var content = this.FetchImageUrl(pageUrl);
+            try
+            {
+                var content = await this.FetchImageUrlAsync(pageUrl, token)
+                    .ConfigureAwait(false);
 
-                    var thumbnailUrl = this.GetThumbnailUrl(content);
-                    if (string.IsNullOrEmpty(thumbnailUrl)) return null;
+                var thumbnailUrl = this.GetThumbnailUrl(content);
+                if (string.IsNullOrEmpty(thumbnailUrl)) return null;
 
-                    return new ThumbnailInfo(this.http)
-                    {
-                        ImageUrl = url,
-                        ThumbnailUrl = thumbnailUrl,
-                        TooltipText = null,
-                    };
-                }
-                catch (WebException)
+                return new ThumbnailInfo(this.http)
                 {
-                    return null;
-                }
-            }, token);
+                    ImageUrl = url,
+                    ThumbnailUrl = thumbnailUrl,
+                    TooltipText = null,
+                };
+            }
+            catch (WebException)
+            {
+                return null;
+            }
         }
 
         protected virtual string GetThumbnailUrl(string html)
@@ -92,11 +90,14 @@ namespace OpenTween.Thumbnail.Services
             return null;
         }
 
-        protected virtual string FetchImageUrl(string url)
+        protected virtual async Task<string> FetchImageUrlAsync(string url, CancellationToken token)
         {
-            using (var client = new OTWebClient())
+            using (var response = await this.http.GetAsync(url, token).ConfigureAwait(false))
             {
-                return client.DownloadString(url);
+                response.EnsureSuccessStatusCode();
+
+                return await response.Content.ReadAsStringAsync()
+                    .ConfigureAwait(false);
             }
         }
     }
index ae1927d..b2e0210 100644 (file)
@@ -38,21 +38,20 @@ namespace OpenTween.Thumbnail.Services
         {
         }
 
-        public override Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
+        public override async Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
         {
-            return Task.Run<ThumbnailInfo>(async () =>
-            {
-                var thumb = await base.GetThumbnailInfoAsync(url, post, token);
-                if (thumb == null) return null;
+            var thumb = await base.GetThumbnailInfoAsync(url, post, token)
+                .ConfigureAwait(false);
 
-                return new Pixiv.Thumbnail(this.http)
-                {
-                    ImageUrl = thumb.ImageUrl,
-                    ThumbnailUrl = thumb.ThumbnailUrl,
-                    TooltipText = thumb.TooltipText,
-                    FullSizeImageUrl = thumb.FullSizeImageUrl,
-                };
-            }, token);
+            if (thumb == null) return null;
+
+            return new Pixiv.Thumbnail(this.http)
+            {
+                ImageUrl = thumb.ImageUrl,
+                ThumbnailUrl = thumb.ThumbnailUrl,
+                TooltipText = thumb.TooltipText,
+                FullSizeImageUrl = thumb.FullSizeImageUrl,
+            };
         }
 
         public class Thumbnail : ThumbnailInfo
index 9e761c6..bf0e73e 100644 (file)
@@ -40,38 +40,44 @@ namespace OpenTween.Thumbnail.Services
         {
         }
 
-        public override Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
+        public override async Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
         {
-            return Task.Run(() =>
-            {
-                var apiUrl = base.ReplaceUrl(url);
-                if (apiUrl == null) return null;
+            var apiUrl = base.ReplaceUrl(url);
+            if (apiUrl == null) return null;
 
-                var xdoc = this.FetchContentInfoApi(apiUrl);
+            var xdoc = await this.FetchContentInfoApiAsync(apiUrl, token)
+                .ConfigureAwait(false);
 
-                if (xdoc.XPathSelectElement("/rsp").Attribute("stat").Value == "ok")
+            if (xdoc.XPathSelectElement("/rsp").Attribute("stat").Value == "ok")
+            {
+                var thumbUrlElm = xdoc.XPathSelectElement("/rsp/content/thumbnails/thumbnail_150x150");
+                if (thumbUrlElm != null)
                 {
-                    var thumbUrlElm = xdoc.XPathSelectElement("/rsp/content/thumbnails/thumbnail_150x150");
-                    if (thumbUrlElm != null)
-                    {
-                        var descElm = xdoc.XPathSelectElement("/rsp/content/description");
+                    var descElm = xdoc.XPathSelectElement("/rsp/content/description");
 
-                        return new ThumbnailInfo(this.http)
-                        {
-                            ImageUrl = url,
-                            ThumbnailUrl = thumbUrlElm.Attribute("url").Value,
-                            TooltipText = descElm == null ? null : descElm.Value,
-                        };
-                    }
+                    return new ThumbnailInfo(this.http)
+                    {
+                        ImageUrl = url,
+                        ThumbnailUrl = thumbUrlElm.Attribute("url").Value,
+                        TooltipText = descElm == null ? null : descElm.Value,
+                    };
                 }
+            }
 
-                return null;
-            }, token);
+            return null;
         }
 
-        protected virtual XDocument FetchContentInfoApi(string url)
+        protected virtual async Task<XDocument> FetchContentInfoApiAsync(string url, CancellationToken token)
         {
-            return XDocument.Load(url);
+            using (var response = await this.http.GetAsync(url, token).ConfigureAwait(false))
+            {
+                response.EnsureSuccessStatusCode();
+
+                var xmlStr = await response.Content.ReadAsStringAsync()
+                    .ConfigureAwait(false);
+
+                return XDocument.Parse(xmlStr);
+            }
         }
     }
 }
index b3a58c7..f834da3 100644 (file)
@@ -40,34 +40,33 @@ namespace OpenTween.Thumbnail.Services
         {
         }
 
-        public override Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
+        public override async Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
         {
-            return Task.Run(() =>
+            var apiUrl = base.ReplaceUrl(url);
+            if (apiUrl == null) return null;
+
+            var json = await this.http.GetByteArrayAsync(apiUrl)
+                .ConfigureAwait(false);
+
+            using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(json, XmlDictionaryReaderQuotas.Max))
             {
-                var apiUrl = base.ReplaceUrl(url);
-                if (apiUrl == null) return null;
+                var xElm = XElement.Load(jsonReader);
 
-                using (var client = new OTWebClient())
-                using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(client.DownloadData(apiUrl), XmlDictionaryReaderQuotas.Max))
+                var thumbUrlElm = xElm.XPathSelectElement("/response/post/thumb_url");
+                if (thumbUrlElm == null)
                 {
-                    var xElm = XElement.Load(jsonReader);
-
-                    var thumbUrlElm = xElm.XPathSelectElement("/response/post/thumb_url");
-                    if (thumbUrlElm == null)
-                    {
-                        return null;
-                    }
+                    return null;
+                }
 
-                    var textElm = xElm.XPathSelectElement("/response/post/text");
+                var textElm = xElm.XPathSelectElement("/response/post/text");
 
-                    return new ThumbnailInfo(this.http)
-                    {
-                        ImageUrl = url,
-                        ThumbnailUrl = thumbUrlElm.Value,
-                        TooltipText = textElm == null ? null : textElm.Value,
-                    };
-                }
-            }, token);
+                return new ThumbnailInfo(this.http)
+                {
+                    ImageUrl = url,
+                    ThumbnailUrl = thumbUrlElm.Value,
+                    TooltipText = textElm == null ? null : textElm.Value,
+                };
+            }
         }
     }
 }
index 98defb7..3302ecb 100644 (file)
@@ -40,40 +40,40 @@ namespace OpenTween.Thumbnail.Services
         {
         }
 
-        public override Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
+        public override async Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
         {
-            return Task.Run(() =>
-            {
-                var apiUrl = base.ReplaceUrl(url);
-                if (apiUrl == null) return null;
+            var apiUrl = base.ReplaceUrl(url);
+            if (apiUrl == null) return null;
 
-                var xdoc = XDocument.Load(apiUrl);
+            var xmlStr = await this.http.GetStringAsync(apiUrl)
+                .ConfigureAwait(false);
 
-                var thumbUrlElm = xdoc.XPathSelectElement("/oembed/thumbnail_url");
-                if (thumbUrlElm != null)
-                {
-                    var titleElm = xdoc.XPathSelectElement("/oembed/title");
-                    var durationElm = xdoc.XPathSelectElement("/oembed/duration");
+            var xdoc = XDocument.Parse(xmlStr);
 
-                    var tooltipText = "";
-                    if (titleElm != null && durationElm != null)
-                    {
-                        var duration = int.Parse(durationElm.Value);
-                        var minute = duration / 60;
-                        var second = duration % 60;
-                        tooltipText = string.Format("{0} ({1:00}:{2:00})", titleElm.Value, minute, second);
-                    }
+            var thumbUrlElm = xdoc.XPathSelectElement("/oembed/thumbnail_url");
+            if (thumbUrlElm != null)
+            {
+                var titleElm = xdoc.XPathSelectElement("/oembed/title");
+                var durationElm = xdoc.XPathSelectElement("/oembed/duration");
 
-                    return new ThumbnailInfo(this.http)
-                    {
-                        ImageUrl = url,
-                        ThumbnailUrl = thumbUrlElm.Value,
-                        TooltipText = tooltipText,
-                    };
+                var tooltipText = "";
+                if (titleElm != null && durationElm != null)
+                {
+                    var duration = int.Parse(durationElm.Value);
+                    var minute = duration / 60;
+                    var second = duration % 60;
+                    tooltipText = string.Format("{0} ({1:00}:{2:00})", titleElm.Value, minute, second);
                 }
 
-                return null;
-            }, token);
+                return new ThumbnailInfo(this.http)
+                {
+                    ImageUrl = url,
+                    ThumbnailUrl = thumbUrlElm.Value,
+                    TooltipText = tooltipText,
+                };
+            }
+
+            return null;
         }
     }
 }