X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff..269195b3729c1bdc22e9053ee4ebca667ea8549d:/Android/app/src/main/java/com/moiseum/wolnelektury/view/library/LibraryPresenter.java diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/view/library/LibraryPresenter.java b/Android/app/src/main/java/com/moiseum/wolnelektury/view/library/LibraryPresenter.java new file mode 100644 index 0000000..88f9b8b --- /dev/null +++ b/Android/app/src/main/java/com/moiseum/wolnelektury/view/library/LibraryPresenter.java @@ -0,0 +1,245 @@ +package com.moiseum.wolnelektury.view.library; + +import android.os.Bundle; + +import com.moiseum.wolnelektury.base.DataObserver; +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.BookDetailsModel; +import com.moiseum.wolnelektury.connection.models.BookModel; +import com.moiseum.wolnelektury.connection.models.ReadingStateModel; +import com.moiseum.wolnelektury.connection.services.BooksService; +import com.moiseum.wolnelektury.events.LoggedInEvent; +import com.moiseum.wolnelektury.storage.BookStorage; +import com.moiseum.wolnelektury.utils.SharedPreferencesUtils; +import com.moiseum.wolnelektury.view.book.BookType; +import com.moiseum.wolnelektury.view.book.list.NewestBooksDataProvider; +import com.moiseum.wolnelektury.view.book.list.ReadingStateDataProvider; +import com.moiseum.wolnelektury.view.book.list.RecommendedBooksDataProvider; +import com.moiseum.wolnelektury.view.main.MainActivity; +import com.moiseum.wolnelektury.view.main.NavigationElement; +import com.moiseum.wolnelektury.view.main.events.PremiumStatusEvent; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.List; + +import retrofit2.Call; + +/** + * @author golonkos + */ +class LibraryPresenter extends FragmentPresenter { + + private static final String TAG = LibraryPresenter.class.getSimpleName(); + private final NewestBooksDataProvider newestBooksDataProvider; + private final RecommendedBooksDataProvider recommendedBooksDataProvider; + private final ReadingStateDataProvider nowReadingBooksDataProvider; + private BookDetailsModel premiereBook; + private Call currentCall; + private RestClient client = WLApplication.getInstance().getRestClient(); + + private SharedPreferencesUtils preferences = WLApplication.getInstance().getPreferences(); + + LibraryPresenter(LibraryView view) { + super(view); + newestBooksDataProvider = new NewestBooksDataProvider(); + newestBooksDataProvider.setDataObserver(new NewestDataObserver()); + + recommendedBooksDataProvider = new RecommendedBooksDataProvider(); + recommendedBooksDataProvider.setDataObserver(new RecommendedDataObserver()); + + nowReadingBooksDataProvider = new ReadingStateDataProvider(ReadingStateModel.ReadingState.STATE_READING); + nowReadingBooksDataProvider.setDataObserver(new NowReadingDataObserver()); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EventBus.getDefault().register(this); + } + + @Override + public void onViewCreated(Bundle savedInstanceState) { + super.onViewCreated(savedInstanceState); + newestBooksDataProvider.load(null); + recommendedBooksDataProvider.load(null); + if (preferences.isUserLoggedIn()) { + getView().setNowReadingVisibility(true); + nowReadingBooksDataProvider.load(null); + } + fetchHeader(); + } + + @Override + public void onResume() { + super.onResume(); + getView().showBecomeAFriendHeader(preferences.isUserPremium()); + } + + @Override + public void onDestroy() { + super.onDestroy(); + newestBooksDataProvider.cancel(); + recommendedBooksDataProvider.cancel(); + nowReadingBooksDataProvider.cancel(); + if (currentCall != null) { + currentCall.cancel(); + } + EventBus.getDefault().unregister(this); + } + + void onNowReadingSeeAllClicked() { + EventBus.getDefault().post(new MainActivity.ChangeNavigationEvent(NavigationElement.NOW_READING)); + } + + void onBookClicked(BookModel book) { + getView().openBookDetailsView(book.getSlug(), BookType.TYPE_DEFAULT); + } + + void reloadNewest() { + newestBooksDataProvider.load(null); + } + + void reloadRecommended() { + recommendedBooksDataProvider.load(null); + } + + void reloadNowReading() { + nowReadingBooksDataProvider.load(null); + } + + @SuppressWarnings("unused") + @Subscribe(threadMode = ThreadMode.MAIN) + public void onBookAdded(BookStorage.BookAddedEvent event) { + if (preferences.isUserLoggedIn()) { + nowReadingBooksDataProvider.load(null); + } + } + + @SuppressWarnings("unused") + @Subscribe(threadMode = ThreadMode.MAIN) + public void onBookDeleted(BookStorage.BookDeletedEvent event) { + if (preferences.isUserLoggedIn()) { + nowReadingBooksDataProvider.load(null); + } + } + + @SuppressWarnings("unused") + @Subscribe(threadMode = ThreadMode.MAIN) + public void onPremiumChanged(PremiumStatusEvent event) { + getView().showBecomeAFriendHeader(event.isPremium()); + } + + @SuppressWarnings("unused") + @Subscribe(threadMode = ThreadMode.MAIN) + public void onLoggedIn(LoggedInEvent event) { + getView().showBecomeAFriendHeader(preferences.isUserPremium()); + getView().setNowReadingVisibility(true); + nowReadingBooksDataProvider.load(null); + } + + void onPremiereHeaderClicked() { + if (premiereBook != null) { + getView().openBookDetailsView(premiereBook.getSlug(), BookType.TYPE_PREMIUM); + } + } + + void fetchHeader() { + getView().setProgressContainerVisible(true); + getView().setHeaderProgressVisible(true); + currentCall = client.call(new RestClientCallback, BooksService>() { + @Override + public void onSuccess(List data) { + getView().setHeaderProgressVisible(false); + if (data.size() > 0) { + premiereBook = data.get(0); + getView().initHeader(premiereBook); + getView().setProgressContainerVisible(false); + } else { + getView().showHeaderEmpty(preferences.isUserLoggedIn()); + } + } + + @Override + public void onFailure(Exception e) { + getView().showHeaderError(); + } + + @Override + public void onCancel() { + // nop. + } + + @Override + public Call> execute(BooksService service) { + return service.getPreview(); + } + }, BooksService.class); + } + + + private class NewestDataObserver implements DataObserver> { + + @Override + public void onLoadStarted() { + getView().setNewestProgressVisible(true); + } + + @Override + public void onLoadSuccess(List data) { + getView().setNewestProgressVisible(false); + getView().setNewest(data); + } + + @Override + public void onLoadFailed(Exception e) { + getView().setNewestProgressVisible(false); + getView().showNewestError(e); + } + } + + private class RecommendedDataObserver implements DataObserver> { + + @Override + public void onLoadStarted() { + getView().setRecommendedProgressVisible(true); + } + + @Override + public void onLoadSuccess(List data) { + getView().setRecommendedProgressVisible(false); + getView().setRecommended(data); + } + + @Override + public void onLoadFailed(Exception e) { + getView().setRecommendedProgressVisible(false); + getView().showRecommendedError(e); + } + } + + private class NowReadingDataObserver implements DataObserver> { + + @Override + public void onLoadStarted() { + getView().setNowReadingProgressVisible(true); + } + + @Override + public void onLoadSuccess(List data) { + getView().setNowReadingProgressVisible(false); + getView().setNowReading(data); + } + + @Override + public void onLoadFailed(Exception e) { + getView().setNowReadingProgressVisible(false); + getView().showNowReadingError(e); + } + } +}