From da4913e688a3da334d9e7061e8df1a9b17160d5b Mon Sep 17 00:00:00 2001 From: Eugene Date: Sat, 7 Apr 2018 11:10:06 -0400 Subject: [PATCH] Add Manga Rock source (#99) (#275) --- src/en/mangarock/build.gradle | 13 + .../mangarock/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3703 bytes .../mangarock/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1950 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4802 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8890 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11284 bytes src/en/mangarock/res/web_hi_res_512.png | Bin 0 -> 27770 bytes .../extension/en/mangarock/MangaRock.kt | 272 ++++++++++++++++++ 8 files changed, 285 insertions(+) create mode 100644 src/en/mangarock/build.gradle create mode 100755 src/en/mangarock/res/mipmap-hdpi/ic_launcher.png create mode 100755 src/en/mangarock/res/mipmap-mdpi/ic_launcher.png create mode 100755 src/en/mangarock/res/mipmap-xhdpi/ic_launcher.png create mode 100755 src/en/mangarock/res/mipmap-xxhdpi/ic_launcher.png create mode 100755 src/en/mangarock/res/mipmap-xxxhdpi/ic_launcher.png create mode 100755 src/en/mangarock/res/web_hi_res_512.png create mode 100644 src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt diff --git a/src/en/mangarock/build.gradle b/src/en/mangarock/build.gradle new file mode 100644 index 000000000..17d633c4b --- /dev/null +++ b/src/en/mangarock/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: Manga Rock' + pkgNameSuffix = "en.mangarock" + extClass = '.MangaRock' + extVersionCode = 1 + extVersionSuffix = 1 + libVersion = '1.0' +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/mangarock/res/mipmap-hdpi/ic_launcher.png b/src/en/mangarock/res/mipmap-hdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..f40f5b15d9770e7f913e08fb017ac6a43e2887de GIT binary patch literal 3703 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 Ux-IdBbT$Rt)-u$r({PCUFC)mZNB{r; literal 0 HcmV?d00001 diff --git a/src/en/mangarock/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangarock/res/mipmap-xxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..8f83a67f2da0cf0840c6af57838661a58a304b12 GIT binary patch literal 8890 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 LnqsBA`P=^k)m1P2 literal 0 HcmV?d00001 diff --git a/src/en/mangarock/res/web_hi_res_512.png b/src/en/mangarock/res/web_hi_res_512.png new file mode 100755 index 0000000000000000000000000000000000000000..928fb39c4f382132c9939d9c471058edcb619c19 GIT binary patch literal 27770 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 literal 0 HcmV?d00001 diff --git a/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt b/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt new file mode 100644 index 000000000..bd0689bef --- /dev/null +++ b/src/en/mangarock/src/eu/kanade/tachiyomi/extension/en/mangarock/MangaRock.kt @@ -0,0 +1,272 @@ +package eu.kanade.tachiyomi.extension.en.mangarock + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.online.HttpSource +import okhttp3.* +import org.json.JSONObject +import java.util.* +import kotlin.experimental.and +import kotlin.experimental.xor + +/** + * Manga Rock source + */ + +class MangaRock : HttpSource() { + + override val name = "Manga Rock" + + override val baseUrl = "https://api.mangarockhd.com/query/web400" + + override val lang = "en" + + override val supportsLatest = true + + // Handles the page decoding + override val client: OkHttpClient = super.client.newBuilder().addInterceptor(fun(chain): Response { + val url = chain.request().url().toString() + val response = chain.proceed(chain.request()) + if (!url.endsWith(".mri")) return response + + val decoded: ByteArray = decodeMri(response) + val mediaType = MediaType.parse("image/webp") + val rb = ResponseBody.create(mediaType, decoded) + return response.newBuilder().body(rb).build() + }).build() + + override fun latestUpdatesRequest(page: Int): Request { + return GET("$baseUrl/mrs_latest") + } + + override fun latestUpdatesParse(response: Response): MangasPage { + val res = response.body()!!.string() + val list = getMangaListFromJson(res) + return getMangasPageFromJsonList(list) + } + + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/mrs_latest") + } + + override fun popularMangaParse(response: Response): MangasPage { + val res = response.body()!!.string() + val list = getMangaListFromJson(res) + return getMangasPageFromJsonList(sortByRank(list)) + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val jsonType = MediaType.parse("application/jsonType; charset=utf-8") + val body = RequestBody.create(jsonType, "{\"type\":\"series\", \"keywords\":\"$query\"}") + return POST("$baseUrl/mrs_search", headers, body) + } + + override fun searchMangaParse(response: Response): MangasPage { + val obj = JSONObject(response.body()!!.string()).getJSONArray("data") + + val jsonType = MediaType.parse("application/jsonType; charset=utf-8") + val body = RequestBody.create(jsonType, obj.toString()) + val metaRes = client.newCall(POST("https://api.mangarockhd.com/meta", headers, body)).execute().body()!!.string() + + val res = JSONObject(metaRes).getJSONObject("data") + val mangas = ArrayList(res.length()) + for (key in res.keys()) { + mangas.add(parseMangaJson(res.getJSONObject(key))) + } + return MangasPage(mangas, false) + } + + private fun getMangaListFromJson(json: String): List { + val arr = JSONObject(json).getJSONArray("data") + val mangaJson = ArrayList(arr.length()) + for (i in 0 until arr.length()) { + mangaJson.add(arr.getJSONObject(i)) + } + return mangaJson + } + + private fun getMangasPageFromJsonList(arr: List): MangasPage { + val mangas = ArrayList(arr.size) + for (obj in arr) { + mangas.add(parseMangaJson(obj)) + } + return MangasPage(mangas, false) + } + + private fun parseMangaJson(obj: JSONObject): SManga { + return SManga.create().apply { + title = obj.getString("name") + thumbnail_url = obj.getString("thumbnail") + status = if (obj.getBoolean("completed")) SManga.COMPLETED else SManga.ONGOING + url = "/info?oid=${obj.getString("oid")}" + } + } + + private fun sortByRank(arr: List): List { + return arr.sortedBy({ it.getInt("rank") }) + } + + override fun mangaDetailsParse(response: Response) = SManga.create().apply { + val obj = JSONObject(response.body()!!.string()).getJSONObject("data") + + url = "https://mangarock.com/manga/${obj.getString("oid")}" + title = obj.getString("name") + description = obj.getString("description") + + val people = obj.getJSONArray("authors") + val authors = ArrayList() + val artists = ArrayList() + for (i in 0 until people.length()) { + val person = people.getJSONObject(i) + when (person.getString("role")) { + "art" -> artists.add(person.getString("name")) + "story" -> authors.add(person.getString("name")) + } + } + artist = artists.sorted().joinToString(", ") + author = authors.sorted().joinToString(", ") + + val categories = obj.getJSONArray("rich_categories") + val genres = ArrayList(categories.length()) + for (i in 0 until categories.length()) { + genres.add(categories.getJSONObject(i).getString("name")) + } + genre = genres.sorted().joinToString(", ") + + status = if (obj.getBoolean("completed")) SManga.COMPLETED else SManga.ONGOING + thumbnail_url = obj.getString("thumbnail") + } + + override fun chapterListParse(response: Response): List { + val obj = JSONObject(response.body()!!.string()).getJSONObject("data") + val chapters = ArrayList() + val arr = obj.getJSONArray("chapters") + for (i in 0 until arr.length()) { + val chapter = arr.getJSONObject(i) + chapters.add(SChapter.create().apply { + name = chapter.getString("name") + date_upload = chapter.getString("updatedAt").toLong() * 1000 + url = "/pages?oid=${chapter.getString("oid")}" + }) + } + return chapters + } + + override fun pageListParse(response: Response): List { + val obj = JSONObject(response.body()!!.string()).getJSONArray("data") + val pages = ArrayList() + for (i in 0 until obj.length()) { + pages.add(Page(i, "", obj.getString(i))) + } + return pages + } + + override fun imageUrlParse(response: Response) + = throw UnsupportedOperationException("This method should not be called!") + + // See drawWebpToCanvas function in the site's client.js file + // Extracted code: https://jsfiddle.net/6h2sLcs4/30/ + private fun decodeMri(response: Response): ByteArray { + val data = response.body()!!.bytes() + + // Decode file if it starts with "E" (space when XOR-ed later) + if (data[0] != 69.toByte()) return data + + // Reconstruct WEBP header + // Doc: https://developers.google.com/speed/webp/docs/riff_container#webp_file_header + val buffer = ByteArray(data.size + 15) + val size = data.size + 7 + buffer[0] = 82 // R + buffer[1] = 73 // I + buffer[2] = 70 // F + buffer[3] = 70 // F + buffer[4] = (255.toByte() and size.toByte()) + buffer[5] = (size ushr 8).toByte() and 255.toByte() + buffer[6] = (size ushr 16).toByte() and 255.toByte() + buffer[7] = (size ushr 24).toByte() and 255.toByte() + buffer[8] = 87 // W + buffer[9] = 69 // E + buffer[10] = 66 // B + buffer[11] = 80 // P + buffer[12] = 86 // V + buffer[13] = 80 // P + buffer[14] = 56 // 8 + + // Decrypt file content using XOR cipher with 101 as the key + val cipherKey = 101.toByte() + for (r in 0 until data.size) { + buffer[r + 15] = cipherKey xor data[r] + } + + return buffer + } + + // "{\"status\":\"all\",\"genres\":{},\"rank\":\"all\",\"order\":\"rank\"}" + private class Status : Filter.Select("Completed", arrayOf("all", "completed", "ongoing")) + private class Rank : Filter.Select("Rank", arrayOf("All", "1-999", "1000-2000")) + private class OrderBy : Filter.Select("Order", arrayOf("name", "rank")) + + private class Genre(name: String, id: String) : Filter.TriState(name) + private class GenreList(genres: List) : Filter.Group("Genres", genres) + + // TODO: can only filter by status/genres/rank/ordering if you get the full list of manga + override fun getFilterList() = FilterList( +// Status(), +// Rank(), +// OrderBy(), +// GenreList(getGenreList()) + ) + + // [... new Set($$('a[href^="/genre"]').filter(a => a.innerText !== '').map(a => `Genre("${a.innerText}", "${a.href.replace('https://mangarock.com/genre/', '')}")`))].sort().join(',\n') + // on https://mangarock.com/ + private fun getGenreList() = listOf( + Genre("4-koma", "mrs-genre-100117675"), + Genre("Action", "mrs-genre-304068"), + Genre("Adult", "mrs-genre-358370"), + Genre("Adventure", "mrs-genre-304087"), + Genre("Comedy", "mrs-genre-304069"), + Genre("Demons", "mrs-genre-304088"), + Genre("Doujinshi", "mrs-genre-304197"), + Genre("Drama", "mrs-genre-304177"), + Genre("Ecchi", "mrs-genre-304074"), + Genre("Fantasy", "mrs-genre-304089"), + Genre("Gender Bender", "mrs-genre-304358"), + Genre("Harem", "mrs-genre-304075"), + Genre("Historical", "mrs-genre-304306"), + Genre("Horror", "mrs-genre-304259"), + Genre("Josei", "mrs-genre-304070"), + Genre("Kids", "mrs-genre-304846"), + Genre("Magic", "mrs-genre-304090"), + Genre("Martial Arts", "mrs-genre-304072"), + Genre("Mature", "mrs-genre-358371"), + Genre("Mecha", "mrs-genre-304245"), + Genre("Military", "mrs-genre-304091"), + Genre("Music", "mrs-genre-304589"), + Genre("Mystery", "mrs-genre-304178"), + Genre("One Shot", "mrs-genre-100018505"), + Genre("Parody", "mrs-genre-304786"), + Genre("Police", "mrs-genre-304236"), + Genre("Psychological", "mrs-genre-304176"), + Genre("Romance", "mrs-genre-304073"), + Genre("School Life", "mrs-genre-304076"), + Genre("Sci-Fi", "mrs-genre-304180"), + Genre("Seinen", "mrs-genre-304077"), + Genre("Shoujo Ai", "mrs-genre-304695"), + Genre("Shoujo", "mrs-genre-304175"), + Genre("Shounen Ai", "mrs-genre-304307"), + Genre("Shounen", "mrs-genre-304164"), + Genre("Slice of Life", "mrs-genre-304195"), + Genre("Smut", "mrs-genre-358372"), + Genre("Space", "mrs-genre-305814"), + Genre("Sports", "mrs-genre-304367"), + Genre("Super Power", "mrs-genre-305270"), + Genre("Supernatural", "mrs-genre-304067"), + Genre("Tragedy", "mrs-genre-358379"), + Genre("Vampire", "mrs-genre-304765"), + Genre("Webtoons", "mrs-genre-358150"), + Genre("Yaoi", "mrs-genre-304202"), + Genre("Yuri", "mrs-genre-304690") + ) + +}