Update C&H (#473)
This commit is contained in:
		
							parent
							
								
									640344e5e2
								
							
						
					
					
						commit
						11e66824c4
					
				| @ -2,7 +2,7 @@ ext { | |||||||
|     extName = 'Cyanide & Happiness' |     extName = 'Cyanide & Happiness' | ||||||
|     pkgNameSuffix = 'en.explosm' |     pkgNameSuffix = 'en.explosm' | ||||||
|     extClass = '.Explosm' |     extClass = '.Explosm' | ||||||
|     extVersionCode = 3 |     extVersionCode = 4 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| apply from: "$rootDir/common.gradle" | apply from: "$rootDir/common.gradle" | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| package eu.kanade.tachiyomi.extension.en.explosm | package eu.kanade.tachiyomi.extension.en.explosm | ||||||
| 
 | 
 | ||||||
| import eu.kanade.tachiyomi.network.GET | import eu.kanade.tachiyomi.network.GET | ||||||
|  | import eu.kanade.tachiyomi.network.asObservableSuccess | ||||||
| import eu.kanade.tachiyomi.source.model.FilterList | import eu.kanade.tachiyomi.source.model.FilterList | ||||||
| import eu.kanade.tachiyomi.source.model.MangasPage | import eu.kanade.tachiyomi.source.model.MangasPage | ||||||
| import eu.kanade.tachiyomi.source.model.Page | import eu.kanade.tachiyomi.source.model.Page | ||||||
| @ -8,11 +9,16 @@ import eu.kanade.tachiyomi.source.model.SChapter | |||||||
| import eu.kanade.tachiyomi.source.model.SManga | import eu.kanade.tachiyomi.source.model.SManga | ||||||
| import eu.kanade.tachiyomi.source.online.HttpSource | import eu.kanade.tachiyomi.source.online.HttpSource | ||||||
| import eu.kanade.tachiyomi.util.asJsoup | import eu.kanade.tachiyomi.util.asJsoup | ||||||
|  | import kotlinx.serialization.decodeFromString | ||||||
|  | import kotlinx.serialization.json.Json | ||||||
|  | import kotlinx.serialization.json.JsonElement | ||||||
|  | import kotlinx.serialization.json.JsonObject | ||||||
|  | import kotlinx.serialization.json.jsonArray | ||||||
|  | import kotlinx.serialization.json.jsonObject | ||||||
|  | import kotlinx.serialization.json.jsonPrimitive | ||||||
| import okhttp3.OkHttpClient | import okhttp3.OkHttpClient | ||||||
| import okhttp3.Request | import okhttp3.Request | ||||||
| import okhttp3.Response | import okhttp3.Response | ||||||
| import org.jsoup.nodes.Document |  | ||||||
| import org.jsoup.nodes.Element |  | ||||||
| import rx.Observable | import rx.Observable | ||||||
| import java.text.SimpleDateFormat | import java.text.SimpleDateFormat | ||||||
| import java.util.Locale | import java.util.Locale | ||||||
| @ -29,23 +35,39 @@ class Explosm : HttpSource() { | |||||||
| 
 | 
 | ||||||
|     override val client: OkHttpClient = network.cloudflareClient |     override val client: OkHttpClient = network.cloudflareClient | ||||||
| 
 | 
 | ||||||
|     private fun createManga(element: Element): SManga { |     private val archivePage = "$baseUrl/comics" | ||||||
|         return SManga.create().apply { | 
 | ||||||
|             initialized = true |     private fun getArchiveAllYears(response: Response): JsonObject { | ||||||
|             title = "C&H ${element.attr("id").substringAfter("panel")}" // year |         val jsonPath = response.asJsoup() | ||||||
|             setUrlWithoutDomain(element.select("li a").first()!!.attr("href")) // January |             .select("head > script").last()?.attr("src") | ||||||
|             thumbnail_url = "https://vhx.imgix.net/vitalyuncensored/assets/13ea3806-5ebf-4987-bcf1-82af2b689f77/S2E4_Still1.jpg" |             ?.replace("static", "data") | ||||||
|         } |             ?.replaceAfterLast("/", "comics.json") | ||||||
|  |             ?: throw Exception("Error at last() in getArchiveAllYears") | ||||||
|  |         val json = client.newCall(GET(baseUrl + jsonPath, headers)).execute().body.string() | ||||||
|  |         return Json.decodeFromString<JsonObject>(json)["pageProps"] | ||||||
|  |             ?.jsonObject?.get("comicArchiveData") | ||||||
|  |             ?.jsonObject | ||||||
|  |             ?: throw Exception("Error while returning getArchiveAllYears") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Popular |     // Popular | ||||||
| 
 | 
 | ||||||
|     override fun popularMangaRequest(page: Int): Request { |     override fun popularMangaRequest(page: Int): Request { | ||||||
|         return (GET("$baseUrl/comics/archive", headers)) |         return (GET(archivePage, headers)) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun popularMangaParse(response: Response): MangasPage { |     override fun popularMangaParse(response: Response): MangasPage { | ||||||
|         val eachYearAsAManga = response.asJsoup().select("dd.accordion-navigation > div").map { createManga(it) } |         val eachYearAsAManga = getArchiveAllYears(response) | ||||||
|  |             .map { year -> | ||||||
|  |                 SManga.create().apply { | ||||||
|  |                     initialized = true | ||||||
|  |                     title = "C&H " + year.key // year | ||||||
|  |                     url = year.key // need key here | ||||||
|  |                     thumbnail_url = "https://vhx.imgix.net/vitalyuncensored/assets/13ea3806-5ebf-4987-bcf1-82af2b689f77/S2E4_Still1.jpg" | ||||||
|  |                     author = "Explosm.net" | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             .reversed() | ||||||
| 
 | 
 | ||||||
|         return MangasPage(eachYearAsAManga, false) |         return MangasPage(eachYearAsAManga, false) | ||||||
|     } |     } | ||||||
| @ -66,49 +88,63 @@ class Explosm : HttpSource() { | |||||||
| 
 | 
 | ||||||
|     // Details |     // Details | ||||||
| 
 | 
 | ||||||
|     override fun mangaDetailsParse(response: Response): SManga { |     override fun fetchMangaDetails(manga: SManga): Observable<SManga> { | ||||||
|         return createManga(response.asJsoup().select("div.content.active").first()!!) |         return Observable.just(manga) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // for webview | ||||||
|  |     override fun mangaDetailsRequest(manga: SManga): Request { | ||||||
|  |         return GET("$baseUrl/comics#${manga.url}-01") | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun mangaDetailsParse(response: Response): SManga = throw UnsupportedOperationException() | ||||||
|  | 
 | ||||||
|     // Chapters |     // Chapters | ||||||
| 
 | 
 | ||||||
|     override fun chapterListParse(response: Response): List<SChapter> { |     private val date = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US) | ||||||
|         val document = response.asJsoup() |  | ||||||
| 
 | 
 | ||||||
|         val januaryChapters = document.chaptersFromDocument() // should be at bottom of final returned list |     private fun JsonElement?.getContent(key: String): String { | ||||||
| 
 |         return this?.jsonObject?.get(key)?.jsonPrimitive?.content ?: throw Exception("Error getting chapter content from $key") | ||||||
|         // get the rest of the year |  | ||||||
|         val chapters = document.select("div.content.active li:not(.active) a").reversed().map { |  | ||||||
|             client.newCall(GET(it.attr("abs:href"), headers)).execute().asJsoup().chaptersFromDocument() |  | ||||||
|         }.flatten() |  | ||||||
| 
 |  | ||||||
|         return chapters + januaryChapters |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private fun Document.chaptersFromDocument(): List<SChapter> { |     override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> { | ||||||
|         return this.select("div.inner-wrap > div.row div.row.collapse").map { element -> |         var chapterCount = 0F | ||||||
|  |         return client.newCall(GET(archivePage, headers)) | ||||||
|  |             .asObservableSuccess() | ||||||
|  |             .map { response -> | ||||||
|  |                 getArchiveAllYears(response)[manga.url]?.jsonObject | ||||||
|  |                     ?.map { month -> | ||||||
|  |                         month.value.jsonArray.map { comic -> | ||||||
|  |                             chapterCount++ | ||||||
|                             SChapter.create().apply { |                             SChapter.create().apply { | ||||||
|                 setUrlWithoutDomain(element.select("a").attr("href")) |                                 name = comic.getContent("slug") | ||||||
|                 element.select("div#comic-author").text().let { cName -> |                                 // we get the url for page.imageurl here | ||||||
|                     name = cName |                                 url = if (comic.getContent("file_static") != "null") { | ||||||
|                     date_upload = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()) |                                     comic.getContent("file_static") | ||||||
|                         .parse(cName.substringBefore(" "))?.time ?: 0L |                                 } else { | ||||||
|  |                                     "https://files.explosm.net/comics/${comic.getContent("file")}" | ||||||
|  |                                 } | ||||||
|  |                                 date_upload = date.parse(comic.getContent("publish_at"))?.time ?: 0L | ||||||
|  |                                 scanlator = comic.getContent("author_name") | ||||||
|  |                                 chapter_number = chapterCount // so no "missing chapters" warning in app | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|  |                     ?.flatten() | ||||||
|  |                     ?.reversed() | ||||||
|  |                     ?: throw Exception("Error with main jsonObject") | ||||||
|             } |             } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override fun chapterListParse(response: Response): List<SChapter> = throw UnsupportedOperationException() | ||||||
| 
 | 
 | ||||||
|     // Pages |     // Pages | ||||||
| 
 | 
 | ||||||
|     override fun fetchPageList(chapter: SChapter): Observable<List<Page>> { |     override fun fetchPageList(chapter: SChapter): Observable<List<Page>> { | ||||||
|         return Observable.just(listOf(Page(0, baseUrl + chapter.url))) |         return Observable.just(listOf(Page(0, "", chapter.url))) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun pageListParse(response: Response): List<Page> = throw UnsupportedOperationException() |     override fun pageListParse(response: Response): List<Page> = throw UnsupportedOperationException() | ||||||
| 
 | 
 | ||||||
|     override fun imageUrlParse(response: Response): String { |     override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() | ||||||
|         return response.asJsoup().select("div#comic-wrap img").attr("abs:src") |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     override fun getFilterList() = FilterList() |  | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mike
						Mike