public void ReportAsSpam()
{
var response = Parent.Messenger.GetResponseSafe(() =>
new TaskDialogMessage(new TaskDialogOptions
{
Title = MainAreaTimelineResources.MsgReportAsSpamTitle,
MainIcon = VistaTaskDialogIcon.Warning,
MainInstruction = MainAreaTimelineResources.MsgReportAsSpamInstFormat
.SafeFormat("@" + Status.User.ScreenName),
Content = MainAreaTimelineResources.MsgReportAsSpamContent,
CustomButtons = new[]
{
MainAreaTimelineResources.MsgReportAsSpamCmdReportAsSpam,
Resources.MsgButtonCancel
},
DefaultButtonIndex = 0,
AllowDialogCancellation = true,
}));
if (response.Response.CustomButtonResult != 0) return;
// report as a spam
var accounts = Setting.Accounts.Collection.ToArray();
var reporter = accounts.FirstOrDefault();
if (reporter == null) return;
var rreq = new UpdateRelationRequest(User.User, RelationKind.Block);
accounts.ToObservable()
.SelectMany(a =>
RequestQueue.EnqueueObservable(a, rreq)
.Do(r => BackstageModel.RegisterEvent(
new BlockedEvent(a.GetPseudoUser(), User.User))))
.Merge(
RequestQueue.EnqueueObservable(reporter,
new UpdateRelationRequest(User.User, RelationKind.ReportAsSpam))
.Do(r =>
BackstageModel.RegisterEvent(
new BlockedEvent(reporter.GetPseudoUser(), User.User))))
.Subscribe(
_ => { },
ex => BackstageModel.RegisterEvent(new InternalErrorEvent(ex.Message)), () =>
{
var tid = Status.User.Id;
var tidstr = tid.ToString(CultureInfo.InvariantCulture);
if (Setting.MuteBlockingUsers.Value)
{
// remove statuses of blocked user
Task.Run(async () =>
{
var removal = await StatusProxy.FetchStatuses(
s => s.User.Id == tid ||
(s.RetweetedOriginal != null && s.RetweetedOriginal.User.Id == tid),
"UserId = " + tidstr + " OR BaseUserId = " + tidstr).ConfigureAwait(false);
removal.ForEach(s => StatusInbox.EnqueueRemoval(s.Id));
});
}
});
}