diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneAdapter.kt index e0ae1c502..5b5b6009b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneAdapter.kt @@ -13,6 +13,7 @@ import eu.kanade.tachiyomi.util.system.getResourceColor import java.text.DateFormat import java.text.DecimalFormat import java.text.DecimalFormatSymbols +import java.util.Date import kotlinx.coroutines.CoroutineScope import uy.kohesive.injekt.injectLazy @@ -55,8 +56,8 @@ class MangaAllInOneAdapter( fun openSmartSearch() fun mangaPresenter(): MangaAllInOnePresenter fun openRecommends() - fun onNextManga(manga: Manga, source: Source, chapters: List) - fun setMangaInfo(manga: Manga, source: Source?, chapters: List) + fun onNextManga(manga: Manga, source: Source, chapters: List, lastUpdateDate: Date, chapterCount: Float) + fun setMangaInfo(manga: Manga, source: Source?, chapters: List, lastUpdateDate: Date, chapterCount: Float) fun openInWebView() fun shareManga() fun fetchMangaFromSource(manualFetch: Boolean = false, fetchManga: Boolean = true, fetchChapters: Boolean = true) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneController.kt index 18a3f25d2..26870ca85 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneController.kt @@ -72,6 +72,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.withContext import reactivecircus.flowbinding.android.view.clicks +import reactivecircus.flowbinding.swiperefreshlayout.refreshes import timber.log.Timber import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -192,6 +193,11 @@ class MangaAllInOneController : if (manga == null || source == null) return + // Set SwipeRefresh to refresh manga data. + binding.swipeRefresh.refreshes() + .onEach { fetchMangaFromSource(manualFetch = true) } + .launchIn(scope) + // Init RecyclerView and adapter adapter = MangaAllInOneAdapter(this, view.context) @@ -329,10 +335,10 @@ class MangaAllInOneController : * @param manga manga object containing information about manga. * @param source the source of the manga. */ - override fun onNextManga(manga: Manga, source: Source, chapters: List) { + override fun onNextManga(manga: Manga, source: Source, chapters: List, lastUpdateDate: Date, chapterCount: Float) { if (manga.initialized) { // Update view. - setMangaInfo(manga, source, chapters) + setMangaInfo(manga, source, chapters, lastUpdateDate, chapterCount) if (fromSource && !presenter.hasRequested && chapters.isNullOrEmpty()) { fetchMangaFromSource(fetchManga = false) } @@ -348,7 +354,7 @@ class MangaAllInOneController : * @param manga manga object containing information about manga. * @param source the source of the manga. */ - override fun setMangaInfo(manga: Manga, source: Source?, chapters: List) { + override fun setMangaInfo(manga: Manga, source: Source?, chapters: List, lastUpdateDate: Date, chapterCount: Float) { val view = view ?: return if (update || diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneHolder.kt index 21144e950..4741c362a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOneHolder.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.ui.manga import android.content.Context +import android.util.Log import android.view.View import androidx.core.content.ContextCompat import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -284,6 +285,9 @@ class MangaAllInOneHolder( } ) + setChapterCount(0F) + setLastUpdateDate(Date(0L)) + // Set the favorite drawable to the correct one. setFavoriteButtonState(manga.favorite) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOnePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOnePresenter.kt index 581d6be90..82cb7ae57 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOnePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaAllInOnePresenter.kt @@ -67,6 +67,10 @@ class MangaAllInOnePresenter( var chapters: List = emptyList() private set + lateinit var lastUpdateDate: Date + + var chapterCount: Float = 0F + private val scope = CoroutineScope(Job() + Dispatchers.Default) /** @@ -138,29 +142,18 @@ class MangaAllInOnePresenter( withContext(Dispatchers.Main) { Observable.just(manga) .observeOn(AndroidSchedulers.mainThread()) - .subscribeLatestCache({ view, manga -> view.onNextManga(manga, source, chapters) }) + .subscribeLatestCache({ view, manga -> view.onNextManga(manga, source, chapters, lastUpdateDate, chapterCount) }) } } } private fun updateChapterInfo() { scope.launch(Dispatchers.IO) { - val lastUpdateDate = Date( + lastUpdateDate = Date( chapters.maxBy { it.date_upload }?.date_upload ?: 0 ) - val chapterCount = chapters.maxBy { it.chapter_number }?.chapter_number ?: 0f - - withContext(Dispatchers.Main) { - // set chapter count - Observable.just(chapterCount) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeLatestCache({ view, chapterCount -> view.setChapterCount(chapterCount) }) - // update last update date - Observable.just(lastUpdateDate) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeLatestCache({ view, lastUpdateDate -> view.setLastUpdateDate(lastUpdateDate) }) - } + chapterCount = chapters.maxBy { it.chapter_number }?.chapter_number ?: 0f } } @@ -179,7 +172,7 @@ class MangaAllInOnePresenter( } else { Observable.just(manga) }.observeOn(AndroidSchedulers.mainThread()) - .subscribeLatestCache({ view, manga -> view.onNextManga(manga, source, chapters) }) + .subscribeLatestCache({ view, manga -> view.onNextManga(manga, source, chapters, lastUpdateDate, chapterCount) }) } } }