diff --git a/src/all/mangadex/build.gradle b/src/all/mangadex/build.gradle index d65efd8f0..076f4daa0 100644 --- a/src/all/mangadex/build.gradle +++ b/src/all/mangadex/build.gradle @@ -5,8 +5,8 @@ ext { appName = 'Tachiyomi: MangaDex' pkgNameSuffix = "all.mangadex" extClass = '.MangadexFactory' - extVersionCode = 7 - extVersionSuffix = 7 + extVersionCode = 8 + extVersionSuffix = 8 libVersion = '1.2' } diff --git a/src/all/mangadex/res/mipmap-hdpi/ic_launcher.png b/src/all/mangadex/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..1aec356ae Binary files /dev/null and b/src/all/mangadex/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/all/mangadex/res/mipmap-mdpi/ic_launcher.png b/src/all/mangadex/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..7eab9d073 Binary files /dev/null and b/src/all/mangadex/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/all/mangadex/res/mipmap-xhdpi/ic_launcher.png b/src/all/mangadex/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..4d1fbca31 Binary files /dev/null and b/src/all/mangadex/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/all/mangadex/res/mipmap-xxhdpi/ic_launcher.png b/src/all/mangadex/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..3670dfb76 Binary files /dev/null and b/src/all/mangadex/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/all/mangadex/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/mangadex/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..74297ab03 Binary files /dev/null and b/src/all/mangadex/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/all/mangadex/res/web_hi_res_512.png b/src/all/mangadex/res/web_hi_res_512.png new file mode 100644 index 000000000..913c01ea0 Binary files /dev/null and b/src/all/mangadex/res/web_hi_res_512.png differ diff --git a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt index 6077cba96..8fead9402 100644 --- a/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt +++ b/src/all/mangadex/src/eu/kanade/tachiyomi/extension/all/mangadex/Mangadex.kt @@ -4,14 +4,17 @@ import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.* import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup import okhttp3.HttpUrl import okhttp3.OkHttpClient import okhttp3.Request +import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element import rx.Observable import java.net.URLEncoder import java.text.SimpleDateFormat +import java.util.concurrent.TimeUnit open class Mangadex(override val lang: String, private val internalLang: String, val pageStart: Int) : ParsedHttpSource() { @@ -24,6 +27,8 @@ open class Mangadex(override val lang: String, private val internalLang: String, override val client = clientBuilder(ALL) private fun clientBuilder(r18Toggle: Int): OkHttpClient = network.cloudflareClient.newBuilder() + .connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) .addNetworkInterceptor { chain -> val newReq = chain .request() @@ -86,6 +91,9 @@ open class Mangadex(override val lang: String, private val internalLang: String, override fun searchMangaNextPageSelector() = ".pagination li:not(.disabled) span[title*=last page]:not(disabled)" + private fun mangaNextPageSelector() = ".pagination li:not(.disabled) span[title*=last page]:not(disabled)" + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { return getSearchClient(filters).newCall(searchMangaRequest(page, query, filters)) .asObservableSuccess() @@ -155,7 +163,8 @@ open class Mangadex(override val lang: String, private val internalLang: String, val manga = SManga.create() val infoElement = document.select(".row.edit").first() val genreElement = infoElement.select("tr:eq(3) td .genre") - + // val mangaUrl = document.select(".pagination a").first() + //manga.url = mangaUrl.attr("href") manga.author = infoElement.select("tr:eq(1) td").first()?.text() manga.artist = infoElement.select("tr:eq(2) td").first()?.text() manga.status = parseStatus(infoElement.select("tr:eq(5) td").first()?.text()) @@ -173,6 +182,44 @@ open class Mangadex(override val lang: String, private val internalLang: String, override fun chapterListSelector() = ".table.table-striped.table-hover.table-condensed tbody tr:has(img[src*=$internalLang])" + + private fun pagedChapterListRequest(url: String, page: Int): Request { + var pageUrl = url + "/" + ((page * 100)) + return GET(pageUrl, headers) + } + + override fun fetchChapterList(manga: SManga): Observable> { + return client.newCall(chapterListRequest(manga)) + .asObservableSuccess() + .map { response -> + chapterListParse(response) + } + } + + override fun chapterListParse(response: Response): List { + var document = response.asJsoup() + val baseUri = baseUrl + document.select("li.paging a").first()?.attr("href")?.substringBeforeLast("/") + var page = 1 + val chapters = mutableListOf() + do { + document.select(chapterListSelector()).forEach { + chapters.add(chapterFromElement(it)) + } + val nextPage = hasNextPage(document) + if (nextPage) { + var resp = client.newCall(pagedChapterListRequest(baseUri, page)).execute() + document = resp.asJsoup() + page++ + } + } while (nextPage) + + return chapters + } + + + private fun hasNextPage(document: Document) = document.select(mangaNextPageSelector()).isNotEmpty() + + override fun chapterFromElement(element: Element): SChapter { val urlElement = element.select("td:eq(0)").first() val dateElement = element.select("td:eq(5)").first()