diff --git a/src/it/shingekinoshoujo/AndroidManifest.xml b/src/it/shingekinoshoujo/AndroidManifest.xml
deleted file mode 100644
index 8072ee00d..000000000
--- a/src/it/shingekinoshoujo/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/src/it/shingekinoshoujo/build.gradle b/src/it/shingekinoshoujo/build.gradle
deleted file mode 100644
index 4add2bc45..000000000
--- a/src/it/shingekinoshoujo/build.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-
-ext {
- extName = 'Shingeki no Shoujo'
- pkgNameSuffix = 'it.shingekinoshoujo'
- extClass = '.ShingekiNoShoujo'
- extVersionCode = 3
-}
-
-apply from: "$rootDir/common.gradle"
diff --git a/src/it/shingekinoshoujo/res/mipmap-hdpi/ic_launcher.png b/src/it/shingekinoshoujo/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 524250f61..000000000
Binary files a/src/it/shingekinoshoujo/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/it/shingekinoshoujo/res/mipmap-mdpi/ic_launcher.png b/src/it/shingekinoshoujo/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 1a6248fdd..000000000
Binary files a/src/it/shingekinoshoujo/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/it/shingekinoshoujo/res/mipmap-xhdpi/ic_launcher.png b/src/it/shingekinoshoujo/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 67abda1d2..000000000
Binary files a/src/it/shingekinoshoujo/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/it/shingekinoshoujo/res/mipmap-xxhdpi/ic_launcher.png b/src/it/shingekinoshoujo/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 00c4a5221..000000000
Binary files a/src/it/shingekinoshoujo/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/it/shingekinoshoujo/res/mipmap-xxxhdpi/ic_launcher.png b/src/it/shingekinoshoujo/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 529c550ce..000000000
Binary files a/src/it/shingekinoshoujo/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/it/shingekinoshoujo/res/web_hi_res_512.png b/src/it/shingekinoshoujo/res/web_hi_res_512.png
deleted file mode 100644
index 10bd3aab8..000000000
Binary files a/src/it/shingekinoshoujo/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/it/shingekinoshoujo/src/eu/kanade/tachiyomi/extension/it/shingekinoshoujo/ShingekiNoShoujo.kt b/src/it/shingekinoshoujo/src/eu/kanade/tachiyomi/extension/it/shingekinoshoujo/ShingekiNoShoujo.kt
deleted file mode 100644
index 37538af91..000000000
--- a/src/it/shingekinoshoujo/src/eu/kanade/tachiyomi/extension/it/shingekinoshoujo/ShingekiNoShoujo.kt
+++ /dev/null
@@ -1,213 +0,0 @@
-package eu.kanade.tachiyomi.extension.it.shingekinoshoujo
-
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.source.model.Filter
-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 eu.kanade.tachiyomi.util.asJsoup
-import okhttp3.Headers
-import okhttp3.OkHttpClient
-import okhttp3.Request
-import okhttp3.Response
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-
-class ShingekiNoShoujo : ParsedHttpSource() {
-
- override val name = "Shingeki no Shoujo"
- override val baseUrl = "https://shingekinoshoujo.it"
- override val lang = "it"
- override val supportsLatest = true
- override val client: OkHttpClient = network.cloudflareClient
-
- //region REQUESTS
- override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/", headers)
- override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/#recent-tab", headers)
- override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
- if (query.isNotEmpty()) {
- return GET("$baseUrl/page/$page/?s=$query", headers)
- } else {
- (if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
- when (filter) {
- is GenreSelez -> {
- return GET(
- "$baseUrl/tag/${getGenreList().filter {
- filter.values[filter.state] == it.name
- }.map { it.id }[0]}/page/$page",
- )
- }
- else -> {}
- }
- }
- return GET(baseUrl, headers)
- }
- }
- //endregion
-
- //region CONTENTS INFO
- private fun mangasParse(response: Response, selector: String, num: Int): MangasPage {
- val document = response.asJsoup()
- if (document.select("#login > .custom-message").size > 0) throw Exception("Devi accedere al sito web con il tuo account!\nPremi WebView (il pulsante con il globo)\ne accedi normalmente")
-
- val mangas = document.select(selector).map { element ->
- when (num) {
- 1 -> popularMangaFromElement(element)
- 2 -> latestUpdatesFromElement(element)
- else -> searchMangaFromElement(element)
- }
- }
- return MangasPage(
- mangas,
- !document.select(searchMangaNextPageSelector()).isEmpty(),
- )
- }
- override fun popularMangaParse(response: Response): MangasPage = mangasParse(response, popularMangaSelector(), 1)
- override fun latestUpdatesParse(response: Response): MangasPage = mangasParse(response, latestUpdatesSelector(), 2)
- override fun searchMangaParse(response: Response): MangasPage = mangasParse(response, searchMangaSelector(), 3)
-
- override fun popularMangaSelector() = "#content section .single-article:not([aria-hidden]) > figure"
- override fun latestUpdatesSelector() = "#recent-tab > div > figure"
- override fun searchMangaSelector() = "article.type-post"
-
- override fun popularMangaFromElement(element: Element) = SManga.create().apply {
- thumbnail_url = element.selectFirst("img")!!.attr("src")
- element.selectFirst("a")!!.let {
- setUrlWithoutDomain(it.attr("href"))
- title = it.attr("title").let { l ->
- l.ifEmpty { it.text() }
- }
- }
- }
- override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
- override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
-
- override fun mangaDetailsParse(document: Document): SManga {
- val statusElementText = document.select("blockquote").last()!!.text().lowercase()
- return SManga.create().apply {
- thumbnail_url = document.select(".wp-post-image").attr("src")
- status = when {
- statusElementText.contains("in corso") -> SManga.ONGOING
- statusElementText.contains("fine") -> SManga.COMPLETED
- statusElementText.contains("diritti") -> SManga.LICENSED
- statusElementText.contains("sospeso") -> SManga.CANCELLED
- statusElementText.contains("hiatus") -> SManga.ON_HIATUS
- else -> SManga.UNKNOWN
- }
- author = document.select(".entry-content span:has(strong:contains(Autore))").text().substringAfter("Autore:").trim()
- genre = document.select(".entry-content span:has(strong:contains(Genere))").text().substringAfter("Genere:").replace(".", "").trim()
- description = document.select(".entry-content p:has(strong:contains(Trama))").text().substringAfter("Trama:").trim()
- }
- }
- //endregion
-
- //region NEXT SELECTOR - Not used
-
- override fun popularMangaNextPageSelector(): String? = null
- override fun latestUpdatesNextPageSelector() = searchMangaNextPageSelector()
- override fun searchMangaNextPageSelector() = ".next.page-numbers"
- //endregion
-
- //region CHAPTER and PAGES
-
- override fun chapterListParse(response: Response): List {
- val document = response.asJsoup()
- if (document.select("#login > .custom-message").size > 0) throw Exception("Devi accedere al sito web con il tuo account!\nPremi WebView (il pulsante con il globo)\ne accedi normalmente")
- val chapters = mutableListOf()
- document.select(chapterListSelector()).forEachIndexed { i, it ->
- chapters.add(
- SChapter.create().apply {
- setUrlWithoutDomain(it.attr("href"))
- it.text().let { n ->
- name = n
- chapter_number = n.replace(Regex("OneShot|Prologo"), "0").replace("Capitolo", "").let {
- if (!it.contains(Regex("[0-9]\\."))) {
- it.filter { t -> t.isDigit() }.let { t ->
- t.ifEmpty { "$i" }
- }
- } else {
- it
- }
- }.toFloat()
- }
- },
- )
- }
-
- chapters.reverse()
- return chapters
- }
- override fun chapterListSelector() = ".entry-content > blockquote span > strong a, .entry-content > ul > li a"
- override fun chapterFromElement(element: Element) = throw Exception("Not used")
-
- override fun pageListParse(document: Document): List {
- val pages = mutableListOf()
-
- document.select("article > .entry-content img").forEachIndexed { i, it ->
- pages.add(Page(i, "", it.attr("src")))
- }
- if (document.toString().contains("che state leggendo")) {
- pages.add(Page(1, "", "https://i.imgur.com/l0eZuoO.png"))
- }
-
- return pages
- }
-
- override fun imageUrlParse(document: Document) = ""
- override fun imageRequest(page: Page): Request {
- val imgHeader = Headers.Builder().apply {
- add("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30")
- add("Referer", baseUrl)
- }.build()
- return GET(page.imageUrl!!, imgHeader)
- }
- //endregion
-
- //region FILTERS
- private class Genre(name: String, val id: String = name) : Filter.CheckBox(name)
- private class GenreSelez(genres: List) : Filter.Select(
- "Genere",
- genres.map {
- it.name
- }.toTypedArray(),
- 0,
- )
-
- override fun getFilterList() = FilterList(
- Filter.Header("La ricerca testuale non accetta i filtri e viceversa"),
- GenreSelez(getGenreList()),
- )
-
- private fun getGenreList() = listOf(
- Genre("Josei", "josei"),
- Genre("Sportivo", "sportivo"),
- Genre("Harlequin", "harlequin"),
- Genre("Ufficio", "ufficio"),
- Genre("Shoujo", "shoujo"),
- Genre("Fujitani Yoko", "fujitani-yoko"),
- Genre("Tsukishima Haru", "tsukishima-haru"),
- Genre("Scolastico", "scolastico"),
- Genre("Viaggio nel Tempo", "viaggio-nel-tempo"),
- Genre("Vita Scolastica", "vita-scolastica"),
- Genre("Seinen", "seinen"),
- Genre("Drammatico", "drammatico"),
- Genre("Commedia", "commedia"),
- Genre("Drama", "drama"),
- Genre("Oneshot", "oneshot"),
- Genre("Mistero", "mistero"),
- Genre("Saori", "saori"),
- Genre("Fuji Momo", "fuji-momo"),
- Genre("Azione", "azione"),
- Genre("Sovrannaturale", "sovrannaturale"),
- Genre("Vita Quotidiana", "vita-quotidiana"),
- Genre("Storico", "storico"),
- Genre("Shibano Yuka", "shibano-yuka"),
- Genre("Fantasy", "fantasy"),
- Genre("Smut", "smut"),
- Genre("Psicologico", "psicologico"),
- )
- //endregion
-}