public void FavoriteAndRetweetImmediate()
{
if (IsDirectMessage)
{
// disable on direct messages
return;
}
if (!AssertQuickActionEnabled()) return;
var accounts = GetImmediateAccounts()
.ToObservable()
.Publish();
if (!IsFavorited)
{
var freq = new FavoriteRequest(Status, true);
accounts.Do(a => Task.Run(() => Model.AddFavoritedUser(a.GetPseudoUser())))
.Do(_ => RaisePropertyChanged(() => IsFavorited))
.SelectMany(a => RequestQueue.EnqueueObservable(a, freq)
.Catch((Exception ex) =>
{
Task.Run(() => Model.RemoveFavoritedUser(a.Id));
return Observable.Empty<TwitterStatus>();
}))
.Do(_ => RaisePropertyChanged(() => IsFavorited))
.Subscribe();
}
if (!IsRetweeted)
{
var rreq = new RetweetRequest(Status, true);
accounts.Do(a => Task.Run(() => Model.AddRetweetedUser(a.GetPseudoUser())))
.Do(_ => RaisePropertyChanged(() => IsRetweeted))
.SelectMany(a => RequestQueue.EnqueueObservable(a, rreq)
.Catch((Exception ex) =>
{
Task.Run(() => Model.RemoveRetweetedUser(a.Id));
return Observable.Empty<TwitterStatus>();
}))
.Do(_ => RaisePropertyChanged(() => IsRetweeted))
.Subscribe();
}
accounts.Connect();
}