1 package com.moiseum.wolnelektury.view.search.filter;
3 import android.os.Bundle;
5 import com.moiseum.wolnelektury.base.WLApplication;
6 import com.moiseum.wolnelektury.base.mvp.FragmentPresenter;
7 import com.moiseum.wolnelektury.connection.RestClient;
8 import com.moiseum.wolnelektury.connection.RestClientCallback;
9 import com.moiseum.wolnelektury.connection.models.CategoryModel;
10 import com.moiseum.wolnelektury.connection.services.CategoriesService;
11 import com.moiseum.wolnelektury.view.search.dto.FilterDto;
13 import java.util.List;
15 import retrofit2.Call;
18 * Created by piotrostrowski on 25.11.2017.
21 public class FilterPresenter extends FragmentPresenter<FilterView> {
23 private FilterDto previousFilters;
24 private RestClient restClient;
26 private Call<List<CategoryModel>> epochsCall;
27 private Call<List<CategoryModel>> genresCall;
28 private Call<List<CategoryModel>> kindsCall;
30 FilterPresenter(FilterView view, FilterDto filters) {
32 this.previousFilters = filters;
33 this.restClient = WLApplication.getInstance().getRestClient();
37 public void onViewCreated(Bundle savedInstanceState) {
38 super.onViewCreated(savedInstanceState);
45 public void onDestroy() {
47 if (epochsCall != null) {
50 if (genresCall != null) {
53 if (kindsCall != null) {
59 kindsCall = restClient.call(new RestClientCallback<List<CategoryModel>, CategoriesService>() {
61 public void onSuccess(List<CategoryModel> data) {
62 matchFilters(previousFilters.getFilteredKinds(), data);
63 getView().displayKinds(data);
67 public void onFailure(Exception e) {
68 getView().showKindsError();
72 public void onCancel() {
77 public Call<List<CategoryModel>> execute(CategoriesService service) {
78 return service.getKinds(true);
80 }, CategoriesService.class);
84 genresCall = restClient.call(new RestClientCallback<List<CategoryModel>, CategoriesService>() {
86 public void onSuccess(List<CategoryModel> data) {
87 matchFilters(previousFilters.getFilteredGenres(), data);
88 getView().displayGenres(data);
92 public void onFailure(Exception e) {
93 getView().showGenresError();
97 public void onCancel() {
102 public Call<List<CategoryModel>> execute(CategoriesService service) {
103 return service.getGenres(true);
105 }, CategoriesService.class);
109 epochsCall = restClient.call(new RestClientCallback<List<CategoryModel>, CategoriesService>() {
111 public void onSuccess(List<CategoryModel> data) {
112 matchFilters(previousFilters.getFilteredEpochs(), data);
113 getView().displayEpochs(data);
117 public void onFailure(Exception e) {
118 getView().showEpochsError();
122 public void onCancel() {
127 public Call<List<CategoryModel>> execute(CategoriesService service) {
128 return service.getEpochs(true);
130 }, CategoriesService.class);
133 private void matchFilters(List<CategoryModel> previousFilters, List<CategoryModel> currentFilters) {
134 for (CategoryModel model : currentFilters) {
135 for (CategoryModel prevModel : previousFilters) {
136 if (model.getSlug().equals(prevModel.getSlug())) {
137 model.setChecked(true);
144 void updateFilters(boolean lecturesOnly, boolean audiobook, List<CategoryModel> epochs, List<CategoryModel> genres, List<CategoryModel> kinds) {
145 FilterDto dto = new FilterDto();
146 dto.setLecture(lecturesOnly);
147 dto.setAudiobook(audiobook);
148 dto.setFilteredEpochs(epochs);
149 dto.setFilteredGenres(genres);
150 dto.setFilteredKinds(kinds);
151 getView().applyFilters(dto);