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); }
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); }