mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 22:37:56 +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