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" - } -}