package com.zedeff.twittererer.services; import android.util.Log; import com.twitter.sdk.android.Twitter; import com.twitter.sdk.android.core.Callback; import com.twitter.sdk.android.core.Result; import com.twitter.sdk.android.core.TwitterApiClient; import com.twitter.sdk.android.core.TwitterException; import com.twitter.sdk.android.core.TwitterSession; import com.twitter.sdk.android.core.models.Tweet; import com.twitter.sdk.android.core.models.User; import com.zedeff.twittererer.models.TimelineItem; import com.zedeff.twittererer.utils.TimelineConverter; import org.joda.time.DateTime; import java.util.List; import javax.inject.Singleton; import lombok.Getter; import lombok.Setter; import rx.Observable; @Singleton public class TwitterServiceImpl extends TwitterApiClient implements TwitterService { private static final String TAG = TwitterServiceImpl.class.getSimpleName(); @Getter @Setter private com.zedeff.twittererer.models.User currentUser; public TwitterServiceImpl(TwitterSession session) { super(session); } public Observable<List<TimelineItem>> getTimelineItems() { return Observable.create(subscriber -> { Callback<List<Tweet>> callback = new Callback<List<Tweet>>() { @Override public void success(Result<List<Tweet>> result) { Log.i(TAG, "Got the tweets, buddy!"); subscriber.onNext(TimelineConverter.fromTweets(result.data, DateTime.now())); } @Override public void failure(TwitterException e) { Log.e(TAG, e.getMessage(), e); subscriber.onError(e); } }; getStatusesService().homeTimeline(null, null, null, null, null, null, null).enqueue(callback); }); } public Observable<com.zedeff.twittererer.models.User> getMyDetails() { return Observable.create(subscriber -> { Callback<User> callback = new Callback<User>() { @Override public void success(Result<User> result) { Log.i(TAG, "Got your details, pal!"); subscriber.onNext(new com.zedeff.twittererer.models.User(result.data.name, result.data.screenName, result.data.profileImageUrl)); } @Override public void failure(TwitterException e) { Log.e(TAG, e.getMessage(), e); subscriber.onError(e); } }; getService(UserService.class).show(Twitter.getSessionManager().getActiveSession().getUserId()).enqueue(callback); }); } public Observable<Boolean> sendTweet(String tweetText) { return Observable.create(subscriber -> { Callback<Tweet> callback = new Callback<Tweet>() { @Override public void success(Result<Tweet> result) { Log.i(TAG, "Tweet tweeted"); subscriber.onNext(true); } @Override public void failure(TwitterException e) { Log.e(TAG, e.getMessage(), e); subscriber.onError(e); } }; getStatusesService().update(tweetText, null, null, null, null, null, null, null, null).enqueue(callback); }); } }