Ejemplo n.º 1
0
        private static void UnretweetSink(IEnumerable <AccountInfo> infos, TweetViewModel status)
        {
            var ts = status.Status as TwitterStatus;

            if (ts == null)
            {
                NotifyStorage.Notify("DirectMessageはUnretweetできません。");
                return;
            }
            if (ts.RetweetedOriginal != null)
            {
                status = TweetStorage.Get(ts.RetweetedOriginal.Id, true);
            }
            if (status == null)
            {
                NotifyStorage.Notify("Retweet オリジナルデータが見つかりません。");
                return;
            }

            bool success = true;

            Parallel.ForEach(infos,
                             d =>
            {
                // リツイート状態更新
                var ud = d.UserViewModel;
                if (ud != null)
                {
                    status.RegisterRetweeted(ud);
                }
                try
                {
                    unretweetInjection.Execute(new Tuple <AccountInfo, TweetViewModel>(d, status));
                }
                catch (Exception ex)
                {
                    if (ud != null)
                    {
                        status.RemoveRetweeted(ud);
                    }
                    success = false;
                    NotifyStorage.Notify("Retweetキャンセルに失敗しました: @" + d.ScreenName);
                    if (!(ex is ApplicationException))
                    {
                        ExceptionStorage.Register(ex, ExceptionCategory.TwitterError,
                                                  "Retweetキャンセル操作時にエラーが発生しました");
                    }
                }
            });
            if (success)
            {
                NotifyStorage.Notify("Retweetをキャンセルしました: @" + status.Status.User.ScreenName + ": " + status.Status.Text);
            }
        }