private void SetNextUnreadId(long currentId, TabClass tab) { // CurrentID:今既読にしたID(OldestIDの可能性あり) // 最古未読が設定されていて、既読の場合(1発言以上存在) try { // 次の未読探索 var posts = tab.IsInnerStorageTabType ? tab.Posts : _statuses; if (tab.OldestUnreadId > -1 && posts.ContainsKey(tab.OldestUnreadId) && posts[tab.OldestUnreadId].IsRead && _sorter.Mode == IdComparerClass.ComparerMode.Id) { if (tab.UnreadCount == 0) { // 未読数0→最古未読なし tab.OldestUnreadId = -1; } else if (tab.OldestUnreadId == currentId && currentId > -1) { // 最古IDを既読にしたタイミング→次のIDから続けて探索 int idx = tab.IndexOf(currentId); if (idx > -1) { // 続きから探索 FindUnreadId(idx, tab); } else { // 頭から探索 FindUnreadId(-1, tab); } } else { // 頭から探索 FindUnreadId(-1, tab); } } else { // 頭から探索 FindUnreadId(-1, tab); } } catch (KeyNotFoundException) { // 頭から探索 FindUnreadId(-1, tab); } }