diff --git a/src/zh/tohomh123/AndroidManifest.xml b/src/zh/tohomh123/AndroidManifest.xml
deleted file mode 100644
index 30deb7f79..000000000
--- a/src/zh/tohomh123/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/src/zh/tohomh123/build.gradle b/src/zh/tohomh123/build.gradle
deleted file mode 100644
index 46d6d8498..000000000
--- a/src/zh/tohomh123/build.gradle
+++ /dev/null
@@ -1,12 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlinx-serialization'
-
-ext {
- extName = 'Tohomh123'
- pkgNameSuffix = 'zh.tohomh123'
- extClass = '.Tohomh'
- extVersionCode = 3
-}
-
-apply from: "$rootDir/common.gradle"
diff --git a/src/zh/tohomh123/res/mipmap-hdpi/ic_launcher.png b/src/zh/tohomh123/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index b44315a63..000000000
Binary files a/src/zh/tohomh123/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/zh/tohomh123/res/mipmap-mdpi/ic_launcher.png b/src/zh/tohomh123/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 8bad12d98..000000000
Binary files a/src/zh/tohomh123/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/zh/tohomh123/res/mipmap-xhdpi/ic_launcher.png b/src/zh/tohomh123/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index c6422128a..000000000
Binary files a/src/zh/tohomh123/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/zh/tohomh123/res/mipmap-xxhdpi/ic_launcher.png b/src/zh/tohomh123/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 1a3a3282a..000000000
Binary files a/src/zh/tohomh123/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/zh/tohomh123/res/mipmap-xxxhdpi/ic_launcher.png b/src/zh/tohomh123/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 37d0074e6..000000000
Binary files a/src/zh/tohomh123/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/zh/tohomh123/res/web_hi_res_512.png b/src/zh/tohomh123/res/web_hi_res_512.png
deleted file mode 100644
index aa1b2edf7..000000000
Binary files a/src/zh/tohomh123/res/web_hi_res_512.png and /dev/null differ
diff --git a/src/zh/tohomh123/src/eu/kanade/tachiyomi/extension/zh/tohomh123/Tohomh.kt b/src/zh/tohomh123/src/eu/kanade/tachiyomi/extension/zh/tohomh123/Tohomh.kt
deleted file mode 100644
index 6171c82ca..000000000
--- a/src/zh/tohomh123/src/eu/kanade/tachiyomi/extension/zh/tohomh123/Tohomh.kt
+++ /dev/null
@@ -1,156 +0,0 @@
-package eu.kanade.tachiyomi.extension.zh.tohomh123
-
-import eu.kanade.tachiyomi.network.GET
-import eu.kanade.tachiyomi.source.model.FilterList
-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 kotlinx.serialization.decodeFromString
-import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.JsonObject
-import kotlinx.serialization.json.jsonPrimitive
-import okhttp3.OkHttpClient
-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 Tohomh : ParsedHttpSource() {
-
- override val name = "Tohomh123"
-
- override val baseUrl = "https://www.tohomh123.com"
-
- override val lang = "zh"
-
- override val supportsLatest = true
-
- override val client: OkHttpClient = network.cloudflareClient
-
- // Popular
-
- override fun popularMangaRequest(page: Int): Request {
- return GET("$baseUrl/f-1-------hits--$page.html", headers)
- }
-
- override fun popularMangaSelector() = "div.mh-item"
-
- override fun popularMangaFromElement(element: Element): SManga {
- val manga = SManga.create()
- element.select("h2 a").let {
- manga.setUrlWithoutDomain(it.attr("href"))
- manga.title = it.attr("title")
- }
- manga.thumbnail_url = element.select("p").attr("style").substringAfter("(").substringBefore(")")
- return manga
- }
-
- override fun popularMangaNextPageSelector() = "div.page-pagination li a:contains(>)"
-
- // Latest
-
- override fun latestUpdatesRequest(page: Int): Request {
- return GET("$baseUrl/f-1------updatetime--$page.html", headers)
- }
-
- override fun latestUpdatesSelector() = popularMangaSelector()
-
- override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
-
- override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
-
- // Search
-
- override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
- return GET("$baseUrl/action/Search?keyword=$query&page=$page", headers)
- }
-
- override fun searchMangaSelector() = popularMangaSelector()
-
- override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
-
- override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
-
- // Manga summary page
-
- override fun mangaDetailsParse(document: Document): SManga {
- val infoElement = document.select("div.banner_detail_form").first()
-
- val manga = SManga.create()
- manga.title = infoElement.select("h1").first().text()
- manga.author = infoElement.select("div.info p.subtitle").text().substringAfter(":").trim()
- val status = infoElement.select("div.banner_detail_form div.info span.block:contains(状态) span").text()
- manga.status = parseStatus(status)
- manga.description = infoElement.select("div.info p.content").text()
- manga.thumbnail_url = infoElement.select("div.banner_detail_form div.cover img").first().attr("src")
- return manga
- }
-
- private fun parseStatus(status: String?) = when {
- status == null -> SManga.UNKNOWN
- status.contains("连载中") -> SManga.ONGOING
- status.contains("完结") -> SManga.COMPLETED
- else -> SManga.UNKNOWN
- }
-
- // Chapters
-
- override fun chapterListSelector() = "ul#detail-list-select-1 li a"
-
- override fun chapterListParse(response: Response): List {
- val document = response.asJsoup()
- val chapters = mutableListOf()
- document.select(chapterListSelector()).map { chapters.add(chapterFromElement(it)) }
- // Add date for most recent chapter
- document.select("div.banner_detail_form div.info span:contains(更新时间)").text()
- .substringAfter(":").trim().let { chapters[0].date_upload = parseChapterDate(it) }
- return chapters
- }
-
- override fun chapterFromElement(element: Element): SChapter {
- val chapter = SChapter.create()
- chapter.setUrlWithoutDomain(element.attr("href"))
- chapter.name = element.ownText()
- return chapter
- }
-
- companion object {
- val dateFormat by lazy {
- SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)
- }
- }
-
- private fun parseChapterDate(string: String): Long {
- return dateFormat.parse(string)?.time ?: 0L
- }
-
- // Pages
-
- override fun pageListParse(document: Document): List {
- val pages = mutableListOf()
- val script = document.select("script:containsData(imgDomain)").first().data()
- val did = script.substringAfter("did=").substringBefore(";")
- val sid = script.substringAfter("sid=").substringBefore(";")
- val lastPage = script.substringAfter("pcount =").substringBefore(";").trim().toInt()
-
- for (i in 1..lastPage) {
- pages.add(Page(i, "$baseUrl/action/play/read?did=$did&sid=$sid&iid=$i", ""))
- }
- return pages
- }
-
- private val json: Json by injectLazy()
-
- override fun imageUrlParse(response: Response): String {
- return json.decodeFromString(response.body!!.string())["Code"]!!.jsonPrimitive.content
- }
-
- override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used")
-
- override fun getFilterList() = FilterList()
-}