From dc3d034109883baf7ab40b2b098147c7cda9462f Mon Sep 17 00:00:00 2001
From: Cuong-Tran <16017808+cuong-tran@users.noreply.github.com>
Date: Wed, 13 May 2026 12:55:15 +0700
Subject: [PATCH] Remove HBrowse and Tsumino sources from delegated sources
(#1622)
---
README.md | 1 -
app/src/main/AndroidManifest.xml | 31 ----
app/src/main/baseline-prof.txt | 2 -
.../kanade/presentation/manga/MangaScreen.kt | 10 --
.../tachiyomi/source/AndroidSourceManager.kt | 16 --
.../source/online/english/HBrowse.kt | 95 -----------
.../source/online/english/Tsumino.kt | 151 ------------------
app/src/main/java/exh/EXHMigrations.kt | 2 +-
app/src/main/java/exh/source/SourceHelper.kt | 4 -
.../adapters/HBrowseDescriptionAdapter.kt | 66 --------
.../adapters/TsuminoDescriptionAdapter.kt | 119 --------------
.../migrations/DelegateHBrowseMigration.kt | 29 ----
.../core/migration/migrations/Migrations.kt | 1 -
.../commonMain/moko-resources/ar/strings.xml | 2 +-
.../commonMain/moko-resources/as/strings.xml | 2 +-
.../moko-resources/base/strings.xml | 2 +-
.../commonMain/moko-resources/cs/strings.xml | 2 +-
.../commonMain/moko-resources/da/strings.xml | 2 +-
.../commonMain/moko-resources/de/strings.xml | 2 +-
.../commonMain/moko-resources/el/strings.xml | 2 +-
.../commonMain/moko-resources/es/strings.xml | 2 +-
.../commonMain/moko-resources/fi/strings.xml | 2 +-
.../commonMain/moko-resources/fil/strings.xml | 2 +-
.../commonMain/moko-resources/fr/strings.xml | 2 +-
.../commonMain/moko-resources/in/strings.xml | 2 +-
.../commonMain/moko-resources/it/strings.xml | 2 +-
.../commonMain/moko-resources/ja/strings.xml | 2 +-
.../commonMain/moko-resources/nl/strings.xml | 2 +-
.../commonMain/moko-resources/pl/strings.xml | 2 +-
.../moko-resources/pt-rBR/strings.xml | 2 +-
.../commonMain/moko-resources/pt/strings.xml | 2 +-
.../commonMain/moko-resources/ro/strings.xml | 2 +-
.../commonMain/moko-resources/ru/strings.xml | 2 +-
.../commonMain/moko-resources/sv/strings.xml | 2 +-
.../commonMain/moko-resources/tr/strings.xml | 2 +-
.../commonMain/moko-resources/uk/strings.xml | 2 +-
.../commonMain/moko-resources/vi/strings.xml | 2 +-
.../moko-resources/zh-rCN/strings.xml | 2 +-
.../moko-resources/zh-rTW/strings.xml | 2 +-
.../metadata/HBrowseSearchMetadata.kt | 76 ---------
.../metadata/TsuminoSearchMetadata.kt | 114 -------------
41 files changed, 27 insertions(+), 742 deletions(-)
delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/source/online/english/HBrowse.kt
delete mode 100644 app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt
delete mode 100644 app/src/main/java/exh/ui/metadata/adapters/HBrowseDescriptionAdapter.kt
delete mode 100644 app/src/main/java/exh/ui/metadata/adapters/TsuminoDescriptionAdapter.kt
delete mode 100644 app/src/main/java/mihon/core/migration/migrations/DelegateHBrowseMigration.kt
delete mode 100644 source-api/src/commonMain/kotlin/exh/metadata/metadata/HBrowseSearchMetadata.kt
delete mode 100644 source-api/src/commonMain/kotlin/exh/metadata/metadata/TsuminoSearchMetadata.kt
diff --git a/README.md b/README.md
index a22a2841f..2a72d0a27 100644
--- a/README.md
+++ b/README.md
@@ -121,7 +121,6 @@ Custom sources:
Additional features for some extensions, features include custom description, opening in app, batch add to library, and a bunch of other things based on the source:
* 8Muses (EroMuse)
-* HBrowse
* Mangadex
* NHentai
* Puruin
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9adfec8ee..bfe5a748a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -333,22 +333,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -363,21 +347,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/baseline-prof.txt b/app/src/main/baseline-prof.txt
index d6333726b..af3c28df3 100644
--- a/app/src/main/baseline-prof.txt
+++ b/app/src/main/baseline-prof.txt
@@ -16701,9 +16701,7 @@ HSPLeu/kanade/tachiyomi/source/online/all/MergedSource$special$$inlined$injectLa
PLeu/kanade/tachiyomi/source/online/all/MergedSource$special$$inlined$injectLazy$9;->()V
Leu/kanade/tachiyomi/source/online/all/NHentai;
Leu/kanade/tachiyomi/source/online/english/EightMuses;
-Leu/kanade/tachiyomi/source/online/english/HBrowse;
Leu/kanade/tachiyomi/source/online/english/Pururin;
-Leu/kanade/tachiyomi/source/online/english/Tsumino;
Leu/kanade/tachiyomi/ui/base/activity/BaseActivity;
HSPLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->()V
PLeu/kanade/tachiyomi/ui/base/activity/BaseActivity;->()V
diff --git a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt
index a0653977f..f8f5fc463 100644
--- a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt
@@ -94,9 +94,7 @@ import eu.kanade.tachiyomi.source.online.all.Lanraragi
import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.source.online.all.NHentai
import eu.kanade.tachiyomi.source.online.english.EightMuses
-import eu.kanade.tachiyomi.source.online.english.HBrowse
import eu.kanade.tachiyomi.source.online.english.Pururin
-import eu.kanade.tachiyomi.source.online.english.Tsumino
import eu.kanade.tachiyomi.ui.manga.ChapterList
import eu.kanade.tachiyomi.ui.manga.MangaScreenModel
import eu.kanade.tachiyomi.ui.manga.MergedMangaData
@@ -108,12 +106,10 @@ import exh.source.getMainSource
import exh.source.isEhBasedManga
import exh.ui.metadata.adapters.EHentaiDescription
import exh.ui.metadata.adapters.EightMusesDescription
-import exh.ui.metadata.adapters.HBrowseDescription
import exh.ui.metadata.adapters.LanraragiDescription
import exh.ui.metadata.adapters.MangaDexDescription
import exh.ui.metadata.adapters.NHentaiDescription
import exh.ui.metadata.adapters.PururinDescription
-import exh.ui.metadata.adapters.TsuminoDescription
import tachiyomi.domain.chapter.model.Chapter
import tachiyomi.domain.chapter.service.missingChaptersCount
import tachiyomi.domain.library.service.LibraryPreferences
@@ -1438,15 +1434,9 @@ fun metadataDescription(source: Source): MetadataDescriptionComposable? {
is EightMuses -> { state, openMetadataViewer, _ ->
EightMusesDescription(state, openMetadataViewer)
}
- is HBrowse -> { state, openMetadataViewer, _ ->
- HBrowseDescription(state, openMetadataViewer)
- }
is Pururin -> { state, openMetadataViewer, _ ->
PururinDescription(state, openMetadataViewer)
}
- is Tsumino -> { state, openMetadataViewer, _ ->
- TsuminoDescription(state, openMetadataViewer)
- }
is Lanraragi -> { state, openMetadataViewer, _ ->
LanraragiDescription(state, openMetadataViewer)
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt
index e5280bc02..52ea950c5 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/source/AndroidSourceManager.kt
@@ -13,9 +13,7 @@ import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.source.online.all.MergedSource
import eu.kanade.tachiyomi.source.online.all.NHentai
import eu.kanade.tachiyomi.source.online.english.EightMuses
-import eu.kanade.tachiyomi.source.online.english.HBrowse
import eu.kanade.tachiyomi.source.online.english.Pururin
-import eu.kanade.tachiyomi.source.online.english.Tsumino
import exh.log.xLogD
import exh.source.BlacklistedSources
import exh.source.DelegatedHttpSource
@@ -24,10 +22,8 @@ import exh.source.EIGHTMUSES_SOURCE_ID
import exh.source.EXHENTAI_EXT_SOURCES
import exh.source.EnhancedHttpSource
import exh.source.ExhPreferences
-import exh.source.HBROWSE_SOURCE_ID
import exh.source.MERGED_SOURCE_ID
import exh.source.PURURIN_SOURCE_ID
-import exh.source.TSUMINO_SOURCE_ID
import exh.source.handleSourceLibrary
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -282,12 +278,6 @@ class AndroidSourceManager(
"eu.kanade.tachiyomi.extension.en.pururin.Pururin",
Pururin::class,
),
- DelegatedSource(
- "Tsumino",
- TSUMINO_SOURCE_ID,
- "eu.kanade.tachiyomi.extension.en.tsumino.Tsumino",
- Tsumino::class,
- ),
DelegatedSource(
"MangaDex",
fillInSourceId,
@@ -295,12 +285,6 @@ class AndroidSourceManager(
MangaDex::class,
true,
),
- DelegatedSource(
- "HBrowse",
- HBROWSE_SOURCE_ID,
- "eu.kanade.tachiyomi.extension.en.hbrowse.HBrowse",
- HBrowse::class,
- ),
DelegatedSource(
"8Muses",
EIGHTMUSES_SOURCE_ID,
diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/HBrowse.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/HBrowse.kt
deleted file mode 100644
index 3712395ee..000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/HBrowse.kt
+++ /dev/null
@@ -1,95 +0,0 @@
-package eu.kanade.tachiyomi.source.online.english
-
-import android.content.Context
-import android.net.Uri
-import eu.kanade.tachiyomi.network.awaitSuccess
-import eu.kanade.tachiyomi.source.model.FilterList
-import eu.kanade.tachiyomi.source.model.MangasPage
-import eu.kanade.tachiyomi.source.model.SManga
-import eu.kanade.tachiyomi.source.online.HttpSource
-import eu.kanade.tachiyomi.source.online.MetadataSource
-import eu.kanade.tachiyomi.source.online.NamespaceSource
-import eu.kanade.tachiyomi.source.online.UrlImportableSource
-import eu.kanade.tachiyomi.util.asJsoup
-import exh.metadata.metadata.HBrowseSearchMetadata
-import exh.metadata.metadata.base.RaisedTag
-import exh.source.DelegatedHttpSource
-import exh.util.urlImportFetchSearchManga
-import exh.util.urlImportFetchSearchMangaSuspend
-import org.jsoup.nodes.Document
-import org.jsoup.nodes.Element
-
-class HBrowse(delegate: HttpSource, val context: Context) :
- DelegatedHttpSource(delegate),
- MetadataSource,
- UrlImportableSource,
- NamespaceSource {
- override val metaClass = HBrowseSearchMetadata::class
- override fun newMetaInstance() = HBrowseSearchMetadata()
- override val lang = "en"
-
- // Support direct URL importing
- @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getSearchManga"))
- override fun fetchSearchManga(page: Int, query: String, filters: FilterList) =
- urlImportFetchSearchManga(context, query) {
- @Suppress("DEPRECATION")
- super.fetchSearchManga(page, query, filters)
- }
-
- override suspend fun getSearchManga(page: Int, query: String, filters: FilterList): MangasPage {
- return urlImportFetchSearchMangaSuspend(context, query) {
- super.getSearchManga(page, query, filters)
- }
- }
-
- override suspend fun getMangaDetails(manga: SManga): SManga {
- val response = client.newCall(mangaDetailsRequest(manga)).awaitSuccess()
- return parseToManga(manga, response.asJsoup())
- }
-
- override suspend fun parseIntoMetadata(metadata: HBrowseSearchMetadata, input: Document) {
- val tables = parseIntoTables(input)
- with(metadata) {
- hbUrl = input.location().removePrefix("$baseUrl/thumbnails")
-
- hbId = hbUrl!!.removePrefix("/").substringBefore("/").toLong()
-
- tags.clear()
- ((tables[""] ?: error("")) + (tables["categories"] ?: error(""))).forEach { (k, v) ->
- when (val lowercaseNs = k.lowercase()) {
- "title" -> title = v.text()
- "length" -> length = v.text().substringBefore(" ").toInt()
- else -> {
- v.getElementsByTag("a").forEach {
- tags += RaisedTag(
- lowercaseNs,
- it.text(),
- HBrowseSearchMetadata.TAG_TYPE_DEFAULT,
- )
- }
- }
- }
- }
- }
- }
-
- private fun parseIntoTables(doc: Document): Map> {
- return doc.select("#main > .listTable").associate { ele ->
- val tableName = ele.previousElementSibling()?.text()?.lowercase().orEmpty()
- tableName to ele.select("tr")
- .filter { element -> element.childrenSize() > 1 }
- .associate {
- it.child(0).text() to it.child(1)
- }
- }
- }
-
- override val matchingHosts = listOf(
- "www.hbrowse.com",
- "hbrowse.com",
- )
-
- override suspend fun mapUrlToMangaUrl(uri: Uri): String? {
- return uri.pathSegments.firstOrNull()?.let { "/$it/c00001/" }
- }
-}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt
deleted file mode 100644
index b39aead96..000000000
--- a/app/src/main/java/eu/kanade/tachiyomi/source/online/english/Tsumino.kt
+++ /dev/null
@@ -1,151 +0,0 @@
-package eu.kanade.tachiyomi.source.online.english
-
-import android.content.Context
-import android.net.Uri
-import eu.kanade.tachiyomi.network.awaitSuccess
-import eu.kanade.tachiyomi.source.model.FilterList
-import eu.kanade.tachiyomi.source.model.MangasPage
-import eu.kanade.tachiyomi.source.model.SManga
-import eu.kanade.tachiyomi.source.online.HttpSource
-import eu.kanade.tachiyomi.source.online.MetadataSource
-import eu.kanade.tachiyomi.source.online.NamespaceSource
-import eu.kanade.tachiyomi.source.online.UrlImportableSource
-import eu.kanade.tachiyomi.util.asJsoup
-import exh.metadata.metadata.RaisedSearchMetadata.Companion.TAG_TYPE_VIRTUAL
-import exh.metadata.metadata.TsuminoSearchMetadata
-import exh.metadata.metadata.TsuminoSearchMetadata.Companion.TAG_TYPE_DEFAULT
-import exh.metadata.metadata.base.RaisedTag
-import exh.source.DelegatedHttpSource
-import exh.util.dropBlank
-import exh.util.trimAll
-import exh.util.urlImportFetchSearchManga
-import exh.util.urlImportFetchSearchMangaSuspend
-import org.jsoup.nodes.Document
-import rx.Observable
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-class Tsumino(delegate: HttpSource, val context: Context) :
- DelegatedHttpSource(delegate),
- MetadataSource,
- UrlImportableSource,
- NamespaceSource {
- override val metaClass = TsuminoSearchMetadata::class
- override fun newMetaInstance() = TsuminoSearchMetadata()
- override val lang = "en"
-
- // Support direct URL importing
- @Deprecated("Use the non-RxJava API instead", replaceWith = ReplaceWith("getSearchManga"))
- override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable =
- urlImportFetchSearchManga(context, query) {
- @Suppress("DEPRECATION")
- super.fetchSearchManga(page, query, filters)
- }
-
- override suspend fun getSearchManga(page: Int, query: String, filters: FilterList): MangasPage {
- return urlImportFetchSearchMangaSuspend(context, query) {
- super.getSearchManga(page, query, filters)
- }
- }
-
- override suspend fun mapUrlToMangaUrl(uri: Uri): String? {
- val lcFirstPathSegment = uri.pathSegments.firstOrNull()?.lowercase(Locale.ROOT) ?: return null
- if (lcFirstPathSegment != "read" && lcFirstPathSegment != "book" && lcFirstPathSegment != "entry") {
- return null
- }
- return "https://tsumino.com/Book/Info/${uri.lastPathSegment}"
- }
-
- override suspend fun getMangaDetails(manga: SManga): SManga {
- val response = client.newCall(mangaDetailsRequest(manga)).awaitSuccess()
- return parseToManga(manga, response.asJsoup())
- }
-
- override suspend fun parseIntoMetadata(metadata: TsuminoSearchMetadata, input: Document) {
- with(metadata) {
- tmId = TsuminoSearchMetadata.tmIdFromUrl(input.location())!!.toInt()
- tags.clear()
-
- input.select("meta[property=og:title]").firstOrNull()?.attr("content")?.let {
- title = it.trim()
- }
-
- input.getElementById("Artist")?.children()?.first()?.attr("data-define")?.trim()?.let { artistString ->
- artistString.split("|").trimAll().dropBlank().forEach {
- tags.add(RaisedTag("artist", it, TAG_TYPE_DEFAULT))
- }
- tags.add(RaisedTag("artist", artistString, TAG_TYPE_VIRTUAL))
- artist = artistString
- }
-
- input.getElementById("Uploader")?.children()?.first()?.text()?.trim()?.let {
- uploader = it
- }
-
- input.getElementById("Uploaded")?.text()?.let {
- uploadDate = TM_DATE_FORMAT.parse(it.trim())!!.time
- }
-
- input.getElementById("Pages")?.text()?.let {
- length = it.trim().toIntOrNull()
- }
-
- input.getElementById("Rating")?.text()?.let {
- ratingString = it.trim()
- val ratingString = ratingString
- if (!ratingString.isNullOrBlank()) {
- averageRating = RATING_FLOAT_REGEX.find(ratingString)?.groups?.get(1)?.value?.toFloatOrNull()
- userRatings = RATING_USERS_REGEX.find(ratingString)?.groups?.get(1)?.value?.toLongOrNull()
- favorites = RATING_FAVORITES_REGEX.find(ratingString)?.groups?.get(1)?.value?.toLongOrNull()
- }
- }
-
- input.getElementById("Category")?.children()?.first()?.attr("data-define")?.let {
- category = it.trim()
- tags.add(RaisedTag("genre", it, TAG_TYPE_VIRTUAL))
- }
-
- input.getElementById("Collection")?.children()?.first()?.attr("data-define")?.let {
- collection = it.trim()
- tags.add(RaisedTag("collection", it, TAG_TYPE_DEFAULT))
- }
-
- input.getElementById("Group")?.children()?.first()?.attr("data-define")?.let {
- group = it.trim()
- tags.add(RaisedTag("group", it, TAG_TYPE_DEFAULT))
- }
-
- parody = input.getElementById("Parody")?.children()?.map {
- val entry = it.attr("data-define").trim()
- tags.add(RaisedTag("parody", entry, TAG_TYPE_DEFAULT))
- entry
- }.orEmpty()
-
- character = input.getElementById("Character")?.children()?.map {
- val entry = it.attr("data-define").trim()
- tags.add(RaisedTag("character", entry, TAG_TYPE_DEFAULT))
- entry
- }.orEmpty()
-
- input.getElementById("Tag")?.children()?.let { tagElements ->
- tags.addAll(
- tagElements.map {
- RaisedTag("tags", it.attr("data-define").trim(), TAG_TYPE_DEFAULT)
- },
- )
- }
- }
- }
-
- override val matchingHosts = listOf(
- "www.tsumino.com",
- "tsumino.com",
- )
-
- companion object {
- val TM_DATE_FORMAT = SimpleDateFormat("yyyy MMM dd", Locale.US)
- val RATING_FLOAT_REGEX = "([0-9].*) \\(".toRegex()
- val RATING_USERS_REGEX = "\\(([0-9].*) users".toRegex()
- val RATING_FAVORITES_REGEX = "/ ([0-9].*) favs".toRegex()
- }
-}
diff --git a/app/src/main/java/exh/EXHMigrations.kt b/app/src/main/java/exh/EXHMigrations.kt
index ffe00517a..2a662129c 100644
--- a/app/src/main/java/exh/EXHMigrations.kt
+++ b/app/src/main/java/exh/EXHMigrations.kt
@@ -177,7 +177,7 @@ object EXHMigrations {
out += "#" + uri.fragment
}
out
- } catch (e: URISyntaxException) {
+ } catch (_: URISyntaxException) {
orig
}
}
diff --git a/app/src/main/java/exh/source/SourceHelper.kt b/app/src/main/java/exh/source/SourceHelper.kt
index ca5c6f5b6..ea279e8a6 100644
--- a/app/src/main/java/exh/source/SourceHelper.kt
+++ b/app/src/main/java/exh/source/SourceHelper.kt
@@ -5,9 +5,7 @@ import eu.kanade.tachiyomi.source.online.all.Lanraragi
import eu.kanade.tachiyomi.source.online.all.MangaDex
import eu.kanade.tachiyomi.source.online.all.NHentai
import eu.kanade.tachiyomi.source.online.english.EightMuses
-import eu.kanade.tachiyomi.source.online.english.HBrowse
import eu.kanade.tachiyomi.source.online.english.Pururin
-import eu.kanade.tachiyomi.source.online.english.Tsumino
/**
* Source helpers
@@ -16,8 +14,6 @@ import eu.kanade.tachiyomi.source.online.english.Tsumino
private val DELEGATED_METADATA_SOURCES by lazy {
listOf(
Pururin::class,
- Tsumino::class,
- HBrowse::class,
EightMuses::class,
NHentai::class,
Lanraragi::class,
diff --git a/app/src/main/java/exh/ui/metadata/adapters/HBrowseDescriptionAdapter.kt b/app/src/main/java/exh/ui/metadata/adapters/HBrowseDescriptionAdapter.kt
deleted file mode 100644
index 1726f5c67..000000000
--- a/app/src/main/java/exh/ui/metadata/adapters/HBrowseDescriptionAdapter.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-package exh.ui.metadata.adapters
-
-import android.view.LayoutInflater
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.material3.LocalContentColor
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.toArgb
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.viewinterop.AndroidView
-import eu.kanade.presentation.theme.colorscheme.AndroidViewColorScheme
-import eu.kanade.tachiyomi.R
-import eu.kanade.tachiyomi.databinding.DescriptionAdapterHbBinding
-import eu.kanade.tachiyomi.ui.manga.MangaScreenModel.State
-import eu.kanade.tachiyomi.util.system.copyToClipboard
-import eu.kanade.tachiyomi.util.system.dpToPx
-import exh.metadata.metadata.HBrowseSearchMetadata
-import exh.ui.metadata.adapters.MetadataUIUtil.bindDrawable
-import tachiyomi.core.common.i18n.pluralStringResource
-import tachiyomi.core.common.i18n.stringResource
-import tachiyomi.i18n.sy.SYMR
-
-@Composable
-fun HBrowseDescription(state: State.Success, openMetadataViewer: () -> Unit) {
- val context = LocalContext.current
- // KMK -->
- val colorScheme = AndroidViewColorScheme(MaterialTheme.colorScheme)
- val iconColor = colorScheme.iconColor
- val textColor = LocalContentColor.current.toArgb()
- // KMK <--
- AndroidView(
- modifier = Modifier.fillMaxWidth(),
- factory = { factoryContext ->
- DescriptionAdapterHbBinding.inflate(LayoutInflater.from(factoryContext)).root
- },
- update = {
- val meta = state.meta
- if (meta == null || meta !is HBrowseSearchMetadata) return@AndroidView
- val binding = DescriptionAdapterHbBinding.bind(it)
-
- binding.pages.text =
- context.pluralStringResource(SYMR.plurals.num_pages, meta.length ?: 0, meta.length ?: 0)
- // KMK -->
- binding.pages.bindDrawable(context, R.drawable.ic_baseline_menu_book_24, iconColor, 4.dpToPx)
- binding.pages.setTextColor(textColor)
-
- binding.moreInfo.bindDrawable(context, R.drawable.ic_info_24dp, iconColor)
- binding.moreInfo.text = context.stringResource(SYMR.strings.more_info)
- binding.moreInfo.setTextColor(iconColor)
- // KMK <--
-
- binding.pages.setOnLongClickListener {
- context.copyToClipboard(
- binding.pages.text.toString(),
- binding.pages.text.toString(),
- )
- true
- }
-
- binding.moreInfo.setOnClickListener {
- openMetadataViewer()
- }
- },
- )
-}
diff --git a/app/src/main/java/exh/ui/metadata/adapters/TsuminoDescriptionAdapter.kt b/app/src/main/java/exh/ui/metadata/adapters/TsuminoDescriptionAdapter.kt
deleted file mode 100644
index ca2eed78d..000000000
--- a/app/src/main/java/exh/ui/metadata/adapters/TsuminoDescriptionAdapter.kt
+++ /dev/null
@@ -1,119 +0,0 @@
-package exh.ui.metadata.adapters
-
-import android.annotation.SuppressLint
-import android.content.res.ColorStateList
-import android.view.LayoutInflater
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.material3.LocalContentColor
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.toArgb
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.viewinterop.AndroidView
-import eu.kanade.presentation.theme.colorscheme.AndroidViewColorScheme
-import eu.kanade.tachiyomi.R
-import eu.kanade.tachiyomi.databinding.DescriptionAdapterTsBinding
-import eu.kanade.tachiyomi.ui.manga.MangaScreenModel.State
-import eu.kanade.tachiyomi.util.system.copyToClipboard
-import eu.kanade.tachiyomi.util.system.dpToPx
-import exh.metadata.metadata.TsuminoSearchMetadata
-import exh.ui.metadata.adapters.MetadataUIUtil.bindDrawable
-import exh.util.SourceTagsUtil.genreTextColor
-import tachiyomi.core.common.i18n.pluralStringResource
-import tachiyomi.core.common.i18n.stringResource
-import tachiyomi.i18n.MR
-import tachiyomi.i18n.sy.SYMR
-import java.util.Date
-import kotlin.math.round
-
-@Composable
-fun TsuminoDescription(state: State.Success, openMetadataViewer: () -> Unit) {
- val context = LocalContext.current
- // KMK -->
- val colorScheme = AndroidViewColorScheme(MaterialTheme.colorScheme)
- val iconColor = colorScheme.iconColor
- val ratingBarColor = colorScheme.ratingBarColor
- val ratingBarSecondaryColor = colorScheme.ratingBarSecondaryColor
- val textColor = LocalContentColor.current.toArgb()
- // KMK <--
- AndroidView(
- modifier = Modifier.fillMaxWidth(),
- factory = { factoryContext ->
- DescriptionAdapterTsBinding.inflate(LayoutInflater.from(factoryContext)).root
- },
- update = {
- val meta = state.meta
- if (meta == null || meta !is TsuminoSearchMetadata) return@AndroidView
- val binding = DescriptionAdapterTsBinding.bind(it)
-
- binding.genre.text = meta.category?.let { genre -> MetadataUIUtil.getGenreAndColour(context, genre) }
- ?.let { (genre, name) ->
- binding.genre.setBackgroundColor(genre.color)
- // KMK -->
- binding.genre.setTextColor(genreTextColor(genre))
- // KMK <--
- name
- } ?: meta.category ?: context.stringResource(MR.strings.unknown)
-
- binding.favorites.text = (meta.favorites ?: 0).toString()
- // KMK -->
- binding.favorites.bindDrawable(context, R.drawable.ic_book_24dp, iconColor)
- binding.favorites.setTextColor(textColor)
- // KMK <--
-
- binding.whenPosted.text = TsuminoSearchMetadata.TSUMINO_DATE_FORMAT.format(Date(meta.uploadDate ?: 0))
- // KMK -->
- binding.whenPosted.setTextColor(textColor)
- // KMK <--
-
- binding.uploader.text = meta.uploader ?: context.stringResource(MR.strings.unknown)
- // KMK -->
- binding.uploader.setTextColor(textColor)
- // KMK <--
-
- binding.pages.text =
- context.pluralStringResource(SYMR.plurals.num_pages, meta.length ?: 0, meta.length ?: 0)
- // KMK -->
- binding.pages.bindDrawable(context, R.drawable.ic_baseline_menu_book_24, iconColor, 4.dpToPx)
- binding.pages.setTextColor(textColor)
- // KMK <--
-
- binding.ratingBar.rating = meta.averageRating ?: 0F
- @SuppressLint("SetTextI18n")
- binding.rating.text =
- (round((meta.averageRating ?: 0F) * 100.0) / 100.0).toString() + " - " +
- MetadataUIUtil.getRatingString(context, meta.averageRating?.times(2))
- // KMK -->
- binding.ratingBar.supportProgressTintList = ColorStateList.valueOf(ratingBarColor)
- binding.ratingBar.supportSecondaryProgressTintList = ColorStateList.valueOf(ratingBarSecondaryColor)
- binding.rating.setTextColor(textColor)
-
- binding.moreInfo.bindDrawable(context, R.drawable.ic_info_24dp, iconColor)
- binding.moreInfo.text = context.stringResource(SYMR.strings.more_info)
- binding.moreInfo.setTextColor(iconColor)
- // KMK <--
-
- listOf(
- binding.favorites,
- binding.genre,
- binding.pages,
- binding.rating,
- binding.uploader,
- binding.whenPosted,
- ).forEach { textView ->
- textView.setOnLongClickListener {
- context.copyToClipboard(
- textView.text.toString(),
- textView.text.toString(),
- )
- true
- }
- }
-
- binding.moreInfo.setOnClickListener {
- openMetadataViewer()
- }
- },
- )
-}
diff --git a/app/src/main/java/mihon/core/migration/migrations/DelegateHBrowseMigration.kt b/app/src/main/java/mihon/core/migration/migrations/DelegateHBrowseMigration.kt
deleted file mode 100644
index 2fd77047b..000000000
--- a/app/src/main/java/mihon/core/migration/migrations/DelegateHBrowseMigration.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package mihon.core.migration.migrations
-
-import eu.kanade.domain.manga.interactor.UpdateManga
-import exh.source.HBROWSE_OLD_ID
-import exh.source.HBROWSE_SOURCE_ID
-import mihon.core.migration.MigrateUtils
-import mihon.core.migration.Migration
-import mihon.core.migration.MigrationContext
-import tachiyomi.core.common.util.lang.withIOContext
-import tachiyomi.domain.manga.interactor.GetMangaBySource
-import tachiyomi.domain.manga.model.MangaUpdate
-
-class DelegateHBrowseMigration : Migration {
- override val version: Float = 4f
-
- override suspend fun invoke(migrationContext: MigrationContext): Boolean = withIOContext {
- val getMangaBySource = migrationContext.get() ?: return@withIOContext false
- val updateManga = migrationContext.get() ?: return@withIOContext false
- MigrateUtils.updateSourceId(migrationContext, HBROWSE_SOURCE_ID, HBROWSE_OLD_ID)
-
- // Migrate BHrowse URLs
- val hBrowseManga = getMangaBySource.await(HBROWSE_SOURCE_ID)
- val mangaUpdates = hBrowseManga.map {
- MangaUpdate(it.id, url = it.url + "/c00001/")
- }
- updateManga.awaitAll(mangaUpdates)
- return@withIOContext true
- }
-}
diff --git a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt
index 3726896cc..c2829db19 100644
--- a/app/src/main/java/mihon/core/migration/migrations/Migrations.kt
+++ b/app/src/main/java/mihon/core/migration/migrations/Migrations.kt
@@ -8,7 +8,6 @@ val migrations: List
SetupLibraryUpdateMigration(),
SetupEHentaiUpdateMigration(),
SetupSyncDataMigration(),
- // DelegateHBrowseMigration(),
// DelegateNHentaiMigration(),
// MergedMangaRewriteMigration(),
// LogoutFromMALMigration(),
diff --git a/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml b/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml
index 140ddc34d..6667dd4c8 100644
--- a/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/ar/strings.xml
@@ -121,7 +121,7 @@
نسخ الصفحة المدمجة إلى الحافظة
عدم التحميل التلقائي للتحديث
إزالة العناصر الأصلية من المكتبة؟
- الدعم: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ الدعم: MangaDex, E-H, ExH, nH, 8Muses
فتح مجلد
تحديث
مانجا غير مكتملة
diff --git a/i18n-kmk/src/commonMain/moko-resources/as/strings.xml b/i18n-kmk/src/commonMain/moko-resources/as/strings.xml
index 5e73506cb..143ee9d61 100644
--- a/i18n-kmk/src/commonMain/moko-resources/as/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/as/strings.xml
@@ -136,7 +136,7 @@
বৰ্তমান: %1$s
আপডেট কৰিবলগীয়া
মোক স্পনছৰ কৰক
- সমৰ্থন: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ সমৰ্থন: MangaDex, E-H, ExH, nH, 8Muses
ডিস্ক’ৰ্ড ৰিচ প্ৰেজেন্স
সক্ৰিয় একাউণ্ট
সংযোগ
diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
index 4bfb09902..deea67a59 100644
--- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
@@ -192,7 +192,7 @@
Failed to schedule automatic backup: %s
To be updated
Sponsor Me
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
Special Services
Connections
diff --git a/i18n-kmk/src/commonMain/moko-resources/cs/strings.xml b/i18n-kmk/src/commonMain/moko-resources/cs/strings.xml
index 769f155a4..5025a613f 100644
--- a/i18n-kmk/src/commonMain/moko-resources/cs/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/cs/strings.xml
@@ -115,7 +115,7 @@
Kopírovat kombinovanou stránku do schránky
Automaticky nestahovat aktualizaci
Odstranit původní položky z knihovny?
- Podpora: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Podpora: MangaDex, E-H, ExH, nH, 8Muses
Bubblegum
Discord účty
Vlastní zpráva, která bude zobrazena na Discordu
diff --git a/i18n-kmk/src/commonMain/moko-resources/da/strings.xml b/i18n-kmk/src/commonMain/moko-resources/da/strings.xml
index 68a9b49e7..f3faca7f9 100644
--- a/i18n-kmk/src/commonMain/moko-resources/da/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/da/strings.xml
@@ -115,7 +115,7 @@
Kopier kombineret side til udklipsholder
Download ikke automatisk opdatering
Fjern originale indgange fra biblioteket?
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
Sapphire
Særlige Tjenester
Indgange i inkluderede kategorier vil ikke blive vist i Discord
diff --git a/i18n-kmk/src/commonMain/moko-resources/de/strings.xml b/i18n-kmk/src/commonMain/moko-resources/de/strings.xml
index 455b90577..0deef1353 100644
--- a/i18n-kmk/src/commonMain/moko-resources/de/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/de/strings.xml
@@ -116,7 +116,7 @@
Kombinierte Seite in Zwischenablage kopieren
Update nicht automatisch herunterladen
Originale Einträge aus der Bibliothek entfernen?
- Unterstützung: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Unterstützung: MangaDex, E-H, ExH, nH, 8Muses
Panorama-Cover Flow
Untergang
Paletten-Personalisierer
diff --git a/i18n-kmk/src/commonMain/moko-resources/el/strings.xml b/i18n-kmk/src/commonMain/moko-resources/el/strings.xml
index 3344b16ed..e87e186c2 100644
--- a/i18n-kmk/src/commonMain/moko-resources/el/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/el/strings.xml
@@ -116,7 +116,7 @@
Αντιγραφή συνδυασμένης σελίδας στο πρόχειρο
Να μην γίνεται αυτόματη λήψη ενημέρωσης
Αφαιρέστε τις αρχικές καταχωρήσεις από τη βιβλιοθήκη?
- Υποστήριξη: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Υποστήριξη: MangaDex, E-H, ExH, nH, 8Muses
Sapphire
Ειδικές Υπηρεσίες
Discord
diff --git a/i18n-kmk/src/commonMain/moko-resources/es/strings.xml b/i18n-kmk/src/commonMain/moko-resources/es/strings.xml
index 96c6b3dd2..ba2e37e2a 100644
--- a/i18n-kmk/src/commonMain/moko-resources/es/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/es/strings.xml
@@ -116,7 +116,7 @@
Copiar página combinada al portapapeles
No descargar actualización automática
¿Eliminar entradas originales de la biblioteca?
- Soporte: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Soporte: MangaDex, E-H, ExH, nH, 8Muses
Abrir carpeta
Actualizar
Fallo al abrir la carpeta
diff --git a/i18n-kmk/src/commonMain/moko-resources/fi/strings.xml b/i18n-kmk/src/commonMain/moko-resources/fi/strings.xml
index 34ce68ff0..96fc35ae0 100644
--- a/i18n-kmk/src/commonMain/moko-resources/fi/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/fi/strings.xml
@@ -114,7 +114,7 @@
Kopioi yhdistetty sivu leikepöydälle
Älä lataa automaattisesti päivitystä
Poistetaanko alkuperäiset merkinnät kirjastosta?
- Tuki: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Tuki: MangaDex, E-H, ExH, nH, 8Muses
Discord Rich Presence
Kirjautuminen epäonnistui
Sapphire
diff --git a/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml b/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml
index 4a1623ca0..476858f3a 100644
--- a/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/fil/strings.xml
@@ -97,7 +97,7 @@
Kopyahin ang pinagsamang pahina sa clipboard
Huwag awtomatikong i-download ang update
Tanggalin ang orihinal na mga tala galing sa aklatan?
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
Fruit Salad
Makulay
Masining
diff --git a/i18n-kmk/src/commonMain/moko-resources/fr/strings.xml b/i18n-kmk/src/commonMain/moko-resources/fr/strings.xml
index ed23d640b..105a2bb82 100644
--- a/i18n-kmk/src/commonMain/moko-resources/fr/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/fr/strings.xml
@@ -114,7 +114,7 @@
Copier la page combinée dans le presse-papiers
Ne pas télécharger automatiquement la mise à jour
Supprimer les entrées originales de la bibliothèque ?
- Compatible : MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Compatible : MangaDex, E-H, ExH, nH, 8Muses
Tonal
Monochrome
Doom
diff --git a/i18n-kmk/src/commonMain/moko-resources/in/strings.xml b/i18n-kmk/src/commonMain/moko-resources/in/strings.xml
index a0e84b533..065de3308 100644
--- a/i18n-kmk/src/commonMain/moko-resources/in/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/in/strings.xml
@@ -68,7 +68,7 @@
Release page
Don\'t auto download update
Hapus entri asli dari perpustakaan?
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
Sembunyikan
Tampilkan kategori tersembunyi
Penutup panorama
diff --git a/i18n-kmk/src/commonMain/moko-resources/it/strings.xml b/i18n-kmk/src/commonMain/moko-resources/it/strings.xml
index 57afd2300..2b621b810 100644
--- a/i18n-kmk/src/commonMain/moko-resources/it/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/it/strings.xml
@@ -116,7 +116,7 @@
Copia la pagina combinata negli appunti
Non scaricare automaticamente l\'aggiornamento
Rimuovere le voci originali dalla libreria?
- Supporto: MangaDex, E-H, ExH, nH, 8Muse, Tsumino
+ Supporto: MangaDex, E-H, ExH, nH, 8Muse
Patagonia
Pop
Superare
diff --git a/i18n-kmk/src/commonMain/moko-resources/ja/strings.xml b/i18n-kmk/src/commonMain/moko-resources/ja/strings.xml
index c96bb7181..048c4c69f 100644
--- a/i18n-kmk/src/commonMain/moko-resources/ja/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/ja/strings.xml
@@ -116,7 +116,7 @@
結合ページをクリップボードにコピー
更新プログラムを自動的にダウンロードしない
ライブラリから元の作品を削除しますか?
- サポート: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ サポート: MangaDex, E-H, ExH, nH, 8Muses
フォルダーを開く
フォルダーを開けませんでした
16:9
diff --git a/i18n-kmk/src/commonMain/moko-resources/nl/strings.xml b/i18n-kmk/src/commonMain/moko-resources/nl/strings.xml
index 09dbd6810..f78ed82af 100644
--- a/i18n-kmk/src/commonMain/moko-resources/nl/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/nl/strings.xml
@@ -115,7 +115,7 @@
Kopieer gecombineerde pagina naar klembord
Update niet automatisch downloaden
Originele invoergegevens uit bibliotheek verwijderen?
- Ondersteuning: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Ondersteuning: MangaDex, E-H, ExH, nH, 8Muses
Gebruikersnaam
Map openen
Updaten
diff --git a/i18n-kmk/src/commonMain/moko-resources/pl/strings.xml b/i18n-kmk/src/commonMain/moko-resources/pl/strings.xml
index 651dc7570..6afdebea4 100644
--- a/i18n-kmk/src/commonMain/moko-resources/pl/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/pl/strings.xml
@@ -114,7 +114,7 @@
Kopiuj połączoną stronę do schowka
Nie pobieraj automatycznie aktualizacji
Usunąć oryginalne wpisy z biblioteki?
- Wsparcie: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Wsparcie: MangaDex, E-H, ExH, nH, 8Muses
Fatum
Ręczna instalacja
Mokka
diff --git a/i18n-kmk/src/commonMain/moko-resources/pt-rBR/strings.xml b/i18n-kmk/src/commonMain/moko-resources/pt-rBR/strings.xml
index 6e495609e..6061a4837 100644
--- a/i18n-kmk/src/commonMain/moko-resources/pt-rBR/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/pt-rBR/strings.xml
@@ -118,7 +118,7 @@
Copiar combinação de páginas para a área de transferência
Não baixar a atualização automaticamente
Remover entradas originais da biblioteca?
- Suporte: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Suporte: MangaDex, E-H, ExH, nH, 8Muses
Atualizar
16:9
20:9
diff --git a/i18n-kmk/src/commonMain/moko-resources/pt/strings.xml b/i18n-kmk/src/commonMain/moko-resources/pt/strings.xml
index 21a6c4914..b66038182 100644
--- a/i18n-kmk/src/commonMain/moko-resources/pt/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/pt/strings.xml
@@ -118,7 +118,7 @@
Copiar página combinada para área de transferência
Não baixar a atualização automaticamente
Remover entradas originais da biblioteca?
- Suporte: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Suporte: MangaDex, E-H, ExH, nH, 8Muses
Instalação manual
Abrir pasta
Limpar mangá
diff --git a/i18n-kmk/src/commonMain/moko-resources/ro/strings.xml b/i18n-kmk/src/commonMain/moko-resources/ro/strings.xml
index 3ff59cdfa..1291a4f62 100644
--- a/i18n-kmk/src/commonMain/moko-resources/ro/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/ro/strings.xml
@@ -115,7 +115,7 @@
Copiază pagina combinată în clipboard
Nu descărca automat
Eliminaţi intrările originale din bibliotecă?
- Suport: MangaDex, E-H, ExH, nH, 8Muse, Tsumino
+ Suport: MangaDex, E-H, ExH, nH, 8Muse
Servicii speciale
Conexiuni
Cont activ
diff --git a/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml b/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml
index 86bbcd3c5..e3b8fb9a4 100644
--- a/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/ru/strings.xml
@@ -119,7 +119,7 @@
Скопировать объединенную страницу в буфер обмена
Не скачивать автоматически
Удалить оригинальные тайтлы из библиотеки?
- Поддержка: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Поддержка: MangaDex, E-H, ExH, nH, 8Muses
Выровнять обложку к верху
Показать обложку выровненной к вершине рядом с информацией о манге
Дум
diff --git a/i18n-kmk/src/commonMain/moko-resources/sv/strings.xml b/i18n-kmk/src/commonMain/moko-resources/sv/strings.xml
index debbcf93c..bebcf5ce5 100644
--- a/i18n-kmk/src/commonMain/moko-resources/sv/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/sv/strings.xml
@@ -116,7 +116,7 @@
Kopiera kombinerad sida till urklipp
Uppdatera inte automatisk nedladdning
Ta bort ursprungliga poster från biblioteket?
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
Manuell installation
Rullar igenom
Ringer runt med
diff --git a/i18n-kmk/src/commonMain/moko-resources/tr/strings.xml b/i18n-kmk/src/commonMain/moko-resources/tr/strings.xml
index 044489c5e..3a2ed7033 100644
--- a/i18n-kmk/src/commonMain/moko-resources/tr/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/tr/strings.xml
@@ -100,7 +100,7 @@
Release page
Otomatik indirmeyi devre dışı bırak
Remove original entries from library?
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
Uygulamayı otomatik güncelle
Kütüphane güncelleme hataları (%d)
Kütüphane güncelleme hataları
diff --git a/i18n-kmk/src/commonMain/moko-resources/uk/strings.xml b/i18n-kmk/src/commonMain/moko-resources/uk/strings.xml
index 18458cd20..dafaf0bfe 100644
--- a/i18n-kmk/src/commonMain/moko-resources/uk/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/uk/strings.xml
@@ -118,7 +118,7 @@
Скопіювати комбіновану сторінку в буфер обміну
Не завантажувати автоматично оновлення
Видалити оригінальні записи з бібліотеки?
- Підтримка: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Підтримка: MangaDex, E-H, ExH, nH, 8Muses
Відкрити папку
Очистити мангу
Оновити
diff --git a/i18n-kmk/src/commonMain/moko-resources/vi/strings.xml b/i18n-kmk/src/commonMain/moko-resources/vi/strings.xml
index 83b4403ec..d1b6dcb78 100644
--- a/i18n-kmk/src/commonMain/moko-resources/vi/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/vi/strings.xml
@@ -122,7 +122,7 @@
Sao chép trang đã kết hợp vào clipboard
Không tự động tải xuống bản cập nhật
Xóa các truyện gốc ra khỏi thư viện?
- Hỗ trợ: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Hỗ trợ: MangaDex, E-H, ExH, nH, 8Muses
Cài đặt thủ công
Mở thư mục
Xóa manga
diff --git a/i18n-kmk/src/commonMain/moko-resources/zh-rCN/strings.xml b/i18n-kmk/src/commonMain/moko-resources/zh-rCN/strings.xml
index aeec5a62e..777c38ac8 100644
--- a/i18n-kmk/src/commonMain/moko-resources/zh-rCN/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/zh-rCN/strings.xml
@@ -122,7 +122,7 @@
复制合并页面到剪贴板
不自动下载更新
从书架删除原始条目?
- Support: MangaDex, E-H, ExH, nH, 8Muses, Tsumino
+ Support: MangaDex, E-H, ExH, nH, 8Muses
打开文件夹
打开文件夹时出错
手动安装
diff --git a/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml b/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml
index 53fbe39e0..928b26e66 100644
--- a/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/zh-rTW/strings.xml
@@ -122,7 +122,7 @@
將雙頁複製到剪貼簿
不自動下載更新
要從書櫃移除原始條目嗎?
- 支援:MangaDex、E-H、ExH、nH、8Muses、Tsumino
+ 支援:MangaDex、E-H、ExH、nH、8Muses
手動下載
將封面與頂部對齊
將封面與頂部對齊並顯示漫畫資訊
diff --git a/source-api/src/commonMain/kotlin/exh/metadata/metadata/HBrowseSearchMetadata.kt b/source-api/src/commonMain/kotlin/exh/metadata/metadata/HBrowseSearchMetadata.kt
deleted file mode 100644
index 37fcb3886..000000000
--- a/source-api/src/commonMain/kotlin/exh/metadata/metadata/HBrowseSearchMetadata.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-package exh.metadata.metadata
-
-import android.content.Context
-import eu.kanade.tachiyomi.source.model.SManga
-import eu.kanade.tachiyomi.source.model.copy
-import kotlinx.serialization.Serializable
-import tachiyomi.core.common.i18n.stringResource
-import tachiyomi.i18n.MR
-import tachiyomi.i18n.sy.SYMR
-
-@Serializable
-class HBrowseSearchMetadata : RaisedSearchMetadata() {
- var hbId: Long? = null
-
- var hbUrl: String? = null
-
- var thumbnail: String? = null
-
- var title: String? by titleDelegate(TITLE_TYPE_MAIN)
-
- // Length in pages
- var length: Int? = null
-
- override fun createMangaInfo(manga: SManga): SManga {
- val key = hbUrl
-
- val title = title
-
- // Guess thumbnail URL if manga does not have thumbnail URL
- val cover = if (manga.thumbnail_url.isNullOrBlank()) {
- guessThumbnailUrl(hbId.toString())
- } else {
- null
- }
-
- val artist = tags.ofNamespace(ARTIST_NAMESPACE).joinToString { it.name }
-
- val genres = tagsToGenreString()
-
- val description = null
-
- return manga.copy(
- url = key ?: manga.url,
- title = title ?: manga.title,
- thumbnail_url = cover ?: manga.thumbnail_url,
- artist = artist,
- genre = genres,
- description = description,
- )
- }
-
- override fun getExtraInfoPairs(context: Context): List> {
- return with(context) {
- listOfNotNull(
- getItem(hbId) { stringResource(SYMR.strings.id) },
- getItem(hbUrl) { stringResource(SYMR.strings.url) },
- getItem(thumbnail) { stringResource(SYMR.strings.thumbnail_url) },
- getItem(title) { stringResource(MR.strings.title) },
- getItem(length) { stringResource(SYMR.strings.page_count) },
- )
- }
- }
-
- companion object {
- const val BASE_URL = "https://www.hbrowse.com"
-
- private const val TITLE_TYPE_MAIN = 0
-
- const val TAG_TYPE_DEFAULT = 0
- const val ARTIST_NAMESPACE = "artist"
-
- fun guessThumbnailUrl(hbid: String): String {
- return "$BASE_URL/thumbnails/${hbid}_1.jpg#guessed"
- }
- }
-}
diff --git a/source-api/src/commonMain/kotlin/exh/metadata/metadata/TsuminoSearchMetadata.kt b/source-api/src/commonMain/kotlin/exh/metadata/metadata/TsuminoSearchMetadata.kt
deleted file mode 100644
index dc9a640b0..000000000
--- a/source-api/src/commonMain/kotlin/exh/metadata/metadata/TsuminoSearchMetadata.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-package exh.metadata.metadata
-
-import android.content.Context
-import androidx.core.net.toUri
-import eu.kanade.tachiyomi.source.model.SManga
-import eu.kanade.tachiyomi.source.model.copy
-import exh.metadata.MetadataUtil
-import exh.util.nullIfEmpty
-import kotlinx.serialization.Serializable
-import tachiyomi.core.common.i18n.stringResource
-import tachiyomi.i18n.MR
-import tachiyomi.i18n.sy.SYMR
-import java.text.SimpleDateFormat
-import java.time.Instant
-import java.time.ZoneId
-import java.time.ZonedDateTime
-import java.util.Locale
-
-@Serializable
-class TsuminoSearchMetadata : RaisedSearchMetadata() {
- var tmId: Int? = null
-
- var title by titleDelegate(TITLE_TYPE_MAIN)
-
- var artist: String? = null
-
- var uploadDate: Long? = null
-
- var length: Int? = null
-
- var ratingString: String? = null
-
- var averageRating: Float? = null
-
- var userRatings: Long? = null
-
- var favorites: Long? = null
-
- var category: String? = null
-
- var collection: String? = null
-
- var group: String? = null
-
- var parody: List = emptyList()
-
- var character: List = emptyList()
-
- override fun createMangaInfo(manga: SManga): SManga {
- val title = title
- val cover = tmId?.let { BASE_URL.replace("www", "content") + thumbUrlFromId(it.toString()) }
-
- val artist = artist
-
- val status = SManga.UNKNOWN
-
- // Copy tags -> genres
- val genres = tagsToGenreString()
-
- val description = null
-
- return manga.copy(
- title = title ?: manga.title,
- thumbnail_url = cover ?: manga.thumbnail_url,
- artist = artist ?: manga.artist,
- status = status,
- genre = genres,
- description = description,
- )
- }
-
- override fun getExtraInfoPairs(context: Context): List> {
- return with(context) {
- listOfNotNull(
- getItem(tmId) { stringResource(SYMR.strings.id) },
- getItem(title) { stringResource(MR.strings.title) },
- getItem(uploader) { stringResource(SYMR.strings.uploader) },
- getItem(
- uploadDate,
- {
- MetadataUtil.EX_DATE_FORMAT
- .format(ZonedDateTime.ofInstant(Instant.ofEpochMilli(it), ZoneId.systemDefault()))
- },
- ) {
- stringResource(SYMR.strings.date_posted)
- },
- getItem(length) { stringResource(SYMR.strings.page_count) },
- getItem(ratingString) { stringResource(SYMR.strings.rating_string) },
- getItem(averageRating) { stringResource(SYMR.strings.average_rating) },
- getItem(userRatings) { stringResource(SYMR.strings.total_ratings) },
- getItem(favorites) { stringResource(SYMR.strings.total_favorites) },
- getItem(category) { stringResource(SYMR.strings.genre) },
- getItem(collection) { stringResource(SYMR.strings.collection) },
- getItem(group) { stringResource(SYMR.strings.group) },
- getItem(parody.nullIfEmpty(), { it.joinToString() }) { stringResource(SYMR.strings.parodies) },
- getItem(character.nullIfEmpty(), { it.joinToString() }) { stringResource(SYMR.strings.characters) },
- )
- }
- }
-
- companion object {
- private const val TITLE_TYPE_MAIN = 0
-
- const val TAG_TYPE_DEFAULT = 0
-
- val BASE_URL = "https://www.tsumino.com"
-
- val TSUMINO_DATE_FORMAT = SimpleDateFormat("yyyy-MM-dd", Locale.US)
-
- fun tmIdFromUrl(url: String) = url.toUri().lastPathSegment
-
- fun thumbUrlFromId(id: String) = "/thumbs/$id/1"
- }
-}