2019-04-06 13:35:36 +02:00
|
|
|
package exh.debug
|
|
|
|
|
|
2019-04-18 23:40:13 +02:00
|
|
|
import android.app.Application
|
2019-04-06 13:35:36 +02:00
|
|
|
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
|
2020-04-04 22:30:05 +02:00
|
|
|
import exh.EXH_SOURCE_ID
|
2020-05-17 02:56:45 +02:00
|
|
|
import exh.eh.EHentaiThrottleManager
|
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
|
2020-05-07 15:14:52 +02:00
|
|
|
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
|
2020-04-04 22:30:05 +02:00
|
|
|
import kotlinx.coroutines.runBlocking
|
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
2019-04-06 13:35:36 +02:00
|
|
|
|
|
|
|
|
object DebugFunctions {
|
2019-04-18 23:40:13 +02:00
|
|
|
val app: Application by injectLazy()
|
2019-04-06 13:35:36 +02:00
|
|
|
val db: DatabaseHelper by injectLazy()
|
|
|
|
|
val prefs: PreferencesHelper by injectLazy()
|
2019-04-14 18:12:58 +02:00
|
|
|
val sourceManager: SourceManager by injectLazy()
|
2019-04-06 13:35:36 +02:00
|
|
|
|
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>()
|
2020-04-04 22:30:05 +02:00
|
|
|
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 02:56:45 +02:00
|
|
|
private val throttleManager = EHentaiThrottleManager()
|
2020-02-10 20:04:16 +01:00
|
|
|
|
2020-05-17 02:56:45 +02:00
|
|
|
fun ResetEHGalleriesForUpdater() {
|
|
|
|
|
throttleManager.resetThrottle()
|
|
|
|
|
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()
|
|
|
|
|
val eh = sourceManager.getOrStub(EH_SOURCE_ID)
|
|
|
|
|
val ex = sourceManager.getOrStub(EXH_SOURCE_ID)
|
|
|
|
|
|
|
|
|
|
for (manga in allManga) {
|
|
|
|
|
throttleManager.throttle()
|
|
|
|
|
if (manga.source == EH_SOURCE_ID) {
|
|
|
|
|
eh.fetchMangaDetails(manga).map { networkManga ->
|
|
|
|
|
manga.copyFrom(networkManga)
|
|
|
|
|
manga.initialized = true
|
|
|
|
|
db.insertManga(manga).executeAsBlocking()
|
|
|
|
|
}
|
|
|
|
|
} else if (manga.source == EXH_SOURCE_ID) {
|
|
|
|
|
ex.fetchMangaDetails(manga).map { networkManga ->
|
|
|
|
|
manga.copyFrom(networkManga)
|
|
|
|
|
manga.initialized = true
|
|
|
|
|
db.insertManga(manga).executeAsBlocking()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun getEHMangaListWithAgedFlagInfo(): String {
|
2020-05-17 01:44:12 +02:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-06 13:35:36 +02:00
|
|
|
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()
|
|
|
|
|
)
|
2019-04-06 13:35:36 +02:00
|
|
|
.affectsTables(MangaTable.TABLE)
|
2020-05-02 06:46:24 +02:00
|
|
|
.build()
|
|
|
|
|
)
|
2019-04-06 13:35:36 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
|
2019-08-13 03:09:39 +02:00
|
|
|
fun rescheduleEhentaiBackgroundUpdater() {
|
2020-04-22 23:26:46 +02:00
|
|
|
EHentaiUpdateWorker.scheduleBackground(app)
|
2019-08-13 03:09:39 +02:00
|
|
|
}
|
|
|
|
|
|
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")
|
2019-08-13 03:09:39 +02:00
|
|
|
|
2020-04-22 23:26:46 +02:00
|
|
|
fun cancelAllScheduledJobs() = app.jobScheduler.cancelAll()
|
2019-08-13 03:09:39 +02:00
|
|
|
|
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
|
|
|
}
|