komikku/app/src/main/java/exh/debug/DebugFunctions.kt

178 lines
6 KiB
Kotlin
Raw Normal View History

package exh.debug
2019-04-18 23:40:13 +02:00
import android.app.Application
import com.pushtorefresh.storio.sqlite.queries.RawQuery
import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.tables.MangaTable
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
2019-04-14 18:12:58 +02:00
import eu.kanade.tachiyomi.source.SourceManager
import exh.EH_SOURCE_ID
2020-02-22 11:12:30 +01:00
import exh.EXHMigrations
import exh.EXH_SOURCE_ID
2019-04-18 23:40:13 +02:00
import exh.eh.EHentaiUpdateWorker
2020-02-10 20:04:16 +01:00
import exh.metadata.metadata.EHentaiSearchMetadata
import exh.metadata.metadata.base.getFlatMetadataForManga
import exh.metadata.metadata.base.insertFlatMetadata
import exh.util.await
import exh.util.cancellable
import exh.util.jobScheduler
2020-02-10 20:04:16 +01:00
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.runBlocking
import uy.kohesive.injekt.injectLazy
object DebugFunctions {
2019-04-18 23:40:13 +02:00
val app: Application by injectLazy()
val db: DatabaseHelper by injectLazy()
val prefs: PreferencesHelper by injectLazy()
2019-04-14 18:12:58 +02:00
val sourceManager: SourceManager by injectLazy()
2020-02-22 11:12:30 +01:00
fun forceUpgradeMigration() {
2020-05-02 06:46:24 +02:00
prefs.eh_lastVersionCode().set(0)
2020-02-22 11:12:30 +01:00
EXHMigrations.upgrade(prefs)
}
2020-02-10 20:04:16 +01:00
fun resetAgedFlagInEXHManga() {
runBlocking {
val metadataManga = db.getFavoriteMangaWithMetadata().await()
val allManga = metadataManga.asFlow().cancellable().mapNotNull { manga ->
2020-05-02 06:46:24 +02:00
if (manga.source != EH_SOURCE_ID && manga.source != EXH_SOURCE_ID) {
2020-02-10 20:04:16 +01:00
return@mapNotNull null
2020-05-02 06:46:24 +02:00
}
2020-02-10 20:04:16 +01:00
manga
}.toList()
for (manga in allManga) {
val meta = db.getFlatMetadataForManga(manga.id!!).await()?.raise<EHentaiSearchMetadata>()
if (meta != null) {
2020-02-10 20:04:16 +01:00
// remove age flag
meta.aged = false
db.insertFlatMetadata(meta.flatten()).await()
}
}
}
}
2020-05-17 01:44:12 +02:00
fun getEHMangaListForEHUpdater(): String {
val galleries = mutableListOf(String())
runBlocking {
val metadataManga = db.getFavoriteMangaWithMetadata().await()
val allManga = metadataManga.asFlow().cancellable().mapNotNull { manga ->
if (manga.source != EH_SOURCE_ID && manga.source != EXH_SOURCE_ID) {
return@mapNotNull null
}
manga
}.toList()
for (manga in allManga) {
val meta = db.getFlatMetadataForManga(manga.id!!).await()?.raise<EHentaiSearchMetadata>()
if (meta != null) {
// remove age flag
galleries += "Aged: ${meta.aged}\t Title: ${manga.title}"
}
}
}
return galleries.joinToString(",\n")
}
fun countAgedFlagInEXHManga(): Int {
var agedAmount = 0
runBlocking {
val metadataManga = db.getFavoriteMangaWithMetadata().await()
val allManga = metadataManga.asFlow().cancellable().mapNotNull { manga ->
if (manga.source != EH_SOURCE_ID && manga.source != EXH_SOURCE_ID) {
return@mapNotNull null
}
manga
}.toList()
for (manga in allManga) {
val meta = db.getFlatMetadataForManga(manga.id!!).await()?.raise<EHentaiSearchMetadata>()
if (meta != null && meta.aged) {
// remove age flag
agedAmount++
}
}
}
return agedAmount
}
fun addAllMangaInDatabaseToLibrary() {
db.inTransaction {
2020-05-02 06:46:24 +02:00
db.lowLevel().executeSQL(
RawQuery.builder()
.query(
"""
UPDATE ${MangaTable.TABLE}
SET ${MangaTable.COL_FAVORITE} = 1
""".trimIndent()
)
.affectsTables(MangaTable.TABLE)
2020-05-02 06:46:24 +02:00
.build()
)
}
}
fun countMangaInDatabaseInLibrary() = db.getMangas().executeAsBlocking().count { it.favorite }
fun countMangaInDatabaseNotInLibrary() = db.getMangas().executeAsBlocking().count { !it.favorite }
fun countMangaInDatabase() = db.getMangas().executeAsBlocking().size
fun countMetadataInDatabase() = db.getSearchMetadata().executeAsBlocking().size
fun countMangaInLibraryWithMissingMetadata() = db.getMangas().executeAsBlocking().count {
it.favorite && db.getSearchMetadataForManga(it.id!!).executeAsBlocking() == null
}
2019-04-06 15:05:32 +02:00
fun clearSavedSearches() = prefs.eh_savedSearches().set(emptySet())
2019-04-14 18:12:58 +02:00
fun listAllSources() = sourceManager.getCatalogueSources().map {
"${it.id}: ${it.name} (${it.lang.toUpperCase()})"
}.joinToString("\n")
fun convertAllEhentaiGalleriesToExhentai() = convertSources(EH_SOURCE_ID, EXH_SOURCE_ID)
fun convertAllExhentaiGalleriesToEhentai() = convertSources(EXH_SOURCE_ID, EH_SOURCE_ID)
2020-05-17 01:44:12 +02:00
fun testLaunchEhentaiBackgroundUpdater(): String {
return EHentaiUpdateWorker.launchBackgroundTest(app)
2019-04-18 23:40:13 +02:00
}
fun rescheduleEhentaiBackgroundUpdater() {
2020-04-22 23:26:46 +02:00
EHentaiUpdateWorker.scheduleBackground(app)
}
2020-04-22 23:26:46 +02:00
fun listScheduledJobs() = app.jobScheduler.allPendingJobs.map { j ->
"""
2020-05-02 06:46:24 +02:00
{
info: ${j.id},
isPeriod: ${j.isPeriodic},
isPersisted: ${j.isPersisted},
intervalMillis: ${j.intervalMillis},
}
2020-04-22 23:26:46 +02:00
""".trimIndent()
}.joinToString(",\n")
2020-04-22 23:26:46 +02:00
fun cancelAllScheduledJobs() = app.jobScheduler.cancelAll()
2019-04-14 18:12:58 +02:00
private fun convertSources(from: Long, to: Long) {
2020-05-02 06:46:24 +02:00
db.lowLevel().executeSQL(
RawQuery.builder()
.query(
"""
UPDATE ${MangaTable.TABLE}
SET ${MangaTable.COL_SOURCE} = $to
WHERE ${MangaTable.COL_SOURCE} = $from
""".trimIndent()
)
2019-04-14 18:12:58 +02:00
.affectsTables(MangaTable.TABLE)
2020-05-02 06:46:24 +02:00
.build()
)
2019-04-14 18:12:58 +02:00
}
2020-02-10 20:04:16 +01:00
}