|
@@ -55,6 +55,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
|
|
|
|
|
var preDownloadTask: Coroutine<*>? = null
|
|
var preDownloadTask: Coroutine<*>? = null
|
|
|
val downloadedChapters = hashSetOf<Int>()
|
|
val downloadedChapters = hashSetOf<Int>()
|
|
|
|
|
+ val downloadFailChapters = hashSetOf<Int>()
|
|
|
var contentProcessor: ContentProcessor? = null
|
|
var contentProcessor: ContentProcessor? = null
|
|
|
val downloadScope = CoroutineScope(SupervisorJob() + IO)
|
|
val downloadScope = CoroutineScope(SupervisorJob() + IO)
|
|
|
|
|
|
|
@@ -202,7 +203,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
nextTextChapter = null
|
|
nextTextChapter = null
|
|
|
if (curTextChapter == null) {
|
|
if (curTextChapter == null) {
|
|
|
AppLog.putDebug("moveToNextChapter-章节未加载,开始加载")
|
|
AppLog.putDebug("moveToNextChapter-章节未加载,开始加载")
|
|
|
- loadContent(durChapterIndex, upContent, resetPageOffset = false, pageChanged = true)
|
|
|
|
|
|
|
+ loadContent(durChapterIndex, upContent, resetPageOffset = false)
|
|
|
} else if (upContent) {
|
|
} else if (upContent) {
|
|
|
AppLog.putDebug("moveToNextChapter-章节已加载,刷新视图")
|
|
AppLog.putDebug("moveToNextChapter-章节已加载,刷新视图")
|
|
|
callBack?.upContent()
|
|
callBack?.upContent()
|
|
@@ -230,7 +231,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
curTextChapter = prevTextChapter
|
|
curTextChapter = prevTextChapter
|
|
|
prevTextChapter = null
|
|
prevTextChapter = null
|
|
|
if (curTextChapter == null) {
|
|
if (curTextChapter == null) {
|
|
|
- loadContent(durChapterIndex, upContent, resetPageOffset = false, pageChanged = true)
|
|
|
|
|
|
|
+ loadContent(durChapterIndex, upContent, resetPageOffset = false)
|
|
|
} else if (upContent) {
|
|
} else if (upContent) {
|
|
|
callBack?.upContent()
|
|
callBack?.upContent()
|
|
|
}
|
|
}
|
|
@@ -312,14 +313,9 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
*/
|
|
*/
|
|
|
fun loadContent(
|
|
fun loadContent(
|
|
|
resetPageOffset: Boolean,
|
|
resetPageOffset: Boolean,
|
|
|
- pageChanged: Boolean = false,
|
|
|
|
|
success: (() -> Unit)? = null
|
|
success: (() -> Unit)? = null
|
|
|
) {
|
|
) {
|
|
|
- loadContent(
|
|
|
|
|
- durChapterIndex,
|
|
|
|
|
- resetPageOffset = resetPageOffset,
|
|
|
|
|
- pageChanged = pageChanged
|
|
|
|
|
- ) {
|
|
|
|
|
|
|
+ loadContent(durChapterIndex, resetPageOffset = resetPageOffset) {
|
|
|
success?.invoke()
|
|
success?.invoke()
|
|
|
}
|
|
}
|
|
|
loadContent(durChapterIndex + 1, resetPageOffset = resetPageOffset)
|
|
loadContent(durChapterIndex + 1, resetPageOffset = resetPageOffset)
|
|
@@ -331,14 +327,12 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
* @param index 章节序号
|
|
* @param index 章节序号
|
|
|
* @param upContent 是否更新视图
|
|
* @param upContent 是否更新视图
|
|
|
* @param resetPageOffset 滚动阅读是否重置滚动位置
|
|
* @param resetPageOffset 滚动阅读是否重置滚动位置
|
|
|
- * @param pageChanged 是否发生了翻页
|
|
|
|
|
* @param success 加载完成回调
|
|
* @param success 加载完成回调
|
|
|
*/
|
|
*/
|
|
|
fun loadContent(
|
|
fun loadContent(
|
|
|
index: Int,
|
|
index: Int,
|
|
|
upContent: Boolean = true,
|
|
upContent: Boolean = true,
|
|
|
resetPageOffset: Boolean = false,
|
|
resetPageOffset: Boolean = false,
|
|
|
- pageChanged: Boolean = false,
|
|
|
|
|
success: (() -> Unit)? = null
|
|
success: (() -> Unit)? = null
|
|
|
) {
|
|
) {
|
|
|
if (addLoading(index)) {
|
|
if (addLoading(index)) {
|
|
@@ -351,16 +345,14 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
chapter,
|
|
chapter,
|
|
|
it,
|
|
it,
|
|
|
upContent,
|
|
upContent,
|
|
|
- resetPageOffset,
|
|
|
|
|
- pageChanged
|
|
|
|
|
|
|
+ resetPageOffset
|
|
|
) {
|
|
) {
|
|
|
success?.invoke()
|
|
success?.invoke()
|
|
|
}
|
|
}
|
|
|
} ?: download(
|
|
} ?: download(
|
|
|
downloadScope,
|
|
downloadScope,
|
|
|
chapter,
|
|
chapter,
|
|
|
- resetPageOffset = resetPageOffset,
|
|
|
|
|
- pageChanged = pageChanged
|
|
|
|
|
|
|
+ resetPageOffset
|
|
|
)
|
|
)
|
|
|
} ?: removeLoading(index)
|
|
} ?: removeLoading(index)
|
|
|
}.onError {
|
|
}.onError {
|
|
@@ -388,12 +380,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
downloadedChapters.add(chapter.index)
|
|
downloadedChapters.add(chapter.index)
|
|
|
} else {
|
|
} else {
|
|
|
delay(1000)
|
|
delay(1000)
|
|
|
- download(
|
|
|
|
|
- downloadScope,
|
|
|
|
|
- chapter,
|
|
|
|
|
- resetPageOffset = false,
|
|
|
|
|
- pageChanged = false
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ download(downloadScope, chapter, false)
|
|
|
}
|
|
}
|
|
|
} ?: removeLoading(index)
|
|
} ?: removeLoading(index)
|
|
|
} catch (e: Exception) {
|
|
} catch (e: Exception) {
|
|
@@ -409,7 +396,6 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
scope: CoroutineScope,
|
|
scope: CoroutineScope,
|
|
|
chapter: BookChapter,
|
|
chapter: BookChapter,
|
|
|
resetPageOffset: Boolean,
|
|
resetPageOffset: Boolean,
|
|
|
- pageChanged: Boolean,
|
|
|
|
|
success: (() -> Unit)? = null
|
|
success: (() -> Unit)? = null
|
|
|
) {
|
|
) {
|
|
|
val book = book ?: return removeLoading(chapter.index)
|
|
val book = book ?: return removeLoading(chapter.index)
|
|
@@ -423,7 +409,6 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
chapter,
|
|
chapter,
|
|
|
"加载正文失败\n$msg",
|
|
"加载正文失败\n$msg",
|
|
|
resetPageOffset = resetPageOffset,
|
|
resetPageOffset = resetPageOffset,
|
|
|
- pageChanged = pageChanged
|
|
|
|
|
) {
|
|
) {
|
|
|
success?.invoke()
|
|
success?.invoke()
|
|
|
}
|
|
}
|
|
@@ -453,7 +438,6 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
content: String,
|
|
content: String,
|
|
|
upContent: Boolean = true,
|
|
upContent: Boolean = true,
|
|
|
resetPageOffset: Boolean,
|
|
resetPageOffset: Boolean,
|
|
|
- pageChanged: Boolean,
|
|
|
|
|
success: (() -> Unit)? = null
|
|
success: (() -> Unit)? = null
|
|
|
) {
|
|
) {
|
|
|
removeLoading(chapter.index)
|
|
removeLoading(chapter.index)
|
|
@@ -475,7 +459,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
curTextChapter = textChapter
|
|
curTextChapter = textChapter
|
|
|
if (upContent) callBack?.upContent(offset, resetPageOffset)
|
|
if (upContent) callBack?.upContent(offset, resetPageOffset)
|
|
|
callBack?.upMenuView()
|
|
callBack?.upMenuView()
|
|
|
- if (pageChanged) curPageChanged()
|
|
|
|
|
|
|
+ curPageChanged()
|
|
|
callBack?.contentLoadFinish()
|
|
callBack?.contentLoadFinish()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -561,6 +545,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
val maxChapterIndex = min(durChapterIndex + AppConfig.preDownloadNum, chapterSize)
|
|
val maxChapterIndex = min(durChapterIndex + AppConfig.preDownloadNum, chapterSize)
|
|
|
for (i in durChapterIndex.plus(2)..maxChapterIndex) {
|
|
for (i in durChapterIndex.plus(2)..maxChapterIndex) {
|
|
|
if (downloadedChapters.contains(i)) continue
|
|
if (downloadedChapters.contains(i)) continue
|
|
|
|
|
+ if (downloadFailChapters.contains(i)) continue
|
|
|
downloadIndex(i)
|
|
downloadIndex(i)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -568,6 +553,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
|
|
val minChapterIndex = durChapterIndex - min(5, AppConfig.preDownloadNum)
|
|
val minChapterIndex = durChapterIndex - min(5, AppConfig.preDownloadNum)
|
|
|
for (i in durChapterIndex.minus(2) downTo minChapterIndex) {
|
|
for (i in durChapterIndex.minus(2) downTo minChapterIndex) {
|
|
|
if (downloadedChapters.contains(i)) continue
|
|
if (downloadedChapters.contains(i)) continue
|
|
|
|
|
+ if (downloadFailChapters.contains(i)) continue
|
|
|
downloadIndex(i)
|
|
downloadIndex(i)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|