X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/app/src/main/java/com/moiseum/wolnelektury/view/search/filter/FilterPresenter.java diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/view/search/filter/FilterPresenter.java b/Android/app/src/main/java/com/moiseum/wolnelektury/view/search/filter/FilterPresenter.java new file mode 100644 index 0000000..c473578 --- /dev/null +++ b/Android/app/src/main/java/com/moiseum/wolnelektury/view/search/filter/FilterPresenter.java @@ -0,0 +1,153 @@ +package com.moiseum.wolnelektury.view.search.filter; + +import android.os.Bundle; + +import com.moiseum.wolnelektury.base.WLApplication; +import com.moiseum.wolnelektury.base.mvp.FragmentPresenter; +import com.moiseum.wolnelektury.connection.RestClient; +import com.moiseum.wolnelektury.connection.RestClientCallback; +import com.moiseum.wolnelektury.connection.models.CategoryModel; +import com.moiseum.wolnelektury.connection.services.CategoriesService; +import com.moiseum.wolnelektury.view.search.dto.FilterDto; + +import java.util.List; + +import retrofit2.Call; + +/** + * Created by piotrostrowski on 25.11.2017. + */ + +public class FilterPresenter extends FragmentPresenter { + + private FilterDto previousFilters; + private RestClient restClient; + + private Call> epochsCall; + private Call> genresCall; + private Call> kindsCall; + + FilterPresenter(FilterView view, FilterDto filters) { + super(view); + this.previousFilters = filters; + this.restClient = WLApplication.getInstance().getRestClient(); + } + + @Override + public void onViewCreated(Bundle savedInstanceState) { + super.onViewCreated(savedInstanceState); + loadEpochs(); + loadGenres(); + loadKinds(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (epochsCall != null) { + epochsCall.cancel(); + } + if (genresCall != null) { + genresCall.cancel(); + } + if (kindsCall != null) { + kindsCall.cancel(); + } + } + + void loadKinds() { + kindsCall = restClient.call(new RestClientCallback, CategoriesService>() { + @Override + public void onSuccess(List data) { + matchFilters(previousFilters.getFilteredKinds(), data); + getView().displayKinds(data); + } + + @Override + public void onFailure(Exception e) { + getView().showKindsError(); + } + + @Override + public void onCancel() { + // nop. + } + + @Override + public Call> execute(CategoriesService service) { + return service.getKinds(true); + } + }, CategoriesService.class); + } + + void loadGenres() { + genresCall = restClient.call(new RestClientCallback, CategoriesService>() { + @Override + public void onSuccess(List data) { + matchFilters(previousFilters.getFilteredGenres(), data); + getView().displayGenres(data); + } + + @Override + public void onFailure(Exception e) { + getView().showGenresError(); + } + + @Override + public void onCancel() { + // nop. + } + + @Override + public Call> execute(CategoriesService service) { + return service.getGenres(true); + } + }, CategoriesService.class); + } + + void loadEpochs() { + epochsCall = restClient.call(new RestClientCallback, CategoriesService>() { + @Override + public void onSuccess(List data) { + matchFilters(previousFilters.getFilteredEpochs(), data); + getView().displayEpochs(data); + } + + @Override + public void onFailure(Exception e) { + getView().showEpochsError(); + } + + @Override + public void onCancel() { + // nop. + } + + @Override + public Call> execute(CategoriesService service) { + return service.getEpochs(true); + } + }, CategoriesService.class); + } + + private void matchFilters(List previousFilters, List currentFilters) { + for (CategoryModel model : currentFilters) { + for (CategoryModel prevModel : previousFilters) { + if (model.getSlug().equals(prevModel.getSlug())) { + model.setChecked(true); + break; + } + } + } + } + + void updateFilters(boolean lecturesOnly, boolean audiobook, List epochs, List genres, List kinds) { + FilterDto dto = new FilterDto(); + dto.setLecture(lecturesOnly); + dto.setAudiobook(audiobook); + dto.setFilteredEpochs(epochs); + dto.setFilteredGenres(genres); + dto.setFilteredKinds(kinds); + getView().applyFilters(dto); + } +}