mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-15 05:27:28 +01:00
Convert clear database queries to SQLDelight
This commit is contained in:
@@ -1,43 +1,37 @@
|
||||
package eu.kanade.tachiyomi.ui.setting.database
|
||||
|
||||
import android.os.Bundle
|
||||
import eu.kanade.domain.source.interactor.GetSourcesWithNonLibraryManga
|
||||
import eu.kanade.tachiyomi.Database
|
||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||
import rx.Observable
|
||||
import rx.android.schedulers.AndroidSchedulers
|
||||
import rx.schedulers.Schedulers
|
||||
import eu.kanade.tachiyomi.util.lang.launchIO
|
||||
import eu.kanade.tachiyomi.util.lang.withUIContext
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
|
||||
class ClearDatabasePresenter : BasePresenter<ClearDatabaseController>() {
|
||||
|
||||
private val db = Injekt.get<DatabaseHelper>()
|
||||
private val database = Injekt.get<Database>()
|
||||
|
||||
private val sourceManager = Injekt.get<SourceManager>()
|
||||
class ClearDatabasePresenter(
|
||||
private val database: Database = Injekt.get(),
|
||||
private val getSourcesWithNonLibraryManga: GetSourcesWithNonLibraryManga = Injekt.get(),
|
||||
) : BasePresenter<ClearDatabaseController>() {
|
||||
|
||||
override fun onCreate(savedState: Bundle?) {
|
||||
super.onCreate(savedState)
|
||||
getDatabaseSourcesObservable()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribeLatestCache(ClearDatabaseController::setItems)
|
||||
|
||||
presenterScope.launchIO {
|
||||
getSourcesWithNonLibraryManga.subscribe()
|
||||
.collectLatest { list ->
|
||||
val items = list
|
||||
.map { (source, count) -> ClearDatabaseSourceItem(source, count) }
|
||||
.sortedBy { it.source.name }
|
||||
|
||||
withUIContext { view?.setItems(items) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun clearDatabaseForSourceIds(sources: List<Long>) {
|
||||
db.deleteMangasNotInLibraryBySourceIds(sources).executeAsBlocking()
|
||||
database.mangasQueries.deleteMangasNotInLibraryBySourceIds(sources)
|
||||
database.historyQueries.removeResettedHistory()
|
||||
}
|
||||
|
||||
private fun getDatabaseSourcesObservable(): Observable<List<ClearDatabaseSourceItem>> {
|
||||
return db.getSourceIdsWithNonLibraryManga().asRxObservable()
|
||||
.map { sourceCounts ->
|
||||
sourceCounts.map {
|
||||
val sourceObj = sourceManager.getOrStub(it.source)
|
||||
ClearDatabaseSourceItem(sourceObj, it.count)
|
||||
}.sortedBy { it.source.name }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.source.Source
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.icon
|
||||
|
||||
data class ClearDatabaseSourceItem(val source: Source, private val mangaCount: Int) : AbstractFlexibleItem<ClearDatabaseSourceItem.Holder>() {
|
||||
data class ClearDatabaseSourceItem(val source: Source, private val mangaCount: Long) : AbstractFlexibleItem<ClearDatabaseSourceItem.Holder>() {
|
||||
|
||||
override fun getLayoutRes(): Int {
|
||||
return R.layout.clear_database_source_item
|
||||
@@ -31,7 +31,7 @@ data class ClearDatabaseSourceItem(val source: Source, private val mangaCount: I
|
||||
|
||||
private val binding = ClearDatabaseSourceItemBinding.bind(view)
|
||||
|
||||
fun bind(source: Source, count: Int) {
|
||||
fun bind(source: Source, count: Long) {
|
||||
binding.title.text = source.toString()
|
||||
binding.description.text = itemView.context.getString(R.string.clear_database_source_item_count, count)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user