private async void FetchHomeTimeline(object obj) { if (HomeTimelineCommand.CanExecute(obj) == false) { return; } try { IsGettingTimeline = true; await PopupService.Flash(Application.Current.MainWindow, "タイムライン取得中"); var tweets = (await Client.FetchHomeTimeline()).Select(tweet => new TweetControlViewModel(tweet)); if (tweets.Max(t => t?.Id) == TweetList.Max(t => t?.Id)) { return; } var excepts = Enumerable.Except(tweets.Select(t => t.Id), TweetList.Select(t => t.Id)); var orderedExcepts = tweets.Where(t => excepts.Contains(t.Id)).OrderBy(t => t.Id); foreach (var content in orderedExcepts) { content.SetProfileAndMediaSource(); Dispatcher.Invoke(() => TweetList.Insert(0, content)); } } catch (AggregateException err) { foreach (var ie in err.InnerExceptions) { throw ie; } } catch (CoreTweet.TwitterException err) { Debug.WriteLine(err); MessageBox.Show("Twitter API 取得制限に達しました。\r\n15分間の利用が制限されています。"); } finally { IsGettingTimeline = false; await PopupService.Flash(Application.Current.MainWindow, "タイムライン取得完了"); } }