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)
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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);
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
}
}
+ 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);
/// </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))
{
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);
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);