package com.quran.labs.androidquran.model.quran;
import android.graphics.RectF;
import android.support.v4.util.Pair;
import com.quran.labs.androidquran.common.AyahBounds;
import com.quran.labs.androidquran.data.AyahInfoDatabaseHandler;
import com.quran.labs.androidquran.data.AyahInfoDatabaseProvider;
import com.quran.labs.androidquran.di.ActivityScope;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
@ActivityScope
public class CoordinatesModel {
private final AyahInfoDatabaseProvider ayahInfoDatabaseProvider;
@Inject
CoordinatesModel(AyahInfoDatabaseProvider ayahInfoDatabaseProvider) {
this.ayahInfoDatabaseProvider = ayahInfoDatabaseProvider;
}
public Observable<Pair<Integer, RectF>> getPageCoordinates(Integer... pages) {
AyahInfoDatabaseHandler database = ayahInfoDatabaseProvider.getAyahInfoHandler();
if (database == null) {
return Observable.error(new NoSuchElementException("No AyahInfoDatabaseHandler found!"));
}
return Observable.fromArray(pages)
.map(page -> new Pair<>(page, database.getPageBounds(page)))
.subscribeOn(Schedulers.computation());
}
public Observable<Pair<Integer, Map<String, List<AyahBounds>>>> getAyahCoordinates(
Integer... pages) {
AyahInfoDatabaseHandler database = ayahInfoDatabaseProvider.getAyahInfoHandler();
if (database == null) {
return Observable.error(new NoSuchElementException("No AyahInfoDatabaseHandler found!"));
}
return Observable.fromArray(pages)
.map(page -> new Pair<>(page, database.getVersesBoundsForPage(page)))
.subscribeOn(Schedulers.computation());
}
}