diff --git a/src/en/egscomics/build.gradle b/src/en/egscomics/build.gradle new file mode 100644 index 000000000..b96345838 --- /dev/null +++ b/src/en/egscomics/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'El Goonish Shive' + extClass = '.ElGoonishShive' + extVersionCode = 1 + isNsfw = false +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/egscomics/res/mipmap-hdpi/ic_launcher.png b/src/en/egscomics/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..1dc9879cb Binary files /dev/null and b/src/en/egscomics/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/en/egscomics/res/mipmap-mdpi/ic_launcher.png b/src/en/egscomics/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..e51663dfc Binary files /dev/null and b/src/en/egscomics/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/en/egscomics/res/mipmap-xhdpi/ic_launcher.png b/src/en/egscomics/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..5eee452c9 Binary files /dev/null and b/src/en/egscomics/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/en/egscomics/res/mipmap-xxhdpi/ic_launcher.png b/src/en/egscomics/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..094fd92ce Binary files /dev/null and b/src/en/egscomics/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/en/egscomics/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/egscomics/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..1acf3b674 Binary files /dev/null and b/src/en/egscomics/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/en/egscomics/src/eu/kanade/tachiyomi/extension/en/egscomics/ElGoonishShive.kt b/src/en/egscomics/src/eu/kanade/tachiyomi/extension/en/egscomics/ElGoonishShive.kt new file mode 100644 index 000000000..5809a0d2c --- /dev/null +++ b/src/en/egscomics/src/eu/kanade/tachiyomi/extension/en/egscomics/ElGoonishShive.kt @@ -0,0 +1,133 @@ +package eu.kanade.tachiyomi.extension.en.egscomics + +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import keiyoushi.utils.tryParse +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable +import java.text.SimpleDateFormat +import java.util.Locale + +class ElGoonishShive : ParsedHttpSource() { + override val name = "El Goonish Shive" + override val baseUrl = "https://www.egscomics.com" + override val lang = "en" + override val supportsLatest = false + + private val dateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.US) + + override fun fetchPopularManga(page: Int): Observable<MangasPage> { + val manga = arrayListOf<SManga>() + manga.add( + SManga.create().apply { + title = name + artist = "Dan Shive" + author = artist + status = SManga.ONGOING + url = "/comic/archive" + description = "El Goonish Shive is a comic about a group of teenagers who face " + + "both real life and bizarre, supernatural situations. \n\n" + + "It is a comedy mixed with drama and is recommended for audiences thirteen " + + "and older." + thumbnail_url = + "https://static.tumblr.com/8cee5e83d26a8a96ad5e51b67f2e340e/j8ipbno/fXFoj0zh9/tumblr_static_1f2fhwjyya74gsgs888g8k880.png" + initialized = true + }, + ) + + manga.add( + SManga.create().apply { + title = "$name: NewsPaper" + artist = "Dan Shive" + author = artist + status = SManga.ONGOING + url = "/egsnp/archive" + description = "El Goonish Shive is a comic about a group of teenagers who face " + + "both real life and bizarre, supernatural situations. \n\n" + + "It is a comedy mixed with drama and is recommended for audiences thirteen " + + "and older. \n\n" + + "EGS:NP is a subsection with short stories that generally aren't canon " + + "unless stated" + thumbnail_url = + "https://static.tumblr.com/8cee5e83d26a8a96ad5e51b67f2e340e/j8ipbno/fXFoj0zh9/tumblr_static_1f2fhwjyya74gsgs888g8k880.png" + initialized = true + }, + ) + + manga.add( + SManga.create().apply { + title = "$name Sketchbook" + artist = "Dan Shive" + author = artist + status = SManga.ONGOING + url = "/sketchbook/archive" + description = "El Goonish Shive is a comic about a group of teenagers who face " + + "both real life and bizarre, supernatural situations. \n\n" + + "It is a comedy mixed with drama and is recommended for audiences thirteen " + + "and older. \n\n" + "" + + "The Sketchbook section is full of one-shot gags, sketches, comics that " + + "don't fit elsewhere." + thumbnail_url = + "https://static.tumblr.com/8cee5e83d26a8a96ad5e51b67f2e340e/j8ipbno/fXFoj0zh9/tumblr_static_1f2fhwjyya74gsgs888g8k880.png" + initialized = true + }, + ) + + return Observable.just(MangasPage(manga, false)) + } + + override fun fetchSearchManga( + page: Int, + query: String, + filters: FilterList, + ): Observable<MangasPage> = Observable.just(MangasPage(emptyList(), false)) + + override fun fetchMangaDetails(manga: SManga): Observable<SManga> { + return Observable.just(manga) + } + + override fun chapterListSelector() = + """select[name=comic] option[value~=^(comic|egsnp|sketchbook)]""" + + override fun chapterListParse(response: Response): List<SChapter> { + return super.chapterListParse(response).reversed() + } + + override fun chapterFromElement(element: Element): SChapter { + return SChapter.create().apply { + chapter_number = element.previousElementSiblings().size.toFloat() + setUrlWithoutDomain("/" + element.attr("value")) + name = element.text().split(" - ", limit = 2).last() + date_upload = dateFormat.tryParse(element.text().split(" - ", limit = 2).first()) + } + } + + override fun pageListParse(document: Document): List<Page> = + document.select("#cc-comic").mapIndexed { i, element -> + Page(i, imageUrl = element.absUrl("src")) + } + + // <editor-fold desc="Not Used"> + override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException() + override fun popularMangaSelector(): String = throw UnsupportedOperationException() + override fun searchMangaFromElement(element: Element): SManga = throw UnsupportedOperationException() + override fun searchMangaNextPageSelector(): String = throw UnsupportedOperationException() + override fun searchMangaSelector(): String = throw UnsupportedOperationException() + override fun popularMangaRequest(page: Int): Request = throw UnsupportedOperationException() + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = throw UnsupportedOperationException() + override fun popularMangaNextPageSelector(): String = throw UnsupportedOperationException() + override fun popularMangaFromElement(element: Element): SManga = throw UnsupportedOperationException() + override fun mangaDetailsParse(document: Document): SManga = throw UnsupportedOperationException() + override fun latestUpdatesNextPageSelector(): String = throw UnsupportedOperationException() + override fun latestUpdatesFromElement(element: Element): SManga = throw UnsupportedOperationException() + override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException() + override fun latestUpdatesSelector(): String = throw UnsupportedOperationException() + // </editor-fold> +}