diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/HistoryQueries.kt b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/HistoryQueries.kt index 6349d58a50..60325a0d92 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/HistoryQueries.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/database/queries/HistoryQueries.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.data.database.queries -import com.pushtorefresh.storio.sqlite.queries.DeleteQuery import com.pushtorefresh.storio.sqlite.queries.RawQuery import eu.kanade.tachiyomi.data.database.DbProvider import eu.kanade.tachiyomi.data.database.inTransactionReturn @@ -105,13 +104,4 @@ interface HistoryQueries : DbProvider { .prepare() } - fun deleteHistoryNoLastRead() = db.delete() - .byQuery( - DeleteQuery.builder() - .table(HistoryTable.TABLE) - .where("${HistoryTable.COL_LAST_READ} = ?") - .whereArgs(0) - .build(), - ) - .prepare() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabaseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabaseController.kt index 62b9753bd6..5c74237139 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabaseController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabaseController.kt @@ -29,10 +29,10 @@ import eu.kanade.tachiyomi.util.view.activityBinding import eu.kanade.tachiyomi.util.view.fullAppBarHeight import eu.kanade.tachiyomi.util.view.scrollViewWith import eu.kanade.tachiyomi.util.view.snack -import yokai.i18n.MR -import yokai.util.lang.getString import kotlin.math.max import kotlin.math.roundToInt +import yokai.i18n.MR +import yokai.util.lang.getString import android.R as AR class ClearDatabaseController : diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabasePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabasePresenter.kt index 8a8e04c918..87ab732e08 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabasePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/database/ClearDatabasePresenter.kt @@ -3,15 +3,19 @@ package eu.kanade.tachiyomi.ui.setting.controllers.database import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.base.presenter.BaseCoroutinePresenter +import eu.kanade.tachiyomi.util.system.launchIO import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.withUIContext import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get +import yokai.data.DatabaseHandler class ClearDatabasePresenter : BaseCoroutinePresenter() { private val db = Injekt.get() + private val handler = Injekt.get() + private val sourceManager = Injekt.get() var sortBy = SortSources.ALPHA @@ -26,47 +30,49 @@ class ClearDatabasePresenter : BaseCoroutinePresenter() override fun onCreate() { super.onCreate() - getDatabaseSources() + presenterScope.launchUI { + getDatabaseSources() + } } fun clearDatabaseForSourceIds(sources: List, keepReadManga: Boolean) { - if (keepReadManga) { - db.deleteMangasNotInLibraryAndNotReadBySourceIds(sources).executeAsBlocking() - } else { - db.deleteMangasNotInLibraryBySourceIds(sources).executeAsBlocking() + presenterScope.launchIO { + if (keepReadManga) { + db.deleteMangasNotInLibraryAndNotReadBySourceIds(sources).executeAsBlocking() + } else { + db.deleteMangasNotInLibraryBySourceIds(sources).executeAsBlocking() + } + handler.await { historyQueries.deleteAllUnread() } + getDatabaseSources() } - db.deleteHistoryNoLastRead().executeAsBlocking() - getDatabaseSources() } fun reorder(sortBy: SortSources) { this.sortBy = sortBy - getDatabaseSources() - } - - private fun getDatabaseSources() { presenterScope.launchUI { - hasStubSources = false - val sources = db.getSourceIdsWithNonLibraryManga().executeAsBlocking() - .map { - val sourceObj = sourceManager.getOrStub(it.source) - hasStubSources = sourceObj is SourceManager.StubSource || hasStubSources - ClearDatabaseSourceItem(sourceObj, it.count) - } - .sortedWith( - compareBy( - { - when (sortBy) { - SortSources.ALPHA -> it.source.name - SortSources.MOST_ENTRIES -> Int.MAX_VALUE - it.mangaCount - } - }, - { it.source.name }, - ), - ) - withUIContext { - view?.setItems(sources) - } + getDatabaseSources() } } + + private suspend fun getDatabaseSources() = withUIContext { + hasStubSources = false + val sources = db.getSourceIdsWithNonLibraryManga().executeAsBlocking() + .map { + val sourceObj = sourceManager.getOrStub(it.source) + hasStubSources = sourceObj is SourceManager.StubSource || hasStubSources + ClearDatabaseSourceItem(sourceObj, it.count) + } + .sortedWith( + compareBy( + { + when (sortBy) { + SortSources.ALPHA -> it.source.name + SortSources.MOST_ENTRIES -> Int.MAX_VALUE - it.mangaCount + } + }, + { it.source.name }, + ), + ) + view?.setItems(sources) + } } diff --git a/data/src/commonMain/sqldelight/tachiyomi/data/history.sq b/data/src/commonMain/sqldelight/tachiyomi/data/history.sq index 4f00d5fd13..34c7e04500 100644 --- a/data/src/commonMain/sqldelight/tachiyomi/data/history.sq +++ b/data/src/commonMain/sqldelight/tachiyomi/data/history.sq @@ -25,6 +25,9 @@ SELECT last_insert_rowid(); deleteAll: DELETE FROM history; +deleteAllUnread: +DELETE FROM history WHERE history_last_read = 0; + getByMangaId: SELECT history.* FROM history