package io.kaif.mobile.view.daemon;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.kaif.mobile.IgnoreAllSubscriber;
import io.kaif.mobile.model.FeedAsset;
import io.kaif.mobile.service.FeedService;
import io.kaif.mobile.view.viewmodel.FeedAssetViewModel;
import rx.Observable;
@Singleton
public class FeedDaemon {
private final FeedService feedService;
@Inject
FeedDaemon(FeedService feedService) {
this.feedService = feedService;
}
public Observable<Integer> newsUnreadCount() {
return feedService.newsUnreadCount();
}
public Observable<List<FeedAssetViewModel>> listAndAcknowledgeIfRequired() {
return feedService.news(null).map(feedAssets -> {
if (!feedAssets.isEmpty()) {
feedService.acknowledge(new FeedService.AcknowledgeEntry(feedAssets.get(0).getAssetId()))
.subscribe(new IgnoreAllSubscriber<>());
}
return mapToViewModel(feedAssets);
});
}
private List<FeedAssetViewModel> mapToViewModel(List<FeedAsset> feedAssets) {
List<FeedAssetViewModel> vms = new ArrayList<>();
boolean isRead = false;
for (int i = 0; i < feedAssets.size(); i++) {
FeedAsset feedAsset = feedAssets.get(i);
isRead |= feedAsset.isAcknowledged();
vms.add(new FeedAssetViewModel(feedAsset, isRead));
}
return vms;
}
public Observable<List<FeedAssetViewModel>> listNewsFeed(String feedAssetId) {
return feedService.news(feedAssetId).map(this::mapToViewModel);
}
}