OSDN Git Service

ton.twitter.com の画像の読み込みにTwitterApiConnectionクラスを使用する
authorKimura Youichi <kim.upsilon@bucyou.net>
Mon, 2 May 2016 14:16:42 +0000 (23:16 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Mon, 2 May 2016 18:56:37 +0000 (03:56 +0900)
OpenTween/Api/TwitterApi.cs
OpenTween/Connection/IApiConnection.cs
OpenTween/Connection/TwitterApiConnection.cs
OpenTween/Thumbnail/Services/TonTwitterCom.cs
OpenTween/Tween.cs

index ff95b24..eab35a0 100644 (file)
@@ -35,6 +35,8 @@ namespace OpenTween.Api
         public long CurrentUserId { get; private set; }
         public string CurrentScreenName { get; private set; }
 
+        public IApiConnection Connection => this.apiConnection;
+
         internal IApiConnection apiConnection;
 
         public void Initialize(string accessToken, string accessSecret, long userId, string screenName)
index 41d93e5..0b4c524 100644 (file)
@@ -21,6 +21,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -32,6 +33,8 @@ namespace OpenTween.Connection
         Task<T> GetAsync<T>(Uri uri, IDictionary<string, string> param);
         Task<T> GetAsync<T>(Uri uri, IDictionary<string, string> param, string endpointName);
 
+        Task<Stream> GetStreamAsync(Uri uri, IDictionary<string, string> param);
+
         Task<LazyJson<T>> PostLazyAsync<T>(Uri uri, IDictionary<string, string> param);
 
         Task<LazyJson<T>> PostLazyAsync<T>(Uri uri, IDictionary<string, string> param, IDictionary<string, IMediaItem> media);
index 8cc303e..ba068b6 100644 (file)
@@ -21,6 +21,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
@@ -97,6 +98,24 @@ namespace OpenTween.Connection
             }
         }
 
+        public async Task<Stream> GetStreamAsync(Uri uri, IDictionary<string, string> param)
+        {
+            var requestUri = new Uri(this.RestApiBase, uri);
+
+            if (param != null)
+                requestUri = new Uri(requestUri, "?" + MyCommon.BuildQueryString(param));
+
+            try
+            {
+                return await this.http.GetStreamAsync(requestUri)
+                    .ConfigureAwait(false);
+            }
+            catch (OperationCanceledException ex)
+            {
+                throw TwitterApiException.CreateFromException(ex);
+            }
+        }
+
         public async Task<LazyJson<T>> PostLazyAsync<T>(Uri uri, IDictionary<string, string> param)
         {
             var requestUri = new Uri(this.RestApiBase, uri);
index 3ad3ed5..2c46445 100644 (file)
@@ -37,16 +37,13 @@ namespace OpenTween.Thumbnail.Services
     /// </summary>
     class TonTwitterCom : IThumbnailService
     {
-        /// <summary>
-        /// OAuth のトークン等を設定させるためのデリゲート
-        /// </summary>
-        internal static Action<HttpConnectionOAuth> InitializeOAuthToken;
+        internal static Func<IApiConnection> GetApiConnection;
 
         public override Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
         {
             return Task.Run<ThumbnailInfo>(() =>
             {
-                if (InitializeOAuthToken == null)
+                if (GetApiConnection == null)
                     return null;
 
                 if (!url.StartsWith(@"https://ton.twitter.com/1.1/ton/data/", StringComparison.Ordinal))
@@ -66,21 +63,16 @@ namespace OpenTween.Thumbnail.Services
         {
             public override Task<MemoryImage> LoadThumbnailImageAsync(HttpClient http, CancellationToken cancellationToken)
             {
-                // TODO: HttpClient を使用したコードに置き換えたい
                 return Task.Run(async () =>
                 {
-                    var oauth = new HttpOAuthApiProxy();
-                    TonTwitterCom.InitializeOAuthToken(oauth);
+                    var apiConnection = TonTwitterCom.GetApiConnection();
 
-                    Stream response = null;
-                    var statusCode = oauth.GetContent("GET", new Uri(this.ThumbnailImageUrl), null, ref response, Networking.GetUserAgentString());
-
-                    using (response)
+                    using (var imageStream = await apiConnection.GetStreamAsync(new Uri(this.ThumbnailImageUrl), null)
+                        .ConfigureAwait(false))
                     {
-                        if (statusCode != HttpStatusCode.OK)
-                            throw new WebException(statusCode.ToString(), WebExceptionStatus.ProtocolError);
+                        cancellationToken.ThrowIfCancellationRequested();
 
-                        return await MemoryImage.CopyFromStreamAsync(response)
+                        return await MemoryImage.CopyFromStreamAsync(imageStream)
                             .ConfigureAwait(false);
                     }
                 }, cancellationToken);
index 1dd267e..16c8a78 100644 (file)
@@ -844,9 +844,7 @@ namespace OpenTween
             imgazyobizinet.Enabled = this._cfgCommon.EnableImgAzyobuziNet;
             imgazyobizinet.DisabledInDM = this._cfgCommon.ImgAzyobuziNetDisabledInDM;
 
-            Thumbnail.Services.TonTwitterCom.InitializeOAuthToken = x =>
-                x.Initialize(ApplicationSettings.TwitterConsumerKey, ApplicationSettings.TwitterConsumerSecret,
-                    this.tw.AccessToken, this.tw.AccessTokenSecret, "", "");
+            Thumbnail.Services.TonTwitterCom.GetApiConnection = () => this.twitterApi.Connection;
 
             //画像投稿サービス
             ImageSelector.Initialize(tw, this.tw.Configuration, _cfgCommon.UseImageServiceName, _cfgCommon.UseImageService);