From: Kimura Youichi Date: Mon, 16 Jun 2014 16:08:15 +0000 (+0900) Subject: 発言詳細部の表示パフォーマンスを改善 X-Git-Tag: OpenTween_v1.2.2~17 X-Git-Url: http://git.osdn.net/view?p=opentween%2Fopen-tween.git;a=commitdiff_plain;h=578d16da00c053958d931d25c9bf209e256433b8 発言詳細部の表示パフォーマンスを改善 * Control.Text の変更は一回で済ませる (Control.Text += ... のような書き方をしない) * PostBrowser.get_DocumentText は負担が大きいため比較に使用しない * 更新中に PostBrowser を非表示にする処理を除去 * 表示するサムネイルが無い場合の TweetThumbnail の負担を極力減らす --- diff --git a/OpenTween/Resources/ChangeLog.txt b/OpenTween/Resources/ChangeLog.txt index 9060b468..62c71daf 100644 --- a/OpenTween/Resources/ChangeLog.txt +++ b/OpenTween/Resources/ChangeLog.txt @@ -4,6 +4,7 @@ * NEW: pic.twitter.com への複数枚画像の投稿に対応しました - 投稿先に Twitter を選択し、左端のコンボボックスを切り替えることで、最大 4 枚まで選択可能です - 投稿するファイルの数・サイズによっては、投稿完了までに若干の時間がかかります + * CHG: 発言詳細部の更新時のパフォーマンスを改善 * FIX: 一部クライアントから投稿されたツイートの読み込み時にエラーが発生する問題の修正 * FIX: 短縮URL生成時のエラーが適切に処理されない問題を修正 diff --git a/OpenTween/Tween.Designer.cs b/OpenTween/Tween.Designer.cs index e3125116..1ace5656 100644 --- a/OpenTween/Tween.Designer.cs +++ b/OpenTween/Tween.Designer.cs @@ -1071,7 +1071,6 @@ this.SourceLinkLabel.AutoEllipsis = true; this.SourceLinkLabel.ContextMenuStrip = this.ContextMenuSource; this.SourceLinkLabel.Name = "SourceLinkLabel"; - this.SourceLinkLabel.TabStop = true; this.ToolTip1.SetToolTip(this.SourceLinkLabel, resources.GetString("SourceLinkLabel.ToolTip")); this.SourceLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.SourceLinkLabel_LinkClicked); this.SourceLinkLabel.MouseEnter += new System.EventHandler(this.SourceLinkLabel_MouseEnter); diff --git a/OpenTween/Tween.cs b/OpenTween/Tween.cs index a85ec33e..b998b288 100644 --- a/OpenTween/Tween.cs +++ b/OpenTween/Tween.cs @@ -6038,7 +6038,7 @@ namespace OpenTween DispSelectedPost(false); } - private static PostClass displaypost = new PostClass(); + private PostClass displayPost = new PostClass(); /// /// サムネイルの表示処理を表すタスク @@ -6055,10 +6055,12 @@ namespace OpenTween if (_curList.SelectedIndices.Count == 0 || _curPost == null) return; - if (!forceupdate && _curPost.Equals(displaypost)) + var oldDisplayPost = this.displayPost; + this.displayPost = this._curPost; + + if (!forceupdate && this._curPost.Equals(oldDisplayPost)) return; - displaypost = _curPost; if (displayItem != null) { displayItem.ImageDownloaded -= this.DisplayItemImage_Downloaded; @@ -6067,61 +6069,54 @@ namespace OpenTween displayItem = (ImageListViewItem)_curList.Items[_curList.SelectedIndices[0]]; displayItem.ImageDownloaded += this.DisplayItemImage_Downloaded; - string dTxt = createDetailHtml(_curPost.IsDeleted ? "(DELETED)" : _curPost.Text); - if (_curPost.IsDm) - { - SourceLinkLabel.Tag = null; - SourceLinkLabel.Text = ""; - } - else + var sourceText = ""; + string sourceUrl = null; + if (!_curPost.IsDm) { - Match mc = Regex.Match(_curPost.SourceHtml, ".+?)\""); + var mc = Regex.Match(_curPost.SourceHtml, ".+?)\""); if (mc.Success) { - string src = mc.Groups["sourceurl"].Value; - SourceLinkLabel.Tag = mc.Groups["sourceurl"].Value; - mc = Regex.Match(src, "^https?://"); - if (!mc.Success) - { - src = src.Insert(0, "https://twitter.com"); - } - SourceLinkLabel.Tag = src; - } - else - { - SourceLinkLabel.Tag = null; - } - if (string.IsNullOrEmpty(_curPost.Source)) - { - SourceLinkLabel.Text = ""; - //SourceLinkLabel.Visible = false; - } - else - { - SourceLinkLabel.Text = _curPost.Source; - //SourceLinkLabel.Visible = true; + var src = mc.Groups["sourceurl"].Value; + if (Regex.IsMatch(src, "^https?://")) + sourceUrl = src; + else + sourceUrl = "https://twitter.com/" + src; } - } - SourceLinkLabel.TabStop = false; - if (_statuses.Tabs[_curTab.Text].TabType == MyCommon.TabUsageType.DirectMessage && !_curPost.IsOwl) - { - NameLabel.Text = "DM TO -> "; + if (_curPost.Source != null) + sourceText = _curPost.Source; } - else if (_statuses.Tabs[_curTab.Text].TabType == MyCommon.TabUsageType.DirectMessage) + SourceLinkLabel.Text = sourceText; + SourceLinkLabel.Tag = sourceUrl; + SourceLinkLabel.TabStop = false; // Text を更新すると勝手に true にされる + + string nameText; + if (_curPost.IsDm) { - NameLabel.Text = "DM FROM <- "; + if (_curPost.IsOwl) + nameText = "DM FROM <- "; + else + nameText = "DM TO -> "; } else { - NameLabel.Text = ""; + nameText = ""; } - NameLabel.Text += _curPost.ScreenName + "/" + _curPost.Nickname; + nameText += _curPost.ScreenName + "/" + _curPost.Nickname; + if (_curPost.RetweetedId != null) + nameText += " (RT:" + _curPost.RetweetedBy + ")"; + + NameLabel.Text = nameText; NameLabel.Tag = _curPost.ScreenName; - if (!string.IsNullOrEmpty(_curPost.RetweetedBy)) - { - NameLabel.Text += " (RT:" + _curPost.RetweetedBy + ")"; - } + + var nameForeColor = SystemColors.ControlText; + if (_curPost.IsOwl && (this.SettingDialog.OneWayLove || _curPost.IsDm)) + nameForeColor = this._clOWL; + if (_curPost.RetweetedId != null) + nameForeColor = this._clRetweet; + if (_curPost.IsFav) + nameForeColor = this._clFav; + NameLabel.ForeColor = nameForeColor; this.ClearUserPicture(); @@ -6138,11 +6133,7 @@ namespace OpenTween } } - NameLabel.ForeColor = System.Drawing.SystemColors.ControlText; DateTimeLabel.Text = _curPost.CreatedAt.ToString(); - if (_curPost.IsOwl && (SettingDialog.OneWayLove || _statuses.Tabs[_curTab.Text].TabType == MyCommon.TabUsageType.DirectMessage)) NameLabel.ForeColor = _clOWL; - if (_curPost.RetweetedId != null) NameLabel.ForeColor = _clRetweet; - if (_curPost.IsFav) NameLabel.ForeColor = _clFav; if (DumpPostClassToolStripMenuItem.Checked) { @@ -6164,7 +6155,7 @@ namespace OpenTween sb.AppendFormat("IsProtect : {0}
", _curPost.IsProtect.ToString()); sb.AppendFormat("IsRead : {0}
", _curPost.IsRead.ToString()); sb.AppendFormat("IsReply : {0}
", _curPost.IsReply.ToString()); - + foreach (string nm in _curPost.ReplyToList) { sb.AppendFormat("ReplyToList : {0}
", nm); @@ -6183,51 +6174,36 @@ namespace OpenTween sb.AppendFormat("SearchTabName : {0}
", _curPost.RelTabName); sb.Append("-----End PostClass Dump
"); - PostBrowser.Visible = false; PostBrowser.DocumentText = detailHtmlFormatHeader + sb.ToString() + detailHtmlFormatFooter; - PostBrowser.Visible = true; } else { - try + // 同じIDのツイートであれば WebBrowser とサムネイルの更新を行わない + // (同一ツイートの RT は文面が同じであるため同様に更新しない) + if (_curPost.StatusId != oldDisplayPost.StatusId) { - if (PostBrowser.DocumentText != dTxt) - { - PostBrowser.Visible = false; - PostBrowser.DocumentText = dTxt; + this.PostBrowser.DocumentText = + this.createDetailHtml(_curPost.IsDeleted ? "(DELETED)" : _curPost.Text); - this.SplitContainer3.Panel2Collapsed = true; + this.SplitContainer3.Panel2Collapsed = true; - if (this.IsPreviewEnable) + if (this.IsPreviewEnable) + { + if (this.thumbnailTokenSource != null) { - if (this.thumbnailTokenSource != null) - { - var oldTokenSource = this.thumbnailTokenSource; + var oldTokenSource = this.thumbnailTokenSource; - oldTokenSource.Cancel(); + oldTokenSource.Cancel(); - this.thumbnailTask.ContinueWith(_ => oldTokenSource.Dispose()); - } + this.thumbnailTask.ContinueWith(_ => oldTokenSource.Dispose()); + } - this.thumbnailTokenSource = new CancellationTokenSource(); + this.thumbnailTokenSource = new CancellationTokenSource(); - var token = this.thumbnailTokenSource.Token; - this.thumbnailTask = this.tweetThumbnail1.ShowThumbnailAsync(_curPost, token); - } + var token = this.thumbnailTokenSource.Token; + this.thumbnailTask = this.tweetThumbnail1.ShowThumbnailAsync(_curPost, token); } } - catch (System.Runtime.InteropServices.COMException) - { - //原因不明 - } - catch (UriFormatException) - { - PostBrowser.DocumentText = dTxt; - } - finally - { - PostBrowser.Visible = true; - } } } diff --git a/OpenTween/TweetThumbnail.Designer.cs b/OpenTween/TweetThumbnail.Designer.cs index f9cd24a3..b8043fc4 100644 --- a/OpenTween/TweetThumbnail.Designer.cs +++ b/OpenTween/TweetThumbnail.Designer.cs @@ -42,7 +42,7 @@ // resources.ApplyResources(this.scrollBar, "scrollBar"); this.scrollBar.LargeChange = 1; - this.scrollBar.Maximum = 10; + this.scrollBar.Maximum = 0; this.scrollBar.Name = "scrollBar"; this.toolTip.SetToolTip(this.scrollBar, resources.GetString("scrollBar.ToolTip")); this.scrollBar.ValueChanged += new System.EventHandler(this.scrollBar_ValueChanged); diff --git a/OpenTween/TweetThumbnail.cs b/OpenTween/TweetThumbnail.cs index 5ac30a35..27ffcdcf 100644 --- a/OpenTween/TweetThumbnail.cs +++ b/OpenTween/TweetThumbnail.cs @@ -69,6 +69,12 @@ namespace OpenTween this.scrollBar.Enabled = false; + if (post.Media.Count == 0 && post.PostGeo.Lat == 0 && post.PostGeo.Lng == 0) + { + this.SetThumbnailCount(0); + return; + } + var thumbnails = (await this.GetThumbailInfoAsync(post, cancelToken)) .ToArray(); @@ -123,7 +129,10 @@ namespace OpenTween /// 表示するサムネイルの数 protected void SetThumbnailCount(int count) { - using (ControlTransaction.Layout(this, false)) + if (count == 0 && this.pictureBox.Count == 0) + return; + + using (ControlTransaction.Layout(this.panelPictureBox, false)) { this.panelPictureBox.Controls.Clear(); foreach (var picbox in this.pictureBox)