Fix freezing on migrating manga (#7317)
* Use `supend` instead of `runBlocking` in migrate function * lift `syncChaptersWithSource` out of the db trasaction
This commit is contained in:
parent
4ef337f1e9
commit
6aee4fc464
2 changed files with 9 additions and 12 deletions
|
@ -85,7 +85,7 @@ class SearchPresenter(
|
|||
}
|
||||
}
|
||||
|
||||
private fun migrateMangaInternal(
|
||||
private suspend fun migrateMangaInternal(
|
||||
prevSource: Source?,
|
||||
source: Source,
|
||||
sourceChapters: List<SChapter>,
|
||||
|
@ -111,15 +111,15 @@ class SearchPresenter(
|
|||
flags,
|
||||
)
|
||||
|
||||
db.inTransaction {
|
||||
// Update chapters read
|
||||
if (migrateChapters) {
|
||||
try {
|
||||
syncChaptersWithSource(sourceChapters, manga, source)
|
||||
} catch (e: Exception) {
|
||||
// Worst case, chapters won't be synced
|
||||
}
|
||||
|
||||
db.inTransaction {
|
||||
// Update chapters read
|
||||
if (migrateChapters) {
|
||||
val prevMangaChapters = db.getChapters(prevManga).executeAsBlocking()
|
||||
val maxChapterRead = prevMangaChapters
|
||||
.filter { it.read }
|
||||
|
|
|
@ -5,7 +5,6 @@ import eu.kanade.domain.chapter.model.toDbChapter
|
|||
import eu.kanade.tachiyomi.data.database.models.toDomainManga
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import eu.kanade.tachiyomi.data.database.models.Chapter as DbChapter
|
||||
|
@ -19,16 +18,14 @@ import eu.kanade.tachiyomi.data.database.models.Manga as DbManga
|
|||
* @param source the source of the chapters.
|
||||
* @return a pair of new insertions and deletions.
|
||||
*/
|
||||
fun syncChaptersWithSource(
|
||||
suspend fun syncChaptersWithSource(
|
||||
rawSourceChapters: List<SChapter>,
|
||||
manga: DbManga,
|
||||
source: Source,
|
||||
syncChaptersWithSource: SyncChaptersWithSource = Injekt.get(),
|
||||
): Pair<List<DbChapter>, List<DbChapter>> {
|
||||
val domainManga = manga.toDomainManga() ?: return Pair(emptyList(), emptyList())
|
||||
val (added, deleted) = runBlocking {
|
||||
syncChaptersWithSource.await(rawSourceChapters, domainManga, source)
|
||||
}
|
||||
val (added, deleted) = syncChaptersWithSource.await(rawSourceChapters, domainManga, source)
|
||||
|
||||
val addedDbChapters = added.map { it.toDbChapter() }
|
||||
val deletedDbChapters = deleted.map { it.toDbChapter() }
|
||||
|
|
Reference in a new issue