|
@@ -313,12 +313,20 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
pos = tmp
|
|
pos = tmp
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- var preparedNowSpeak = preparedChapter.getParagraphNum(
|
|
|
|
|
|
|
+ val usePreparedPlaybackQueue = useSpeechPlaybackQueue && !preparedPlaybackQueue.isEmpty
|
|
|
|
|
+ var preparedNowSpeak = preparedChapter.getParagraphNumAtOrAfter(
|
|
|
preparedReadAloudNumber + 1,
|
|
preparedReadAloudNumber + 1,
|
|
|
preparedReadAloudByPage,
|
|
preparedReadAloudByPage,
|
|
|
) - 1
|
|
) - 1
|
|
|
|
|
+ if (!usePreparedPlaybackQueue && preparedNowSpeak !in preparedContentList.indices) {
|
|
|
|
|
+ AppLog.put(
|
|
|
|
|
+ "启动朗读失败:无法定位朗读段落 position=$preparedReadAloudNumber " +
|
|
|
|
|
+ "pageIndex=$pageIndex startPos=$startPos"
|
|
|
|
|
+ )
|
|
|
|
|
+ return@execute
|
|
|
|
|
+ }
|
|
|
val moveToLast = toLast
|
|
val moveToLast = toLast
|
|
|
- if (!preparedReadAloudByPage && startPos == 0 && !moveToLast) {
|
|
|
|
|
|
|
+ if (!usePreparedPlaybackQueue && !preparedReadAloudByPage && startPos == 0 && !moveToLast) {
|
|
|
pos = page.chapterPosition -
|
|
pos = page.chapterPosition -
|
|
|
preparedChapter.paragraphs[preparedNowSpeak].chapterPosition
|
|
preparedChapter.paragraphs[preparedNowSpeak].chapterPosition
|
|
|
}
|
|
}
|
|
@@ -331,7 +339,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
var preparedParagraphStartPos = pos
|
|
var preparedParagraphStartPos = pos
|
|
|
- if (useSpeechPlaybackQueue && !preparedPlaybackQueue.isEmpty) {
|
|
|
|
|
|
|
+ if (usePreparedPlaybackQueue) {
|
|
|
preparedPlaybackQueue.cursorAt(preparedReadAloudNumber)?.let { cursor ->
|
|
preparedPlaybackQueue.cursorAt(preparedReadAloudNumber)?.let { cursor ->
|
|
|
preparedPlaybackCursor = cursor
|
|
preparedPlaybackCursor = cursor
|
|
|
preparedContentList = preparedPlaybackQueue.cues.map { it.text }
|
|
preparedContentList = preparedPlaybackQueue.cues.map { it.text }
|
|
@@ -526,11 +534,19 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
}
|
|
}
|
|
|
if (nowSpeak > 0) {
|
|
if (nowSpeak > 0) {
|
|
|
playStop()
|
|
playStop()
|
|
|
|
|
+ var foundPreviousReadableParagraph = false
|
|
|
do {
|
|
do {
|
|
|
nowSpeak--
|
|
nowSpeak--
|
|
|
readAloudNumber -= contentList[nowSpeak].length + 1 + paragraphStartPos
|
|
readAloudNumber -= contentList[nowSpeak].length + 1 + paragraphStartPos
|
|
|
paragraphStartPos = 0
|
|
paragraphStartPos = 0
|
|
|
- } while (contentList[nowSpeak].matches(AppPattern.notReadAloudRegex))
|
|
|
|
|
|
|
+ foundPreviousReadableParagraph =
|
|
|
|
|
+ !contentList[nowSpeak].matches(AppPattern.notReadAloudRegex)
|
|
|
|
|
+ } while (!foundPreviousReadableParagraph && nowSpeak > 0)
|
|
|
|
|
+ if (!foundPreviousReadableParagraph) {
|
|
|
|
|
+ toLast = true
|
|
|
|
|
+ ReadBook.moveToPrevChapter(true)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
textChapter?.let {
|
|
textChapter?.let {
|
|
|
if (readAloudByPage) {
|
|
if (readAloudByPage) {
|
|
|
val paragraphs = it.getParagraphs(true)
|
|
val paragraphs = it.getParagraphs(true)
|