From f02e3ae28fc0f4aea22fa654f9905065b6e1d166 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Mon, 22 Mar 2021 20:11:15 -0400 Subject: [PATCH] More blocking fixes --- .../kanade/tachiyomi/source/online/MetadataSource.kt | 10 +++++----- .../tachiyomi/source/online/all/MergedSource.kt | 4 ++-- app/src/main/java/exh/GalleryAdder.kt | 2 +- .../main/java/exh/favorites/FavoritesSyncHelper.kt | 2 +- app/src/main/java/exh/md/handlers/ApiMangaParser.kt | 6 +++--- .../java/exh/metadata/metadata/base/FlatMetadata.kt | 11 +++++++---- 6 files changed, 19 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt index 0a3a3b8b1..43274d8a2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt @@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaController import exh.metadata.metadata.base.RaisedSearchMetadata import exh.metadata.metadata.base.getFlatMetadataForManga import exh.metadata.metadata.base.insertFlatMetadata -import exh.metadata.metadata.base.insertFlatMetadataAsync +import exh.metadata.metadata.base.insertFlatMetadataCompletable import exh.util.executeOnIO import rx.Completable import rx.Single @@ -72,7 +72,7 @@ interface MetadataSource : CatalogueSource { }.flatMapCompletable { if (mangaId != null) { it.mangaId = mangaId - db.insertFlatMetadata(it.flatten()) + db.insertFlatMetadataCompletable(it.flatten()) } else Completable.complete() } } @@ -87,7 +87,7 @@ interface MetadataSource : CatalogueSource { parseInfoIntoMetadata(metadata, input) if (mangaId != null) { metadata.mangaId = mangaId - db.insertFlatMetadataAsync(metadata.flatten()).await() + db.insertFlatMetadata(metadata.flatten()) } return metadata.createMangaInfo(manga) @@ -119,7 +119,7 @@ interface MetadataSource : CatalogueSource { val newMetaSingle = Single.just(newMeta) if (mangaId != null) { newMeta.mangaId = mangaId - db.insertFlatMetadata(newMeta.flatten()).andThen(newMetaSingle) + db.insertFlatMetadataCompletable(newMeta.flatten()).andThen(newMetaSingle) } else newMetaSingle } } else Single.just(existingMeta) @@ -146,7 +146,7 @@ interface MetadataSource : CatalogueSource { parseInfoIntoMetadata(newMeta, input) if (mangaId != null) { newMeta.mangaId = mangaId - db.insertFlatMetadataAsync(newMeta.flatten()).await().let { newMeta } + db.insertFlatMetadata(newMeta.flatten()).let { newMeta } } else newMeta } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index ea87a9bd6..a188d43f8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -181,9 +181,9 @@ class MergedSource : HttpSource() { } manga.copyFrom(source.getMangaDetails(manga.toMangaInfo()).toSManga()) try { - manga.id = db.insertManga(manga).executeOnIO().insertedId() + manga.id = db.insertManga(manga).executeAsBlocking().insertedId() mangaId = manga.id - db.insertNewMergedMangaId(this).executeOnIO() + db.insertNewMergedMangaId(this).executeAsBlocking() } catch (e: Exception) { xLogW("Error inserting merged manga id", e) } diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 17648d666..b5ce947ea 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -142,7 +142,7 @@ class GalleryAdder { manga.date_added = System.currentTimeMillis() } - db.insertManga(manga).executeOnIO() + db.insertManga(manga).executeAsBlocking() // Fetch and copy chapters try { diff --git a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt index 1efefd8a5..662dde8fe 100644 --- a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt +++ b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt @@ -345,7 +345,7 @@ class FavoritesSyncHelper(val context: Context) { if (manga?.favorite == true) { manga.favorite = false manga.date_added = 0 - db.updateMangaFavorite(manga).executeOnIO() + db.updateMangaFavorite(manga).executeAsBlocking() removedManga += manga } } diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index ec5ec6f3a..aabdaf6b3 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -15,7 +15,7 @@ import exh.metadata.metadata.MangaDexSearchMetadata import exh.metadata.metadata.base.RaisedTag import exh.metadata.metadata.base.getFlatMetadataForManga import exh.metadata.metadata.base.insertFlatMetadata -import exh.metadata.metadata.base.insertFlatMetadataAsync +import exh.metadata.metadata.base.insertFlatMetadataCompletable import exh.util.executeOnIO import exh.util.floor import exh.util.nullIfZero @@ -65,7 +65,7 @@ class ApiMangaParser(private val lang: String) { }.flatMapCompletable { if (mangaId != null) { it.mangaId = mangaId - db.insertFlatMetadata(it.flatten()) + db.insertFlatMetadataCompletable(it.flatten()) } else Completable.complete() } } @@ -80,7 +80,7 @@ class ApiMangaParser(private val lang: String) { parseInfoIntoMetadata(metadata, input, coverUrls) if (mangaId != null) { metadata.mangaId = mangaId - db.insertFlatMetadataAsync(metadata.flatten()).await() + db.insertFlatMetadata(metadata.flatten()) } return metadata.createMangaInfo(manga) diff --git a/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt b/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt index fd1dc2861..3939aeb96 100644 --- a/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt +++ b/app/src/main/java/exh/metadata/metadata/base/FlatMetadata.kt @@ -5,7 +5,6 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper import exh.metadata.sql.models.SearchMetadata import exh.metadata.sql.models.SearchTag import exh.metadata.sql.models.SearchTitle -import exh.util.executeOnIO import kotlinx.coroutines.Deferred import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope @@ -66,7 +65,7 @@ private fun preparedOperationFromSingle(single: Single): PreparedOperatio * Notice: Blocking I/O operation should not be executed on the Main Thread, * it can cause ANR (Activity Not Responding dialog), block the UI and drop animations frames. * So please, execute blocking I/O operation only from background thread. - * See [WorkerThread]. + * See [androidx.annotation.WorkerThread]. * * @return nullable result of operation. */ @@ -93,7 +92,7 @@ private fun preparedOperationFromSingle(single: Single): PreparedOperatio } } -fun DatabaseHelper.insertFlatMetadata(flatMetadata: FlatMetadata): Completable = Completable.fromCallable { +fun DatabaseHelper.insertFlatMetadata(flatMetadata: FlatMetadata) { require(flatMetadata.metadata.mangaId != -1L) inTransaction { @@ -103,12 +102,16 @@ fun DatabaseHelper.insertFlatMetadata(flatMetadata: FlatMetadata): Completable = } } +fun DatabaseHelper.insertFlatMetadataCompletable(flatMetadata: FlatMetadata): Completable = Completable.fromCallable { + insertFlatMetadata(flatMetadata) +} + suspend fun DatabaseHelper.insertFlatMetadataAsync(flatMetadata: FlatMetadata): Deferred = coroutineScope { async { require(flatMetadata.metadata.mangaId != -1L) inTransaction { - insertSearchMetadata(flatMetadata.metadata).executeOnIO() + insertSearchMetadata(flatMetadata.metadata).executeAsBlocking() setSearchTagsForManga(flatMetadata.metadata.mangaId, flatMetadata.tags) setSearchTitlesForManga(flatMetadata.metadata.mangaId, flatMetadata.titles) }