Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ abstract class ChaptersPagesViewModel(
return filter { it.contains(query) }
}

private suspend fun onDownloadComplete(downloadedManga: LocalManga?) {
protected open suspend fun onDownloadComplete(downloadedManga: LocalManga?) {
downloadedManga ?: return
mangaDetails.update {
interactor.updateLocal(it, downloadedManga)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import io.github.landwarderer.futon.R
import io.github.landwarderer.futon.bookmarks.domain.Bookmark
import io.github.landwarderer.futon.bookmarks.domain.BookmarksRepository
import io.github.landwarderer.futon.core.exceptions.EmptyMangaException
import io.github.landwarderer.futon.core.model.LocalMangaSource
import io.github.landwarderer.futon.core.model.getPreferredBranch
import io.github.landwarderer.futon.core.nav.MangaIntent
import io.github.landwarderer.futon.core.nav.ReaderIntent
Expand Down Expand Up @@ -409,23 +410,36 @@ class ReaderViewModel @Inject constructor(
}
}

fun updateReadingProgress() {
viewModelScope.launch {
withContext(Dispatchers.IO) {
manga.collectLatest {
if (it != null) {
progressUpdateUseCase(it)
override suspend fun onDownloadComplete(downloadedManga: LocalManga?) {
super.onDownloadComplete(downloadedManga)
val state = readingState.value ?: return
val details = mangaDetails.value ?: return
if (downloadedManga != null && details.id == downloadedManga.manga.id) {
chaptersLoader.init(details)
if (chaptersLoader.peekChapter(state.chapterId)?.source == LocalMangaSource) {
val pages = chaptersLoader.getPages(state.chapterId)
if (pages.isEmpty() || pages.first().source != LocalMangaSource) {
runCatchingCancellable {
chaptersLoader.loadSingleChapter(state.chapterId)
}.onSuccess {
content.value = ReaderContent(chaptersLoader.snapshot(), state)
}
}

pageLoader.updateCache(getCurrentPage()!!)
}
}
}

fun updateReadingProgress() {
viewModelScope.launch(Dispatchers.IO) {
val manga = manga.filterNotNull().first()
progressUpdateUseCase(manga)
getCurrentPage()?.let { pageLoader.updateCache(it) }
}
}

private fun loadImpl() {
loadingJob = launchLoadingJob(Dispatchers.IO + EventExceptionHandler(onLoadingError)) {
var exception: Exception? = null
var exception: Throwable? = null
var loadedDetails: MangaDetails? = null
try {
detailsLoadUseCase(intent, force = false)
Expand All @@ -434,7 +448,14 @@ class ReaderViewModel @Inject constructor(
if (mangaDetails.value == null) {
mangaDetails.value = details
}
val currentChapterId = readingState.value?.chapterId
val wasCurrentChapterLocal = currentChapterId?.let {
chaptersLoader.peekChapter(it)?.source == LocalMangaSource
} ?: false
chaptersLoader.init(details)
val isCurrentChapterLocal = currentChapterId?.let {
chaptersLoader.peekChapter(it)?.source == LocalMangaSource
} ?: false
val manga = details.toManga()
// obtain state
if (readingState.value == null) {
Expand All @@ -451,11 +472,19 @@ class ReaderViewModel @Inject constructor(
readerMode.value = mode
try {
chaptersLoader.loadSingleChapter(newState.chapterId)
} catch (e: Exception) {
} catch (e: Throwable) {
readingState.value = null // try next time
exception = e.mergeWith(exception)
return@collect
}
} else if (!wasCurrentChapterLocal && isCurrentChapterLocal) {
readingState.value?.let {
runCatchingCancellable {
chaptersLoader.loadSingleChapter(it.chapterId)
}.onFailure { e ->
exception = e.mergeWith(exception)
}
}
}
mangaDetails.value = details.filterChapters(selectedBranch.value)

Expand All @@ -471,7 +500,7 @@ class ReaderViewModel @Inject constructor(
}
} catch (e: CancellationException) {
throw e
} catch (e: Exception) {
} catch (e: Throwable) {
exception = e.mergeWith(exception)
}
if (readingState.value == null) {
Expand Down Expand Up @@ -633,7 +662,7 @@ class ReaderViewModel @Inject constructor(
return ReaderState(manga, preferredBranch)
}

private fun Exception.mergeWith(other: Exception?): Exception = if (other == null) {
private fun Throwable.mergeWith(other: Throwable?): Throwable = if (other == null) {
this
} else {
other.addSuppressed(this)
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ android.enableJetifier=false
android.nonTransitiveRClass=true
android.useAndroidX=true
kotlin.code.style=official
org.gradle.jvmargs=-Xmx8192M -Dkotlin.daemon.jvm.options\="-Xmx8192M"
org.gradle.jvmargs=-Xmx2192M -Dkotlin.daemon.jvm.options\="-Xmx2192M"
android.enableR8.fullMode=true
android.nonFinalResIds=false
org.gradle.parallel=true
org.gradle.workers.max=8
org.gradle.workers.max=2
org.gradle.caching=true
org.gradle.configuration-cache=true
kotlin.incremental=true
Expand Down
Loading