From 6205dad385eabd92778bcd00881b4d754b910f26 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Tue, 11 Mar 2025 19:33:53 +0700 Subject: [PATCH] MangaDistrict: Preset genresList & preserve tagList order when saving (#8004) --- src/en/mangadistrict/build.gradle | 2 +- .../en/mangadistrict/MangaDistrict.kt | 130 ++++++++++++++++-- 2 files changed, 119 insertions(+), 13 deletions(-) diff --git a/src/en/mangadistrict/build.gradle b/src/en/mangadistrict/build.gradle index f25b90449..6d5eefdcb 100644 --- a/src/en/mangadistrict/build.gradle +++ b/src/en/mangadistrict/build.gradle @@ -3,7 +3,7 @@ ext { extClass = '.MangaDistrict' themePkg = 'madara' baseUrl = 'https://mangadistrict.com' - overrideVersionCode = 9 + overrideVersionCode = 10 isNsfw = true } diff --git a/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt b/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt index f2c0cdbed..ee4e8db2c 100644 --- a/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt +++ b/src/en/mangadistrict/src/eu/kanade/tachiyomi/extension/en/mangadistrict/MangaDistrict.kt @@ -37,7 +37,15 @@ class MangaDistrict : override val mangaSubString = "read-scan" - private val preferences: SharedPreferences by getPreferencesLazy() + private val preferences: SharedPreferences by getPreferencesLazy { + try { + val oldTagSet = getStringSet(TAG_LIST_PREF, emptySet())!! + edit() + .remove(TAG_LIST_PREF) + .putString(TAG_LIST_PREF, oldTagSet.joinToString("%")) + .apply() + } catch (_: Exception) {} + } override fun popularMangaNextPageSelector() = "div[role=navigation] span.current + a.page" @@ -112,16 +120,14 @@ class MangaDistrict : } private fun loadTagListFromPreferences(): Set> = - preferences.getStringSet(TAG_LIST_PREF, emptySet()) - ?.mapNotNull { - it.split('|') - .let { splits -> - if (splits.size == 2) { - splits[0] to splits[1] - } else { - null + preferences.getString(TAG_LIST_PREF, "") + ?.let { + it.split('%').mapNotNull { tag -> + tag.split('|') + .let { splits -> + if (splits.size == 2) splits[0] to splits[1] else null } - } + } } ?.toSet() // Create at least 1 tag to avoid excessively reading preferences @@ -129,9 +135,9 @@ class MangaDistrict : private var tagList: Set> = loadTagListFromPreferences() set(value) { - preferences.edit().putStringSet( + preferences.edit().putString( TAG_LIST_PREF, - value.map { "${it.first}|${it.second}" }.toSet(), + value.joinToString("%") { "${it.first}|${it.second}" }, ).apply() field = value } @@ -155,6 +161,106 @@ class MangaDistrict : } } + // console.log([...document.querySelectorAll("div.checkbox-group .checkbox")].map((el) => `Genre("${el.querySelector("label").innerText.trim()}", "${el.querySelector("input").getAttribute('value')}"),`).join('\n')) + override var genresList = listOf( + Genre("3D", "3d"), + Genre("Action", "action"), + Genre("Adapted to Anime", "adapted-to-anime"), + Genre("Adventure", "adventure"), + Genre("Aliens", "aliens"), + Genre("Animal Characteristics", "animal-characteristics"), + Genre("Based on Another Work", "based-on-another-work"), + Genre("BL", "bl"), + Genre("BL Uncensored", "bl-uncensored"), + Genre("Borderline H", "borderline-h"), + Genre("Cohabitation", "cohabitation"), + Genre("Collection of Stories", "collection-of-stories"), + Genre("Comedy", "comedy"), + Genre("Comics", "comics"), + Genre("Cooking", "cooking"), + Genre("Coworkers", "coworkers"), + Genre("Crime", "crime"), + Genre("Crossdressing", "crossdressing"), + Genre("Delinquents", "delinquents"), + Genre("Demons", "demons"), + Genre("Detectives", "detectives"), + Genre("Doujinshi", "doujinshi"), + Genre("Drama", "drama"), + Genre("Ecchi", "ecchi"), + Genre("Explicit Sex", "explicit-sex"), + Genre("Fantasy", "fantasy"), + Genre("Fetish", "fetish"), + Genre("Full Color", "full-color"), + Genre("Gender Bender", "gender-bender"), + Genre("Ghosts", "ghosts"), + Genre("GL", "gl"), + Genre("Gyaru", "gyaru"), + Genre("Harem", "harem"), + Genre("Historical", "historical"), + Genre("Horror", "horror"), + Genre("Incest", "incest"), + Genre("Isekai", "isekai"), + Genre("Japanese Webtoons", "japanese-webtoons"), + Genre("Josei", "josei"), + Genre("Light Novels", "light-novels"), + Genre("Mafia", "mafia"), + Genre("Magic", "magic"), + Genre("Magical Girl", "magical-girl"), + Genre("Manhua", "manhua"), + Genre("Manhwa", "manhwa"), + Genre("Martial Arts", "martial-arts"), + Genre("Mature Romance", "mature-romance"), + Genre("Mecha", "mecha"), + Genre("Medical", "medical"), + Genre("Military", "military"), + Genre("Monster Girls", "monster-girls"), + Genre("Monsters", "monsters"), + Genre("Music", "music"), + Genre("Mystery", "mystery"), + Genre("Ninja", "ninja"), + Genre("Nudity", "nudity"), + Genre("One Shot", "one-shot"), + Genre("Person in a Strange World", "person-in-a-strange-world"), + Genre("Police", "police"), + Genre("Psychological", "psychological"), + Genre("Reincarnation", "reincarnation"), + Genre("Reverse Harem", "reverse-harem"), + Genre("Romance", "romance"), + Genre("Salaryman", "salaryman"), + Genre("Samurai", "samurai"), + Genre("School Life", "school-life"), + Genre("Sci Fi", "sci-fi"), + Genre("Seinen", "seinen"), + Genre("Sexual Abuse", "sexual-abuse"), + Genre("Sexual Content", "sexual-content"), + Genre("Shoujo", "shoujo"), + Genre("Shoujo-ai", "shoujo-ai"), + Genre("Shounen", "shounen"), + Genre("Shounen-ai", "shounen-ai"), + Genre("Siblings", "siblings"), + Genre("Slice of Life", "slice-of-life"), + Genre("Smut", "smut"), + Genre("Sports", "sports"), + Genre("Summoned Into Another World", "summoned-into-another-world"), + Genre("Superheroes", "superheroes"), + Genre("Supernatural", "supernatural"), + Genre("Survival", "survival"), + Genre("Thriller", "thriller"), + Genre("Time Travel", "time-travel"), + Genre("Transfer Students", "transfer-students"), + Genre("Uncensored", "uncensored"), + Genre("Vampires", "vampires"), + Genre("Violence", "violence"), + Genre("Virtual Reality", "virtual-reality"), + Genre("Web Novels", "web-novels"), + Genre("Webtoons", "webtoons"), + Genre("Western", "western"), + Genre("Work Life", "work-life"), + Genre("Yaoi", "yaoi"), + Genre("Yuri", "yuri"), + Genre("Zombies", "zombies"), + ) + private fun isRemoveTitleVersion() = preferences.getBoolean(REMOVE_TITLE_VERSION_PREF, false) private fun getImgRes() = preferences.getString(IMG_RES_PREF, IMG_RES_DEFAULT)!!