private void ReloadListToolStripMenuItem_Click(object sender, EventArgs e) { ListsCheckedListBox.ItemCheck -= ListsCheckedListBox_ItemCheck; ListsCheckedListBox.SetItemCheckState(ListsCheckedListBox.SelectedIndex, CheckState.Indeterminate); ListsCheckedListBox.ItemCheck += ListsCheckedListBox_ItemCheck; ListsCheckedListBox.SetItemCheckState(ListsCheckedListBox.SelectedIndex, CheckState.Checked); }
private void LoadList() { ListsCheckedListBox.ItemCheck -= ListsCheckedListBox_ItemCheck; var listElements = TabInformations.Instance.SubscribableLists.FindAll(item => item.Username == _twitter.Username); foreach (var t in listElements) { ListsCheckedListBox.Items.Add(t); } for (var i = 0; i < ListsCheckedListBox.Items.Count; i++) { var listItem = (ListElement)ListsCheckedListBox.Items[i]; var listPost = new List <PostClass>(); var otherPost = new List <PostClass>(); foreach (var tab in TabInformations.Instance.Tabs.Values.Where(tab => tab.TabType == TabUsageType.Lists)) { if (listItem.Id == tab.ListInfo.Id) { listPost.AddRange(tab.Posts.Values); } else { otherPost.AddRange(tab.Posts.Values); } } // リストが空の場合は推定不能 if (listPost.Count == 0) { ListsCheckedListBox.SetItemCheckState(i, CheckState.Indeterminate); continue; } // リストに該当ユーザーのポストが含まれていれば、リストにユーザーが含まれているとする。 if (listPost.Exists(item => item.ScreenName == _contextUserName)) { ListsCheckedListBox.SetItemChecked(i, true); continue; } var listPostUserIDs = new List <long>(); var listPostUserNames = new List <string>(); var listOlderPostCreatedAt = DateTime.MaxValue; var listNewistPostCreatedAt = DateTime.MinValue; foreach (var post in listPost) { if (post.UserId > 0 && !listPostUserIDs.Contains(post.UserId)) { listPostUserIDs.Add(post.UserId); } if (post.ScreenName != null && !listPostUserNames.Contains(post.ScreenName)) { listPostUserNames.Add(post.ScreenName); } if (post.CreatedAt < listOlderPostCreatedAt) { listOlderPostCreatedAt = post.CreatedAt; } if (post.CreatedAt > listNewistPostCreatedAt) { listNewistPostCreatedAt = post.CreatedAt; } } // リスト中のユーザーの人数がlistItem.MemberCount以上で、かつ該当のユーザーが含まれていなければ、リストにユーザーは含まれていないとする。 if (listItem.MemberCount > 0 && listItem.MemberCount <= listPostUserIDs.Count && (!listPostUserNames.Contains(_contextUserName))) { ListsCheckedListBox.SetItemChecked(i, false); continue; } otherPost.AddRange(TabInformations.Instance.Posts.Values); // リストに該当ユーザーのポストが含まれていないのにリスト以外で取得したポストの中にリストに含まれるべきポストがある場合は、リストにユーザーは含まれていないとする。 if (otherPost.Exists(item => (item.ScreenName == _contextUserName) && (item.CreatedAt > listOlderPostCreatedAt) && (item.CreatedAt < listNewistPostCreatedAt) && ((!item.IsReply) || listPostUserNames.Contains(item.InReplyToUser)))) { ListsCheckedListBox.SetItemChecked(i, false); continue; } ListsCheckedListBox.SetItemCheckState(i, CheckState.Indeterminate); } ListsCheckedListBox.ItemCheck += ListsCheckedListBox_ItemCheck; }