Example #1
0
        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, "タイムライン取得完了");
            }
        }