package com.zedeff.twittererer.presenters;
import com.zedeff.twittererer.R;
import com.zedeff.twittererer.models.TimelineItem;
import com.zedeff.twittererer.services.TwitterService;
import com.zedeff.twittererer.views.TimelineView;
import java.lang.ref.WeakReference;
import java.util.List;
import javax.inject.Inject;
import rx.Scheduler;
public class TimelinePresenter {
private final TwitterService service;
private final Scheduler scheduler;
private WeakReference<TimelineView> view;
private List<TimelineItem> timelineItems;
@Inject
public TimelinePresenter(TwitterService service, Scheduler scheduler) {
this.service = service;
this.scheduler = scheduler;
}
public void initialise(TimelineView view) {
this.view = new WeakReference<>(view);
service.getMyDetails()
.observeOn(scheduler)
.subscribe(user -> {
service.setCurrentUser(user);
refreshTweets();
});
}
public void refreshTweets() {
service.getTimelineItems()
.observeOn(scheduler)
.subscribe(timelineItems -> {
this.timelineItems = timelineItems;
TimelineView view = this.view.get();
if (view != null) {
if (timelineItems.size() > 0) {
view.showTimeline(timelineItems);
} else {
view.showNoTweets();
}
}
});
}
public void tweet(String tweetText) {
timelineItems.add(0, new TimelineItem("0s", tweetText, service.getCurrentUser()));
view.get().showTimeline(timelineItems);
service.sendTweet(tweetText)
.observeOn(scheduler)
.subscribe(
x -> {
TimelineView view = this.view.get();
if (view != null) {
view.showMessage(R.string.alert_tweet_successful);
}
},
e -> {
TimelineView view = this.view.get();
if (view != null) {
view.showMessage(R.string.alert_tweet_failed);
}
});
}
}