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.RaisedSearchMetadata
|
||||||
import exh.metadata.metadata.base.getFlatMetadataForManga
|
import exh.metadata.metadata.base.getFlatMetadataForManga
|
||||||
import exh.metadata.metadata.base.insertFlatMetadata
|
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.executeOnIO
|
||||||
import rx.Completable
|
import rx.Completable
|
||||||
import rx.Single
|
import rx.Single
|
||||||
@ -72,7 +72,7 @@ interface MetadataSource<M : RaisedSearchMetadata, I> : CatalogueSource {
|
|||||||
}.flatMapCompletable {
|
}.flatMapCompletable {
|
||||||
if (mangaId != null) {
|
if (mangaId != null) {
|
||||||
it.mangaId = mangaId
|
it.mangaId = mangaId
|
||||||
db.insertFlatMetadata(it.flatten())
|
db.insertFlatMetadataCompletable(it.flatten())
|
||||||
} else Completable.complete()
|
} else Completable.complete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,7 +87,7 @@ interface MetadataSource<M : RaisedSearchMetadata, I> : CatalogueSource {
|
|||||||
parseInfoIntoMetadata(metadata, input)
|
parseInfoIntoMetadata(metadata, input)
|
||||||
if (mangaId != null) {
|
if (mangaId != null) {
|
||||||
metadata.mangaId = mangaId
|
metadata.mangaId = mangaId
|
||||||
db.insertFlatMetadataAsync(metadata.flatten()).await()
|
db.insertFlatMetadata(metadata.flatten())
|
||||||
}
|
}
|
||||||
|
|
||||||
return metadata.createMangaInfo(manga)
|
return metadata.createMangaInfo(manga)
|
||||||
@ -119,7 +119,7 @@ interface MetadataSource<M : RaisedSearchMetadata, I> : CatalogueSource {
|
|||||||
val newMetaSingle = Single.just(newMeta)
|
val newMetaSingle = Single.just(newMeta)
|
||||||
if (mangaId != null) {
|
if (mangaId != null) {
|
||||||
newMeta.mangaId = mangaId
|
newMeta.mangaId = mangaId
|
||||||
db.insertFlatMetadata(newMeta.flatten()).andThen(newMetaSingle)
|
db.insertFlatMetadataCompletable(newMeta.flatten()).andThen(newMetaSingle)
|
||||||
} else newMetaSingle
|
} else newMetaSingle
|
||||||
}
|
}
|
||||||
} else Single.just(existingMeta)
|
} else Single.just(existingMeta)
|
||||||
@ -146,7 +146,7 @@ interface MetadataSource<M : RaisedSearchMetadata, I> : CatalogueSource {
|
|||||||
parseInfoIntoMetadata(newMeta, input)
|
parseInfoIntoMetadata(newMeta, input)
|
||||||
if (mangaId != null) {
|
if (mangaId != null) {
|
||||||
newMeta.mangaId = mangaId
|
newMeta.mangaId = mangaId
|
||||||
db.insertFlatMetadataAsync(newMeta.flatten()).await().let { newMeta }
|
db.insertFlatMetadata(newMeta.flatten()).let { newMeta }
|
||||||
} else newMeta
|
} else newMeta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -181,9 +181,9 @@ class MergedSource : HttpSource() {
|
|||||||
}
|
}
|
||||||
manga.copyFrom(source.getMangaDetails(manga.toMangaInfo()).toSManga())
|
manga.copyFrom(source.getMangaDetails(manga.toMangaInfo()).toSManga())
|
||||||
try {
|
try {
|
||||||
manga.id = db.insertManga(manga).executeOnIO().insertedId()
|
manga.id = db.insertManga(manga).executeAsBlocking().insertedId()
|
||||||
mangaId = manga.id
|
mangaId = manga.id
|
||||||
db.insertNewMergedMangaId(this).executeOnIO()
|
db.insertNewMergedMangaId(this).executeAsBlocking()
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
xLogW("Error inserting merged manga id", e)
|
xLogW("Error inserting merged manga id", e)
|
||||||
}
|
}
|
||||||
|
@ -142,7 +142,7 @@ class GalleryAdder {
|
|||||||
manga.date_added = System.currentTimeMillis()
|
manga.date_added = System.currentTimeMillis()
|
||||||
}
|
}
|
||||||
|
|
||||||
db.insertManga(manga).executeOnIO()
|
db.insertManga(manga).executeAsBlocking()
|
||||||
|
|
||||||
// Fetch and copy chapters
|
// Fetch and copy chapters
|
||||||
try {
|
try {
|
||||||
|
@ -345,7 +345,7 @@ class FavoritesSyncHelper(val context: Context) {
|
|||||||
if (manga?.favorite == true) {
|
if (manga?.favorite == true) {
|
||||||
manga.favorite = false
|
manga.favorite = false
|
||||||
manga.date_added = 0
|
manga.date_added = 0
|
||||||
db.updateMangaFavorite(manga).executeOnIO()
|
db.updateMangaFavorite(manga).executeAsBlocking()
|
||||||
removedManga += manga
|
removedManga += manga
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import exh.metadata.metadata.MangaDexSearchMetadata
|
|||||||
import exh.metadata.metadata.base.RaisedTag
|
import exh.metadata.metadata.base.RaisedTag
|
||||||
import exh.metadata.metadata.base.getFlatMetadataForManga
|
import exh.metadata.metadata.base.getFlatMetadataForManga
|
||||||
import exh.metadata.metadata.base.insertFlatMetadata
|
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.executeOnIO
|
||||||
import exh.util.floor
|
import exh.util.floor
|
||||||
import exh.util.nullIfZero
|
import exh.util.nullIfZero
|
||||||
@ -65,7 +65,7 @@ class ApiMangaParser(private val lang: String) {
|
|||||||
}.flatMapCompletable {
|
}.flatMapCompletable {
|
||||||
if (mangaId != null) {
|
if (mangaId != null) {
|
||||||
it.mangaId = mangaId
|
it.mangaId = mangaId
|
||||||
db.insertFlatMetadata(it.flatten())
|
db.insertFlatMetadataCompletable(it.flatten())
|
||||||
} else Completable.complete()
|
} else Completable.complete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ class ApiMangaParser(private val lang: String) {
|
|||||||
parseInfoIntoMetadata(metadata, input, coverUrls)
|
parseInfoIntoMetadata(metadata, input, coverUrls)
|
||||||
if (mangaId != null) {
|
if (mangaId != null) {
|
||||||
metadata.mangaId = mangaId
|
metadata.mangaId = mangaId
|
||||||
db.insertFlatMetadataAsync(metadata.flatten()).await()
|
db.insertFlatMetadata(metadata.flatten())
|
||||||
}
|
}
|
||||||
|
|
||||||
return metadata.createMangaInfo(manga)
|
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.SearchMetadata
|
||||||
import exh.metadata.sql.models.SearchTag
|
import exh.metadata.sql.models.SearchTag
|
||||||
import exh.metadata.sql.models.SearchTitle
|
import exh.metadata.sql.models.SearchTitle
|
||||||
import exh.util.executeOnIO
|
|
||||||
import kotlinx.coroutines.Deferred
|
import kotlinx.coroutines.Deferred
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.coroutineScope
|
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,
|
* 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.
|
* 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.
|
* So please, execute blocking I/O operation only from background thread.
|
||||||
* See [WorkerThread].
|
* See [androidx.annotation.WorkerThread].
|
||||||
*
|
*
|
||||||
* @return nullable result of operation.
|
* @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)
|
require(flatMetadata.metadata.mangaId != -1L)
|
||||||
|
|
||||||
inTransaction {
|
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 {
|
suspend fun DatabaseHelper.insertFlatMetadataAsync(flatMetadata: FlatMetadata): Deferred<Unit> = coroutineScope {
|
||||||
async {
|
async {
|
||||||
require(flatMetadata.metadata.mangaId != -1L)
|
require(flatMetadata.metadata.mangaId != -1L)
|
||||||
|
|
||||||
inTransaction {
|
inTransaction {
|
||||||
insertSearchMetadata(flatMetadata.metadata).executeOnIO()
|
insertSearchMetadata(flatMetadata.metadata).executeAsBlocking()
|
||||||
setSearchTagsForManga(flatMetadata.metadata.mangaId, flatMetadata.tags)
|
setSearchTagsForManga(flatMetadata.metadata.mangaId, flatMetadata.tags)
|
||||||
setSearchTitlesForManga(flatMetadata.metadata.mangaId, flatMetadata.titles)
|
setSearchTitlesForManga(flatMetadata.metadata.mangaId, flatMetadata.titles)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user