music: move sort name number handling to setting
Make the numeric sort name handling added prior dependent on a new "Intelligent Sorting" setting that also controls the article checks. This kind of behavior might not be desirable in all cases, and it makes the setting more consistent anyway.
This commit is contained in:
parent
97b63992b5
commit
7c0b73b699
25 changed files with 66 additions and 61 deletions
|
@ -21,6 +21,9 @@ deletion
|
|||
- Fix "format" not appearing in song properties view
|
||||
- Fix visual bugs when editing duplicate songs in the queue
|
||||
|
||||
#### What's Changed
|
||||
- "Ignore articles when sorting" is now "Intelligent sorting"
|
||||
|
||||
## 3.0.3
|
||||
|
||||
#### What's New
|
||||
|
|
|
@ -85,7 +85,7 @@ sealed interface Music : Item {
|
|||
* A unique identifier for a piece of music.
|
||||
*
|
||||
* [UID] enables a much cheaper and more reliable form of differentiating music, derived from
|
||||
* either a hash of meaningful metadata or the MusicBrainz ID spec. Using this enables several
|
||||
* either internal app information or the MusicBrainz ID spec. Using this enables several
|
||||
* improvements to music management in this app, including:
|
||||
* - Proper differentiation of identical music. It's common for large, well-tagged libraries to
|
||||
* have functionally duplicate items that are differentiated with MusicBrainz IDs, and so
|
||||
|
@ -355,7 +355,7 @@ class SortName(name: String, musicSettings: MusicSettings) : Comparable<SortName
|
|||
|
||||
init {
|
||||
var sortName = name
|
||||
if (musicSettings.automaticSortNames) {
|
||||
if (musicSettings.intelligentSorting) {
|
||||
sortName =
|
||||
sortName.run {
|
||||
when {
|
||||
|
@ -365,11 +365,9 @@ class SortName(name: String, musicSettings: MusicSettings) : Comparable<SortName
|
|||
else -> this
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Parse out numeric portions of the title and use those for sorting, if applicable.
|
||||
val numericEnd = sortName.indexOfFirst { !it.isDigit() }
|
||||
when (numericEnd) {
|
||||
when (val numericEnd = sortName.indexOfFirst { !it.isDigit() }) {
|
||||
// No numeric component.
|
||||
0 -> number = null
|
||||
// Whole title is numeric.
|
||||
|
@ -383,6 +381,9 @@ class SortName(name: String, musicSettings: MusicSettings) : Comparable<SortName
|
|||
sortName = sortName.slice(numericEnd until sortName.length)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
number = null
|
||||
}
|
||||
|
||||
collationKey = COLLATOR.getCollationKey(sortName)
|
||||
|
||||
|
|
|
@ -44,8 +44,8 @@ interface MusicSettings : Settings<MusicSettings.Listener> {
|
|||
val shouldBeObserving: Boolean
|
||||
/** A [String] of characters representing the desired characters to denote multi-value tags. */
|
||||
var multiValueSeparators: String
|
||||
/** Whether to trim english articles with song sort names. */
|
||||
val automaticSortNames: Boolean
|
||||
/** Whether to enable more advanced sorting by articles and numbers. */
|
||||
val intelligentSorting: Boolean
|
||||
// TODO: Move sort settings to list module
|
||||
/** The [Sort] mode used in [Song] lists. */
|
||||
var songSort: Sort
|
||||
|
@ -115,7 +115,7 @@ class MusicSettingsImpl @Inject constructor(@ApplicationContext context: Context
|
|||
}
|
||||
}
|
||||
|
||||
override val automaticSortNames: Boolean
|
||||
override val intelligentSorting: Boolean
|
||||
get() = sharedPreferences.getBoolean(getString(R.string.set_key_auto_sort_names), true)
|
||||
|
||||
override var songSort: Sort
|
||||
|
|
|
@ -483,6 +483,7 @@ class GenreImpl(
|
|||
* @return A new [Music.UID] of Auxio format whose [UUID] was derived from the SHA-256 hash of the
|
||||
* metadata given.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
fun createHashedUid(mode: MusicMode, updates: MessageDigest.() -> Unit): Music.UID {
|
||||
val digest =
|
||||
MessageDigest.getInstance("SHA-256").run {
|
||||
|
|
|
@ -267,8 +267,8 @@
|
|||
<string name="set_playback">Прайграванне</string>
|
||||
<string name="lbl_ep_live">Канцэртны міні-альбом</string>
|
||||
<string name="lbl_ep_remix">Міні-альбом рэміксаў</string>
|
||||
<string name="set_auto_sort_names_desc">Ігнараваць такія словы, як \"the\", пры сартаванні па імені (лепш за ўсё працуе з англамоўнай музыкай)</string>
|
||||
<string name="set_auto_sort_names">Ігнараваць артыклі пры сартаванні</string>
|
||||
<string name="set_intelligent_sorting_desc">Ігнараваць такія словы, як \"the\", пры сартаванні па імені (лепш за ўсё працуе з англамоўнай музыкай)</string>
|
||||
<string name="set_intelligent_sorting">Ігнараваць артыклі пры сартаванні</string>
|
||||
<string name="lbl_eps">Міні-альбомы</string>
|
||||
<string name="lbl_ep">Міні-альбом</string>
|
||||
</resources>
|
|
@ -280,6 +280,6 @@
|
|||
<string name="set_library">Knihovna</string>
|
||||
<string name="set_state">Perzistence</string>
|
||||
<string name="lbl_sort_dec">Sestupně</string>
|
||||
<string name="set_auto_sort_names">Při řazení ignorovat předložky</string>
|
||||
<string name="set_auto_sort_names_desc">Ignorovat slova jako „the“ při řazení podle názvu (funguje nejlépe u hudby v angličtině)</string>
|
||||
<string name="set_intelligent_sorting">Při řazení ignorovat předložky</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignorovat slova jako „the“ při řazení podle názvu (funguje nejlépe u hudby v angličtině)</string>
|
||||
</resources>
|
|
@ -271,6 +271,6 @@
|
|||
<string name="set_state">Persistenz</string>
|
||||
<string name="set_replay_gain">Lautstärkeanpassung ReplayGain</string>
|
||||
<string name="lbl_sort_dec">Absteigend</string>
|
||||
<string name="set_auto_sort_names">Artikel beim Sortieren ignorieren</string>
|
||||
<string name="set_auto_sort_names_desc">Wörter wie „the“ ignorieren (funktioniert am besten mit englischsprachiger Musik)</string>
|
||||
<string name="set_intelligent_sorting">Artikel beim Sortieren ignorieren</string>
|
||||
<string name="set_intelligent_sorting_desc">Wörter wie „the“ ignorieren (funktioniert am besten mit englischsprachiger Musik)</string>
|
||||
</resources>
|
|
@ -275,6 +275,6 @@
|
|||
<string name="set_personalize_desc">Personalizar los controles y el comportamiento de la interfaz de usuario</string>
|
||||
<string name="set_library">Biblioteca</string>
|
||||
<string name="lbl_sort_dec">Descendente</string>
|
||||
<string name="set_auto_sort_names">Ignorar artículos al ordenar</string>
|
||||
<string name="set_auto_sort_names_desc">Ignorar palabras como \"the\" al ordenar por nombre (funciona mejor con música en inglés)</string>
|
||||
<string name="set_intelligent_sorting">Ignorar artículos al ordenar</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignorar palabras como \"the\" al ordenar por nombre (funciona mejor con música en inglés)</string>
|
||||
</resources>
|
|
@ -145,7 +145,7 @@
|
|||
<string name="set_separators_comma">Coma (,)</string>
|
||||
<string name="set_separators_semicolon">Punto e coma (;)</string>
|
||||
<string name="set_hide_collaborators_desc">Mostrar só artistas que estean directamente acreditados nun álbum (funciona mellos en bibliotecas ben etiquetadas)</string>
|
||||
<string name="set_auto_sort_names">Ignorar artigos ao ordenar</string>
|
||||
<string name="set_intelligent_sorting">Ignorar artigos ao ordenar</string>
|
||||
<string name="set_hide_collaborators">Agochar colaboradores</string>
|
||||
<string name="set_images">Imaxes</string>
|
||||
<string name="set_cover_mode">Portadas de álbums</string>
|
||||
|
@ -241,7 +241,7 @@
|
|||
<item quantity="other">%d artistas</item>
|
||||
</plurals>
|
||||
<string name="set_separators_plus">Máis (+)</string>
|
||||
<string name="set_auto_sort_names_desc">Ignorar palabras como \"the\" ao ordenar por nome (funciona mellor con música en inglés)</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignorar palabras como \"the\" ao ordenar por nome (funciona mellor con música en inglés)</string>
|
||||
<string name="set_dirs_mode">Modo</string>
|
||||
<string name="set_dirs_desc">Xestionar dende onde se carga a música</string>
|
||||
<string name="set_repeat_pause_desc">Pausar cando se repite unha canción</string>
|
||||
|
|
|
@ -275,6 +275,6 @@
|
|||
<string name="set_personalize_desc">Personalizza controlli e comportamento dell\'UI</string>
|
||||
<string name="set_audio_desc">Configura comportamento di suono e riproduzione</string>
|
||||
<string name="lbl_sort_dec">Discendente</string>
|
||||
<string name="set_auto_sort_names">Ignora gli articoli durante l\'ordinamento</string>
|
||||
<string name="set_auto_sort_names_desc">Ignora parole come \"the\" durante l\'ordinamento per nome (funziona meglio con la musica in lingua inglese)</string>
|
||||
<string name="set_intelligent_sorting">Ignora gli articoli durante l\'ordinamento</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignora parole come \"the\" durante l\'ordinamento per nome (funziona meglio con la musica in lingua inglese)</string>
|
||||
</resources>
|
|
@ -149,7 +149,7 @@
|
|||
<string name="set_separators_slash">קו נטוי (/)</string>
|
||||
<string name="set_separators_warning">אזהרה: השימוש בהגדרה זו עלול לגרום לחלק מהתגיות להיות מפורשות באופן שגוי כבעלות מספר ערכים. ניתן לפתור זאת על ידי הכנסת קו נטוי אחורי (\\) לפני תווים מפרידים לא רצויים.</string>
|
||||
<string name="set_cover_mode_quality">איכות גבוהה</string>
|
||||
<string name="set_auto_sort_names_desc">התעלמ~י ממילים כמו \"The\" (\"ה-\") בעת סידור על פי שם (עובד באופן הכי טוב עם מוזיקה בשפה האנגלית)</string>
|
||||
<string name="set_intelligent_sorting_desc">התעלמ~י ממילים כמו \"The\" (\"ה-\") בעת סידור על פי שם (עובד באופן הכי טוב עם מוזיקה בשפה האנגלית)</string>
|
||||
<string name="set_images">תמונות</string>
|
||||
<string name="set_audio_desc">התאמ~י התנהגות צליל והשמעה</string>
|
||||
<string name="set_headset_autoplay_desc">התחל~י לנגן תמיד ברגע שמחוברות אוזניות (עלול לא לעבוד בכל המערכות)</string>
|
||||
|
|
|
@ -242,8 +242,8 @@
|
|||
<string name="set_dirs_mode">モード</string>
|
||||
<string name="set_separators_desc">複数のタグ値を表す文字を構成する</string>
|
||||
<string name="set_bar_action">カスタム再生バー アクション</string>
|
||||
<string name="set_auto_sort_names">ソート時に記事を無視する</string>
|
||||
<string name="set_auto_sort_names_desc">名前で並べ替えるときに「the」などの単語を無視する (英語の音楽に最適)</string>
|
||||
<string name="set_intelligent_sorting">ソート時に記事を無視する</string>
|
||||
<string name="set_intelligent_sorting_desc">名前で並べ替えるときに「the」などの単語を無視する (英語の音楽に最適)</string>
|
||||
<string name="set_cover_mode_media_store">初期 (高速読み込み)</string>
|
||||
<string name="set_replay_gain_mode_dynamic">再生中の場合はアルバムを優先</string>
|
||||
<string name="set_separators">複数値セパレータ</string>
|
||||
|
|
|
@ -271,6 +271,6 @@
|
|||
<string name="set_behavior">동작</string>
|
||||
<string name="set_personalize_desc">UI 제어 및 동작 커스텀</string>
|
||||
<string name="lbl_sort_dec">내림차순</string>
|
||||
<string name="set_auto_sort_names">정렬할 때 기사 무시</string>
|
||||
<string name="set_auto_sort_names_desc">이름으로 정렬할 때 \"the\"와 같은 단어 무시(영어 음악에서 가장 잘 작동함)</string>
|
||||
<string name="set_intelligent_sorting">정렬할 때 기사 무시</string>
|
||||
<string name="set_intelligent_sorting_desc">이름으로 정렬할 때 \"the\"와 같은 단어 무시(영어 음악에서 가장 잘 작동함)</string>
|
||||
</resources>
|
|
@ -269,6 +269,6 @@
|
|||
<string name="set_dirs_list">Aplankalai</string>
|
||||
<string name="set_state">Atkaklumas</string>
|
||||
<string name="lbl_sort_dec">Mažėjantis</string>
|
||||
<string name="set_auto_sort_names_desc">Ignoruoti tokius žodžius kaip „the“, kai rūšiuojama pagal pavadinimą (geriausiai veikia su anglų kalbos muzika)</string>
|
||||
<string name="set_auto_sort_names">Ignoruoti straipsnius rūšiuojant</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignoruoti tokius žodžius kaip „the“, kai rūšiuojama pagal pavadinimą (geriausiai veikia su anglų kalbos muzika)</string>
|
||||
<string name="set_intelligent_sorting">Ignoruoti straipsnius rūšiuojant</string>
|
||||
</resources>
|
|
@ -276,6 +276,6 @@
|
|||
<string name="err_did_not_wipe">Nie można wyczyścić stanu odtwarzania</string>
|
||||
<string name="err_did_not_save">Nie można zapisać stanu odtwarzania</string>
|
||||
<string name="lbl_sort_dec">Malejąco</string>
|
||||
<string name="set_auto_sort_names">Ignoruj rodzajniki podczas sortowania</string>
|
||||
<string name="set_auto_sort_names_desc">Ignoruj słowa takie jak „the” podczas sortowania według tytułu (działa najlepiej z tytułami w języku angielskim)</string>
|
||||
<string name="set_intelligent_sorting">Ignoruj rodzajniki podczas sortowania</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignoruj słowa takie jak „the” podczas sortowania według tytułu (działa najlepiej z tytułami w języku angielskim)</string>
|
||||
</resources>
|
|
@ -273,6 +273,6 @@
|
|||
<string name="set_behavior">Comportamento</string>
|
||||
<string name="set_dirs_list">Pastas</string>
|
||||
<string name="lbl_sort_dec">Descendente</string>
|
||||
<string name="set_auto_sort_names">Ignorar artigos ao classificar</string>
|
||||
<string name="set_auto_sort_names_desc">Ignore palavras como \"the\" ao classificar por nome (funciona melhor com músicas em inglês)</string>
|
||||
<string name="set_intelligent_sorting">Ignorar artigos ao classificar</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignore palavras como \"the\" ao classificar por nome (funciona melhor com músicas em inglês)</string>
|
||||
</resources>
|
|
@ -273,6 +273,6 @@
|
|||
<string name="set_state">Estado de reprodução</string>
|
||||
<string name="set_separators_and">E comercial (&)</string>
|
||||
<string name="set_behavior">Comportamento</string>
|
||||
<string name="set_auto_sort_names">Ignorar artigos ao classificar</string>
|
||||
<string name="set_auto_sort_names_desc">Ignore palavras como \"the\" ao classificar por nome (funciona melhor com músicas em inglês)</string>
|
||||
<string name="set_intelligent_sorting">Ignorar artigos ao classificar</string>
|
||||
<string name="set_intelligent_sorting_desc">Ignore palavras como \"the\" ao classificar por nome (funciona melhor com músicas em inglês)</string>
|
||||
</resources>
|
|
@ -278,6 +278,6 @@
|
|||
<string name="set_dirs_list">Папки</string>
|
||||
<string name="set_state">Состояние воспроизведения</string>
|
||||
<string name="lbl_sort_dec">По убыванию</string>
|
||||
<string name="set_auto_sort_names">Игнорировать артикли при сортировке</string>
|
||||
<string name="set_auto_sort_names_desc">Игнорировать такие слова, как «the», при сортировке по имени (лучше всего работает с англоязычной музыкой)</string>
|
||||
<string name="set_intelligent_sorting">Игнорировать артикли при сортировке</string>
|
||||
<string name="set_intelligent_sorting_desc">Игнорировать такие слова, как «the», при сортировке по имени (лучше всего работает с англоязычной музыкой)</string>
|
||||
</resources>
|
|
@ -269,6 +269,6 @@
|
|||
<string name="set_personalize_desc">Arayüz kontrollerini ve davranışını özelleştirin</string>
|
||||
<string name="set_behavior">Davranış</string>
|
||||
<string name="set_replay_gain">Ses yüksekliği dengesi ReplayGain</string>
|
||||
<string name="set_auto_sort_names">Sıralama yaparken makaleleri yoksay</string>
|
||||
<string name="set_auto_sort_names_desc">Ada göre sıralarken \"the\" gibi kelimeleri yok sayın (en iyi ingilizce müzikle çalışır)</string>
|
||||
<string name="set_intelligent_sorting">Sıralama yaparken makaleleri yoksay</string>
|
||||
<string name="set_intelligent_sorting_desc">Ada göre sıralarken \"the\" gibi kelimeleri yok sayın (en iyi ingilizce müzikle çalışır)</string>
|
||||
</resources>
|
|
@ -275,6 +275,6 @@
|
|||
<string name="set_audio_desc">Налаштування звуку і поведінки при відтворенні</string>
|
||||
<string name="set_dirs_list">Папки</string>
|
||||
<string name="lbl_sort_dec">За спаданням</string>
|
||||
<string name="set_auto_sort_names">Ігнорувати артиклі під час сортування</string>
|
||||
<string name="set_auto_sort_names_desc">Ігнорування таких слів, як \"the\", під час сортування за назвою (найкраще працює з англомовною музикою)</string>
|
||||
<string name="set_intelligent_sorting">Ігнорувати артиклі під час сортування</string>
|
||||
<string name="set_intelligent_sorting_desc">Ігнорування таких слів, як \"the\", під час сортування за назвою (найкраще працює з англомовною музикою)</string>
|
||||
</resources>
|
|
@ -269,6 +269,6 @@
|
|||
<string name="set_music">音乐</string>
|
||||
<string name="set_audio_desc">配置声音和播放行为</string>
|
||||
<string name="lbl_sort_dec">降序</string>
|
||||
<string name="set_auto_sort_names">排序时忽略冠词</string>
|
||||
<string name="set_auto_sort_names_desc">按名称排序时忽略类似“the”这样的冠词(对英文歌曲的效果最好)</string>
|
||||
<string name="set_intelligent_sorting">排序时忽略冠词</string>
|
||||
<string name="set_intelligent_sorting_desc">按名称排序时忽略类似“the”这样的冠词(对英文歌曲的效果最好)</string>
|
||||
</resources>
|
|
@ -216,8 +216,8 @@
|
|||
<string name="set_separators_plus">Plus (+)</string>
|
||||
<string name="set_separators_and">Ampersand (&)</string>
|
||||
<string name="set_separators_warning">Warning: Using this setting may result in some tags being incorrectly interpreted as having multiple values. You can resolve this by prefixing unwanted separator characters with a backslash (\\).</string>
|
||||
<string name="set_auto_sort_names">Ignore articles when sorting</string>
|
||||
<string name="set_auto_sort_names_desc">Ignore words like \"the\" when sorting by name (works best with english-language music)</string>
|
||||
<string name="set_intelligent_sorting">Intelligent sorting</string>
|
||||
<string name="set_intelligent_sorting_desc">Correctly sort names that begin with numbers or words like \"the\" (works best with english-language music)</string>
|
||||
<string name="set_hide_collaborators">Hide collaborators</string>
|
||||
<string name="set_hide_collaborators_desc">Only show artists that are directly credited on an album (works best on well-tagged libraries)</string>
|
||||
<string name="set_images">Images</string>
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
<SwitchPreferenceCompat
|
||||
app:defaultValue="true"
|
||||
app:key="@string/set_key_auto_sort_names"
|
||||
app:summary="@string/set_auto_sort_names_desc"
|
||||
app:title="@string/set_auto_sort_names" />
|
||||
app:summary="@string/set_intelligent_sorting_desc"
|
||||
app:title="@string/set_intelligent_sorting" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
app:defaultValue="false"
|
||||
|
|
|
@ -34,7 +34,7 @@ open class FakeMusicSettings : MusicSettings {
|
|||
override var multiValueSeparators: String
|
||||
get() = throw NotImplementedError()
|
||||
set(_) = throw NotImplementedError()
|
||||
override val automaticSortNames: Boolean
|
||||
override val intelligentSorting: Boolean
|
||||
get() = throw NotImplementedError()
|
||||
override var songSort: Sort
|
||||
get() = throw NotImplementedError()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2023 Auxio Project
|
||||
* RawMusicTest.kt is part of Auxio.
|
||||
* DeviceMusicImplTest.kt is part of Auxio.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -26,11 +26,11 @@ import org.oxycblt.auxio.music.Music
|
|||
import org.oxycblt.auxio.music.MusicMode
|
||||
import org.oxycblt.auxio.music.metadata.Date
|
||||
|
||||
class RawMusicTest {
|
||||
class DeviceMusicImplTest {
|
||||
@Test
|
||||
fun musicUid_auxio() {
|
||||
val uid =
|
||||
Music.UID.auxio(MusicMode.SONGS) {
|
||||
createHashedUid(MusicMode.SONGS) {
|
||||
update("Wheel")
|
||||
update(listOf("Parannoul", "Asian Glow"))
|
||||
update("Paraglow")
|
Loading…
Reference in a new issue