[RU] Henchan - Move url definition to preferences (#13783)
This commit is contained in:
parent
704f7bcd42
commit
279026e33b
|
@ -1,9 +1,14 @@
|
|||
package eu.kanade.tachiyomi.extension.ru.henchan
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import android.widget.Toast
|
||||
import androidx.preference.EditTextPreference
|
||||
import eu.kanade.tachiyomi.multisrc.multichan.MultiChan
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.asObservable
|
||||
import eu.kanade.tachiyomi.source.ConfigurableSource
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.Page
|
||||
|
@ -16,15 +21,25 @@ import okhttp3.Response
|
|||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
import rx.Observable
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.net.URL
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
|
||||
class HenChan : MultiChan("HenChan", "https://hchan.live", "ru") {
|
||||
class HenChan : MultiChan("HenChan", "http://y.hchan.live", "ru"), ConfigurableSource {
|
||||
|
||||
override val id: Long = 5504588601186153612
|
||||
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
|
||||
private val domain = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!!
|
||||
|
||||
override val baseUrl = domain
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
|
||||
val url = if (query.isNotEmpty()) {
|
||||
|
@ -76,8 +91,17 @@ class HenChan : MultiChan("HenChan", "https://hchan.live", "ru") {
|
|||
val isExHenManga = this.contains("/manganew_thumbs_blur/")
|
||||
val regex = "(?<=/)manganew_thumbs\\w*?(?=/)".toRegex(RegexOption.IGNORE_CASE)
|
||||
return this.replace(regex, "showfull_retina/manga")
|
||||
.replace("_".plus(URL(baseUrl).host), "_hentaichan.ru") // domain-related replacing for very old mangas
|
||||
.plus(if (isExHenManga) { "#" } else { "" }) // # for later so we know what type manga is it
|
||||
.replace(
|
||||
"_".plus(URL(baseUrl).host),
|
||||
"_hentaichan.ru"
|
||||
) // domain-related replacing for very old mangas
|
||||
.plus(
|
||||
if (isExHenManga) {
|
||||
"#"
|
||||
} else {
|
||||
""
|
||||
}
|
||||
) // # for later so we know what type manga is it
|
||||
}
|
||||
|
||||
override fun popularMangaFromElement(element: Element): SManga {
|
||||
|
@ -154,7 +178,8 @@ class HenChan : MultiChan("HenChan", "https://hchan.live", "ru") {
|
|||
.replace("\\\"", "\"")
|
||||
.replace("\\'", "'")
|
||||
chap.chapter_number = 1F
|
||||
chap.date_upload = Date().time // setting to current date because of a sorting in the "Recent updates" section
|
||||
chap.date_upload =
|
||||
Date().time // setting to current date because of a sorting in the "Recent updates" section
|
||||
return listOf(chap)
|
||||
}
|
||||
|
||||
|
@ -190,8 +215,11 @@ class HenChan : MultiChan("HenChan", "https://hchan.live", "ru") {
|
|||
chapter.setUrlWithoutDomain(element.select("h2 a").attr("href"))
|
||||
val chapterName = element.select("h2 a").attr("title")
|
||||
chapter.name = chapterName
|
||||
chapter.chapter_number = "(глава\\s|часть\\s)([0-9]+\\.?[0-9]*)".toRegex(RegexOption.IGNORE_CASE).find(chapterName)?.groupValues?.get(2)?.toFloat() ?: -1F
|
||||
chapter.date_upload = Date().time // setting to current date because of a sorting in the "Recent updates" section
|
||||
chapter.chapter_number =
|
||||
"(глава\\s|часть\\s)([0-9]+\\.?[0-9]*)".toRegex(RegexOption.IGNORE_CASE)
|
||||
.find(chapterName)?.groupValues?.get(2)?.toFloat() ?: -1F
|
||||
chapter.date_upload =
|
||||
Date().time // setting to current date because of a sorting in the "Recent updates" section
|
||||
return chapter
|
||||
}
|
||||
|
||||
|
@ -217,19 +245,35 @@ class HenChan : MultiChan("HenChan", "https://hchan.live", "ru") {
|
|||
return pageUrls.mapIndexed { i, url -> Page(i, "", url) }
|
||||
}
|
||||
|
||||
private class Genre(val id: String, @SuppressLint("DefaultLocale") name: String = id.replace('_', ' ').capitalize()) : Filter.TriState(name)
|
||||
private class Genre(
|
||||
val id: String,
|
||||
@SuppressLint("DefaultLocale") name: String = id.replace('_', ' ').capitalize()
|
||||
) : Filter.TriState(name)
|
||||
|
||||
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Тэги", genres)
|
||||
private class OrderBy : UriPartFilter(
|
||||
"Сортировка",
|
||||
arrayOf("Дата", "Популярность", "Алфавит"),
|
||||
arrayOf("&n=dateasc" to "", "&n=favasc" to "&n=favdesc", "&n=abcdesc" to "&n=abcasc"),
|
||||
arrayOf("manga/new&n=dateasc" to "manga/new", "manga/new&n=favasc" to "mostfavorites&sort=manga", "manga/new&n=abcdesc" to "manga/new&n=abcasc")
|
||||
arrayOf(
|
||||
"manga/new&n=dateasc" to "manga/new",
|
||||
"manga/new&n=favasc" to "mostfavorites&sort=manga",
|
||||
"manga/new&n=abcdesc" to "manga/new&n=abcasc"
|
||||
)
|
||||
)
|
||||
|
||||
private open class UriPartFilter(displayName: String, sortNames: Array<String>, val withGenres: Array<Pair<String, String>>, val withoutGenres: Array<Pair<String, String>>) :
|
||||
private open class UriPartFilter(
|
||||
displayName: String,
|
||||
sortNames: Array<String>,
|
||||
val withGenres: Array<Pair<String, String>>,
|
||||
val withoutGenres: Array<Pair<String, String>>
|
||||
) :
|
||||
Filter.Sort(displayName, sortNames, Selection(1, false)) {
|
||||
fun toUriPartWithGenres() = if (state!!.ascending) withGenres[state!!.index].first else withGenres[state!!.index].second
|
||||
fun toUriPartWithoutGenres() = if (state!!.ascending) withoutGenres[state!!.index].first else withoutGenres[state!!.index].second
|
||||
fun toUriPartWithGenres() =
|
||||
if (state!!.ascending) withGenres[state!!.index].first else withGenres[state!!.index].second
|
||||
|
||||
fun toUriPartWithoutGenres() =
|
||||
if (state!!.ascending) withoutGenres[state!!.index].first else withoutGenres[state!!.index].second
|
||||
}
|
||||
|
||||
override fun getFilterList() = FilterList(
|
||||
|
@ -415,4 +459,29 @@ class HenChan : MultiChan("HenChan", "https://hchan.live", "ru") {
|
|||
Genre("яндере"),
|
||||
Genre("яой")
|
||||
)
|
||||
|
||||
override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
|
||||
EditTextPreference(screen.context).apply {
|
||||
key = DOMAIN_TITLE
|
||||
this.title = DOMAIN_TITLE
|
||||
summary = domain
|
||||
this.setDefaultValue(DOMAIN_DEFAULT)
|
||||
dialogTitle = DOMAIN_TITLE
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
try {
|
||||
val res = preferences.edit().putString(DOMAIN_TITLE, newValue as String).commit()
|
||||
Toast.makeText(screen.context, "Для смены домена необходимо перезапустить приложение с полной остановкой.", Toast.LENGTH_LONG).show()
|
||||
res
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
false
|
||||
}
|
||||
}
|
||||
}.let(screen::addPreference)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val DOMAIN_TITLE = "Домен"
|
||||
private const val DOMAIN_DEFAULT = "http://y.hchan.live"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ class ChanGenerator : ThemeSourceGenerator {
|
|||
|
||||
override val sources = listOf(
|
||||
SingleLang("MangaChan", "https://manga-chan.me", "ru", overrideVersionCode = 14),
|
||||
SingleLang("HenChan", "https://hchan.live", "ru", isNsfw = true, overrideVersionCode = 36),
|
||||
SingleLang("HenChan", "http://y.hchan.live", "ru", isNsfw = true, overrideVersionCode = 37),
|
||||
SingleLang("YaoiChan", "https://yaoi-chan.me", "ru", isNsfw = true, overrideVersionCode = 4)
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue