From 66b9da0d5ed5675a70933e2a95c258441da2dae5 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sat, 24 Sep 2022 16:08:23 -0600 Subject: [PATCH] music: add toggle to load non-music Add a toggle to control the IS_MUSIC=1 selector. This is normally used to remove non-music like podcasts and ringtones, however some people use Auxio was a general-purpose audio player for these files, so this setting can be used to disable that selector and load non-music. Resolves #246. --- CHANGELOG.md | 10 +++++----- .../auxio/music/extractor/MediaStoreExtractor.kt | 7 +++++-- .../org/oxycblt/auxio/music/system/IndexerService.kt | 1 + .../main/java/org/oxycblt/auxio/settings/Settings.kt | 4 ++++ app/src/main/res/values/settings.xml | 3 ++- app/src/main/res/values/strings.xml | 4 +++- app/src/main/res/xml/prefs_main.xml | 6 ++++++ 7 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1f395a24..96f7da240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,14 @@ ## 3.0.0 #### What's New -- Massively reworked music loading system: +- Added multi-value tags support - Added support for multiple artists - Added support for multiple genres - - Artists and album artists are now both given UI entires - - Made music hashing rely on the more reliable MD5 +- Artists and album artists are now both given UI entires +- Upgraded music ID management: + - Use MD5 for default UUIDS - Added support for MusicBrainz IDs (MBIDs) - - **This may impact your library.** Instructions on how to update your library to result in a good - artist experience will be added to the FAQ. +- Added toggle to load non-music (Such as podcasts) #### What's Improved - Sorting now takes accented characters into account diff --git a/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt b/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt index 46bef4155..b2709cc9f 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt @@ -138,6 +138,10 @@ abstract class MediaStoreExtractor(private val context: Context, private val cac val args = mutableListOf() var selector = BASE_SELECTOR + if (settings.excludeNonMusic) { + selector += " AND ${MediaStore.Audio.AudioColumns.IS_MUSIC}=1" + } + if (dirs.dirs.isNotEmpty()) { // Need to select for directories. The path query is the same, only difference is // the presence of a NOT. @@ -359,8 +363,7 @@ abstract class MediaStoreExtractor(private val context: Context, private val cac * The base selector that works across all versions of android. Does not exclude * directories. */ - private const val BASE_SELECTOR = - "${MediaStore.Audio.Media.IS_MUSIC}=1 " + "AND NOT ${MediaStore.Audio.Media.SIZE}=0" + private const val BASE_SELECTOR = "NOT ${MediaStore.Audio.Media.SIZE}=0" } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt index a5065d7f1..3cd1ac636 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt @@ -225,6 +225,7 @@ class IndexerService : Service(), Indexer.Controller, Settings.Callback { override fun onSettingChanged(key: String) { when (key) { + getString(R.string.set_key_exclude_non_music), getString(R.string.set_key_music_dirs), getString(R.string.set_key_music_dirs_include), getString(R.string.set_key_separators) -> onStartIndexing() diff --git a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt index a11451c55..e449d2f95 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt @@ -266,6 +266,10 @@ class Settings(private val context: Context, private val callback: Callback? = n val shouldBeObserving: Boolean get() = inner.getBoolean(context.getString(R.string.set_key_observing), false) + /** Whether to load all audio files, even ones not considered music. */ + val excludeNonMusic: Boolean + get() = inner.getBoolean(context.getString(R.string.set_key_exclude_non_music), true) + /** Get the list of directories that music should be hidden/loaded from. */ fun getMusicDirs(storageManager: StorageManager): MusicDirs { val dirs = diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml index e0c1a0ccc..450173bbf 100644 --- a/app/src/main/res/values/settings.xml +++ b/app/src/main/res/values/settings.xml @@ -28,10 +28,11 @@ auxio_restore_state auxio_reindex + auxio_observing auxio_music_dirs auxio_include_dirs + auxio_exclude_non_music auxio_separators - auxio_observing KEY_SEARCH_FILTER diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 381a6413f..5f13eb4fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -222,7 +222,7 @@ Reload music May wipe playback state Automatic reloading - Reload your music library whenever it changes (Experimental) + Reload your music library whenever it changes (Requires persistent notification) Music folders Manage where music should be loaded from @@ -233,6 +233,8 @@ Include Music will only be loaded from the folders you add. + Exclude non-music + Ignore audio files that are not music, such as podcasts Multi-value separators Configure characters that denote multiple tag values Warning: Using this setting may result in some tags being incorrectly interpreted as having multiple values. diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index 4aae24aea..a28872f65 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -153,6 +153,12 @@ app:summary="@string/set_observing_desc" app:title="@string/set_observing" /> + +