From: Kimura Youichi Date: Sun, 30 Jun 2019 08:31:01 +0000 (+0900) Subject: 「発言内URLを開く」のイベントハンドラを整理 X-Git-Tag: OpenTween_v2.4.0~16 X-Git-Url: http://git.osdn.net/view?p=opentween%2Fopen-tween.git;a=commitdiff_plain;h=9d983a6dc6776906f94af4337659c26fa442a0e8 「発言内URLを開く」のイベントハンドラを整理 --- diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index fa591208..ac24bc4f 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -8456,83 +8456,56 @@ namespace OpenTween { var linkElements = this.tweetDetailsView.GetLinkElements(); - if (linkElements.Length > 0) + if (linkElements.Length == 0) + return; + + var links = new List(linkElements.Length); + + foreach (var linkElm in linkElements) { - UrlDialog.ClearUrl(); + var displayUrl = linkElm.GetAttribute("title"); + var href = linkElm.GetAttribute("href"); + var linkedText = linkElm.InnerText; - string openUrlStr = ""; + if (string.IsNullOrEmpty(displayUrl)) + displayUrl = href; - if (linkElements.Length == 1) - { - // ツイートに含まれる URL が 1 つのみの場合 - // => OpenURL ダイアログを表示せずにリンクを開く + links.Add(new OpenUrlItem(linkedText, displayUrl, href)); + } - string urlStr = ""; - try - { - urlStr = MyCommon.IDNEncode(linkElements[0].GetAttribute("href")); - } - catch (ArgumentException) - { - //変なHTML? - return; - } - catch (Exception) - { - return; - } - if (string.IsNullOrEmpty(urlStr)) return; - openUrlStr = MyCommon.urlEncodeMultibyteChar(urlStr); + string selectedUrl; + bool isReverseSettings; - // Ctrl+E で呼ばれた場合を考慮し isReverseSettings の判定を行わない - await this.OpenUriAsync(new Uri(openUrlStr)); - } - else - { - // ツイートに含まれる URL が複数ある場合 - // => OpenURL を表示しユーザーが選択したリンクを開く + if (links.Count == 1) + { + // ツイートに含まれる URL が 1 つのみの場合 + // => OpenURL ダイアログを表示せずにリンクを開く + selectedUrl = links[0].Href; - foreach (var linkElm in linkElements) - { - string urlStr = ""; - string linkText = ""; - string href = ""; - try - { - urlStr = linkElm.GetAttribute("title"); - href = MyCommon.IDNEncode(linkElm.GetAttribute("href")); - if (string.IsNullOrEmpty(urlStr)) urlStr = href; - linkText = linkElm.InnerText; - } - catch (ArgumentException) - { - //変なHTML? - return; - } - catch (Exception) - { - return; - } - if (string.IsNullOrEmpty(urlStr)) continue; - UrlDialog.AddUrl(new OpenUrlItem(linkText, urlStr, MyCommon.urlEncodeMultibyteChar(href))); - } - try - { - if (UrlDialog.ShowDialog() == DialogResult.OK) - { - openUrlStr = UrlDialog.SelectedUrl; + // Ctrl+E で呼ばれた場合を考慮し isReverseSettings の判定を行わない + isReverseSettings = false; + } + else + { + // ツイートに含まれる URL が複数ある場合 + // => OpenURL を表示しユーザーが選択したリンクを開く + this.UrlDialog.ClearUrl(); - // Ctrlを押しながらリンクを開いた場合は、設定と逆の動作をするフラグを true としておく - await this.OpenUriAsync(new Uri(openUrlStr), MyCommon.IsKeyDown(Keys.Control)); - } - } - catch (Exception) - { - return; - } - this.TopMost = SettingManager.Common.AlwaysTop; - } + foreach (var link in links) + this.UrlDialog.AddUrl(link); + + if (this.UrlDialog.ShowDialog(this) != DialogResult.OK) + return; + + this.TopMost = SettingManager.Common.AlwaysTop; + + selectedUrl = this.UrlDialog.SelectedUrl; + + // Ctrlを押しながらリンクを開いた場合は、設定と逆の動作をするフラグを true としておく + isReverseSettings = MyCommon.IsKeyDown(Keys.Control); } + + await this.OpenUriAsync(new Uri(selectedUrl), isReverseSettings); } private void ClearTabMenuItem_Click(object sender, EventArgs e)