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

Retweet() public method

public Retweet ( IEnumerable infos, bool add ) : void
infos IEnumerable
add bool
return void
        public void Retweet(IEnumerable<TwitterAccount> infos, bool add)
        {
            if (IsDirectMessage)
            {
                // disable on direct messages
                return;
            }
            Task.Run(() =>
            {
                Action<TwitterAccount> expected;
                Action<TwitterAccount> onFail;
                if (add)
                {
                    expected = a => Model.AddRetweetedUser(a.GetPseudoUser());
                    onFail = a => Model.RemoveRetweetedUser(a.Id);
                }
                else
                {
                    expected = a => Model.RemoveRetweetedUser(a.Id);
                    onFail = a => Model.AddRetweetedUser(a.GetPseudoUser());
                }
                var request = new RetweetRequest(Status, add);

                // define working task
                Func<TwitterAccount, Task> workTask = account => Task.Run(async () =>
                {
                    expected(account);
                    try
                    {
                        await RequestQueue.EnqueueAsync(account, request).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        onFail(account);
                        var desc = add
                            ? MainAreaTimelineResources.MsgRetweetFailed
                            : MainAreaTimelineResources.MsgUnretweetFailed;
                        BackstageModel.RegisterEvent(new OperationFailedEvent(
                            desc + "(" + account.UnreliableScreenName + " -> " +
                            Status.User.ScreenName + ")", ex));
                    }
                });

                // dispatch actions
                Task.WaitAll(infos.Select(workTask).ToArray());

                // notify changed
                RaisePropertyChanged(() => IsRetweeted);
            });
        }