package com.quran.labs.androidquran.presenter.translation;
import android.support.annotation.NonNull;
import com.quran.labs.androidquran.common.QuranAyahInfo;
import com.quran.labs.androidquran.data.QuranInfo;
import com.quran.labs.androidquran.database.TranslationsDBAdapter;
import com.quran.labs.androidquran.di.QuranPageScope;
import com.quran.labs.androidquran.model.translation.TranslationModel;
import com.quran.labs.androidquran.util.QuranSettings;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableObserver;
@QuranPageScope
public class TranslationPresenter extends
BaseTranslationPresenter<TranslationPresenter.TranslationScreen> {
private final Integer[] pages;
private final QuranSettings quranSettings;
@Inject
TranslationPresenter(TranslationModel translationModel,
QuranSettings quranSettings,
TranslationsDBAdapter translationsAdapter,
Integer... pages) {
super(translationModel, translationsAdapter);
this.pages = pages;
this.quranSettings = quranSettings;
}
public void refresh() {
if (disposable != null) {
disposable.dispose();
}
disposable = Observable.fromArray(pages)
.flatMap(page -> getVerses(quranSettings.wantArabicInTranslationView(),
getTranslations(quranSettings), QuranInfo.getVerseRangeForPage(page))
.toObservable())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<ResultHolder>() {
@Override
public void onNext(ResultHolder result) {
if (translationScreen != null && result.ayahInformation.size() > 0) {
translationScreen.setVerses(
getPage(result.ayahInformation), result.translations, result.ayahInformation);
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private int getPage(List<QuranAyahInfo> result) {
final int page;
if (pages.length == 1) {
page = pages[0];
} else {
QuranAyahInfo ayahInfo = result.get(0);
page = QuranInfo.getPageFromSuraAyah(ayahInfo.sura, ayahInfo.ayah);
}
return page;
}
public interface TranslationScreen {
void setVerses(int page, @NonNull String[] translations, @NonNull List<QuranAyahInfo> verses);
}
}