Context
Upstream songlist introduced ratingClassAlias: number on difficulty entries. So far it only appears as ratingClass: 3 + ratingClassAlias: 1.
UI-side support already landed on branch refactor/rating-class-selector:
ArcaeaRatingClassDisplay (core/constants): maps (ratingClass, alias) to a display form; unknown (class, alias) combos fall back to the default form, so future upstream additions won't break anything.
- Theme:
inscribed color.
ArcaeaRatingClassSelector renders the BYD slot as INSCRIBED via RatingClassSelectorItem.display.
Tasks
1. DB: store rating_class_alias on difficulties
- Add a nullable
rating_class_alias Int column to Difficulty, with a Room migration (ALTER TABLE ... ADD COLUMN). Old imports default to null (= no alias).
- If the
Chart DatabaseView is still around by then, add d.rating_class_alias to its SELECT too; otherwise skip it (view is slated for deprecation).
- Files:
core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/entities/Difficulty.kt, core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/ArcaeaOfflineDatabase.kt
- Search:
@Entity(tableName = "difficulties"), Migration(
2. Parser: read ratingClassAlias from songlist
- Add
val ratingClassAlias: Int? = null to the difficulty item and pass it through when building Difficulty.
- Files:
core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/externals/ArcaeaListDefinitions.kt (ArcaeaSonglistDifficultyItem), core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/externals/importers/ArcaeaSonglistImporter.kt
- Search:
class ArcaeaSonglistDifficultyItem, fun difficulties()
3. Selector: move item extension from Chart to Difficulty
- The transitional
List<Chart>.toRatingClassSelectorItems() should become a List<Difficulty> version, feeding ratingClassAlias into ArcaeaRatingClassDisplay.of.
- Files:
app/src/main/java/xyz/sevive/arcaeaoffline/ui/components/ArcaeaRatingClassSelector.kt (extension + transitional comment), call sites ArcaeaChartSelector.kt and UtilitiesCalculatorScreen.kt
- Search:
toRatingClassSelectorItems
4. App-wide INSCRIBED-aware labels & colors
Currently INSCRIBED only affects the selector; everywhere else an INSCRIBED chart still shows "BEYOND":
ArcaeaFormatters.ratingText builds e.g. "BEYOND 12.0" from ratingClass.toString() and is used by chart/play-result cards, B30/R30 lists, chart recommend, potential card, etc. Add an overload taking ArcaeaRatingClassDisplay (or an alias) and update callers.
ArcaeaChartCard colors the difficulty label via ratingClassColor(ratingClass); switch to ratingClassColor(display).
- Search:
ratingText(, ratingClass.toString(), ratingClassColor(ratingClass)
Notes
DatabaseDeduplicatorViewModel uses ratingClass.toString() as a dedup key only — no change needed.
- The theme overhaul (seed-generated schemes via material-color-utilities, replacing the theme-builder exports in
ui/theme/Colors.kt / ColorSchemes.kt) is future work and not part of this issue.
This issue was filed by a coding agent (pi) at the owner's request, summarizing the discussion on branch refactor/rating-class-selector.
Context
Upstream songlist introduced
ratingClassAlias: numberon difficulty entries. So far it only appears asratingClass: 3+ratingClassAlias: 1.UI-side support already landed on branch
refactor/rating-class-selector:ArcaeaRatingClassDisplay(core/constants): maps(ratingClass, alias)to a display form; unknown(class, alias)combos fall back to the default form, so future upstream additions won't break anything.inscribedcolor.ArcaeaRatingClassSelectorrenders the BYD slot as INSCRIBED viaRatingClassSelectorItem.display.Tasks
1. DB: store
rating_class_aliason difficultiesrating_class_aliasInt column toDifficulty, with a Room migration (ALTER TABLE ... ADD COLUMN). Old imports default to null (= no alias).ChartDatabaseView is still around by then, addd.rating_class_aliasto its SELECT too; otherwise skip it (view is slated for deprecation).core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/entities/Difficulty.kt,core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/ArcaeaOfflineDatabase.kt@Entity(tableName = "difficulties"),Migration(2. Parser: read
ratingClassAliasfrom songlistval ratingClassAlias: Int? = nullto the difficulty item and pass it through when buildingDifficulty.core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/externals/ArcaeaListDefinitions.kt(ArcaeaSonglistDifficultyItem),core/src/main/kotlin/xyz/sevive/arcaeaoffline/core/database/externals/importers/ArcaeaSonglistImporter.ktclass ArcaeaSonglistDifficultyItem,fun difficulties()3. Selector: move item extension from
CharttoDifficultyList<Chart>.toRatingClassSelectorItems()should become aList<Difficulty>version, feedingratingClassAliasintoArcaeaRatingClassDisplay.of.app/src/main/java/xyz/sevive/arcaeaoffline/ui/components/ArcaeaRatingClassSelector.kt(extension + transitional comment), call sitesArcaeaChartSelector.ktandUtilitiesCalculatorScreen.kttoRatingClassSelectorItems4. App-wide INSCRIBED-aware labels & colors
Currently INSCRIBED only affects the selector; everywhere else an INSCRIBED chart still shows "BEYOND":
ArcaeaFormatters.ratingTextbuilds e.g."BEYOND 12.0"fromratingClass.toString()and is used by chart/play-result cards, B30/R30 lists, chart recommend, potential card, etc. Add an overload takingArcaeaRatingClassDisplay(or an alias) and update callers.ArcaeaChartCardcolors the difficulty label viaratingClassColor(ratingClass); switch toratingClassColor(display).ratingText(,ratingClass.toString(),ratingClassColor(ratingClass)Notes
DatabaseDeduplicatorViewModelusesratingClass.toString()as a dedup key only — no change needed.ui/theme/Colors.kt/ColorSchemes.kt) is future work and not part of this issue.This issue was filed by a coding agent (pi) at the owner's request, summarizing the discussion on branch
refactor/rating-class-selector.