diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 6f2ae39c3..379bc055e 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -16,12 +16,10 @@ import io.legado.app.help.book.BookHelp import io.legado.app.help.book.ContentProcessor import io.legado.app.help.book.isEpub import io.legado.app.help.book.isImage -import io.legado.app.help.book.isLocal import io.legado.app.help.book.isPdf import io.legado.app.help.config.AppConfig import io.legado.app.help.config.ReadBookConfig import io.legado.app.model.ReadBook -import io.legado.app.model.localBook.LocalBook import io.legado.app.utils.GSON import io.legado.app.utils.MD5Utils import io.legado.app.utils.fromJsonObject @@ -30,7 +28,6 @@ import kotlinx.parcelize.Parcelize import java.nio.charset.Charset import java.time.LocalDate import java.time.Period.between -import java.time.chrono.Chronology import kotlin.math.max import kotlin.math.min @@ -170,14 +167,14 @@ data class Book( val daysPassed = between(this.config.startDate, currentDate).days + 1 // 计算当前应该解锁到哪一章 - val chaptersToUnlock = (config.startChapter?:0) + (daysPassed * config.dailyChapters) - return min(this.totalChapterNum, chaptersToUnlock); - } else return this.totalChapterNum; + val chaptersToUnlock = (config.startChapter ?: 0) + (daysPassed * config.dailyChapters) + return chaptersToUnlock + } else return this.totalChapterNum } fun getRealAuthor() = author.replace(AppPattern.authorRegex, "") - fun getUnreadChapterNum() = max(simulatedTotalChapterNum() - durChapterIndex - 1, 0) + fun getUnreadChapterNum() = max(totalChapterNum - durChapterIndex - 1, 0) fun getDisplayCover() = if (customCoverUrl.isNullOrEmpty()) coverUrl else customCoverUrl @@ -299,7 +296,7 @@ data class Book( } fun getStartChapter(): Int { - if(config.readSimulating) return config.startChapter?:0 + if (config.readSimulating) return config.startChapter ?: 0 return this.durChapterIndex } diff --git a/app/src/main/java/io/legado/app/model/AudioPlay.kt b/app/src/main/java/io/legado/app/model/AudioPlay.kt index 64d2e8b2d..b61007f2a 100644 --- a/app/src/main/java/io/legado/app/model/AudioPlay.kt +++ b/app/src/main/java/io/legado/app/model/AudioPlay.kt @@ -165,7 +165,7 @@ object AudioPlay { fun next(context: Context) { book?.let { book -> - if (book.durChapterIndex + 1 < book.simulatedTotalChapterNum()) { + if (book.durChapterIndex + 1 < book.totalChapterNum) { book.durChapterIndex += 1 book.durChapterPos = 0 durChapterIndex = book.durChapterIndex @@ -223,4 +223,4 @@ object AudioPlay { } } } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index a249c7466..2f11adb6f 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -151,7 +151,7 @@ object ReadBook : CoroutineScope by MainScope() { fun setProgress(progress: BookProgress) { if (progress.durChapterIndex < chapterSize && (durChapterIndex != progress.durChapterIndex - || durChapterPos != progress.durChapterPos) + || durChapterPos != progress.durChapterPos) ) { durChapterIndex = progress.durChapterIndex durChapterPos = progress.durChapterPos @@ -229,7 +229,7 @@ object ReadBook : CoroutineScope by MainScope() { } fun moveToNextChapter(upContent: Boolean, upContentInPlace: Boolean = true): Boolean { - if (durChapterIndex < (book?.simulatedTotalChapterNum()?: chapterSize) - 1) { + if (durChapterIndex < chapterSize - 1) { durChapterPos = 0 durChapterIndex++ prevTextChapter?.cancelLayout() @@ -576,7 +576,7 @@ object ReadBook : CoroutineScope by MainScope() { prevTextChapter?.cancelLayout() prevTextChapter = textChapter textChapter.layoutChannel.receiveAsFlow().collect() - if (upContent) callBack?.upContent(offset, resetPageOffset) else TODO() + if (upContent) callBack?.upContent(offset, resetPageOffset) } 1 -> { @@ -589,9 +589,10 @@ object ReadBook : CoroutineScope by MainScope() { if (upContent) callBack?.upContent(offset, resetPageOffset) } } - - else -> {TODO()} } + + // put a log to avoid Kotlin K2 compiler take "when" as a return statement + AppLog.putDebug("contentLoadFinish done") }.onError { AppLog.put("ChapterProvider ERROR", it) appCtx.toastOnUi("ChapterProvider ERROR:\n${it.stackTraceStr}") @@ -728,4 +729,4 @@ object ReadBook : CoroutineScope by MainScope() { fun notifyBookChanged() } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt b/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt index 9dc8cf1e3..1c05bfa2b 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt @@ -113,16 +113,18 @@ object BookChapterList { if (chapterList.isEmpty()) { throw TocEmptyException(appCtx.getString(R.string.chapter_list_empty)) } - //去重 if (!reverse) { chapterList.reverse() } coroutineContext.ensureActive() + //去重 val lh = LinkedHashSet(chapterList) - val list = ArrayList(lh) + val fullList = ArrayList(lh) if (!book.getReverseToc()) { - list.reverse() + fullList.reverse() } + val list = + if (book.getReadSimulating()) fullList.take(book.simulatedTotalChapterNum()) else fullList Debug.log(book.origin, "◇目录总数:${list.size}") coroutineContext.ensureActive() val formatJs = tocRule.formatJs @@ -145,8 +147,7 @@ object BookChapterList { } val replaceRules = ContentProcessor.get(book.name, book.origin).getTitleReplaceRules() book.latestChapterTitle = - list.getOrElse(book.simulatedTotalChapterNum() - 1) { - list.last() }.getDisplayTitle(replaceRules, book.getUseReplaceRule()) + list.last().getDisplayTitle(replaceRules, book.getUseReplaceRule()) book.durChapterTitle = list.getOrElse(book.durChapterIndex) { list.last() } .getDisplayTitle(replaceRules, book.getUseReplaceRule()) if (book.totalChapterNum < list.size) { @@ -261,4 +262,4 @@ object BookChapterList { return Pair(chapterList, nextUrlList) } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt index 097641677..3f42b797a 100644 --- a/app/src/main/java/io/legado/app/model/webBook/WebBook.kt +++ b/app/src/main/java/io/legado/app/model/webBook/WebBook.kt @@ -404,4 +404,4 @@ object WebBook { } } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt b/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt index 72e7697dd..067a2172b 100644 --- a/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/audio/AudioPlayActivity.kt @@ -36,13 +36,21 @@ import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.toc.TocActivityResult import io.legado.app.ui.login.SourceLoginActivity import io.legado.app.ui.widget.seekbar.SeekBarChangeListener -import io.legado.app.utils.* +import io.legado.app.utils.StartActivityContract +import io.legado.app.utils.dpToPx +import io.legado.app.utils.invisible +import io.legado.app.utils.observeEvent +import io.legado.app.utils.observeEventSticky +import io.legado.app.utils.sendToClip +import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.startActivity import io.legado.app.utils.viewbindingdelegate.viewBinding +import io.legado.app.utils.visible import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import splitties.views.onLongClick -import java.util.* +import java.util.Locale /** * 音频播放 @@ -258,7 +266,7 @@ class AudioPlayActivity : binding.tvSubTitle.text = it AudioPlay.book?.let { book -> binding.ivSkipPrevious.isEnabled = book.durChapterIndex > 0 - binding.ivSkipNext.isEnabled = book.durChapterIndex < book.simulatedTotalChapterNum() - 1 + binding.ivSkipNext.isEnabled = book.durChapterIndex < book.totalChapterNum - 1 } } observeEventSticky(EventBus.AUDIO_SIZE) { @@ -283,4 +291,4 @@ class AudioPlayActivity : } } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt index db6abd93d..8811c1837 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt @@ -251,7 +251,7 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { appDb.bookChapterDao.insert(*it.toTypedArray()) if (book.isSameNameAuthor(ReadBook.book)) { ReadBook.book = book - ReadBook.chapterSize = book.simulatedTotalChapterNum() + ReadBook.chapterSize = book.totalChapterNum } } bookData.postValue(book) @@ -517,4 +517,4 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) { } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt index 628e7c6b4..d17c0fc06 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt @@ -61,6 +61,8 @@ abstract class BaseReadBookActivity : override val binding by viewBinding(ActivityBookReadBinding::inflate) override val viewModel by viewModels() + val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + var bottomDialog = 0 set(value) { if (field != value) { @@ -309,7 +311,6 @@ abstract class BaseReadBookActivity : } fun showSimulatedReading() { - val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") ReadBook.book?.let { book -> alert(titleResource = R.string.simulated_reading) { val alertBinding = DialogSimulatedReadingBinding.inflate(layoutInflater).apply { @@ -318,8 +319,8 @@ abstract class BaseReadBookActivity : editStart.setText(book.getStartChapter().toString()) editNum.setText(book.getDailyChapters().toString()) startDate.setText(book.getStartDate()?.format(dateFormatter)) - startDate.isFocusable = false; // 设置为false,不允许获得焦点 - startDate.isCursorVisible = false; // 不显示光标 + startDate.isFocusable = false // 设置为false,不允许获得焦点 + startDate.isCursorVisible = false // 不显示光标 startDate.setOnClickListener { // 获取当前日期 val localStartDate = LocalDate.parse(startDate.text) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 8774fefa1..b4af787da 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -229,7 +229,6 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { AppLog.put("拉取阅读进度失败《${book.name}》\n${it.localizedMessage}", it) }.onSuccess { progress -> if (progress.durChapterIndex < book.durChapterIndex || - progress.durChapterIndex >= book.simulatedTotalChapterNum() || (progress.durChapterIndex == book.durChapterIndex && progress.durChapterPos < book.durChapterPos) ) { @@ -545,4 +544,4 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt index 55ff73577..474306bd5 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt @@ -708,8 +708,7 @@ class ReadView(context: Context, attrs: AttributeSet) : } override fun hasNextChapter(): Boolean { - return ReadBook.durChapterIndex < ((ReadBook.book?.simulatedTotalChapterNum() - ?: ReadBook.chapterSize) - 1) + return ReadBook.durChapterIndex < ReadBook.chapterSize - 1 } override fun hasPrevChapter(): Boolean { diff --git a/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt b/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt index 807de565f..2f76982c3 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt @@ -118,8 +118,7 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragment_chapt lifecycleScope.launch { withContext(IO) { when { - searchKey.isNullOrBlank() -> appDb.bookChapterDao.getChapterList( - viewModel.bookUrl).take(book?.simulatedTotalChapterNum()?: Int.MAX_VALUE) + searchKey.isNullOrBlank() -> appDb.bookChapterDao.getChapterList(viewModel.bookUrl) else -> appDb.bookChapterDao.search(viewModel.bookUrl, searchKey) } }.let { @@ -172,4 +171,4 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragment_chapt } } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt index dd52305b0..5f62f1bf0 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocActivity.kt @@ -192,7 +192,7 @@ class TocActivity : VMBaseActivity(), ReadBook.book?.let { readBook -> if (readBook == book) { ReadBook.book = book - ReadBook.chapterSize = book.simulatedTotalChapterNum() + ReadBook.chapterSize = book.totalChapterNum ReadBook.upMsg(null) ReadBook.loadContent(resetPageOffset = true) } @@ -224,4 +224,4 @@ class TocActivity : VMBaseActivity(), } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt index 420f7a92f..ed8efcdff 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainViewModel.kt @@ -163,7 +163,7 @@ class MainViewModel(application: Application) : BaseViewModel(application) { appDb.bookChapterDao.insert(*toc.toTypedArray()) if (book.isSameNameAuthor(ReadBook.book)) { ReadBook.book = book - ReadBook.chapterSize = book.simulatedTotalChapterNum() + ReadBook.chapterSize = book.totalChapterNum } addDownload(source, book) }.onFailure { @@ -241,4 +241,4 @@ class MainViewModel(application: Application) : BaseViewModel(application) { } } -} +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt index 386107e31..92b7065e4 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BaseBooksAdapter.kt @@ -28,7 +28,6 @@ abstract class BaseBooksAdapter(context: Context) : oldItem.lastCheckCount != newItem.lastCheckCount -> false oldItem.getDisplayCover() != newItem.getDisplayCover() -> false oldItem.getUnreadChapterNum() != newItem.getUnreadChapterNum() -> false - oldItem.getReadSimulating() -> false else -> true } } diff --git a/app/src/main/res/layout/dialog_simulated_reading.xml b/app/src/main/res/layout/dialog_simulated_reading.xml index 1d065cdf4..c57c498f8 100644 --- a/app/src/main/res/layout/dialog_simulated_reading.xml +++ b/app/src/main/res/layout/dialog_simulated_reading.xml @@ -4,7 +4,6 @@ android:id="@+id/ll_content" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/background" android:gravity="center" android:padding="20dp" android:orientation="vertical"> @@ -12,7 +11,6 @@ @@ -59,7 +57,6 @@ @@ -116,20 +113,11 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginRight="2dp" - android:text="@string/start" + android:text="@string/start_chapter" android:textColor="@color/primaryText" android:textSize="16sp" tools:ignore="RtlHardcoded" /> - - - + + Enc/Apag Comenzar Cap. al día + Cap. inicio diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 2d50f499a..30ddf4db0 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1155,4 +1155,5 @@ スイッチ 開始日 日更の章数 + 開始の章 diff --git a/app/src/main/res/values-night/strings.xml b/app/src/main/res/values-night/strings.xml new file mode 100644 index 000000000..9a602ca1b --- /dev/null +++ b/app/src/main/res/values-night/strings.xml @@ -0,0 +1,4 @@ + + + Start Chapter + \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 440e4baf3..c31da9a3e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1155,4 +1155,5 @@ Lig/Desl Começar Cap. por dia + Início diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index a66dab4b0..873191142 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1151,4 +1151,5 @@ Còn Bật Bắt đầu Chương/ngày + Chương đầu diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 1d8734f4b..46ab974cc 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1152,4 +1152,5 @@ 開關 起始日期 日更章數 + 開始篇章 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index dd90b65b9..8c988fb7a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1154,4 +1154,5 @@ 開關 起始日期 日更章數 + 開始篇章 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 56687fd2b..f37dee0c7 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1154,4 +1154,5 @@ 开关 开始日期 日更章数 + 起始章节 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cabd1a27b..3d4f887ca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1155,4 +1155,5 @@ Switch Start from Daily Chapters + Start Chapter