More blocking fixes

This commit is contained in:
Jobobby04 2021-03-22 20:11:15 -04:00
parent c6369ed73f
commit f02e3ae28f
6 changed files with 19 additions and 16 deletions

View File

@ -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<M : RaisedSearchMetadata, I> : 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<M : RaisedSearchMetadata, I> : 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<M : RaisedSearchMetadata, I> : 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<M : RaisedSearchMetadata, I> : 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
}
}

View File

@ -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)
}

View File

@ -142,7 +142,7 @@ class GalleryAdder {
manga.date_added = System.currentTimeMillis()
}
db.insertManga(manga).executeOnIO()
db.insertManga(manga).executeAsBlocking()
// Fetch and copy chapters
try {

View File

@ -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
}
}

View File

@ -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)

View File

@ -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 <T> preparedOperationFromSingle(single: Single<T>): 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 <T> preparedOperationFromSingle(single: Single<T>): 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<Unit> = 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)
}