private void RefreshTimeline()
{
var curTabModel = this._statuses.Tabs[this._curTab.Text];
// 現在表示中のタブのスクロール位置を退避
var curListScroll = this.SaveListViewScroll(this._curList, curTabModel);
// 各タブのリスト上の選択位置などを退避
var listSelections = this.SaveListViewSelection();
//更新確定
PostClass[] notifyPosts;
string soundFile;
int addCount;
bool newMentionOrDm;
bool isDelete;
addCount = _statuses.SubmitUpdate(out soundFile, out notifyPosts, out newMentionOrDm, out isDelete);
if (MyCommon._endingFlag) return;
// リストに反映&選択状態復元
foreach (var tabPage in this.ListTab.TabPages.Cast<TabPage>())
{
var listView = (DetailsListView)tabPage.Tag;
var tabModel = this._statuses.Tabs[tabPage.Text];
if (listView.VirtualListSize != tabModel.AllCount || isDelete)
{
using (ControlTransaction.Update(listView))
{
if (listView == this._curList)
this.PurgeListViewItemCache();
// リスト件数更新
listView.VirtualListSize = tabModel.AllCount;
// 選択位置などを復元
this.RestoreListViewSelection(listView, tabModel, listSelections[tabModel.TabName]);
}
}
}
if (addCount > 0)
{
if (this._cfgCommon.TabIconDisp)
{
foreach (var tabPage in this.ListTab.TabPages.Cast<TabPage>())
{
var tabModel = this._statuses.Tabs[tabPage.Text];
if (tabModel.UnreadCount > 0 && tabPage.ImageIndex != 0)
tabPage.ImageIndex = 0; // 未読アイコン
}
}
else
{
this.ListTab.Refresh();
}
}
// スクロール位置を復元
this.RestoreListViewScroll(this._curList, curTabModel, curListScroll);
//新着通知
NotifyNewPosts(notifyPosts, soundFile, addCount, newMentionOrDm);
SetMainWindowTitle();
if (!StatusLabelUrl.Text.StartsWith("http", StringComparison.Ordinal)) SetStatusLabelUrl();
HashSupl.AddRangeItem(tw.GetHashList());
}