Skip to content
This repository has been archived by the owner on Apr 5, 2022. It is now read-only.

Commit

Permalink
All tests passing after merge from upstream into fork. Ready for PR
Browse files Browse the repository at this point in the history
  • Loading branch information
Hudson Mendes committed Aug 30, 2016
1 parent 530a95e commit 8dd2d77
Show file tree
Hide file tree
Showing 57 changed files with 183 additions and 349 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -250,52 +250,33 @@ public Tweet updateStatus(final String message, final StatusDetails details) {
@Override
public Tweet updateStatus(final String message, final Resource media, final StatusDetails details) {
requireUserAuthorization();
final MultiValueMap<String, Object> tweetParams = new LinkedMultiValueMap<String, Object>();
MultiValueMap<String, Object> tweetParams = new LinkedMultiValueMap<String, Object>();
tweetParams.add("status", message);
tweetParams.putAll(details.toParameterMap());
if (media != null) {
final MultiValueMap<String, Object> uploadParams = new LinkedMultiValueMap<String, Object>();
MultiValueMap<String, Object> uploadParams = new LinkedMultiValueMap<String, Object>();
uploadParams.set("media", media);
final MediaUploadResponse response = restTemplate.postForObject(
MediaUploadResponse response = restTemplate.postForObject(
"https://upload.twitter.com/1.1/media/upload.json",
uploadParams,
MediaUploadResponse.class);
tweetParams.set("media_ids", response.getMediaId());
}
return restTemplate.postForObject(
new TwitterApiBuilderForUri()
.withResource(TwitterApiUriResourceForStandard.STATUSES_UPDATE_WITH_MEDIA)
.build(),
new RestRequestBodyBuilder()
.withField("status", message)
.withField("media", media)
.withFields(details.toParameterMap())
.build(),
Tweet.class);
return restTemplate.postForObject(buildUri("statuses/update.json"), tweetParams, Tweet.class);
}

@Override
public Tweet updateStatus(final TweetData tweetData) {
requireUserAuthorization();
final MultiValueMap<String, Object> postParameters = tweetData.toTweetParameters();
MultiValueMap<String, Object> postParameters = tweetData.toTweetParameters();
if (tweetData.hasMedia()) {
final MediaUploadResponse response = restTemplate.postForObject(
MediaUploadResponse response = restTemplate.postForObject(
"https://upload.twitter.com/1.1/media/upload.json",
tweetData.toUploadMediaParameters(),
MediaUploadResponse.class);
postParameters.set("media_ids", response.getMediaId());
}

final TwitterApiUriResourceForStandard resourceUri = tweetData.hasMedia()
? TwitterApiUriResourceForStandard.STATUSES_UPDATE_WITH_MEDIA
: TwitterApiUriResourceForStandard.STATUSES_UPDATE;

return restTemplate.postForObject(
new TwitterApiBuilderForUri()
.withResource(resourceUri)
.build(),
tweetData.toRequestParameters(),
Tweet.class);
return restTemplate.postForObject(buildUri("statuses/update.json"), postParameters, Tweet.class);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,30 @@
import org.springframework.social.RateLimitExceededException;

public class TwitterRateLimitExceededException extends RateLimitExceededException {
private static final String X_RATE_LIMIT_RESET = "x-rate-limit-reset";
private static final String X_RATE_LIMIT_REMAINING = "x-rate-limit-remaining";
private static final String X_RATE_LIMIT_LIMIT = "x-rate-limit-limit";
private static final long serialVersionUID = 1L;
private final Long rateLimitTotal;
private final Long rateLimitRemaining;
private final Long rateLimitResetTimeStamp;

public TwitterRateLimitExceededException(
Long rateLimitTotal,
Long rateLimitRemaining,
Long rateLimitResetTimeStamp) {
final Long rateLimitTotal,
final Long rateLimitRemaining,
final Long rateLimitResetTimeStamp) {
super("twitter");

this.rateLimitTotal = rateLimitTotal;
this.rateLimitRemaining = rateLimitRemaining;
this.rateLimitResetTimeStamp = rateLimitResetTimeStamp;
}

public TwitterRateLimitExceededException(HttpHeaders headers) {
public TwitterRateLimitExceededException(final HttpHeaders headers) {
this(
readRateLimitTotal(headers),
readRateLimitRemaining(headers),
readRateLimitResetTimeStamp(headers));
readRateLimitTotal(headers),
readRateLimitRemaining(headers),
readRateLimitResetTimeStamp(headers));
}

public Long getRateLimitTotal() {
Expand All @@ -47,19 +50,25 @@ public LocalDateTime getRateLimitReset() {
return fromUnixTimeStamp(rateLimitResetTimeStamp);
}

private static Long readRateLimitTotal(HttpHeaders headers) {
return Long.valueOf(headers.getFirst("x-rate-limit-limit"));
private static Long readRateLimitTotal(final HttpHeaders headers) {
return returnHeaderAsLongIfAvailable(headers, X_RATE_LIMIT_LIMIT);
}

private static Long readRateLimitRemaining(HttpHeaders headers) {
return Long.valueOf(headers.getFirst("x-rate-limit-remaining"));
private static Long readRateLimitRemaining(final HttpHeaders headers) {
return returnHeaderAsLongIfAvailable(headers, X_RATE_LIMIT_REMAINING);
}

private static Long readRateLimitResetTimeStamp(HttpHeaders headers) {
return Long.valueOf(headers.getFirst("x-rate-limit-reset"));
private static Long readRateLimitResetTimeStamp(final HttpHeaders headers) {
return returnHeaderAsLongIfAvailable(headers, X_RATE_LIMIT_RESET);
}

private static LocalDateTime fromUnixTimeStamp(Long rateLimitResetTimeStamp) {
private static Long returnHeaderAsLongIfAvailable(final HttpHeaders headers, final String headerName) {
return headers.containsKey(headerName)
? Long.valueOf(headers.getFirst(headerName))
: null;
}

private static LocalDateTime fromUnixTimeStamp(final Long rateLimitResetTimeStamp) {
final Instant i = Instant.ofEpochMilli(rateLimitResetTimeStamp * 1000L);
return LocalDateTime.ofInstant(i, ZoneOffset.UTC);
}
Expand Down
Loading

0 comments on commit 8dd2d77

Please sign in to comment.