Comick: Add Tag Grouping setting (#5816)

Add Tag Grouping setting
This commit is contained in:
BrutuZ 2024-11-01 07:23:19 -03:00 committed by GitHub
parent e768a0a7c4
commit 6577a20ead
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 51 additions and 12 deletions

View File

@ -3,6 +3,9 @@ ignored_groups_summary=Chapters from these groups won't be shown.\nOne group nam
include_tags_title=Include Tags include_tags_title=Include Tags
include_tags_on=More specific, but might contain spoilers! include_tags_on=More specific, but might contain spoilers!
include_tags_off=Only the broader genres include_tags_off=Only the broader genres
group_tags_title=Group Tags (fork must support grouping)
group_tags_on=Will prefix tags with their type
group_tags_off=List all tags together
update_cover_title=Update Covers update_cover_title=Update Covers
update_cover_on=Keep cover updated update_cover_on=Keep cover updated
update_cover_off=Prefer first cover update_cover_off=Prefer first cover

View File

@ -3,6 +3,9 @@ ignored_groups_summary=Capítulos desses grupos não aparecerão.\nUm grupo por
include_tags_title=Incluir Tags include_tags_title=Incluir Tags
include_tags_on=Mais detalhadas, mas podem conter spoilers include_tags_on=Mais detalhadas, mas podem conter spoilers
include_tags_off=Apenas os gêneros básicos include_tags_off=Apenas os gêneros básicos
group_tags_title=Agrupar Tags (necessário fork compatível)
group_tags_on=Prefixar tags com o respectivo tipo
group_tags_off=Listar todas as tags juntas
update_cover_title=Atualizar Capas update_cover_title=Atualizar Capas
update_cover_on=Manter capas atualizadas update_cover_on=Manter capas atualizadas
update_cover_off=Usar apenas a primeira capa update_cover_off=Usar apenas a primeira capa

View File

@ -1,7 +1,7 @@
ext { ext {
extName = 'Comick' extName = 'Comick'
extClass = '.ComickFactory' extClass = '.ComickFactory'
extVersionCode = 48 extVersionCode = 49
isNsfw = true isNsfw = true
} }

View File

@ -97,6 +97,20 @@ abstract class Comick(
} }
}.also(screen::addPreference) }.also(screen::addPreference)
SwitchPreferenceCompat(screen.context).apply {
key = GROUP_TAGS_PREF
title = intl["group_tags_title"]
summaryOn = intl["group_tags_on"]
summaryOff = intl["group_tags_off"]
setDefaultValue(GROUP_TAGS_DEFAULT)
setOnPreferenceChangeListener { _, newValue ->
preferences.edit()
.putBoolean(GROUP_TAGS_PREF, newValue as Boolean)
.commit()
}
}.also(screen::addPreference)
SwitchPreferenceCompat(screen.context).apply { SwitchPreferenceCompat(screen.context).apply {
key = FIRST_COVER_PREF key = FIRST_COVER_PREF
title = intl["update_cover_title"] title = intl["update_cover_title"]
@ -149,6 +163,9 @@ abstract class Comick(
private val SharedPreferences.includeMuTags: Boolean private val SharedPreferences.includeMuTags: Boolean
get() = getBoolean(INCLUDE_MU_TAGS_PREF, INCLUDE_MU_TAGS_DEFAULT) get() = getBoolean(INCLUDE_MU_TAGS_PREF, INCLUDE_MU_TAGS_DEFAULT)
private val SharedPreferences.groupTags: Boolean
get() = getBoolean(GROUP_TAGS_PREF, GROUP_TAGS_DEFAULT)
private val SharedPreferences.updateCover: Boolean private val SharedPreferences.updateCover: Boolean
get() = getBoolean(FIRST_COVER_PREF, FIRST_COVER_DEFAULT) get() = getBoolean(FIRST_COVER_PREF, FIRST_COVER_DEFAULT)
@ -390,11 +407,13 @@ abstract class Comick(
includeMuTags = preferences.includeMuTags, includeMuTags = preferences.includeMuTags,
scorePosition = preferences.scorePosition, scorePosition = preferences.scorePosition,
covers = covers, covers = covers,
groupTags = preferences.groupTags,
) )
} }
return mangaData.toSManga( return mangaData.toSManga(
includeMuTags = preferences.includeMuTags, includeMuTags = preferences.includeMuTags,
scorePosition = preferences.scorePosition, scorePosition = preferences.scorePosition,
groupTags = preferences.groupTags,
) )
} }
@ -513,6 +532,8 @@ abstract class Comick(
private const val IGNORED_GROUPS_PREF = "IgnoredGroups" private const val IGNORED_GROUPS_PREF = "IgnoredGroups"
private const val INCLUDE_MU_TAGS_PREF = "IncludeMangaUpdatesTags" private const val INCLUDE_MU_TAGS_PREF = "IncludeMangaUpdatesTags"
const val INCLUDE_MU_TAGS_DEFAULT = false const val INCLUDE_MU_TAGS_DEFAULT = false
private const val GROUP_TAGS_PREF = "GroupTags"
const val GROUP_TAGS_DEFAULT = false
private const val MIGRATED_IGNORED_GROUPS = "MigratedIgnoredGroups" private const val MIGRATED_IGNORED_GROUPS = "MigratedIgnoredGroups"
private const val FIRST_COVER_PREF = "DefaultCover" private const val FIRST_COVER_PREF = "DefaultCover"
private const val FIRST_COVER_DEFAULT = true private const val FIRST_COVER_DEFAULT = true

View File

@ -1,5 +1,6 @@
package eu.kanade.tachiyomi.extension.all.comickfun package eu.kanade.tachiyomi.extension.all.comickfun
import eu.kanade.tachiyomi.extension.all.comickfun.Comick.Companion.GROUP_TAGS_DEFAULT
import eu.kanade.tachiyomi.extension.all.comickfun.Comick.Companion.INCLUDE_MU_TAGS_DEFAULT import eu.kanade.tachiyomi.extension.all.comickfun.Comick.Companion.INCLUDE_MU_TAGS_DEFAULT
import eu.kanade.tachiyomi.extension.all.comickfun.Comick.Companion.SCORE_POSITION_DEFAULT import eu.kanade.tachiyomi.extension.all.comickfun.Comick.Companion.SCORE_POSITION_DEFAULT
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
@ -29,13 +30,14 @@ class Manga(
val comic: Comic, val comic: Comic,
private val artists: List<Name> = emptyList(), private val artists: List<Name> = emptyList(),
private val authors: List<Name> = emptyList(), private val authors: List<Name> = emptyList(),
private val genres: List<Name> = emptyList(), private val genres: List<Genre> = emptyList(),
private val demographic: String? = null, private val demographic: String? = null,
) { ) {
fun toSManga( fun toSManga(
includeMuTags: Boolean = INCLUDE_MU_TAGS_DEFAULT, includeMuTags: Boolean = INCLUDE_MU_TAGS_DEFAULT,
scorePosition: String = SCORE_POSITION_DEFAULT, scorePosition: String = SCORE_POSITION_DEFAULT,
covers: List<MDcovers>? = null, covers: List<MDcovers>? = null,
groupTags: Boolean = GROUP_TAGS_DEFAULT,
) = ) =
SManga.create().apply { SManga.create().apply {
// appennding # at end as part of migration from slug to hid // appennding # at end as part of migration from slug to hid
@ -75,19 +77,23 @@ class Manga(
artist = artists.joinToString { it.name.trim() } artist = artists.joinToString { it.name.trim() }
author = authors.joinToString { it.name.trim() } author = authors.joinToString { it.name.trim() }
genre = buildList { genre = buildList {
comic.origination?.let(::add) comic.origination?.let { add(Genre("Origination", it.name)) }
demographic?.let { add(Name(it)) } demographic?.let { add(Genre("Demographic", it)) }
addAll(genres) addAll(
addAll(comic.mdGenres.mapNotNull { it.name }) comic.mdGenres.mapNotNull { it.genre }.sortedBy { it.group }
.sortedBy { it.name },
)
addAll(genres.sortedBy { it.group }.sortedBy { it.name })
if (includeMuTags) { if (includeMuTags) {
comic.muGenres.categories.forEach { category -> addAll(
category?.category?.title?.let { add(Name(it)) } comic.muGenres.categories.mapNotNull { it?.category?.title }.sorted()
} .map { Genre("Category", it) },
)
} }
} }
.distinctBy { it.name } .distinctBy { it.name }
.filter { it.name.isNotBlank() } .filterNot { it.name.isNullOrBlank() || it.group.isNullOrBlank() }
.joinToString { it.name.trim() } .joinToString { if (groupTags) "${it.group}:${it.name?.trim()}" else "${it.name?.trim()}" }
} }
} }
@ -128,7 +134,13 @@ class Comic(
@Serializable @Serializable
class MdGenres( class MdGenres(
@SerialName("md_genres") val name: Name? = null, @SerialName("md_genres") val genre: Genre? = null,
)
@Serializable
class Genre(
val group: String? = null,
val name: String? = null,
) )
@Serializable @Serializable