StarryEyes.ViewModels.Timelines.Statuses.StatusViewModel.ReportAsSpam C# (CSharp) Method

ReportAsSpam() public method

public ReportAsSpam ( ) : void
return void
        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));
                                });
                            }
                        });
        }