diff --git a/src/ko/jmana/build.gradle b/src/ko/jmana/build.gradle index d94553455..e6d9f598d 100644 --- a/src/ko/jmana/build.gradle +++ b/src/ko/jmana/build.gradle @@ -5,7 +5,7 @@ ext { appName = 'Tachiyomi: JMana' pkgNameSuffix = 'ko.jmana' extClass = '.JMana' - extVersionCode = 8 + extVersionCode = 9 libVersion = '1.2' } diff --git a/src/ko/jmana/src/eu/kanade/tachiyomi/extension/ko/jmana/JMana.kt b/src/ko/jmana/src/eu/kanade/tachiyomi/extension/ko/jmana/JMana.kt index 5b228be65..bd16270f4 100644 --- a/src/ko/jmana/src/eu/kanade/tachiyomi/extension/ko/jmana/JMana.kt +++ b/src/ko/jmana/src/eu/kanade/tachiyomi/extension/ko/jmana/JMana.kt @@ -10,6 +10,7 @@ import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element import java.text.SimpleDateFormat +import java.util.* /** * JMana Source @@ -40,7 +41,7 @@ class JMana : ParsedHttpSource() { override fun popularMangaNextPageSelector() = "div.page > ul > li" // Do not add page parameter if page is 1 to prevent tracking. - override fun popularMangaRequest(page: Int) = GET("$baseUrl/comic_main_frame?tag=null&keyword=null&chosung=null&page=${page - 1}") + override fun popularMangaRequest(page: Int) = GET("$baseUrl/comic_main_frame?tag=null&keyword=null&chosung=null&page=${page - 1}", headers) override fun popularMangaParse(response: Response): MangasPage { val document = response.asJsoup() @@ -49,8 +50,8 @@ class JMana : ParsedHttpSource() { popularMangaFromElement(element) } - // Can not detect what page is last page but max mangas are 40. - val hasNextPage = mangas.size == 40 + // Can not detect what page is last page but max mangas are 15 per page. + val hasNextPage = mangas.size == 15 return MangasPage(mangas, hasNextPage) } @@ -59,12 +60,10 @@ class JMana : ParsedHttpSource() { override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) override fun searchMangaNextPageSelector() = popularMangaSelector() override fun searchMangaParse(response: Response) = popularMangaParse(response) - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = GET("$baseUrl/?tag=null&keyword=$query&chosung=null&page=${page - 1}") - + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = GET("$baseUrl/comic_main_frame?page=${page - 1}&keyword=$query", headers) override fun mangaDetailsParse(document: Document): SManga { val descriptionElement = document.select(".media > .row > .media-body.col-9 > div") - val thumbnailUrl = document.select(".media > .row > .media-body.col-3 img.media-object-list").attr("src") val manga = SManga.create() descriptionElement @@ -74,10 +73,10 @@ class JMana : ParsedHttpSource() { DETAIL_TITLE in text -> manga.title = text.substringAfter(DETAIL_TITLE).trim() DETAIL_AUTHOR in text -> manga.author = text.substringAfter(DETAIL_AUTHOR).trim() DETAIL_GENRE in text -> manga.genre = text.substringAfter("장르 : [").substringBefore("]").trim() - DETAIL_DESCRIPTION in text -> text.substringAfter(DETAIL_DESCRIPTION).trim() } } - manga.thumbnail_url = thumbnailUrl + manga.description = descriptionElement.select("#desc").text().substringAfter(DETAIL_DESCRIPTION).trim() + manga.thumbnail_url = document.select("div.media-left img").attr("abs:src") manga.status = SManga.UNKNOWN return manga } @@ -87,10 +86,9 @@ class JMana : ParsedHttpSource() { override fun chapterFromElement(element: Element): SChapter { val linkElement = element.select(".entry-title a") val rawName = linkElement.text() - val chapterUrl = "${linkElement.attr("href")}?viewstyle=list".replace("book/", "book_frame/") val chapter = SChapter.create() - chapter.url = chapterUrl + chapter.url = "/book_frame/" + linkElement.attr("href").substringAfter("/book/") + "?viewstyle=list" chapter.chapter_number = parseChapterNumber(rawName) chapter.name = rawName.trim() chapter.date_upload = parseChapterDate(element.select("li.publish-date span").last().text()) @@ -113,7 +111,7 @@ class JMana : ParsedHttpSource() { private fun parseChapterDate(date: String): Long { return try { - SimpleDateFormat("yyyy-MM-dd HH:mm").parse(date).time + SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()).parse(date).time } catch (e: Exception) { e.printStackTrace() 0 @@ -122,33 +120,42 @@ class JMana : ParsedHttpSource() { override fun pageListParse(document: Document): List { val pages = mutableListOf() - try { - document.select(".view li#view_content2") - .map { it.select("div img").attr("src") } - .forEach { pages.add(Page(pages.size, "", it)) } - } catch (e: Exception) { - e.printStackTrace() + + document.select("ul.listType img").forEachIndexed { i, img -> + pages.add(Page(i, "", if (img.hasAttr("src")) img.attr("abs:src") else img.attr("abs:data-src"))) } return pages } - override fun latestUpdatesSelector() = popularMangaSelector() - override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/frame") - override fun latestUpdatesNextPageSelector() = "" + override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/comic_recent", headers) + override fun latestUpdatesParse(response: Response): MangasPage { val document = response.asJsoup() + val mangas = mutableListOf() + val lastPage = document.select("select#page option:last-of-type").text() + val currentPage = document.select("select#page option[selected]").text() - val mangas = document.select(popularMangaSelector()).map { element -> - popularMangaFromElement(element) - } + document.select(latestUpdatesSelector()).map { mangas.add(latestUpdatesFromElement(it)) } - val hasNextPage = false - - return MangasPage(mangas, hasNextPage) + return MangasPage(mangas.distinctBy { it.url }, currentPage < lastPage) } + override fun latestUpdatesSelector() = "div.contents div.detail ul:not(:first-of-type) li" + + override fun latestUpdatesFromElement(element: Element): SManga { + val manga = SManga.create() + + element.select("a.btn").attr("href").let { + manga.title = it.substringAfterLast("/") + manga.setUrlWithoutDomain(it.replace(" ", "%20")) + } + manga.thumbnail_url = element.select("img").attr("abs:src") + + return manga + } + + override fun latestUpdatesNextPageSelector() = null //We are able to get the image URL directly from the page list override fun imageUrlParse(document: Document) = throw UnsupportedOperationException("This method should not be called!") @@ -161,4 +168,4 @@ class JMana : ParsedHttpSource() { const val DETAIL_AUTHOR = "작가 : " const val DETAIL_DESCRIPTION = "설명 : " } -} \ No newline at end of file +}