Delegate Perv Eden, to continue using it download the extensions(there is a English extension and a Italian extension)
This commit is contained in:
parent
51d0a67908
commit
5a1bc6e25b
@ -42,7 +42,7 @@ android {
|
||||
minSdkVersion AndroidConfig.minSdk
|
||||
targetSdkVersion AndroidConfig.targetSdk
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
versionCode 5
|
||||
versionCode 6
|
||||
versionName "1.1.1"
|
||||
|
||||
buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
|
||||
|
@ -22,8 +22,6 @@ import exh.EH_SOURCE_ID
|
||||
import exh.EXH_SOURCE_ID
|
||||
import exh.MERGED_SOURCE_ID
|
||||
import exh.NHENTAI_SOURCE_ID
|
||||
import exh.PERV_EDEN_EN_SOURCE_ID
|
||||
import exh.PERV_EDEN_IT_SOURCE_ID
|
||||
import exh.source.BlacklistedSources
|
||||
import kotlinx.coroutines.async
|
||||
import rx.Observable
|
||||
@ -81,8 +79,6 @@ class ExtensionManager(
|
||||
return when (source.id) {
|
||||
EH_SOURCE_ID -> context.getDrawable(R.mipmap.ic_ehentai_source)
|
||||
EXH_SOURCE_ID -> context.getDrawable(R.mipmap.ic_ehentai_source)
|
||||
PERV_EDEN_EN_SOURCE_ID -> context.getDrawable(R.mipmap.ic_perveden_source)
|
||||
PERV_EDEN_IT_SOURCE_ID -> context.getDrawable(R.mipmap.ic_perveden_source)
|
||||
NHENTAI_SOURCE_ID -> context.getDrawable(R.mipmap.ic_nhentai_source)
|
||||
MERGED_SOURCE_ID -> context.getDrawable(R.mipmap.ic_merged_source)
|
||||
else -> null
|
||||
|
@ -20,10 +20,14 @@ import eu.kanade.tachiyomi.source.online.english.HentaiCafe
|
||||
import eu.kanade.tachiyomi.source.online.english.Pururin
|
||||
import eu.kanade.tachiyomi.source.online.english.Tsumino
|
||||
import exh.EH_SOURCE_ID
|
||||
import exh.EIGHTMUSES_SOURCE_ID
|
||||
import exh.EXH_SOURCE_ID
|
||||
import exh.HBROWSE_SOURCE_ID
|
||||
import exh.HENTAI_CAFE_SOURCE_ID
|
||||
import exh.PERV_EDEN_EN_SOURCE_ID
|
||||
import exh.PERV_EDEN_IT_SOURCE_ID
|
||||
import exh.metadata.metadata.PervEdenLang
|
||||
import exh.PURURIN_SOURCE_ID
|
||||
import exh.TSUMINO_SOURCE_ID
|
||||
import exh.source.BlacklistedSources
|
||||
import exh.source.DelegatedHttpSource
|
||||
import exh.source.EnhancedHttpSource
|
||||
@ -136,8 +140,6 @@ open class SourceManager(private val context: Context) {
|
||||
if (prefs.enableExhentai().get()) {
|
||||
exSrcs += EHentai(EXH_SOURCE_ID, true, context)
|
||||
}
|
||||
exSrcs += PervEden(PERV_EDEN_EN_SOURCE_ID, PervEdenLang.en, context)
|
||||
exSrcs += PervEden(PERV_EDEN_IT_SOURCE_ID, PervEdenLang.it, context)
|
||||
exSrcs += NHentai(context)
|
||||
return exSrcs
|
||||
}
|
||||
@ -175,19 +177,19 @@ open class SourceManager(private val context: Context) {
|
||||
val DELEGATED_SOURCES = listOf(
|
||||
DelegatedSource(
|
||||
"Hentai Cafe",
|
||||
260868874183818481,
|
||||
HENTAI_CAFE_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.all.foolslide.HentaiCafe",
|
||||
HentaiCafe::class
|
||||
),
|
||||
DelegatedSource(
|
||||
"Pururin",
|
||||
2221515250486218861,
|
||||
PURURIN_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.en.pururin.Pururin",
|
||||
Pururin::class
|
||||
),
|
||||
DelegatedSource(
|
||||
"Tsumino",
|
||||
6707338697138388238,
|
||||
TSUMINO_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.en.tsumino.Tsumino",
|
||||
Tsumino::class
|
||||
)/*,
|
||||
@ -200,13 +202,13 @@ open class SourceManager(private val context: Context) {
|
||||
)*/,
|
||||
DelegatedSource(
|
||||
"HBrowse",
|
||||
1401584337232758222,
|
||||
HBROWSE_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.en.hbrowse.HBrowse",
|
||||
HBrowse::class
|
||||
),
|
||||
DelegatedSource(
|
||||
"8Muses",
|
||||
1802675169972965535,
|
||||
EIGHTMUSES_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.all.eromuse.EroMuse",
|
||||
EightMuses::class
|
||||
),
|
||||
@ -216,6 +218,18 @@ open class SourceManager(private val context: Context) {
|
||||
"eu.kanade.tachiyomi.extension.all.hitomi.Hitomi",
|
||||
Hitomi::class,
|
||||
true
|
||||
),
|
||||
DelegatedSource(
|
||||
"PervEden English",
|
||||
PERV_EDEN_EN_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.en.perveden.Perveden",
|
||||
PervEden::class
|
||||
),
|
||||
DelegatedSource(
|
||||
"PervEden Italian",
|
||||
PERV_EDEN_IT_SOURCE_ID,
|
||||
"eu.kanade.tachiyomi.extension.it.perveden.Perveden",
|
||||
PervEden::class
|
||||
)
|
||||
).associateBy { it.originalSourceQualifiedClassName }
|
||||
|
||||
|
272
app/src/main/java/eu/kanade/tachiyomi/source/online/all/PervEden.kt
Executable file → Normal file
272
app/src/main/java/eu/kanade/tachiyomi/source/online/all/PervEden.kt
Executable file → Normal file
@ -2,155 +2,47 @@ package eu.kanade.tachiyomi.source.online.all
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.MangasPage
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.source.online.LewdSource
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.source.online.UrlImportableSource
|
||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import eu.kanade.tachiyomi.util.chapter.ChapterRecognition
|
||||
import exh.metadata.metadata.PervEdenLang
|
||||
import exh.metadata.metadata.PervEdenSearchMetadata
|
||||
import exh.metadata.metadata.PervEdenSearchMetadata.Companion.TAG_TYPE_DEFAULT
|
||||
import exh.metadata.metadata.base.RaisedSearchMetadata.Companion.TAG_TYPE_VIRTUAL
|
||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||
import exh.metadata.metadata.base.RaisedTag
|
||||
import exh.source.DelegatedHttpSource
|
||||
import exh.ui.metadata.adapters.PervEdenDescriptionAdapter
|
||||
import exh.util.UriFilter
|
||||
import exh.util.UriGroup
|
||||
import exh.util.urlImportFetchSearchManga
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
import org.jsoup.nodes.TextNode
|
||||
import rx.Observable
|
||||
|
||||
// TODO Transform into delegated source
|
||||
class PervEden(override val id: Long, val pvLang: PervEdenLang, val context: Context) :
|
||||
ParsedHttpSource(),
|
||||
class PervEden(delegate: HttpSource, val context: Context) :
|
||||
DelegatedHttpSource(delegate),
|
||||
LewdSource<PervEdenSearchMetadata, Document>,
|
||||
UrlImportableSource {
|
||||
/**
|
||||
* The class of the metadata used by this source
|
||||
*/
|
||||
override val metaClass = PervEdenSearchMetadata::class
|
||||
|
||||
override val supportsLatest = true
|
||||
override val name = "Perv Eden"
|
||||
override val baseUrl = "http://www.perveden.com"
|
||||
override val lang = pvLang.name
|
||||
|
||||
override fun popularMangaSelector() = "#topManga > ul > li"
|
||||
|
||||
override fun popularMangaFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
manga.thumbnail_url = "http:" + element.select(".hottestImage > img").attr("data-src")
|
||||
|
||||
val titleElement = element.getElementsByClass("hottestInfo").first().child(0)
|
||||
manga.url = titleElement.attr("href")
|
||||
manga.title = titleElement.text()
|
||||
|
||||
return manga
|
||||
}
|
||||
|
||||
override fun popularMangaNextPageSelector(): String? = null
|
||||
override val lang = delegate.lang
|
||||
|
||||
// Support direct URL importing
|
||||
override fun fetchSearchManga(page: Int, query: String, filters: FilterList) =
|
||||
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> =
|
||||
urlImportFetchSearchManga(context, query) {
|
||||
super.fetchSearchManga(page, query, filters)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = "#mangaList > tbody > tr"
|
||||
|
||||
override fun searchMangaFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
val titleElement = element.child(0).child(0)
|
||||
manga.url = titleElement.attr("href")
|
||||
manga.title = titleElement.text().trim()
|
||||
return manga
|
||||
}
|
||||
|
||||
override fun searchMangaNextPageSelector() = ".next"
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
val urlLang = if (lang == "en") {
|
||||
"eng"
|
||||
} else {
|
||||
"it"
|
||||
}
|
||||
return GET("$baseUrl/$urlLang/")
|
||||
}
|
||||
|
||||
override fun latestUpdatesSelector() = ".newsManga"
|
||||
|
||||
override fun latestUpdatesFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
val header = element.getElementsByClass("manga_tooltop_header").first()
|
||||
val titleElement = header.child(0)
|
||||
manga.url = titleElement.attr("href")
|
||||
manga.title = titleElement.text().trim()
|
||||
manga.thumbnail_url = "https:" + header.parent().selectFirst(".mangaImage img").attr("tmpsrc")
|
||||
return manga
|
||||
}
|
||||
|
||||
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||
val document = response.asJsoup()
|
||||
|
||||
val mangas = document.select(latestUpdatesSelector()).map { element ->
|
||||
latestUpdatesFromElement(element)
|
||||
}
|
||||
|
||||
return MangasPage(mangas, mangas.isNotEmpty())
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val uri = Uri.parse("$baseUrl/$lang/$lang-directory/").buildUpon()
|
||||
uri.appendQueryParameter("page", page.toString())
|
||||
uri.appendQueryParameter("title", query)
|
||||
filters.forEach {
|
||||
if (it is UriFilter) it.addToUri(uri)
|
||||
}
|
||||
return GET(uri.toString())
|
||||
}
|
||||
|
||||
override fun latestUpdatesNextPageSelector(): String? {
|
||||
throw NotImplementedError("Unused method called!")
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an observable with the updated details for a manga. Normally it's not needed to
|
||||
* override this method.
|
||||
*
|
||||
* @param manga the manga to be updated.
|
||||
*/
|
||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
||||
return client.newCall(mangaDetailsRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.flatMap {
|
||||
parseToManga(manga, it.asJsoup()).andThen(
|
||||
Observable.just(
|
||||
manga.apply {
|
||||
initialized = true
|
||||
}
|
||||
)
|
||||
)
|
||||
parseToManga(manga, it.asJsoup()).andThen(Observable.just(manga))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the supplied input into the supplied metadata object
|
||||
*/
|
||||
override fun parseIntoMetadata(metadata: PervEdenSearchMetadata, input: Document) {
|
||||
with(metadata) {
|
||||
url = Uri.parse(input.location()).path
|
||||
@ -184,12 +76,18 @@ class PervEden(override val id: Long, val pvLang: PervEdenLang, val context: Con
|
||||
"Artist" -> {
|
||||
if (it is Element && it.tagName() == "a") {
|
||||
artist = it.text()
|
||||
tags += RaisedTag("artist", it.text().toLowerCase(), TAG_TYPE_VIRTUAL)
|
||||
tags += RaisedTag(
|
||||
"artist", it.text().toLowerCase(),
|
||||
RaisedSearchMetadata.TAG_TYPE_VIRTUAL
|
||||
)
|
||||
}
|
||||
}
|
||||
"Genres" -> {
|
||||
if (it is Element && it.tagName() == "a") {
|
||||
tags += RaisedTag(null, it.text().toLowerCase(), TAG_TYPE_DEFAULT)
|
||||
tags += RaisedTag(
|
||||
null, it.text().toLowerCase(),
|
||||
PervEdenSearchMetadata.TAG_TYPE_DEFAULT
|
||||
)
|
||||
}
|
||||
}
|
||||
"Type" -> {
|
||||
@ -218,137 +116,13 @@ class PervEden(override val id: Long, val pvLang: PervEdenLang, val context: Con
|
||||
}
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(document: Document): SManga = throw UnsupportedOperationException()
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
val num = when (lang) {
|
||||
"en" -> "0"
|
||||
"it" -> "1"
|
||||
else -> throw NotImplementedError("Unimplemented language!")
|
||||
}
|
||||
|
||||
return GET("$baseUrl/ajax/news/$page/$num/0/")
|
||||
}
|
||||
|
||||
override fun chapterListSelector() = "#leftContent > table > tbody > tr"
|
||||
|
||||
override fun chapterFromElement(element: Element) = SChapter.create().apply {
|
||||
val linkElement = element.getElementsByClass("chapterLink").first()
|
||||
|
||||
setUrlWithoutDomain(linkElement.attr("href"))
|
||||
name = "Chapter " + linkElement.getElementsByTag("b").text()
|
||||
|
||||
ChapterRecognition.parseChapterNumber(
|
||||
this,
|
||||
SManga.create().apply {
|
||||
title = ""
|
||||
}
|
||||
)
|
||||
|
||||
try {
|
||||
date_upload = DATE_FORMAT.parse(element.getElementsByClass("chapterDate").first().text().trim())!!.time
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
override fun pageListParse(document: Document) = document.getElementById("pageSelect").getElementsByTag("option").map {
|
||||
Page(it.attr("data-page").toInt() - 1, baseUrl + it.attr("value"))
|
||||
}
|
||||
|
||||
override fun imageUrlParse(document: Document) = "http:" + document.getElementById("mainImg").attr("src")!!
|
||||
|
||||
override fun getFilterList() = FilterList(
|
||||
AuthorFilter(),
|
||||
ArtistFilter(),
|
||||
TypeFilterGroup(),
|
||||
ReleaseYearGroup(),
|
||||
StatusFilterGroup()
|
||||
)
|
||||
|
||||
class StatusFilterGroup : UriGroup<StatusFilter>(
|
||||
"Status",
|
||||
listOf(
|
||||
StatusFilter("Ongoing", 1),
|
||||
StatusFilter("Completed", 2),
|
||||
StatusFilter("Suspended", 0)
|
||||
)
|
||||
)
|
||||
|
||||
class StatusFilter(n: String, val id: Int) : Filter.CheckBox(n, false), UriFilter {
|
||||
override fun addToUri(builder: Uri.Builder) {
|
||||
if (state) {
|
||||
builder.appendQueryParameter("status", id.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Explicit type arg for listOf() to workaround this: KT-16570
|
||||
class ReleaseYearGroup : UriGroup<Filter<*>>(
|
||||
"Release Year",
|
||||
listOf(
|
||||
ReleaseYearRangeFilter(),
|
||||
ReleaseYearYearFilter()
|
||||
)
|
||||
)
|
||||
|
||||
class ReleaseYearRangeFilter :
|
||||
Filter.Select<String>(
|
||||
"Range",
|
||||
arrayOf(
|
||||
"on",
|
||||
"after",
|
||||
"before"
|
||||
)
|
||||
),
|
||||
UriFilter {
|
||||
override fun addToUri(builder: Uri.Builder) {
|
||||
builder.appendQueryParameter("releasedType", state.toString())
|
||||
}
|
||||
}
|
||||
|
||||
class ReleaseYearYearFilter : Filter.Text("Year"), UriFilter {
|
||||
override fun addToUri(builder: Uri.Builder) {
|
||||
builder.appendQueryParameter("released", state)
|
||||
}
|
||||
}
|
||||
|
||||
class AuthorFilter : Filter.Text("Author"), UriFilter {
|
||||
override fun addToUri(builder: Uri.Builder) {
|
||||
builder.appendQueryParameter("author", state)
|
||||
}
|
||||
}
|
||||
|
||||
class ArtistFilter : Filter.Text("Artist"), UriFilter {
|
||||
override fun addToUri(builder: Uri.Builder) {
|
||||
builder.appendQueryParameter("artist", state)
|
||||
}
|
||||
}
|
||||
|
||||
class TypeFilterGroup : UriGroup<TypeFilter>(
|
||||
"Type",
|
||||
listOf(
|
||||
TypeFilter("Japanese Manga", 0),
|
||||
TypeFilter("Korean Manhwa", 1),
|
||||
TypeFilter("Chinese Manhua", 2),
|
||||
TypeFilter("Comic", 3),
|
||||
TypeFilter("Doujinshi", 4)
|
||||
)
|
||||
)
|
||||
|
||||
class TypeFilter(n: String, val id: Int) : Filter.CheckBox(n, false), UriFilter {
|
||||
override fun addToUri(builder: Uri.Builder) {
|
||||
if (state) {
|
||||
builder.appendQueryParameter("type", id.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override val matchingHosts = listOf("www.perveden.com")
|
||||
|
||||
override fun matchesUri(uri: Uri): Boolean {
|
||||
return super.matchesUri(uri) && uri.pathSegments.firstOrNull()?.toLowerCase() == when (pvLang) {
|
||||
PervEdenLang.en -> "en-manga"
|
||||
PervEdenLang.it -> "it-manga"
|
||||
return super.matchesUri(uri) && uri.pathSegments.firstOrNull()?.toLowerCase() == when (lang) {
|
||||
"en" -> "en-manga"
|
||||
"it" -> "it-manga"
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
@ -363,10 +137,4 @@ class PervEden(override val id: Long, val pvLang: PervEdenLang, val context: Con
|
||||
override fun getDescriptionAdapter(controller: MangaController): PervEdenDescriptionAdapter {
|
||||
return PervEdenDescriptionAdapter(controller)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val DATE_FORMAT = SimpleDateFormat("MMM d, yyyy", Locale.US).apply {
|
||||
timeZone = TimeZone.getTimeZone("GMT")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,8 +45,6 @@ import exh.EH_SOURCE_ID
|
||||
import exh.EXHMigrations
|
||||
import exh.EXH_SOURCE_ID
|
||||
import exh.NHENTAI_SOURCE_ID
|
||||
import exh.PERV_EDEN_EN_SOURCE_ID
|
||||
import exh.PERV_EDEN_IT_SOURCE_ID
|
||||
import exh.eh.EHentaiUpdateWorker
|
||||
import exh.source.BlacklistedSources
|
||||
import exh.uconfig.WarnConfigureDialogController
|
||||
@ -211,12 +209,6 @@ class MainActivity : BaseActivity<MainActivityBinding>() {
|
||||
if (EXH_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += EXH_SOURCE_ID
|
||||
}
|
||||
if (PERV_EDEN_EN_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += PERV_EDEN_EN_SOURCE_ID
|
||||
}
|
||||
if (PERV_EDEN_IT_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += PERV_EDEN_IT_SOURCE_ID
|
||||
}
|
||||
if (NHENTAI_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += NHENTAI_SOURCE_ID
|
||||
}
|
||||
|
@ -39,8 +39,6 @@ import eu.kanade.tachiyomi.util.system.toast
|
||||
import exh.EH_SOURCE_ID
|
||||
import exh.EXH_SOURCE_ID
|
||||
import exh.NHENTAI_SOURCE_ID
|
||||
import exh.PERV_EDEN_EN_SOURCE_ID
|
||||
import exh.PERV_EDEN_IT_SOURCE_ID
|
||||
import exh.debug.SettingsDebugController
|
||||
import exh.log.EHLogLevel
|
||||
import exh.source.BlacklistedSources
|
||||
@ -179,12 +177,6 @@ class SettingsAdvancedController : SettingsController() {
|
||||
if (EXH_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += EXH_SOURCE_ID
|
||||
}
|
||||
if (PERV_EDEN_EN_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += PERV_EDEN_EN_SOURCE_ID
|
||||
}
|
||||
if (PERV_EDEN_IT_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += PERV_EDEN_IT_SOURCE_ID
|
||||
}
|
||||
if (NHENTAI_SOURCE_ID !in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES += NHENTAI_SOURCE_ID
|
||||
}
|
||||
@ -195,12 +187,6 @@ class SettingsAdvancedController : SettingsController() {
|
||||
if (EXH_SOURCE_ID in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES -= EXH_SOURCE_ID
|
||||
}
|
||||
if (PERV_EDEN_EN_SOURCE_ID in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES -= PERV_EDEN_EN_SOURCE_ID
|
||||
}
|
||||
if (PERV_EDEN_IT_SOURCE_ID in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES -= PERV_EDEN_IT_SOURCE_ID
|
||||
}
|
||||
if (NHENTAI_SOURCE_ID in BlacklistedSources.HIDDEN_SOURCES) {
|
||||
BlacklistedSources.HIDDEN_SOURCES -= NHENTAI_SOURCE_ID
|
||||
}
|
||||
|
@ -3,6 +3,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.all.PervEden
|
||||
import eu.kanade.tachiyomi.source.online.english.EightMuses
|
||||
import eu.kanade.tachiyomi.source.online.english.HBrowse
|
||||
import eu.kanade.tachiyomi.source.online.english.HentaiCafe
|
||||
@ -17,14 +18,14 @@ import eu.kanade.tachiyomi.source.online.english.Tsumino
|
||||
const val LEWD_SOURCE_SERIES = 6900L
|
||||
const val EH_SOURCE_ID = LEWD_SOURCE_SERIES + 1
|
||||
const val EXH_SOURCE_ID = LEWD_SOURCE_SERIES + 2
|
||||
const val PERV_EDEN_EN_SOURCE_ID = LEWD_SOURCE_SERIES + 5
|
||||
const val PERV_EDEN_IT_SOURCE_ID = LEWD_SOURCE_SERIES + 6
|
||||
const val PERV_EDEN_EN_SOURCE_ID = 4673633799850248749
|
||||
const val PERV_EDEN_IT_SOURCE_ID = 1433898225963724122
|
||||
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>()
|
||||
val EIGHTMUSES_SOURCE_ID = delegatedSourceId<EightMuses>()
|
||||
val HBROWSE_SOURCE_ID = delegatedSourceId<HBrowse>()
|
||||
const val HENTAI_CAFE_SOURCE_ID = 260868874183818481
|
||||
const val PURURIN_SOURCE_ID = 2221515250486218861
|
||||
const val TSUMINO_SOURCE_ID = 6707338697138388238
|
||||
const val EIGHTMUSES_SOURCE_ID = 1802675169972965535
|
||||
const val HBROWSE_SOURCE_ID = 1401584337232758222
|
||||
const val MERGED_SOURCE_ID = LEWD_SOURCE_SERIES + 69
|
||||
|
||||
private val DELEGATED_LEWD_SOURCES = listOf(
|
||||
@ -33,17 +34,12 @@ private val DELEGATED_LEWD_SOURCES = listOf(
|
||||
Tsumino::class,
|
||||
HBrowse::class,
|
||||
EightMuses::class,
|
||||
Hitomi::class
|
||||
Hitomi::class,
|
||||
PervEden::class
|
||||
)
|
||||
|
||||
private val hitomiClass = listOf(Hitomi::class)
|
||||
|
||||
private inline fun <reified T> delegatedSourceId(): Long? {
|
||||
return SourceManager.DELEGATED_SOURCES.entries.find {
|
||||
it.value.newSourceClass == T::class
|
||||
}?.value?.sourceId
|
||||
}
|
||||
|
||||
// Used to speed up isLewdSource
|
||||
val lewdDelegatedSourceIds = SourceManager.currentDelegatedSources.filter {
|
||||
it.value.newSourceClass in DELEGATED_LEWD_SOURCES
|
||||
|
@ -50,7 +50,6 @@ object EXHMigrations {
|
||||
}
|
||||
if (oldVersion < 4) {
|
||||
db.inTransaction {
|
||||
// Migrate Tsumino source IDs
|
||||
db.lowLevel().executeSQL(
|
||||
RawQuery.builder()
|
||||
.query(
|
||||
@ -103,6 +102,34 @@ object EXHMigrations {
|
||||
)
|
||||
}
|
||||
}
|
||||
if (oldVersion < 6) {
|
||||
db.inTransaction {
|
||||
db.lowLevel().executeSQL(
|
||||
RawQuery.builder()
|
||||
.query(
|
||||
"""
|
||||
UPDATE ${MangaTable.TABLE}
|
||||
SET ${MangaTable.COL_SOURCE} = $PERV_EDEN_EN_SOURCE_ID
|
||||
WHERE ${MangaTable.COL_SOURCE} = 6905
|
||||
""".trimIndent()
|
||||
)
|
||||
.affectsTables(MangaTable.TABLE)
|
||||
.build()
|
||||
)
|
||||
db.lowLevel().executeSQL(
|
||||
RawQuery.builder()
|
||||
.query(
|
||||
"""
|
||||
UPDATE ${MangaTable.TABLE}
|
||||
SET ${MangaTable.COL_SOURCE} = $PERV_EDEN_IT_SOURCE_ID
|
||||
WHERE ${MangaTable.COL_SOURCE} = 6906
|
||||
""".trimIndent()
|
||||
)
|
||||
.affectsTables(MangaTable.TABLE)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// if (oldVersion < 1) { }
|
||||
// do stuff here when releasing changed crap
|
||||
@ -120,18 +147,30 @@ object EXHMigrations {
|
||||
}
|
||||
|
||||
fun migrateBackupEntry(manga: MangaImpl): MangaImpl {
|
||||
if (manga.source == 6905L) {
|
||||
manga.source = PERV_EDEN_EN_SOURCE_ID
|
||||
}
|
||||
|
||||
if (manga.source == 6906L) {
|
||||
manga.source = PERV_EDEN_IT_SOURCE_ID
|
||||
}
|
||||
|
||||
// Migrate HentaiCafe source IDs
|
||||
if (manga.source == 6908L) {
|
||||
manga.source = HENTAI_CAFE_SOURCE_ID!!
|
||||
manga.source = HENTAI_CAFE_SOURCE_ID
|
||||
}
|
||||
|
||||
// Migrate Tsumino source IDs
|
||||
if (manga.source == 6909L) {
|
||||
manga.source = TSUMINO_SOURCE_ID!!
|
||||
manga.source = TSUMINO_SOURCE_ID
|
||||
}
|
||||
|
||||
if (manga.source == 6910L) {
|
||||
manga.source = Hitomi.otherId
|
||||
}
|
||||
|
||||
if (manga.source == 6912L) {
|
||||
manga.source = HBROWSE_SOURCE_ID!!
|
||||
manga.source = HBROWSE_SOURCE_ID
|
||||
}
|
||||
|
||||
// Migrate nhentai URLs
|
||||
@ -144,16 +183,6 @@ object EXHMigrations {
|
||||
manga.source = NHENTAI_SOURCE_ID
|
||||
}
|
||||
|
||||
// Allow importing of English PervEden extension backups
|
||||
if (manga.source in BlacklistedSources.PERVEDEN_EN_EXT_SOURCES) {
|
||||
manga.source = PERV_EDEN_EN_SOURCE_ID
|
||||
}
|
||||
|
||||
// Allow importing of Italian PervEden extension backups
|
||||
if (manga.source in BlacklistedSources.PERVEDEN_IT_EXT_SOURCES) {
|
||||
manga.source = PERV_EDEN_IT_SOURCE_ID
|
||||
}
|
||||
|
||||
// Allow importing of EHentai extension backups
|
||||
if (manga.source in BlacklistedSources.EHENTAI_EXT_SOURCES) {
|
||||
manga.source = EH_SOURCE_ID
|
||||
|
@ -4,8 +4,6 @@ import android.content.Context
|
||||
import android.net.Uri
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import exh.PERV_EDEN_EN_SOURCE_ID
|
||||
import exh.PERV_EDEN_IT_SOURCE_ID
|
||||
import exh.metadata.metadata.base.RaisedSearchMetadata
|
||||
import exh.metadata.metadata.base.RaisedTitle
|
||||
|
||||
@ -122,18 +120,6 @@ class PervEdenSearchMetadata : RaisedSearchMetadata() {
|
||||
Uri.parse(it).pathSegments.filterNot(String::isNullOrBlank)
|
||||
}
|
||||
|
||||
fun pvIdFromUrl(url: String) = splitGalleryUrl(url).last()
|
||||
}
|
||||
}
|
||||
|
||||
enum class PervEdenLang(val id: Long) {
|
||||
// DO NOT RENAME THESE TO CAPITAL LETTERS! The enum names are used to build URLs
|
||||
en(PERV_EDEN_EN_SOURCE_ID),
|
||||
it(PERV_EDEN_IT_SOURCE_ID);
|
||||
|
||||
companion object {
|
||||
fun source(id: Long) =
|
||||
values().find { it.id == id }
|
||||
?: throw IllegalArgumentException("Unknown source ID: $id!")
|
||||
fun pvIdFromUrl(url: String): String = splitGalleryUrl(url).last()
|
||||
}
|
||||
}
|
||||
|
@ -8,8 +8,6 @@ object BlacklistedSources {
|
||||
4726175775739752699,
|
||||
2203215402871965477
|
||||
)
|
||||
val PERVEDEN_EN_EXT_SOURCES = listOf(4673633799850248749)
|
||||
val PERVEDEN_IT_EXT_SOURCES = listOf(1433898225963724122)
|
||||
val EHENTAI_EXT_SOURCES = listOf(
|
||||
8100626124886895451,
|
||||
57122881048805941,
|
||||
@ -31,15 +29,11 @@ object BlacklistedSources {
|
||||
)
|
||||
|
||||
val BLACKLISTED_EXT_SOURCES = NHENTAI_EXT_SOURCES +
|
||||
PERVEDEN_EN_EXT_SOURCES +
|
||||
PERVEDEN_IT_EXT_SOURCES +
|
||||
EHENTAI_EXT_SOURCES
|
||||
|
||||
val BLACKLISTED_EXTENSIONS = listOf(
|
||||
"eu.kanade.tachiyomi.extension.all.ehentai",
|
||||
"eu.kanade.tachiyomi.extension.all.nhentai",
|
||||
"eu.kanade.tachiyomi.extension.en.perveden",
|
||||
"eu.kanade.tachiyomi.extension.it.perveden"
|
||||
"eu.kanade.tachiyomi.extension.all.nhentai"
|
||||
)
|
||||
|
||||
var HIDDEN_SOURCES = listOf(
|
||||
|
Loading…
x
Reference in New Issue
Block a user