• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

dev


Commit MetaInfo

Revision295f006683a0ec1c27413ad93f4fecf39ed642b3 (tree)
Time2013-05-10 06:19:15
Authormoccos <tt.izawa@gmai...>
Commitermoccos

Log Message

Implemented similar image search context menu.

Change Summary

Incremental Difference

--- a/OpenTween/Properties/Resources.Designer.cs
+++ b/OpenTween/Properties/Resources.Designer.cs
@@ -1,7 +1,7 @@
11 //------------------------------------------------------------------------------
22 // <auto-generated>
33 // このコードはツールによって生成されました。
4-// ランタイム バージョン:4.0.30319.18033
4+// ランタイム バージョン:4.0.30319.18034
55 //
66 // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
77 // コードが再生成されるときに損失したりします。
@@ -626,17 +626,17 @@ namespace OpenTween.Properties {
626626 /// 更新履歴
627627 ///
628628 ///==== Ver 1.1.0-beta1(2013/xx/xx)
629+ /// * NEW: タブの表示位置を画面上部に変更可能に (thx @aokomoriuta!)
630+ /// * NEW: mobile.twitter.com/&lt;スクリーン名&gt;/status/&lt;ステータスID&gt; のURLも関連発言表示の対象に追加
631+ /// * NEW: Favstarなどサードパーティ製サービスのパーマリンクURLも関連発言表示の対象に追加
632+ /// * FIX: スペースが含まれているURLをブラウザで開こうとするとURLが分断されて複数のタブが開いてしまう問題を修正 (thx @5px!)
633+ /// * FIX: 画面更新時にInvalidOperationExceptionのエラーが発生する不具合を修正
629634 ///
630635 ///==== Ver 1.0.9(2013/04/07)
631636 /// * CHG: APIレートリミット関連の実装を修正
632637 /// * FIX: アイコンキャッシュの破棄時にエラーが出ることがある問題を修正
633638 /// * FIX: UserStreamsのunfollowイベントでエラーが起きていたのを修正
634- /// * FIX: プロフィール画像・サムネイルの表示切り替え時にエラーが起きる場合がある問題を修正
635- /// * FIX: タイムライン上のアイコンが空白のまま表示されない場合がある問題を修正 (thx @5px!)
636- /// * FIX: アカウント追加時の初回認証に失敗する問題を修正 (thx @polka_roco_!)
637- /// * FIX: ツールバー上のAPIレートリミット表示が正しく動作しなくなった問題を修正
638- /// * FIX: ツイタマなど一部のTwitterクライアントから投稿されたツイートの改行が正しく表示されない問題を修正 (thx @ohta8801, @kossetsu_inryo!)
639- /// * FIX: プロフィール編集画面で入力した [残りの文字列は切り詰められました]&quot;; に類似しているローカライズされた文字列を検索します。
639+ /// * FIX: プロフィール画像・サムネイルの表示切り替え時にエ [残りの文字列は切り詰められました]&quot;; に類似しているローカライズされた文字列を検索します。
640640 /// </summary>
641641 internal static string ChangeLog {
642642 get {
@@ -2197,6 +2197,15 @@ namespace OpenTween.Properties {
21972197 }
21982198
21992199 /// <summary>
2200+ /// 類似画像を検索 に類似しているローカライズされた文字列を検索します。
2201+ /// </summary>
2202+ internal static string SearchSimilarImageText {
2203+ get {
2204+ return ResourceManager.GetString("SearchSimilarImageText", resourceCulture);
2205+ }
2206+ }
2207+
2208+ /// <summary>
22002209 /// [ユーザ・・・{0}] に類似しているローカライズされた文字列を検索します。
22012210 /// </summary>
22022211 internal static string SetFiltersText1 {
--- a/OpenTween/Properties/Resources.en.resx
+++ b/OpenTween/Properties/Resources.en.resx
@@ -1077,4 +1077,7 @@
10771077 <data name="DeleteMenuText2" xml:space="preserve">
10781078 <value>Undo Retweet (&amp;D)</value>
10791079 </data>
1080+ <data name="SearchSimilarImageText" xml:space="preserve">
1081+ <value>Search similar images</value>
1082+ </data>
10801083 </root>
\ No newline at end of file
--- a/OpenTween/Properties/Resources.resx
+++ b/OpenTween/Properties/Resources.resx
@@ -1135,4 +1135,7 @@
11351135 <data name="BrowserStartFailed" xml:space="preserve">
11361136 <value>ブラウザの起動に失敗しました。エラーコード: {0}</value>
11371137 </data>
1138+ <data name="SearchSimilarImageText" xml:space="preserve">
1139+ <value>類似画像を検索</value>
1140+ </data>
11381141 </root>
\ No newline at end of file
--- a/OpenTween/Thumbnail/Services/SimpleThumbnailService.cs
+++ b/OpenTween/Thumbnail/Services/SimpleThumbnailService.cs
@@ -34,6 +34,7 @@ namespace OpenTween.Thumbnail.Services
3434 {
3535 protected Regex regex;
3636 protected string replacement;
37+ protected string file_replacement;
3738
3839 public SimpleThumbnailService(string pattern, string replacement)
3940 {
@@ -41,6 +42,13 @@ namespace OpenTween.Thumbnail.Services
4142 this.replacement = replacement;
4243 }
4344
45+ public SimpleThumbnailService(string pattern, string replacement, string file_replacement)
46+ {
47+ this.regex = new Regex(pattern, RegexOptions.IgnoreCase);
48+ this.replacement = replacement;
49+ this.file_replacement = file_replacement;
50+ }
51+
4452 public override ThumbnailInfo GetThumbnailInfo(string url, PostClass post)
4553 {
4654 var thumbnailUrl = this.ReplaceUrl(url);
@@ -51,14 +59,21 @@ namespace OpenTween.Thumbnail.Services
5159 ImageUrl = url,
5260 ThumbnailUrl = thumbnailUrl,
5361 TooltipText = null,
62+ ImageFileUrl = ReplaceUrl(url, this.file_replacement)
5463 };
5564 }
5665
5766 protected string ReplaceUrl(string url)
5867 {
68+ return ReplaceUrl(url, this.replacement);
69+ }
70+
71+ protected string ReplaceUrl(string url, string replacement)
72+ {
73+ if (replacement == null) return null;
5974 var match = this.regex.Match(url);
6075
61- return match.Success ? match.Result(this.replacement) : null;
76+ return match.Success ? match.Result(replacement) : null;
6277 }
6378 }
6479 }
--- a/OpenTween/Thumbnail/ThumbnailGenerator.cs
+++ b/OpenTween/Thumbnail/ThumbnailGenerator.cs
@@ -51,7 +51,10 @@ namespace OpenTween.Thumbnail
5151 new SimpleThumbnailService(@"^http://(?:i\.)?imgur\.com/(\w+)(?:\..{3})?$", "http://img.imgur.com/${1}l.jpg"),
5252
5353 // Twitpic
54- new SimpleThumbnailService(@"^http://(www\.)?twitpic\.com/(?<photoId>\w+)(/full/?)?$", "http://twitpic.com/show/thumb/${photoId}"),
54+ new SimpleThumbnailService(
55+ @"^http://(www\.)?twitpic\.com/(?<photoId>\w+)(/full/?)?$",
56+ "http://twitpic.com/show/thumb/${photoId}",
57+ "http://twitpic.com/show/large/${photoId}"),
5558
5659 // yfrog
5760 new SimpleThumbnailService(@"^http://yfrog\.com/(\w+)$", "${0}:small"),
--- a/OpenTween/Thumbnail/ThumbnailInfo.cs
+++ b/OpenTween/Thumbnail/ThumbnailInfo.cs
@@ -30,6 +30,7 @@ namespace OpenTween.Thumbnail
3030 {
3131 public string ImageUrl { get; set; }
3232 public string ThumbnailUrl { get; set; }
33- public string TooltipText { get; set; }
33+ public string TooltipText { get; set; }
34+ public string ImageFileUrl { get; set; }
3435 }
3536 }
--- a/OpenTween/Tween.cs
+++ b/OpenTween/Tween.cs
@@ -13221,8 +13221,8 @@ namespace OpenTween
1322113221 }
1322213222
1322313223 private void tweetThumbnail1_ThumbnailDoubleClick(object sender, ThumbnailDoubleClickEventArgs e)
13224- {
13225- this.OpenThumbnailPicture(e.Thumbnail);
13224+ {
13225+ this.OpenUriAsync(Uri.EscapeUriString(e.Uri));
1322613226 }
1322713227
1322813228 private void OpenThumbnailPicture(ThumbnailInfo thumbnail)
--- a/OpenTween/TweetThumbnail.cs
+++ b/OpenTween/TweetThumbnail.cs
@@ -79,6 +79,7 @@ namespace OpenTween
7979
8080 picbox.Tag = thumb;
8181 picbox.LoadAsync(thumb.ThumbnailUrl);
82+ picbox.ContextMenu = CreateContextMenu(thumb);
8283
8384 var tooltipText = thumb.TooltipText;
8485 if (!string.IsNullOrEmpty(tooltipText))
@@ -105,6 +106,42 @@ namespace OpenTween
105106 return this.task;
106107 }
107108
109+ private ContextMenu CreateContextMenu(ThumbnailInfo thumb)
110+ {
111+ var contextMenu = new ContextMenu();
112+ var contextItemSearch = new MenuItem();
113+ contextItemSearch.Text = Properties.Resources.SearchSimilarImageText;
114+ string search_targe_url =
115+ thumb.ImageFileUrl != null
116+ ? thumb.ImageFileUrl
117+ : thumb.ThumbnailUrl != null
118+ ? thumb.ThumbnailUrl
119+ : null;
120+
121+ if (search_targe_url != null)
122+ {
123+ contextItemSearch.Click += (sender, e) =>
124+ {
125+ string uri = GetImageSearchUri(search_targe_url);
126+ if (this.ThumbnailDoubleClick != null)
127+ {
128+ this.ThumbnailDoubleClick(this, new ThumbnailDoubleClickEventArgs(uri));
129+ }
130+ };
131+ }
132+ else
133+ {
134+ contextItemSearch.Enabled = false;
135+ }
136+ contextMenu.MenuItems.Add(contextItemSearch);
137+ return contextMenu;
138+ }
139+
140+ private string GetImageSearchUri(string image_uri)
141+ {
142+ return @"https://www.google.co.jp/searchbyimage?image_url=" + image_uri;
143+ }
144+
108145 protected virtual List<ThumbnailInfo> GetThumbailInfo(PostClass post)
109146 {
110147 return ThumbnailGenerator.GetThumbnails(post);
@@ -216,18 +253,18 @@ namespace OpenTween
216253
217254 if (this.ThumbnailDoubleClick != null)
218255 {
219- this.ThumbnailDoubleClick(this, new ThumbnailDoubleClickEventArgs(thumb));
256+ this.ThumbnailDoubleClick(this, new ThumbnailDoubleClickEventArgs(thumb.ImageUrl));
220257 }
221258 }
222259 }
223260
224261 public class ThumbnailDoubleClickEventArgs : EventArgs
225262 {
226- public ThumbnailInfo Thumbnail { get; private set; }
263+ public string Uri { get; private set; }
227264
228- public ThumbnailDoubleClickEventArgs(ThumbnailInfo thumbnail)
265+ public ThumbnailDoubleClickEventArgs(string uri)
229266 {
230- this.Thumbnail = thumbnail;
267+ this.Uri = uri;
231268 }
232269 }
233270 }