diff --git a/src/vi/hentaivnplus/build.gradle b/src/vi/hentaivnplus/build.gradle
index c9bf81dd7..3b263518d 100644
--- a/src/vi/hentaivnplus/build.gradle
+++ b/src/vi/hentaivnplus/build.gradle
@@ -2,8 +2,8 @@ ext {
extName = 'HentaiVN.plus'
extClass = '.HentaiVNPlus'
themePkg = 'madara'
- baseUrl = 'https://hentaivn.li'
- overrideVersionCode = 6
+ baseUrl = 'https://hentaivn.tech'
+ overrideVersionCode = 7
isNsfw = true
}
diff --git a/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt b/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt
index 37003d1ba..5b34412e1 100644
--- a/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt
+++ b/src/vi/hentaivnplus/src/eu/kanade/tachiyomi/extension/vi/hentaivnplus/HentaiVNPlus.kt
@@ -14,7 +14,7 @@ import java.util.Locale
class HentaiVNPlus :
Madara(
"HentaiVN.plus",
- "https://hentaivn.li",
+ "https://hentaivn.tech",
"vi",
dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.ROOT),
),
diff --git a/src/vi/lxhentai/AndroidManifest.xml b/src/vi/lxhentai/AndroidManifest.xml
index c15458995..152869cfe 100644
--- a/src/vi/lxhentai/AndroidManifest.xml
+++ b/src/vi/lxhentai/AndroidManifest.xml
@@ -14,7 +14,7 @@
diff --git a/src/vi/lxhentai/build.gradle b/src/vi/lxhentai/build.gradle
index 9c936ea77..975230036 100644
--- a/src/vi/lxhentai/build.gradle
+++ b/src/vi/lxhentai/build.gradle
@@ -1,7 +1,7 @@
ext {
extName = 'LXHentai'
extClass = '.LxHentai'
- extVersionCode = 14
+ extVersionCode = 15
isNsfw = true
}
diff --git a/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt b/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt
index 3513722c0..882693d0f 100644
--- a/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt
+++ b/src/vi/lxhentai/src/eu/kanade/tachiyomi/extension/vi/lxhentai/LxHentai.kt
@@ -19,7 +19,6 @@ import okhttp3.OkHttpClient
import okhttp3.Request
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
-import org.jsoup.select.Evaluator
import rx.Observable
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -30,7 +29,7 @@ class LxHentai : ParsedHttpSource(), ConfigurableSource {
override val name = "LXHentai"
- private val defaultBaseUrl = "https://lxmanga.info"
+ private val defaultBaseUrl = "https://lxmanga.cloud"
override val baseUrl by lazy { getPrefBaseUrl() }
@@ -129,13 +128,7 @@ class LxHentai : ParsedHttpSource(), ConfigurableSource {
genre = document.selectFirst("div.grow div.mt-2 > span:contains(Thể loại:) + span")!!
.select("a")
.joinToString { it.text().trim(',', ' ') }
- description = document.select("p:contains(Tóm tắt) ~ p").joinToString("\n") {
- it.run {
- select(Evaluator.Tag("br")).prepend("\\n")
- this.text().replace("\\n", "\n").replace("\n ", "\n")
- }
- }.trim()
-
+ description = document.select("p:contains(Tóm tắt) ~ p").joinToString("\n") { it.wholeText() }.trim()
thumbnail_url = document.selectFirst(".cover")?.attr("style")?.let {
IMAGE_REGEX.find(it)?.groups?.get(1)?.value
}
diff --git a/src/vi/teamlanhlung/build.gradle b/src/vi/teamlanhlung/build.gradle
index 60bfbfd2f..33afad54c 100644
--- a/src/vi/teamlanhlung/build.gradle
+++ b/src/vi/teamlanhlung/build.gradle
@@ -2,8 +2,8 @@ ext {
extName = 'Team Lanh Lung'
extClass = '.TeamLanhLung'
themePkg = 'a3manga'
- baseUrl = 'https://teamlanhlungday.shop'
- overrideVersionCode = 15
+ baseUrl = 'https://teamlanhlung1.shop'
+ overrideVersionCode = 16
isNsfw = true
}
diff --git a/src/vi/teamlanhlung/src/eu/kanade/tachiyomi/extension/vi/teamlanhlung/TeamLanhLung.kt b/src/vi/teamlanhlung/src/eu/kanade/tachiyomi/extension/vi/teamlanhlung/TeamLanhLung.kt
index b626f8306..aebe84ab5 100644
--- a/src/vi/teamlanhlung/src/eu/kanade/tachiyomi/extension/vi/teamlanhlung/TeamLanhLung.kt
+++ b/src/vi/teamlanhlung/src/eu/kanade/tachiyomi/extension/vi/teamlanhlung/TeamLanhLung.kt
@@ -2,4 +2,4 @@ package eu.kanade.tachiyomi.extension.vi.teamlanhlung
import eu.kanade.tachiyomi.multisrc.a3manga.A3Manga
-class TeamLanhLung : A3Manga("Team Lạnh Lùng", "https://teamlanhlungday.shop", "vi")
+class TeamLanhLung : A3Manga("Team Lạnh Lùng", "https://teamlanhlung1.shop", "vi")
diff --git a/src/vi/truyenvn/build.gradle b/src/vi/truyenvn/build.gradle
index 96fd793aa..3a1aa8f46 100644
--- a/src/vi/truyenvn/build.gradle
+++ b/src/vi/truyenvn/build.gradle
@@ -2,8 +2,8 @@ ext {
extName = 'TruyenVN'
extClass = '.TruyenVN'
themePkg = 'madara'
- baseUrl = 'https://truyenvn.la'
- overrideVersionCode = 10
+ baseUrl = 'https://truyenvn.li'
+ overrideVersionCode = 11
isNsfw = true
}
diff --git a/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt b/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt
index 01a9fb010..7bc1b903f 100644
--- a/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt
+++ b/src/vi/truyenvn/src/eu/kanade/tachiyomi/extension/vi/truyenvn/TruyenVN.kt
@@ -14,7 +14,7 @@ import java.util.Locale
class TruyenVN :
Madara(
"TruyenVN",
- "https://truyenvn.la",
+ "https://truyenvn.li",
"vi",
dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.ROOT),
),
diff --git a/src/vi/yurineko/AndroidManifest.xml b/src/vi/yurineko/AndroidManifest.xml
index b2fb696d5..e0ac1498b 100644
--- a/src/vi/yurineko/AndroidManifest.xml
+++ b/src/vi/yurineko/AndroidManifest.xml
@@ -12,7 +12,7 @@
-
diff --git a/src/vi/yurineko/build.gradle b/src/vi/yurineko/build.gradle
index 034321ea5..18ae13c72 100644
--- a/src/vi/yurineko/build.gradle
+++ b/src/vi/yurineko/build.gradle
@@ -1,7 +1,7 @@
ext {
extName = 'YuriNeko'
extClass = '.YuriNeko'
- extVersionCode = 6
+ extVersionCode = 7
isNsfw = true
}
diff --git a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt
index 2b7bf387c..34bdb6422 100644
--- a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt
+++ b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/YuriNeko.kt
@@ -40,7 +40,7 @@ class YuriNeko : HttpSource(), ConfigurableSource {
override val name = "YuriNeko"
- private val defaultDomain = "yurineko.click"
+ private val defaultDomain = "yurineko.site"
override val baseUrl by lazy { "https://${getPrefDomain()}" }
@@ -50,6 +50,8 @@ class YuriNeko : HttpSource(), ConfigurableSource {
private val apiUrl by lazy { "https://api.${getPrefDomain()}" }
+ private val storageUrl by lazy { "https://storage.${getPrefDomain()}" }
+
override val client = network.cloudflareClient.newBuilder()
.rateLimit(3, 1, TimeUnit.SECONDS)
.addInterceptor(::authIntercept)
@@ -98,7 +100,7 @@ class YuriNeko : HttpSource(), ConfigurableSource {
override fun popularMangaParse(response: Response): MangasPage {
val mangaListDto = response.parseAs()
val currentPage = response.request.url.queryParameter("page")!!.toFloat()
- return mangaListDto.toMangasPage(currentPage)
+ return mangaListDto.toMangasPage(currentPage, storageUrl)
}
override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException()
@@ -188,7 +190,7 @@ class YuriNeko : HttpSource(), ConfigurableSource {
override fun mangaDetailsRequest(manga: SManga): Request = GET("$baseUrl${manga.url}")
override fun mangaDetailsParse(response: Response): SManga =
- response.parseAs().toSManga()
+ response.parseAs().toSManga(storageUrl)
override fun chapterListRequest(manga: SManga): Request = GET("$apiUrl${manga.url}")
@@ -201,7 +203,7 @@ class YuriNeko : HttpSource(), ConfigurableSource {
override fun pageListRequest(chapter: SChapter): Request = GET("$apiUrl${chapter.url}")
override fun pageListParse(response: Response): List =
- response.parseAs().toPageList()
+ response.parseAs().toPageList(storageUrl)
override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException()
diff --git a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/ChapterDto.kt b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/ChapterDto.kt
index 18e2c8627..2b6075b4c 100644
--- a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/ChapterDto.kt
+++ b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/ChapterDto.kt
@@ -48,7 +48,7 @@ data class ReadResponseDto(
val chapterInfo: ChapterDto,
val url: List,
) {
- fun toPageList(): List = this@ReadResponseDto
+ fun toPageList(storageUrl: String): List = this@ReadResponseDto
.url
- .mapIndexed { index, url -> Page(index, imageUrl = "https://storage.yurineko.my" + url) }
+ .mapIndexed { index, url -> Page(index, imageUrl = storageUrl + url) }
}
diff --git a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/MangaDto.kt b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/MangaDto.kt
index b342cdb71..d252263ae 100644
--- a/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/MangaDto.kt
+++ b/src/vi/yurineko/src/eu/kanade/tachiyomi/extension/vi/yurineko/dto/MangaDto.kt
@@ -4,7 +4,6 @@ import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.SManga
import kotlinx.serialization.Serializable
import org.jsoup.Jsoup
-import org.jsoup.select.Evaluator
import kotlin.math.ceil
@Serializable
@@ -28,26 +27,17 @@ data class MangaDto(
val lastChapter: ChapterDto? = null,
val chapters: List? = null,
) {
- fun toSManga(): SManga = SManga.create().apply {
+ fun toSManga(storageUrl: String): SManga = SManga.create().apply {
val dto = this@MangaDto
url = "/manga/${dto.id}"
title = dto.originalName
author = dto.author.joinToString(", ") { author -> author.name }
-
- val descElem = Jsoup.parseBodyFragment(dto.description)
- description = if (descElem.select("p").any()) {
- Jsoup.parse(dto.description).select("p").joinToString("\n") {
- it.run {
- select(Evaluator.Tag("br")).prepend("\\n")
- this.text().replace("\\n", "\n").replace("\n ", "\n")
- }
- }.trim()
+ val descElem = Jsoup.parseBodyFragment(dto.description).select("p")
+ .joinToString("\n") { it.wholeText() }.trim()
+ description = if (dto.otherName.isNotEmpty()) {
+ "Tên khác: ${dto.otherName}\n\n" + descElem
} else {
- dto.description
- }
-
- if (dto.otherName.isNotEmpty()) {
- description = "Tên khác: ${dto.otherName}\n\n" + description
+ descElem
}
genre = dto.tag.joinToString(", ") { tag -> tag.name }
@@ -61,7 +51,7 @@ data class MangaDto(
7 -> SManga.CANCELLED // "Ngừng xuất bản" -> No more publications
else -> SManga.UNKNOWN
}
- thumbnail_url = "https://storage.yurineko.my/" + dto.thumbnail
+ thumbnail_url = "$storageUrl/" + dto.thumbnail
initialized = true
}
}
@@ -71,10 +61,10 @@ data class MangaListDto(
val result: List,
val resultCount: Int,
) {
- fun toMangasPage(currentPage: Float = 1f): MangasPage {
+ fun toMangasPage(currentPage: Float = 1f, storageUrl: String): MangasPage {
val dto = this@MangaListDto
return MangasPage(
- dto.result.map { it.toSManga() },
+ dto.result.map { it.toSManga(storageUrl) },
currentPage + 1f <= ceil(dto.resultCount.toFloat() / 20f),
)
}