This commit is contained in:
Horis
2025-04-17 15:04:18 +08:00
parent 75e7a69e1d
commit ee6627ee62
6 changed files with 46 additions and 23 deletions
@@ -6,6 +6,9 @@ import io.legado.app.data.entities.BaseSource
import io.legado.app.data.entities.BookSource import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.RssSource import io.legado.app.data.entities.RssSource
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.model.AudioPlay
import io.legado.app.model.ReadBook
import io.legado.app.model.ReadManga
import io.legado.app.utils.EncoderUtils import io.legado.app.utils.EncoderUtils
import io.legado.app.utils.NetworkUtils import io.legado.app.utils.NetworkUtils
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
@@ -27,6 +30,13 @@ object SourceHelp {
fun getSource(key: String?): BaseSource? { fun getSource(key: String?): BaseSource? {
key ?: return null key ?: return null
if (ReadBook.bookSource?.bookSourceUrl == key) {
return ReadBook.bookSource
} else if (AudioPlay.bookSource?.bookSourceUrl == key) {
return AudioPlay.bookSource
} else if (ReadManga.bookSource?.bookSourceUrl == key) {
return ReadManga.bookSource
}
return appDb.bookSourceDao.getBookSource(key) return appDb.bookSourceDao.getBookSource(key)
?: appDb.rssSourceDao.getByKey(key) ?: appDb.rssSourceDao.getByKey(key)
} }
@@ -220,7 +220,7 @@ object ReadManga : CoroutineScope by MainScope() {
} }
-1, 1 -> { -1, 1 -> {
if (content == null || content.isEmpty()) { if (content == null || (!chapter.isVolume && content.isEmpty())) {
return return
} }
val mangaChapter = getManageChapter(chapter, content) val mangaChapter = getManageChapter(chapter, content)
@@ -597,14 +597,14 @@ object ReadManga : CoroutineScope by MainScope() {
it.imageCount = imageCount it.imageCount = imageCount
} }
if (AppConfig.hideMangaTitle) { if (AppConfig.hideMangaTitle && imageCount > 0) {
return MangaChapter(chapter, list, imageCount) return MangaChapter(chapter, list, imageCount)
} }
val pages = mutableListOf<BaseMangaPage>() val pages = mutableListOf<BaseMangaPage>()
if (imageCount == 0 && chapter.isVolume) { if (imageCount == 0 && chapter.isVolume) {
pages.add(ReaderLoading(chapter.index, -1, chapter.title)) pages.add(ReaderLoading(chapter.index, -1, chapter.title, true))
} else { } else {
pages.add(ReaderLoading(chapter.index, -1, "阅读 ${chapter.title}")) pages.add(ReaderLoading(chapter.index, -1, "阅读 ${chapter.title}"))
pages.addAll(list) pages.addAll(list)
@@ -17,8 +17,6 @@ import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.PagerSnapHelper import androidx.recyclerview.widget.PagerSnapHelper
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
@@ -50,6 +48,7 @@ import io.legado.app.ui.book.manga.config.MangaFooterSettingDialog
import io.legado.app.ui.book.manga.entities.BaseMangaPage import io.legado.app.ui.book.manga.entities.BaseMangaPage
import io.legado.app.ui.book.manga.entities.MangaPage import io.legado.app.ui.book.manga.entities.MangaPage
import io.legado.app.ui.book.manga.recyclerview.MangaAdapter import io.legado.app.ui.book.manga.recyclerview.MangaAdapter
import io.legado.app.ui.book.manga.recyclerview.MangaLayoutManager
import io.legado.app.ui.book.manga.recyclerview.ScrollTimer import io.legado.app.ui.book.manga.recyclerview.ScrollTimer
import io.legado.app.ui.book.read.MangaMenu import io.legado.app.ui.book.read.MangaMenu
import io.legado.app.ui.book.read.ReadBookActivity.Companion.RESULT_DELETED import io.legado.app.ui.book.read.ReadBookActivity.Companion.RESULT_DELETED
@@ -82,7 +81,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback { MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback {
private val mLayoutManager by lazy { private val mLayoutManager by lazy {
LinearLayoutManager(this) MangaLayoutManager(this)
} }
private val mAdapter: MangaAdapter by lazy { private val mAdapter: MangaAdapter by lazy {
MangaAdapter(this) MangaAdapter(this)
@@ -206,7 +205,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
setPreScrollListener { _, _, _, position -> setPreScrollListener { _, _, _, position ->
if (mAdapter.isNotEmpty()) { if (mAdapter.isNotEmpty()) {
val item = mAdapter.getItem(position) val item = mAdapter.getItem(position)
if (item is MangaPage) { if (item is BaseMangaPage) {
if (ReadManga.durChapterIndex < item.chapterIndex) { if (ReadManga.durChapterIndex < item.chapterIndex) {
ReadManga.moveToNextChapter() ReadManga.moveToNextChapter()
} else if (ReadManga.durChapterIndex > item.chapterIndex) { } else if (ReadManga.durChapterIndex > item.chapterIndex) {
@@ -215,25 +214,13 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
ReadManga.durChapterPos = item.index ReadManga.durChapterPos = item.index
ReadManga.curPageChanged() ReadManga.curPageChanged()
} }
binding.mangaMenu.upSeekBar(item.index, item.imageCount) if (item is MangaPage) {
upInfoBar(item) binding.mangaMenu.upSeekBar(item.index, item.imageCount)
upInfoBar(item)
}
} }
} }
} }
addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(
recyclerView: RecyclerView,
newState: Int
) {
if (newState == SCROLL_STATE_IDLE &&
!canScroll(1) &&
ReadManga.hasNextChapter && !loadMoreView.isLoading
) {
loadMoreView.startLoad()
ReadManga.moveToNextChapter()
}
}
})
} }
binding.webtoonFrame.run { binding.webtoonFrame.run {
onTouchMiddle { onTouchMiddle {
@@ -4,5 +4,6 @@ data class ReaderLoading(
override val chapterIndex: Int = 0, override val chapterIndex: Int = 0,
override val index: Int = 0, override val index: Int = 0,
val mMessage: String? = null, val mMessage: String? = null,
val isVolume: Boolean = false
) : BaseMangaPage ) : BaseMangaPage
@@ -26,6 +26,7 @@ import io.legado.app.model.ReadManga
import io.legado.app.ui.book.manga.config.MangaColorFilterConfig import io.legado.app.ui.book.manga.config.MangaColorFilterConfig
import io.legado.app.ui.book.manga.entities.MangaPage import io.legado.app.ui.book.manga.entities.MangaPage
import io.legado.app.ui.book.manga.entities.ReaderLoading import io.legado.app.ui.book.manga.entities.ReaderLoading
import io.legado.app.utils.dpToPx
class MangaAdapter(private val context: Context) : class MangaAdapter(private val context: Context) :
@@ -124,6 +125,13 @@ class MangaAdapter(private val context: Context) :
fun onBind(item: ReaderLoading) { fun onBind(item: ReaderLoading) {
val message = item.mMessage val message = item.mMessage
binding.text.text = message binding.text.text = message
itemView.updateLayoutParams {
height = if (item.isVolume) {
MATCH_PARENT
} else {
96.dpToPx()
}
}
} }
} }
@@ -0,0 +1,17 @@
package io.legado.app.ui.book.manga.recyclerview
import android.content.Context
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class MangaLayoutManager(context: Context) :
LinearLayoutManager(context) {
private val extraLayoutSpace = context.resources.displayMetrics.heightPixels * 3 / 4
@Deprecated("Deprecated in Java")
override fun getExtraLayoutSpace(state: RecyclerView.State?): Int {
return extraLayoutSpace
}
}