mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	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:
		@@ -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,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            syncChaptersWithSource(sourceChapters, manga, source)
 | 
			
		||||
        } catch (e: Exception) {
 | 
			
		||||
            // Worst case, chapters won't be synced
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        db.inTransaction {
 | 
			
		||||
            // Update chapters read
 | 
			
		||||
            if (migrateChapters) {
 | 
			
		||||
                try {
 | 
			
		||||
                    syncChaptersWithSource(sourceChapters, manga, source)
 | 
			
		||||
                } catch (e: Exception) {
 | 
			
		||||
                    // Worst case, chapters won't be synced
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                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 New Issue
	
	Block a user