示例#1
0
        public RetweetResponse Retweet(RetweetRequest request)
        {
            _twitterService.AuthenticateWith(request.AccessToken.Token, request.AccessToken.TokenSecret);

            _twitterService.Retweet(request.TweetId);

            return(new RetweetResponse());
        }
        internal void ReTweetExistingTweet(NGTweeterStatus tweet)
        {
            IsBusy = true;

            RetweetRequest retweetRequest = new RetweetRequest
            {
                AccessToken = (OAuthAccessToken)_applicationSettingsProvider["accessToken"],
                TweetId     = tweet.Id
            };

            _authenticationService.BeginRetweet(retweetRequest, RetweetCallback, null);
        }
示例#3
0
        public void FavoriteAndRetweetImmediate()
        {
            if (IsDirectMessage)
            {
                // disable on direct messages
                return;
            }
            if (!this.AssertQuickActionEnabled())
            {
                return;
            }
            var accounts = this.GetImmediateAccounts()
                           .ToObservable()
                           .Publish();

            if (!this.IsFavorited)
            {
                var freq = new FavoriteRequest(this.Status, true);
                accounts.Do(a => Task.Run(() => this.Model.AddFavoritedUser(a.Id)))
                .Do(_ => this.RaisePropertyChanged(() => this.IsFavorited))
                .SelectMany(a => RequestQueue.Enqueue(a, freq)
                            .Catch((Exception ex) =>
                {
                    Task.Run(() => this.Model.RemoveFavoritedUser(a.Id));
                    return(Observable.Empty <TwitterStatus>());
                }))
                .Do(_ => this.RaisePropertyChanged(() => this.IsFavorited))
                .Subscribe();
            }
            if (!this.IsRetweeted)
            {
                var rreq = new RetweetRequest(this.Status, true);
                accounts.Do(a => Task.Run(() => this.Model.AddRetweetedUser(a.Id)))
                .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
                .SelectMany(a => RequestQueue.Enqueue(a, rreq)
                            .Catch((Exception ex) =>
                {
                    Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
                    return(Observable.Empty <TwitterStatus>());
                }))
                .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
                .Subscribe();
            }
            accounts.Connect();
        }
        public void ReTweet_ShouldTweetSomeOtherUsersMessage_AndReturnRetweetedMessageTest()
        {
            OAuthAccessToken accessToken = new OAuthAccessToken {
                Token = "abcd", TokenSecret = "A@c#"
            };

            Mock.Get(_mockTwitterService).Setup(mockService => mockService.AuthenticateWith(accessToken.Token, accessToken.TokenSecret));

            RetweetRequest request = new RetweetRequest {
                AccessToken = accessToken, TweetId = 101
            };

            Mock.Get(_mockTwitterService).Setup(mockService => mockService.Retweet(request.TweetId));

            _authenticationService.Retweet(request);

            Mock.Get(_mockTwitterService).VerifyAll();
        }
示例#5
0
        public void Retweet(IEnumerable <TwitterAccount> infos, bool add)
        {
            if (IsDirectMessage)
            {
                // disable on direct messages
                return;
            }
            Action <TwitterAccount> expected;
            Action <TwitterAccount> onFail;

            if (add)
            {
                expected = a => Task.Run(() => this.Model.AddRetweetedUser(a.Id));
                onFail   = a => Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
            }
            else
            {
                expected = a => Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
                onFail   = a => Task.Run(() => this.Model.AddRetweetedUser(a.Id));
            }
            var rreq = new RetweetRequest(this.Status, add);

            infos.ToObservable()
            .Do(expected)
            .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
            .SelectMany(a => RequestQueue.Enqueue(a, rreq)
                        .Catch((Exception ex) =>
            {
                onFail(a);
                var desc = add
                                                      ? "リツイートに失敗"
                                                      : "リツイート解除に失敗";
                BackstageModel.RegisterEvent(new OperationFailedEvent(
                                                 desc + "(" + a.UnreliableScreenName + " -> " +
                                                 this.Status.User.ScreenName + ")", ex));
                return(Observable.Empty <TwitterStatus>());
            }))
            .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
            .Subscribe();
        }
示例#6
0
 public void FavoriteAndRetweetImmediate()
 {
     if (!this.AssertQuickActionEnabled()) return;
     var accounts = this.GetImmediateAccounts()
         .ToObservable()
         .Publish();
     if (!this.IsFavorited)
     {
         var freq = new FavoriteRequest(this.Status, true);
         accounts.Do(a => Task.Run(() => this.Model.AddFavoritedUser(a.Id)))
                 .Do(_ => this.RaisePropertyChanged(() => this.IsFavorited))
                 .SelectMany(a => RequestQueue.Enqueue(a, freq)
                                      .Catch((Exception ex) =>
                                      {
                                          Task.Run(() => this.Model.RemoveFavoritedUser(a.Id));
                                          return Observable.Empty<TwitterStatus>();
                                      }))
                 .Do(_ => this.RaisePropertyChanged(() => this.IsFavorited))
                 .Subscribe();
     }
     if (!this.IsRetweeted)
     {
         var rreq = new RetweetRequest(this.Status, true);
         accounts.Do(a => Task.Run(() => this.Model.AddRetweetedUser(a.Id)))
                   .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
                   .SelectMany(a => RequestQueue.Enqueue(a, rreq)
                                        .Catch((Exception ex) =>
                                        {
                                            Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
                                            return Observable.Empty<TwitterStatus>();
                                        }))
                   .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
                   .Subscribe();
     }
     accounts.Connect();
 }
示例#7
0
 public void Retweet(IEnumerable<TwitterAccount> infos, bool add)
 {
     Action<TwitterAccount> expected;
     Action<TwitterAccount> onFail;
     if (add)
     {
         expected = a => Task.Run(() => this.Model.AddRetweetedUser(a.Id));
         onFail = a => Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
     }
     else
     {
         expected = a => Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
         onFail = a => Task.Run(() => this.Model.AddRetweetedUser(a.Id));
     }
     var rreq = new RetweetRequest(this.Status, add);
     infos.ToObservable()
          .Do(expected)
          .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
          .SelectMany(a => RequestQueue.Enqueue(a, rreq)
                                       .Catch((Exception ex) =>
                                       {
                                           onFail(a);
                                           BackstageModel.RegisterEvent(
                                               new OperationFailedEvent((add ? "" : "un") + "retweet failed: " +
                                                                        a.UnreliableScreenName + " -> " +
                                                                        this.Status.User.ScreenName + " :" +
                                                                        ex.Message));
                                           return Observable.Empty<TwitterStatus>();
                                       }))
          .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
          .Subscribe();
 }
示例#8
0
 public void Retweet(IEnumerable<TwitterAccount> infos, bool add)
 {
     if (IsDirectMessage)
     {
         // disable on direct messages
         return;
     }
     Action<TwitterAccount> expected;
     Action<TwitterAccount> onFail;
     if (add)
     {
         expected = a => Task.Run(() => this.Model.AddRetweetedUser(a.Id));
         onFail = a => Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
     }
     else
     {
         expected = a => Task.Run(() => this.Model.RemoveRetweetedUser(a.Id));
         onFail = a => Task.Run(() => this.Model.AddRetweetedUser(a.Id));
     }
     var rreq = new RetweetRequest(this.Status, add);
     infos.ToObservable()
          .Do(expected)
          .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
          .SelectMany(a => RequestQueue.Enqueue(a, rreq)
                                       .Catch((Exception ex) =>
                                       {
                                           onFail(a);
                                           var desc = add
                                               ? MainAreaTimelineResources.MsgRetweetFailed
                                               : MainAreaTimelineResources.MsgUnretweetFailed;
                                           BackstageModel.RegisterEvent(new OperationFailedEvent(
                                               desc + "(" + a.UnreliableScreenName + " -> " +
                                               this.Status.User.ScreenName + ")", ex));
                                           return Observable.Empty<TwitterStatus>();
                                       }))
          .Do(_ => this.RaisePropertyChanged(() => this.IsRetweeted))
          .Subscribe();
 }
        internal void ReTweetExistingTweet(NGTweeterStatus tweet)
        {
            IsBusy = true;

            RetweetRequest retweetRequest = new RetweetRequest
                {
                    AccessToken = (OAuthAccessToken)_applicationSettingsProvider["accessToken"],
                    TweetId = tweet.Id
                };

            _authenticationService.BeginRetweet(retweetRequest, RetweetCallback, null);
        }
示例#10
0
        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);
            });
        }