diff --git a/src/all/myreadingmanga/build.gradle b/src/all/myreadingmanga/build.gradle new file mode 100644 index 000000000..e332daefc --- /dev/null +++ b/src/all/myreadingmanga/build.gradle @@ -0,0 +1,17 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: MyReadingManga' + pkgNameSuffix = "all.myreadingmanga" + extClass = '.MyReadingMangaFactory' + extVersionCode = 1 + extVersionSuffix = 0 + libVersion = '1.2' +} + +dependencies { + +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/myreadingmanga/res/mipmap-hdpi/ic_launcher.png b/src/all/myreadingmanga/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..3bb321842 Binary files /dev/null and b/src/all/myreadingmanga/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/all/myreadingmanga/res/mipmap-mdpi/ic_launcher.png b/src/all/myreadingmanga/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..910f637c0 Binary files /dev/null and b/src/all/myreadingmanga/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/all/myreadingmanga/res/mipmap-xhdpi/ic_launcher.png b/src/all/myreadingmanga/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..23a4fd1a5 Binary files /dev/null and b/src/all/myreadingmanga/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/all/myreadingmanga/res/mipmap-xxhdpi/ic_launcher.png b/src/all/myreadingmanga/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..87a0de98f Binary files /dev/null and b/src/all/myreadingmanga/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/all/myreadingmanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/myreadingmanga/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..21185f23c Binary files /dev/null and b/src/all/myreadingmanga/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/all/myreadingmanga/res/web_hi_res_512.png b/src/all/myreadingmanga/res/web_hi_res_512.png new file mode 100644 index 000000000..c251367fe Binary files /dev/null and b/src/all/myreadingmanga/res/web_hi_res_512.png differ diff --git a/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingManga.kt b/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingManga.kt new file mode 100644 index 000000000..c82676328 --- /dev/null +++ b/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingManga.kt @@ -0,0 +1,147 @@ +package eu.kanade.tachiyomi.extension.all.myreadingmanga + +import android.net.Uri +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.text.SimpleDateFormat + +open class MyReadingManga(override val lang: String) : ParsedHttpSource() { + + override val name = "MyReadingManga" + + override val baseUrl = "https://myreadingmanga.info" + + override val supportsLatest = false + + override fun popularMangaSelector() = "article" + + override fun latestUpdatesSelector() = "" + + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/page/$page/", headers) + } + + override fun latestUpdatesRequest(page: Int) = popularMangaRequest(page) + + override fun popularMangaParse(response: Response): MangasPage { + val document = response.asJsoup() + + val mangas = mutableListOf() + document.select(popularMangaSelector()).forEach { element -> + //this filters out language specific + element.select("a[rel][href*=-$lang]")?.first()?.let { _ -> + mangas.add(popularMangaFromElement(element)) + } + } + + val hasNextPage = popularMangaNextPageSelector()?.let { selector -> + document.select(selector).first() + } != null + + return MangasPage(mangas, hasNextPage) + } + + override fun popularMangaFromElement(element: Element) = buildManga(element.select("a[rel]").first(), element.select("a.entry-image-link img").first()) + + override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) + + override fun popularMangaNextPageSelector() = "li.pagination-next" + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val uri = Uri.parse("$baseUrl/search/").buildUpon() + uri.appendQueryParameter("search", query) + return GET(uri.toString()) + } + + override fun searchMangaSelector() = "div.results-by-facets div[id*=res]" + + override fun searchMangaFromElement(element: Element) = buildManga(element.select("a").first(), element.select("img").first()) + + + private fun buildManga(titleElement: Element, thumbnailElement: Element): SManga { + val manga = SManga.create() + manga.setUrlWithoutDomain(titleElement.attr("href")) + manga.title = cleanTitle(titleElement.text()) + manga.thumbnail_url = getThumbnail(thumbnailElement.attr("src")) + return manga + } + + //removes resizing + + private fun getThumbnail(thumbnailUrl: String) = thumbnailUrl.substringBeforeLast("-") + "." + thumbnailUrl.substringAfterLast(".") + + //cleans up the name removing author and language from the title + private fun cleanTitle(title: String) = title.substringBeforeLast("[").substringAfterLast("]").substringBeforeLast("(") + + + override fun searchMangaNextPageSelector() = null + + override fun mangaDetailsParse(document: Document): SManga { + val manga = SManga.create() + manga.author = document.select(".entry-content p")?.find { it -> + it.text().contains("artist", true) || it.text().contains("author", true) + }?.text()?.substringAfter(":") + + var glist = document.select(".entry-header p a[href*=genre]").map { it -> it.text() } + manga.genre = glist.joinToString(", ") + manga.description = document.select(".entry-content blockquote")?.first()?.text() ?: "" + manga.status = SManga.UNKNOWN + return manga + } + + override fun chapterListSelector() = ".entry-pagination a" + + override fun chapterListParse(response: Response): List { + val document = response.asJsoup() + val chapters = mutableListOf() + + val date = parseDate(document.select(".entry-time").attr("datetime").substringBefore("T")) + //create first chapter since its on main manga page + chapters.add(createChapter("1", document.baseUri(), date)) + //see if there are multiple chapters or not + document.select(chapterListSelector())?.let { it -> + it.forEach { + chapters.add(createChapter(it.text(), document.baseUri(), date)) + } + } + return chapters + } + + private fun parseDate(date: String): Long { + return SimpleDateFormat("yyyy-MM-dd").parse(date).time + } + + private fun createChapter(pageNumber: String, mangaUrl: String, date: Long): SChapter { + val chapter = SChapter.create() + chapter.setUrlWithoutDomain(mangaUrl + "/" + pageNumber) + chapter.name = "Ch. " + pageNumber + chapter.date_upload = date + return chapter + } + + + override fun chapterFromElement(element: Element) = throw Exception("Not used") + + override fun pageListParse(response: Response): List { + val body = response.asJsoup() + val pages = mutableListOf() + val elements = body.select("div.separator img") + + (0 until elements.size).mapTo(pages) { Page(it, "", elements[it].attr("src")) } + + return pages + } + + override fun pageListParse(document: Document) = throw Exception("Not used") + override fun imageUrlRequest(page: Page) = throw Exception("Not used") + override fun imageUrlParse(document: Document) = throw Exception("Not used") + +} diff --git a/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingMangaFactory.kt b/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingMangaFactory.kt new file mode 100644 index 000000000..1d19231c0 --- /dev/null +++ b/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingMangaFactory.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.all.myreadingmanga + +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory + +/** + * + */ +class MyReadingMangaFactory : SourceFactory { + override fun createSources(): List = getAllMyReadingMangaLanguages() +} diff --git a/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingMangaLanguages.kt b/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingMangaLanguages.kt new file mode 100644 index 000000000..f9b108892 --- /dev/null +++ b/src/all/myreadingmanga/src/eu/kanade/tachiyomi/extension/all/myreadingmanga/MyReadingMangaLanguages.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.all.myreadingmanga + +/** + * MyReadingManga languages + */ + + +class MyReadingMangaEnglish : MyReadingManga("en") + +fun getAllMyReadingMangaLanguages() = listOf( + MyReadingMangaEnglish() +) \ No newline at end of file