diff --git a/src/ru/mangaonlinebiz/AndroidManifest.xml b/src/ru/mangaonlinebiz/AndroidManifest.xml
deleted file mode 100644
index 30deb7f79..000000000
--- a/src/ru/mangaonlinebiz/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/src/ru/mangaonlinebiz/build.gradle b/src/ru/mangaonlinebiz/build.gradle
deleted file mode 100644
index 99ae573e0..000000000
--- a/src/ru/mangaonlinebiz/build.gradle
+++ /dev/null
@@ -1,12 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlinx-serialization'
-
-ext {
- extName = 'Mangaonlinebiz'
- pkgNameSuffix = 'ru.mangaonlinebiz'
- extClass = '.MangaOnlineBiz'
- extVersionCode = 10
-}
-
-apply from: "$rootDir/common.gradle"
diff --git a/src/ru/mangaonlinebiz/res/mipmap-hdpi/ic_launcher.png b/src/ru/mangaonlinebiz/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100755
index ea7a5f1cb..000000000
Binary files a/src/ru/mangaonlinebiz/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ru/mangaonlinebiz/res/mipmap-mdpi/ic_launcher.png b/src/ru/mangaonlinebiz/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100755
index 00874669d..000000000
Binary files a/src/ru/mangaonlinebiz/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ru/mangaonlinebiz/res/mipmap-xhdpi/ic_launcher.png b/src/ru/mangaonlinebiz/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100755
index 91f44a8e4..000000000
Binary files a/src/ru/mangaonlinebiz/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ru/mangaonlinebiz/res/mipmap-xxhdpi/ic_launcher.png b/src/ru/mangaonlinebiz/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100755
index 54a44ddd2..000000000
Binary files a/src/ru/mangaonlinebiz/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ru/mangaonlinebiz/res/mipmap-xxxhdpi/ic_launcher.png b/src/ru/mangaonlinebiz/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100755
index c0f5a93f4..000000000
Binary files a/src/ru/mangaonlinebiz/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/ru/mangaonlinebiz/res/web_hi_res_512.png b/src/ru/mangaonlinebiz/res/web_hi_res_512.png
deleted file mode 100755
index e8038d7b3..000000000
Binary files a/src/ru/mangaonlinebiz/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/ru/mangaonlinebiz/src/eu/kanade/tachiyomi/extension/ru/mangaonlinebiz/MangaOnlineBiz.kt b/src/ru/mangaonlinebiz/src/eu/kanade/tachiyomi/extension/ru/mangaonlinebiz/MangaOnlineBiz.kt
deleted file mode 100644
index 63928c401..000000000
--- a/src/ru/mangaonlinebiz/src/eu/kanade/tachiyomi/extension/ru/mangaonlinebiz/MangaOnlineBiz.kt
+++ /dev/null
@@ -1,244 +0,0 @@
-package eu.kanade.tachiyomi.extension.ru.mangaonlinebiz
-
-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 kotlinx.serialization.decodeFromString
-import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.JsonArray
-import kotlinx.serialization.json.JsonObject
-import kotlinx.serialization.json.float
-import kotlinx.serialization.json.jsonArray
-import kotlinx.serialization.json.jsonObject
-import kotlinx.serialization.json.jsonPrimitive
-import okhttp3.Headers
-import okhttp3.Request
-import okhttp3.Response
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-import uy.kohesive.injekt.injectLazy
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-class MangaOnlineBiz : ParsedHttpSource() {
-
- private val json: Json by injectLazy()
-
- override val name = "MangaOnlineBiz"
-
- override val baseUrl = "https://manga-online.biz"
-
- override val lang = "ru"
-
- override val supportsLatest = true
-
- private val userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
-
- override fun headersBuilder(): Headers.Builder = Headers.Builder()
- .add("User-Agent", userAgent)
- .add("Referer", baseUrl)
-
- override fun popularMangaRequest(page: Int): Request =
- GET("$baseUrl/genre/all/page/$page", headers)
-
- override fun latestUpdatesRequest(page: Int): Request =
- GET("$baseUrl/genre/all/order/new/page/$page")
-
- override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
- val url = if (query.isNotBlank()) {
- "$baseUrl/search-ajax/?query=$query"
- } else {
- var ret = String()
- (if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
- when (filter) {
- is GenreList -> {
- ret = "$baseUrl/genre/${filter.values[filter.state].id}/page/$page"
- }
- }
- }
- ret
- }
- return GET(url, headers)
- }
-
- override fun popularMangaSelector() = "a.genre"
-
- override fun latestUpdatesSelector() = popularMangaSelector()
-
- override fun searchMangaParse(response: Response): MangasPage {
- if (!response.request.url.toString().contains("search-ajax")) {
- return popularMangaParse(response)
- }
- val jsonData = response.body!!.string()
- val results = json.decodeFromString(jsonData)["results"]!!.jsonArray
- val mangas = mutableListOf()
- results.forEach {
- val element = it.jsonObject
- val manga = SManga.create()
- manga.setUrlWithoutDomain(element["url"]!!.jsonPrimitive.content)
- manga.title = element["title"]!!.jsonPrimitive.content.split("/").first()
- val image = element["image"]!!.jsonPrimitive.content
- if (image.startsWith("http")) {
- manga.thumbnail_url = image
- } else {
- manga.thumbnail_url = baseUrl + image
- }
-
- mangas.add(manga)
- }
-
- return MangasPage(mangas, false)
- }
-
- override fun popularMangaFromElement(element: Element): SManga {
- val manga = SManga.create()
- manga.thumbnail_url = element.select("img").first().attr("src")
- manga.setUrlWithoutDomain(element.attr("href"))
- element.select("div.content").first().let {
- manga.title = it.text().split("/").first()
- }
- return manga
- }
-
- override fun latestUpdatesFromElement(element: Element): SManga =
- popularMangaFromElement(element)
-
- override fun searchMangaFromElement(element: Element): SManga = throw Exception("Not Used")
-
- override fun popularMangaNextPageSelector() = "a.button.next"
-
- override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
-
- override fun searchMangaNextPageSelector() = throw Exception("Not Used")
-
- override fun mangaDetailsParse(document: Document): SManga {
- val infoElement = document.select(".items .item").first()
- val manga = SManga.create()
- manga.genre = infoElement.select("a.label").joinToString { it.text() }
- manga.description = infoElement.select(".description").text()
- manga.thumbnail_url = infoElement.select("img").first().attr("src")
- if (infoElement.text().contains("Перевод: закончен")) {
- manga.status = SManga.COMPLETED
- } else if (infoElement.text().contains("Перевод: продолжается")) {
- manga.status = SManga.ONGOING
- }
-
- return manga
- }
-
- override fun chapterListParse(response: Response): List {
- val html = response.body!!.string()
-
- val jsonData = html.split("App.Collection.MangaChapter(").last().split("]);").first() + "]"
- val mangaName = html.split("mangaName: '").last().split("' });").first()
- val chapterList = mutableListOf()
- json.decodeFromString(jsonData).forEach {
- chapterList.add(chapterFromElement(mangaName, it.jsonObject))
- }
- return chapterList
- }
-
- override fun chapterListSelector(): String = throw Exception("Not Used")
-
- private fun chapterFromElement(mangaName: String, element: JsonObject): SChapter {
- val chapter = SChapter.create()
- chapter.setUrlWithoutDomain("/$mangaName/${element["volume"]!!.jsonPrimitive.content}/${element["number"]!!.jsonPrimitive.content})/1")
- chapter.name = "Том ${element["volume"]!!.jsonPrimitive.content} - Глава ${element["number"]!!.jsonPrimitive.content} ${element["title"]!!.jsonPrimitive.content}"
- chapter.chapter_number = element["number"]!!.jsonPrimitive.float
- chapter.date_upload = SimpleDateFormat("yyyy-MM-dd", Locale.US).parse(element["date"]!!.jsonPrimitive.content)?.time ?: 0L
- return chapter
- }
-
- override fun pageListParse(response: Response): List {
- val html = response.body!!.string()
- val rawPages = html.split("'pages': ").last().split(",\n").first()
- val jsonPages = json.decodeFromString(rawPages)
- val pages = jsonPages.jsonObject
-
- val rawCdnUrl = html.split("'srcBaseUrl': ").last().split(",\n").first()
- val cdnUrl = rawCdnUrl.replace("'", "")
-
- val resPages = mutableListOf()
- pages.entries.forEach { (page, jsonElement) ->
- resPages.add(Page(page.toInt(), imageUrl = "$cdnUrl/${jsonElement.jsonObject["src"]!!.jsonPrimitive.content}"))
- }
- return resPages
- }
-
- private class Genre(name: String, val id: String) : Filter.CheckBox(name) {
- override fun toString(): String {
- return name
- }
- }
-
- private class GenreList(genres: Array) : Filter.Select("Genres", genres, 0)
-
- override fun getFilterList() = FilterList(
- GenreList(getGenreList())
- )
-
- /* [...document.querySelectorAll(".categories .item")]
- * .map(el => `Genre("${el.textContent.trim()}", "${el.getAttribute('href')}")`).join(',\n')
- * on https://manga-online.biz/genre/all/
- */
- private fun getGenreList() = arrayOf(
- Genre("Все", "all"),
- Genre("Боевик", "boevik"),
- Genre("Боевые искусства", "boevye_iskusstva"),
- Genre("Вампиры", "vampiry"),
- Genre("Гарем", "garem"),
- Genre("Гендерная интрига", "gendernaya_intriga"),
- Genre("Героическое фэнтези", "geroicheskoe_fehntezi"),
- Genre("Детектив", "detektiv"),
- Genre("Дзёсэй", "dzyosehj"),
- Genre("Додзинси", "dodzinsi"),
- Genre("Драма", "drama"),
- Genre("Игра", "igra"),
- Genre("История", "istoriya"),
- Genre("Меха", "mekha"),
- Genre("Мистика", "mistika"),
- Genre("Научная фантастика", "nauchnaya_fantastika"),
- Genre("Повседневность", "povsednevnost"),
- Genre("Постапокалиптика", "postapokaliptika"),
- Genre("Приключения", "priklyucheniya"),
- Genre("Психология", "psihologiya"),
- Genre("Романтика", "romantika"),
- Genre("Самурайский боевик", "samurajskij_boevik"),
- Genre("Сверхъестественное", "sverhestestvennoe"),
- Genre("Сёдзё", "syodzyo"),
- Genre("Сёдзё-ай", "syodzyo-aj"),
- Genre("Сёнэн", "syonen"),
- Genre("Спорт", "sport"),
- Genre("Сэйнэн", "sejnen"),
- Genre("Трагедия", "tragediya"),
- Genre("Триллер", "triller"),
- Genre("Ужасы", "uzhasy"),
- Genre("Фантастика", "fantastika"),
- Genre("Фэнтези", "fentezi"),
- Genre("Школа", "shkola"),
- Genre("Этти", "etti"),
- Genre("Юри", "yuri"),
- Genre("Военный", "voennyj"),
- Genre("Жосей", "zhosej"),
- Genre("Магия", "magiya"),
- Genre("Полиция", "policiya"),
- Genre("Смена пола", "smena-pola"),
- Genre("Супер сила", "super-sila"),
- Genre("Эччи", "echchi"),
- Genre("Яой", "yaoj"),
- Genre("Сёнэн-ай", "syonen-aj")
- )
-
- override fun imageUrlParse(document: Document) = throw Exception("Not Used")
-
- override fun searchMangaSelector(): String = throw Exception("Not Used")
-
- override fun chapterFromElement(element: Element): SChapter = throw Exception("Not Used")
-
- override fun pageListParse(document: Document): List = throw Exception("Not Used")
-}