More blocking fixes
This commit is contained in:
parent
c6369ed73f
commit
f02e3ae28f
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ class GalleryAdder {
|
||||
manga.date_added = System.currentTimeMillis()
|
||||
}
|
||||
|
||||
db.insertManga(manga).executeOnIO()
|
||||
db.insertManga(manga).executeAsBlocking()
|
||||
|
||||
// Fetch and copy chapters
|
||||
try {
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user