Example #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);
        }
Example #2
0
 public static void RetweetSync(IEnumerable<AccountInfo> infos, TweetViewModel status)
 {
     var ts = status.Status as TwitterStatus;
     if (ts == null)
     {
         NotifyStorage.Notify("DirectMessageはRetweetできません。");
         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.Select(i => CheckFallback(i)).Where(i => i != null).Distinct(),
         d =>
         {
             // リツイート状態更新
             var ud = UserStorage.Get(d.ScreenName);
             if (ud != null)
                 status.RegisterRetweeted(ud);
             try
             {
                 retweetInjection.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);
 }