package io.kaif.mobile.view.daemon; import javax.inject.Inject; import javax.inject.Singleton; import io.kaif.mobile.event.EventPublishSubject; import io.kaif.mobile.event.vote.VoteArticleSuccessEvent; import io.kaif.mobile.event.vote.VoteDebateSuccessEvent; import io.kaif.mobile.event.vote.VoteEvent; import io.kaif.mobile.model.Vote; import io.kaif.mobile.service.VoteService; import rx.Observable; @Singleton public class VoteDaemon { private final EventPublishSubject<VoteEvent> subject; private final VoteService voteService; public Observable<VoteEvent> getSubject(Class<?>... classes) { return subject.getSubject(classes); } public <T extends VoteEvent> Observable<T> getSubject(Class<T> clazz) { return subject.getSubject(clazz); } @Inject VoteDaemon(VoteService voteService) { this.voteService = voteService; this.subject = new EventPublishSubject<>(); } public void voteArticle(String articleId, Vote.VoteState prevState, Vote.VoteState voteState) { subject.onNext(new VoteArticleSuccessEvent(articleId, voteState)); voteService.voteArticle(new VoteService.VoteArticleEntry(articleId, voteState)) .subscribe(aVoid -> { //success do nothing }, throwable -> { subject.onNext(new VoteArticleSuccessEvent(articleId, prevState)); }); } public void voteDebate(String debateId, Vote.VoteState prevState, Vote.VoteState voteState) { subject.onNext(new VoteDebateSuccessEvent(debateId, voteState)); voteService.voteDebate(new VoteService.VoteDebateEntry(debateId, voteState)) .subscribe(aVoid -> { //success do nothing }, throwable -> { subject.onNext(new VoteDebateSuccessEvent(debateId, prevState)); }); } }