Fix manual refresh for manga, attempt to fix last chapter and last updated

This commit is contained in:
Jobobby04 2020-05-21 17:56:58 -04:00
parent 54cf97170d
commit c8befdd5ea
4 changed files with 24 additions and 20 deletions

View File

@ -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<MangaAllInOneChapterItem>)
fun setMangaInfo(manga: Manga, source: Source?, chapters: List<MangaAllInOneChapterItem>)
fun onNextManga(manga: Manga, source: Source, chapters: List<MangaAllInOneChapterItem>, lastUpdateDate: Date, chapterCount: Float)
fun setMangaInfo(manga: Manga, source: Source?, chapters: List<MangaAllInOneChapterItem>, lastUpdateDate: Date, chapterCount: Float)
fun openInWebView()
fun shareManga()
fun fetchMangaFromSource(manualFetch: Boolean = false, fetchManga: Boolean = true, fetchChapters: Boolean = true)

View File

@ -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<MangaAllInOneChapterItem>) {
override fun onNextManga(manga: Manga, source: Source, chapters: List<MangaAllInOneChapterItem>, 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<MangaAllInOneChapterItem>) {
override fun setMangaInfo(manga: Manga, source: Source?, chapters: List<MangaAllInOneChapterItem>, lastUpdateDate: Date, chapterCount: Float) {
val view = view ?: return
if (update ||

View File

@ -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)

View File

@ -67,6 +67,10 @@ class MangaAllInOnePresenter(
var chapters: List<MangaAllInOneChapterItem> = 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) })
}
}
}