Some improvements for Henchan (#968)
* Henchan: Better quality thumbnails and some kind of workaround for lolicon mangas * Henchan: Workaround for parsing manga that available only for logged users
This commit is contained in:
		
							parent
							
								
									3979c887b0
								
							
						
					
					
						commit
						2beb568f03
					
				| @ -5,7 +5,7 @@ ext { | |||||||
|     appName = 'Tachiyomi: Henchan' |     appName = 'Tachiyomi: Henchan' | ||||||
|     pkgNameSuffix = 'ru.henchan' |     pkgNameSuffix = 'ru.henchan' | ||||||
|     extClass = '.Henchan' |     extClass = '.Henchan' | ||||||
|     extVersionCode = 5 |     extVersionCode = 6 | ||||||
|     libVersion = '1.2' |     libVersion = '1.2' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -15,6 +15,8 @@ class Henchan : ParsedHttpSource() { | |||||||
| 
 | 
 | ||||||
|     override val baseUrl = "http://henchan.me" |     override val baseUrl = "http://henchan.me" | ||||||
| 
 | 
 | ||||||
|  |     private val exhentaiBaseUrl = "http://exhentaidono.me" | ||||||
|  | 
 | ||||||
|     override val lang = "ru" |     override val lang = "ru" | ||||||
| 
 | 
 | ||||||
|     override val supportsLatest = true |     override val supportsLatest = true | ||||||
| @ -50,10 +52,11 @@ class Henchan : ParsedHttpSource() { | |||||||
|         return MangasPage(mangas, false) |         return MangasPage(mangas, false) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private fun String.getHQThumbnail(): String = this.replace("manganew_thumbs", "showfull_retina/manga").replace("img.", "imgcover.") | ||||||
| 
 | 
 | ||||||
|     override fun popularMangaFromElement(element: Element): SManga { |     override fun popularMangaFromElement(element: Element): SManga { | ||||||
|         val manga = SManga.create() |         val manga = SManga.create() | ||||||
|         manga.thumbnail_url = element.select("img").first().attr("src") |         manga.thumbnail_url = element.select("img").first().attr("src").getHQThumbnail() | ||||||
|         element.select("h2 > a").first().let { |         element.select("h2 > a").first().let { | ||||||
|             val url = it.attr("href") |             val url = it.attr("href") | ||||||
|             if (url.contains("/manga/")) { |             if (url.contains("/manga/")) { | ||||||
| @ -89,13 +92,29 @@ class Henchan : ParsedHttpSource() { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun chapterListRequest(manga: SManga): Request { |     override fun chapterListRequest(manga: SManga): Request { | ||||||
|         return GET((baseUrl + manga.url).replace("/manga/", "/related/"), headers) |         val baseMangaUrl = baseUrl + manga.url | ||||||
|  |         if(manga.thumbnail_url?.isBlank() ?: return GET(baseMangaUrl.replace("/manga/", "/related/"), headers)){ | ||||||
|  |             return GET(baseMangaUrl, headers) | ||||||
|  |         }else { | ||||||
|  |             return GET(baseMangaUrl.replace("/manga/", "/related/"), headers) | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun chapterListSelector() = ".related" |     override fun chapterListSelector() = ".related" | ||||||
| 
 | 
 | ||||||
|     override fun chapterListParse(response: Response): List<SChapter> { |     override fun chapterListParse(response: Response): List<SChapter> { | ||||||
|  |         val responseUrl = response.request().url().toString() | ||||||
|         val document = response.asJsoup() |         val document = response.asJsoup() | ||||||
|  | 
 | ||||||
|  |         if(responseUrl.contains("/manga/")){ | ||||||
|  |             val chap = SChapter.create() | ||||||
|  |             chap.setUrlWithoutDomain(responseUrl.removePrefix(baseUrl)) | ||||||
|  |             chap.name = document.select("a.title_top_a").text() | ||||||
|  |             chap.chapter_number = 0.0F | ||||||
|  |             chap.date_upload = 0L | ||||||
|  |             return listOf(chap) | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         if (document.select("#right > div:nth-child(4)").text().contains(" похожий на ")) { |         if (document.select("#right > div:nth-child(4)").text().contains(" похожий на ")) { | ||||||
|             val chap = SChapter.create() |             val chap = SChapter.create() | ||||||
|             chap.setUrlWithoutDomain(document.select("#left > div > a").attr("href")) |             chap.setUrlWithoutDomain(document.select("#left > div > a").attr("href")) | ||||||
| @ -103,7 +122,6 @@ class Henchan : ParsedHttpSource() { | |||||||
|             chap.chapter_number = 0.0F |             chap.chapter_number = 0.0F | ||||||
|             chap.date_upload = 0L |             chap.date_upload = 0L | ||||||
|             return listOf(chap) |             return listOf(chap) | ||||||
| 
 |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -130,7 +148,7 @@ class Henchan : ParsedHttpSource() { | |||||||
|         return result.reversed() |         return result.reversed() | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fun chapterFromElement(index: Int, element: Element): SChapter { |     private fun chapterFromElement(index: Int, element: Element): SChapter { | ||||||
|         val chapter = SChapter.create() |         val chapter = SChapter.create() | ||||||
|         chapter.setUrlWithoutDomain(element.select("h2 a").attr("href")) |         chapter.setUrlWithoutDomain(element.select("h2 a").attr("href")) | ||||||
|         chapter.name = element.select("h2 a").attr("title") |         chapter.name = element.select("h2 a").attr("title") | ||||||
| @ -142,16 +160,16 @@ class Henchan : ParsedHttpSource() { | |||||||
|     override fun chapterFromElement(element: Element): SChapter = throw Exception("Not Used") |     override fun chapterFromElement(element: Element): SChapter = throw Exception("Not Used") | ||||||
| 
 | 
 | ||||||
|     override fun pageListRequest(chapter: SChapter): Request { |     override fun pageListRequest(chapter: SChapter): Request { | ||||||
|         return GET((baseUrl + chapter.url).replace("/manga/", "/online/"), headers) |         return GET(exhentaiBaseUrl + chapter.url.replace("/manga/", "/online/") + "?development_access=true", headers) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun pageListParse(response: Response): List<Page> { |     override fun pageListParse(response: Response): List<Page> { | ||||||
|         val html = response.body()!!.string() |         val html = response.body()!!.string() | ||||||
|         val imgString = html.split("\"fullimg\":[").last().split(",]").first() |         val imgString = html.split("\"fullimg\": [").last().split("]").first() | ||||||
|         val resPages = mutableListOf<Page>() |         val resPages = mutableListOf<Page>() | ||||||
|         val imgs = imgString.split(",") |         val imgs = imgString.split(",") | ||||||
|         imgs.forEachIndexed { index, s -> |         imgs.forEachIndexed { index, s -> | ||||||
|             resPages.add(Page(index, imageUrl = s.removeSurrounding("\""))) |             resPages.add(Page(index, imageUrl = s.trim('"', '\'', '[', ' '))) | ||||||
|         } |         } | ||||||
|         return resPages |         return resPages | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 krogon500
						krogon500