Delegate hitomi, it is now the first fully delegated factory source. To continue using hitomi please download the extension. This comes with a lot of fixes for future delegated factory sources

This commit is contained in:
Jobobby04
2020-08-10 23:29:10 -04:00
parent f8efe5d189
commit 9a3fdc23e6
11 changed files with 91 additions and 386 deletions
+21 -13
View File
@@ -2,6 +2,7 @@ package exh
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.online.all.Hitomi
import eu.kanade.tachiyomi.source.online.english.EightMuses
import eu.kanade.tachiyomi.source.online.english.HBrowse
import eu.kanade.tachiyomi.source.online.english.HentaiCafe
@@ -22,7 +23,7 @@ const val NHENTAI_SOURCE_ID = LEWD_SOURCE_SERIES + 7
val HENTAI_CAFE_SOURCE_ID = delegatedSourceId<HentaiCafe>()
val PURURIN_SOURCE_ID = delegatedSourceId<Pururin>()
val TSUMINO_SOURCE_ID = delegatedSourceId<Tsumino>()
const val HITOMI_SOURCE_ID = LEWD_SOURCE_SERIES + 10
const val HITOMI_OLD_SOURCE_ID = LEWD_SOURCE_SERIES + 10
val EIGHTMUSES_SOURCE_ID = delegatedSourceId<EightMuses>()
val HBROWSE_SOURCE_ID = delegatedSourceId<HBrowse>()
const val MERGED_SOURCE_ID = LEWD_SOURCE_SERIES + 69
@@ -32,18 +33,11 @@ private val DELEGATED_LEWD_SOURCES = listOf(
Pururin::class,
Tsumino::class,
HBrowse::class,
EightMuses::class
EightMuses::class,
Hitomi::class
)
val LIBRARY_UPDATE_EXCLUDED_SOURCES = listOf(
EH_SOURCE_ID,
EXH_SOURCE_ID,
NHENTAI_SOURCE_ID,
HENTAI_CAFE_SOURCE_ID,
TSUMINO_SOURCE_ID,
HITOMI_SOURCE_ID,
PURURIN_SOURCE_ID
)
private val hitomiClass = listOf(Hitomi::class)
private inline fun <reified T> delegatedSourceId(): Long? {
return SourceManager.DELEGATED_SOURCES.entries.find {
@@ -53,13 +47,27 @@ private inline fun <reified T> delegatedSourceId(): Long? {
// Used to speed up isLewdSource
val lewdDelegatedSourceIds = SourceManager.currentDelegatedSources.filter {
!it.value.factory && it.value.newSourceClass in DELEGATED_LEWD_SOURCES
it.value.newSourceClass in DELEGATED_LEWD_SOURCES
}.map { it.value.sourceId }.sorted()
val hitomiSourceIds = SourceManager.currentDelegatedSources.filter {
it.value.newSourceClass in hitomiClass
}.map { it.value.sourceId }.sorted()
// This method MUST be fast!
fun isLewdSource(source: Long) = source in 6900..6999 ||
lewdDelegatedSourceIds.binarySearch(source) >= 0
val LIBRARY_UPDATE_EXCLUDED_SOURCES = listOf(
EH_SOURCE_ID,
EXH_SOURCE_ID,
NHENTAI_SOURCE_ID,
HENTAI_CAFE_SOURCE_ID,
TSUMINO_SOURCE_ID,
PURURIN_SOURCE_ID,
*hitomiSourceIds.toTypedArray()
)
fun Source.isEhBasedSource() = id == EH_SOURCE_ID || id == EXH_SOURCE_ID
fun Source.isNamespaceSource() = id == EH_SOURCE_ID || id == EXH_SOURCE_ID || id == NHENTAI_SOURCE_ID || id == HITOMI_SOURCE_ID || id == PURURIN_SOURCE_ID || id == TSUMINO_SOURCE_ID || id == EIGHTMUSES_SOURCE_ID || id == HBROWSE_SOURCE_ID
fun Source.isNamespaceSource() = id == EH_SOURCE_ID || id == EXH_SOURCE_ID || id == NHENTAI_SOURCE_ID || id in hitomiSourceIds || id == PURURIN_SOURCE_ID || id == TSUMINO_SOURCE_ID || id == EIGHTMUSES_SOURCE_ID || id == HBROWSE_SOURCE_ID
+18
View File
@@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.updater.UpdaterJob
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
import eu.kanade.tachiyomi.source.online.all.Hitomi
import exh.source.BlacklistedSources
import java.io.File
import java.net.URI
@@ -85,6 +86,23 @@ object EXHMigrations {
.executeAsBlocking()
}
}
if (oldVersion < 5) {
db.inTransaction {
// Migrate Tsumino source IDs
db.lowLevel().executeSQL(
RawQuery.builder()
.query(
"""
UPDATE ${MangaTable.TABLE}
SET ${MangaTable.COL_SOURCE} = ${Hitomi.otherId}
WHERE ${MangaTable.COL_SOURCE} = 6910
""".trimIndent()
)
.affectsTables(MangaTable.TABLE)
.build()
)
}
}
// if (oldVersion < 1) { }
// do stuff here when releasing changed crap
@@ -41,7 +41,7 @@ object DebugFunctions {
val sourceManager: SourceManager by injectLazy()
fun forceUpgradeMigration() {
prefs.eh_lastVersionCode().set(0)
prefs.eh_lastVersionCode().set(1)
EXHMigrations.upgrade(prefs)
}
@@ -68,7 +68,7 @@ object DebugFunctions {
}
private val throttleManager = EHentaiThrottleManager()
fun getDelegatedSourceList(): String = currentDelegatedSources.map { it.value.sourceName }.joinToString(separator = "\n")
fun getDelegatedSourceList(): String = currentDelegatedSources.map { it.value.sourceName + " : " + it.value.sourceId + " : " + it.value.factory }.joinToString(separator = "\n")
fun resetEHGalleriesForUpdater() {
throttleManager.resetThrottle()
@@ -239,9 +239,7 @@ abstract class DelegatedHttpSource(val delegate: HttpSource) : HttpSource() {
override fun getFilterList() = delegate.getFilterList()
private fun ensureDelegateCompatible() {
if (versionId != delegate.versionId ||
lang != delegate.lang
) {
if ((versionId != delegate.versionId || lang != delegate.lang) && id != delegate.id) {
throw IncompatibleDelegateException("Delegate source is not compatible (versionId: $versionId <=> ${delegate.versionId}, lang: $lang <=> ${delegate.lang})!")
}
}
+3 -3
View File
@@ -3,20 +3,20 @@ package exh.util
import eu.kanade.tachiyomi.data.database.models.Manga
import exh.EH_SOURCE_ID
import exh.EXH_SOURCE_ID
import exh.HITOMI_SOURCE_ID
import exh.NHENTAI_SOURCE_ID
import exh.PURURIN_SOURCE_ID
import exh.TSUMINO_SOURCE_ID
import exh.hitomiSourceIds
import exh.metadata.metadata.base.RaisedTag
import java.util.Locale
class SourceTagsUtil {
fun getWrappedTag(sourceId: Long, namespace: String? = null, tag: String? = null, fullTag: String? = null): String? {
return if (sourceId == EXH_SOURCE_ID || sourceId == EH_SOURCE_ID || sourceId == NHENTAI_SOURCE_ID || sourceId == HITOMI_SOURCE_ID) {
return if (sourceId == EXH_SOURCE_ID || sourceId == EH_SOURCE_ID || sourceId == NHENTAI_SOURCE_ID || sourceId in hitomiSourceIds) {
val parsed = if (fullTag != null) parseTag(fullTag) else if (namespace != null && tag != null) RaisedTag(namespace, tag, TAG_TYPE_DEFAULT) else null
if (parsed?.namespace != null) {
when (sourceId) {
HITOMI_SOURCE_ID -> wrapTagHitomi(parsed.namespace, parsed.name.substringBefore('|').trim())
in hitomiSourceIds -> wrapTagHitomi(parsed.namespace, parsed.name.substringBefore('|').trim())
NHENTAI_SOURCE_ID -> wrapTagNHentai(parsed.namespace, parsed.name.substringBefore('|').trim())
PURURIN_SOURCE_ID -> parsed.name.substringBefore('|').trim()
TSUMINO_SOURCE_ID -> parsed.name.substringBefore('|').trim()