dev
Revision | 1e08bca54bf95d8e4632ee05b3acee3b0770d4e6 (tree) |
---|---|
Time | 2014-01-13 07:46:46 |
Author | Kimura Youichi <kim.upsilon@bucy...> |
Commiter | Kimura Youichi |
ton.twitter.com (DM添付の画像に使用される) のサムネイル表示に対応
@@ -256,6 +256,7 @@ | ||
256 | 256 | <Compile Include="Thumbnail\Services\Pixiv.cs" /> |
257 | 257 | <Compile Include="Thumbnail\Services\SimpleThumbnailService.cs" /> |
258 | 258 | <Compile Include="Thumbnail\Services\Tinami.cs" /> |
259 | + <Compile Include="Thumbnail\Services\TonTwitterCom.cs" /> | |
259 | 260 | <Compile Include="Thumbnail\Services\Tumblr.cs" /> |
260 | 261 | <Compile Include="Thumbnail\Services\ViaMe.cs" /> |
261 | 262 | <Compile Include="Thumbnail\Services\Vimeo.cs" /> |
@@ -0,0 +1,84 @@ | ||
1 | +// OpenTween - Client of Twitter | |
2 | +// Copyright (c) 2013 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/> | |
3 | +// All rights reserved. | |
4 | +// | |
5 | +// This file is part of OpenTween. | |
6 | +// | |
7 | +// This program is free software; you can redistribute it and/or modify it | |
8 | +// under the terms of the GNU General Public License as published by the Free | |
9 | +// Software Foundation; either version 3 of the License, or (at your option) | |
10 | +// any later version. | |
11 | +// | |
12 | +// This program is distributed in the hope that it will be useful, but | |
13 | +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
14 | +// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | +// for more details. | |
16 | +// | |
17 | +// You should have received a copy of the GNU General Public License along | |
18 | +// with this program. If not, see <http://www.gnu.org/licenses/>, or write to | |
19 | +// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, | |
20 | +// Boston, MA 02110-1301, USA. | |
21 | + | |
22 | +using System; | |
23 | +using System.Collections.Generic; | |
24 | +using System.IO; | |
25 | +using System.Linq; | |
26 | +using System.Net; | |
27 | +using System.Text; | |
28 | +using System.Threading.Tasks; | |
29 | +using System.Threading; | |
30 | + | |
31 | +namespace OpenTween.Thumbnail.Services | |
32 | +{ | |
33 | + /// <summary> | |
34 | + /// Twitter の DM に添付された画像をサムネイル表示するためのクラス | |
35 | + /// </summary> | |
36 | + class TonTwitterCom : IThumbnailService | |
37 | + { | |
38 | + /// <summary> | |
39 | + /// OAuth のトークン等を設定させるためのデリゲート | |
40 | + /// </summary> | |
41 | + internal static Action<HttpConnectionOAuth> InitializeOAuthToken; | |
42 | + | |
43 | + public override ThumbnailInfo GetThumbnailInfo(string url, PostClass post) | |
44 | + { | |
45 | + if (InitializeOAuthToken == null) | |
46 | + return null; | |
47 | + | |
48 | + if (!url.StartsWith(@"https://ton.twitter.com/1.1/ton/data/")) | |
49 | + return null; | |
50 | + | |
51 | + return new TonTwitterCom.Thumbnail | |
52 | + { | |
53 | + ImageUrl = url, | |
54 | + ThumbnailUrl = url, | |
55 | + TooltipText = null, | |
56 | + FullSizeImageUrl = url, | |
57 | + }; | |
58 | + } | |
59 | + | |
60 | + public class Thumbnail : ThumbnailInfo | |
61 | + { | |
62 | + protected override Task<MemoryImage> LoadThumbnailImageAsync() | |
63 | + { | |
64 | + return Task.Factory.StartNew(() => | |
65 | + { | |
66 | + var oauth = new HttpOAuthApiProxy(); | |
67 | + TonTwitterCom.InitializeOAuthToken(oauth); | |
68 | + | |
69 | + Stream response = null; | |
70 | + var statusCode = oauth.GetContent("GET", new Uri(this.ThumbnailUrl), null, ref response, MyCommon.GetUserAgentString()); | |
71 | + | |
72 | + using (response) | |
73 | + { | |
74 | + if (statusCode == HttpStatusCode.OK) | |
75 | + return MemoryImage.CopyFromStream(response); | |
76 | + else | |
77 | + throw new WebException(statusCode.ToString(), WebExceptionStatus.ProtocolError); | |
78 | + } | |
79 | + }, | |
80 | + CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default); // 明示しないと TaskScheduler.Current になり UI スレッド上で実行されてしまう | |
81 | + } | |
82 | + } | |
83 | + } | |
84 | +} |
@@ -41,6 +41,9 @@ namespace OpenTween.Thumbnail | ||
41 | 41 | { |
42 | 42 | ThumbnailGenerator.Services = new List<IThumbnailService>() |
43 | 43 | { |
44 | + // ton.twitter.com | |
45 | + new TonTwitterCom(), | |
46 | + | |
44 | 47 | // DirectLink |
45 | 48 | new SimpleThumbnailService(@"^https?://.*(\.jpg|\.jpeg|\.gif|\.png|\.bmp)$", "${0}"), |
46 | 49 |
@@ -542,6 +542,10 @@ namespace OpenTween | ||
542 | 542 | |
543 | 543 | ThumbnailGenerator.InitializeGenerator(); |
544 | 544 | |
545 | + Thumbnail.Services.TonTwitterCom.InitializeOAuthToken = x => | |
546 | + x.Initialize(ApplicationSettings.TwitterConsumerKey, ApplicationSettings.TwitterConsumerSecret, | |
547 | + this.tw.AccessToken, this.tw.AccessTokenSecret, "", ""); | |
548 | + | |
545 | 549 | //発言保持クラス |
546 | 550 | _statuses = TabInformations.GetInstance(); |
547 | 551 |