Merge branch 'dev' into weblate-auxio-strings

This commit is contained in:
Alexander Capehart 2023-03-23 23:46:39 +00:00 committed by GitHub
commit 96434afb90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 66 additions and 61 deletions

View file

@ -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

View file

@ -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,23 +365,24 @@ 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) {
// No numeric component.
0 -> number = null
// Whole title is numeric.
-1 -> {
number = sortName.toIntOrNull()
sortName = ""
}
// Part of the title is numeric.
else -> {
number = sortName.slice(0 until numericEnd).toIntOrNull()
sortName = sortName.slice(numericEnd until sortName.length)
// Parse out numeric portions of the title and use those for sorting, if applicable.
when (val numericEnd = sortName.indexOfFirst { !it.isDigit() }) {
// No numeric component.
0 -> number = null
// Whole title is numeric.
-1 -> {
number = sortName.toIntOrNull()
sortName = ""
}
// Part of the title is numeric.
else -> {
number = sortName.slice(0 until numericEnd).toIntOrNull()
sortName = sortName.slice(numericEnd until sortName.length)
}
}
} else {
number = null
}
collationKey = COLLATOR.getCollationKey(sortName)

View file

@ -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

View file

@ -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 {

View file

@ -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>
<string name="desc_playlist_image">Вокладка плэйліст для %s</string>

View file

@ -280,9 +280,9 @@
<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="lbl_playlists">Seznamy skladeb</string>
<string name="desc_playlist_image">Obrázek seznamu skladeb pro %s</string>
<string name="lbl_playlist">Seznam skladeb</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>

View file

@ -271,9 +271,9 @@
<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="desc_playlist_image">Playlist-Bild für %s</string>
<string name="lbl_playlist">Wiedergabeliste</string>
<string name="lbl_playlists">Wiedergabelisten</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>

View file

@ -275,10 +275,10 @@
<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="lbl_playlists">Listas de reproducción</string>
<string name="desc_playlist_image">Imagen de la lista de reproducción para %s</string>
<string name="lbl_playlist">Lista de reproducción</string>
<string name="lbl_none">Ninguno</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>

View file

@ -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>

View file

@ -275,8 +275,8 @@
<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="lbl_playlist">elenco di riproduzione</string>
<string name="lbl_playlists">Playlist</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>

View file

@ -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>

View file

@ -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>

View file

@ -271,9 +271,9 @@
<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="lbl_playlist">재생목록</string>
<string name="lbl_playlists">재생목록</string>
<string name="desc_playlist_image">%s의 재생 목록 이미지</string>
<string name="set_intelligent_sorting">정렬할 때 기사 무시</string>
<string name="set_intelligent_sorting_desc">이름으로 정렬할 때 \"the\"와 같은 단어 무시(영어 음악에서 가장 잘 작동함)</string>
</resources>

View file

@ -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>

View file

@ -276,9 +276,9 @@
<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="lbl_playlists">Playlisty</string>
<string name="lbl_playlist">Playlist</string>
<string name="desc_playlist_image">Obraz playlisty dla %s</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>

View file

@ -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>

View file

@ -273,6 +273,6 @@
<string name="set_state">Estado de reprodução</string>
<string name="set_separators_and">E comercial (&amp;)</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>

View file

@ -278,9 +278,9 @@
<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="lbl_playlist">Плейлист</string>
<string name="lbl_playlists">Плейлисты</string>
<string name="desc_playlist_image">Обложка плейлиста для %s</string>
<string name="set_intelligent_sorting">Игнорировать артикли при сортировке</string>
<string name="set_intelligent_sorting_desc">Игнорировать такие слова, как «the», при сортировке по имени (лучше всего работает с англоязычной музыкой)</string>
</resources>

View file

@ -269,9 +269,9 @@
<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="desc_playlist_image">%s için oynatma listesi resmi</string>
<string name="lbl_playlist">oynatma listesi</string>
<string name="lbl_playlists">çalma listeleri</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>

View file

@ -275,10 +275,10 @@
<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="desc_playlist_image">Зображення списку відтворення для %s</string>
<string name="lbl_playlist">Список відтворення</string>
<string name="lbl_playlists">Списки відтворення</string>
<string name="lbl_none">Немає</string>
<string name="set_intelligent_sorting">Ігнорувати артиклі під час сортування</string>
<string name="set_intelligent_sorting_desc">Ігнорування таких слів, як \"the\", під час сортування за назвою (найкраще працює з англомовною музикою)</string>
</resources>

View file

@ -269,10 +269,10 @@
<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="lbl_playlist">播放列表</string>
<string name="lbl_playlists">播放列表</string>
<string name="desc_playlist_image">%s 的播放列表图片</string>
<string name="lbl_none"></string>
<string name="set_intelligent_sorting">排序时忽略冠词</string>
<string name="set_intelligent_sorting_desc">按名称排序时忽略类似“the”这样的冠词对英文歌曲的效果最好</string>
</resources>

View file

@ -216,8 +216,8 @@
<string name="set_separators_plus">Plus (+)</string>
<string name="set_separators_and">Ampersand (&amp;)</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>

View file

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

View file

@ -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()

View file

@ -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")