Commit graph

662 commits

Author SHA1 Message Date
Alexander Capehart
6ac757b952
list: move sort settings to module
Move sort settings from music -> list, since they're probably better
there anyway.
2023-07-25 21:01:54 -06:00
Alexander Capehart
d6d1071535
all: cleanup
Routine code inspection and cleanup, this time with the new lints from
android studio giraffe.
2023-07-25 20:45:30 -06:00
Alexander Capehart
68a9ce7b09
build: update deps
I didn't fully keep track of what I did this time, mostly since I was
busy wrangling some of the insane build issues from this gradle update.
2023-07-25 14:35:26 -06:00
Alexander Capehart
32a0d97e5d
list: add ability to play/shuffle songs in menu
Add play and shuffle options for all song menus.

These will override the shuffle state, unlike other song play
interactions.

This required a good bit of refactoring to menu, some of which
might be ported to other commands in future changes.
2023-07-11 15:09:30 -06:00
Alexander Capehart
4275fdbcf0
music: rename mode -> type
Rename MusicMode to MusicType.

The original naming was always a bit clunky given that it referred to
both settings and data configuration. I feel that "Type" is probably
better overall.
2023-07-11 12:08:51 -06:00
Alexander Capehart
0cd59ce4e0
all: redocument navigation system
Add documentation for the new navigation system, which largely
completes this change.
2023-07-04 21:44:34 -06:00
Alexander Capehart
b4394c3a4a
util: fix horrible numeric function naming
"nonZeroOrNull" is actuallly more apt as "positiveOrNull".
2023-07-04 15:16:08 -06:00
Alexander Capehart
7adf7f7beb
music: index negative replaygain tags
Caused by an absurd error stemming from absurd helper function naming.
2023-07-04 15:09:47 -06:00
Alexander Capehart
a6a3eceb7b
music: re-add add -> new playlist route
Re-add the add to playlist -> new playlist route that was accidentally
removed at some point.
2023-07-04 13:27:23 -06:00
Alexander Capehart
14107c9444
all: standardize nav consume usage
Standardize navigation command consumption to only occur when a
navigation route has *definitively* ended. If more commands could
come, observe them. Otherwise, consume immediately.
2023-07-04 13:20:13 -06:00
Alexander Capehart
c1158b1a07
list: add menu dialog framework
Add a dialog that shows menu information as a bottom sheet instead of as
a PopupMenu.

This did not take as much finessing of BottomSheetBehavior as the main
playback UI framework did, just some style redefinitions.
2023-07-03 14:28:32 -06:00
Alexander Capehart
fcbce0fb98
ui: fix issues from new nav
Fix miscellanious issues from the flattened nav graph system.

Nowhere near enough, largely counting on the planned bottom sheet menus
to eventually be able to ignore most of these issues.
2023-06-27 20:05:04 -06:00
Alexander Capehart
9b0e39919b
music: simplify playlist decision events
Simplify the 4 stateflows controlling when playlist decision dialogs
must be opened to just one enum.

This is like the detail view, and makes the amount of observers I have
to spin up much smaller.

Eventually, most of even these observer calls will be collapsed into
the menu itself.
2023-06-27 19:43:15 -06:00
Alexander Capehart
f8a0a42dd3
music: finalize duplicate tags fix
Officially finalize the fix for #484, at least I think.

Resolves #484.
2023-06-26 17:56:48 -06:00
Alexander Capehart
6f6a3d8d31
music: handle duplicate artist/genre values
Remove functionally duplicate artist/genre values that were read from
a file.

This caused a indexer crash in 3.1.2 due to the switch to music sets,
which no longer made duplicate values group the song twice. This then
cascaded to a failure in song finalization, as it expects there to be
the same amount of artists/genres as raw artists/genres.
2023-06-25 16:49:44 -06:00
Alexander Capehart
5bda85fe36
all: minor cleanup 2023-06-24 17:45:36 -06:00
Alexander Capehart
2adb34dffe
music: prevent deadlock on no-op refreshes
Fix a regression where the loading process will never stop on a no-op
refresh operation.

This was an oversight made in the redocumentation of the loading
process.
2023-06-24 17:30:56 -06:00
Alexander Capehart
992457f361
music: document indexing process
Further document the music indexing process.

It's so aggressively parallelized as to require some more extensive
comments to actually make it clear what's going on.
2023-06-24 10:34:31 -06:00
Alexander Capehart
ed7b4e1410
music: recognize spaced artist tags
Recognize artists sort, albumartists sort, and album artists tags.

These are written by mediafile, so they are probably also written by
other software.
2023-06-24 09:04:21 -06:00
Alexander Capehart
19e8536323
music: fix testing artifacts in loading process
Fix testing lines created when working on the prior commit.
2023-06-23 08:49:08 -06:00
Alexander Capehart
036d952085
music: avoid hanging on discovery errors
Do not hang when an error halts the discovery process.

This was an oversight with the previous band-aid fix regarding handling
errors in music loading. If something failed, the channels would not
close, resulting in the main loop consuming the channel hanging.

There's probably a deeper issue causing this in 3.1.2, but with this
fix I can actually start digging for it.
2023-06-23 08:43:21 -06:00
Alexander Capehart
7b4af3515d
music: prioritize earlier album artist info
Prioritize artist information from earlier albums (date-wise), as it's
less likely to change with the addition of new music.
2023-06-15 19:11:31 -06:00
Alexander Capehart
839861b6b8
music: fix grouping regressions
Fix regressions in grouping, mostly around the kind of music that is
prioritized and sort naming.
2023-06-15 12:58:10 -06:00
Alexander Capehart
31d647123f
music: use set for child information
Use sets for all child music information.

Unlike parent information, which usually has an ordering derived from
file information, child music information more or less doesn't, and
will be consistently re-interpreted by the app to apply user-configured
sorts.
2023-06-13 10:44:53 -06:00
Alexander Capehart
d22de34fd3
music: use sets for library information
Use a Set when storing all song, album, artist, and genre information.

These all have no consistent ordering due to parallelization, and
should be communicated as such.
2023-06-13 10:03:48 -06:00
Alexander Capehart
5b44c31689
music: sort song information
Sort song informtion in all MusicParent instances.

This is a temporary hack to band-aid music consistency between reloads,
as with the aggressive parallelization song order is no longer
consistent.
2023-06-13 09:37:18 -06:00
Alexander Capehart
530e427b79
music: improve library updates
Update library information in a synchronized block and then only
dispatch the update on the main thread.
2023-06-13 08:58:08 -06:00
Alexander Capehart
0771a75b5a
playback: ignore zeroed replaygain tags
Ignore ReplayGain adjustments that are just 0 dB.
2023-06-13 08:57:03 -06:00
Alexander Capehart
4ee20bc112
playback: fix regression regarding partial rgadj
Fix a regression where partial ReplayGain adjustments missing an album
or track component would not be indexed.

This was an oversight made when moving adjustments to the cache, as the
nullability model of ReplayGain adjustments changed.
2023-06-09 10:08:44 -06:00
Alexander Capehart
672c256b1e
music: group albums by raw artist keys
Properly group albums by raw artist keys, instead of by raw artist
instances.

This was an accidental regression in 3.1.1 that resulted in duplicate
albums in some circumstances.

Resolves #475.
2023-06-08 20:40:09 -06:00
Alexander Capehart
e848bea0bf
music: remove zero digit-likes from names
Remove all characters with a semantic meaning of "zero" from the start
of music names, at least when intelligent sorting is enabled.
2023-06-08 14:09:09 -06:00
Alexander Capehart
aaba858fcf
all: only use one fallback method for dbs
Only use fallbackToDestructiveMigration for all databases.

I thought you had to selectively enable downgrading as well, but
apparently that disables other destructive migrations. This was not
obvious at all and caused countless issues. Absolutely flooring.
2023-06-08 10:15:04 -06:00
Alexander Capehart
bce03a5833
playback: do not dynamically extract adjustments
Do not extract ReplayGain adjustments on the fly, instead doing them as
we go along.

This prevents an issue where the ReplayGain information would only be
applied a short period after playback start, which is heavily jarring.
2023-06-08 10:03:54 -06:00
Alexander Capehart
5ab46ba5d1
music: add userlibrary error returns
Make UserLibrary return some kind of error indicator if something
fails.

I don't have the framework for how the app will display these errors
just yet.
2023-06-07 20:10:07 -06:00
Alexander Capehart
a9a6d1ccc1
music: cleanup
Clean up parts of the music loader.
2023-06-07 20:08:57 -06:00
Alexander Capehart
8d97e86c8d
music: synchronize userlibrary value reads
Use synchronized when reading and writing values in UserLibrary.

Convention for all shared objects.
2023-06-07 19:40:31 -06:00
Alexander Capehart
07eefda67a
music: parallelize library creation
Make it so that the DeviceLibrary constructor streams all song
information instead of building the library on completion.

This has no measurable effect on loading times, but does appear visibly
faster to the user since the loading process is no longer stuck on the
"Loading your music library" step.
2023-06-07 19:32:22 -06:00
Alexander Capehart
8edfcd22c7
music: make grouping mechanism consistent
Actually bother to make the way music is grouped consistent, based on:
- The first track for albums
- The earliest album for artists
- The first song for genres
2023-06-07 15:15:51 -06:00
Alexander Capehart
927c4a056e
music: recognize (album)artistssort tags
Recognize albumartistssort and artistssort tags, which are apparently
written by beets.
2023-06-07 15:15:01 -06:00
Alexander Capehart
736f3ec6b7
playback: fix crash on state restore
Fix a crash stemming from applying the playback state on the main
thread instead of the background thread.

all: add misc todos
2023-06-03 09:12:41 -06:00
Alexander Capehart
182883ef2d
music: avoid redundant devicelibrary comparison
Avoid redundantly comparing DeviceLibrary instances based on parent
information already derived from song instances.
2023-06-03 09:02:39 -06:00
Alexander Capehart
d786cd16d7
all: cleanup
Pre-release clean-up.
2023-06-02 17:25:59 -06:00
Alexander Capehart
df174e22f6
music: cache hashcode in data
Cache the hashcode of song/album/artist/genre information so that it
can be calculated easily later.
2023-06-01 20:46:56 -06:00
Alexander Capehart
0d28bdf99e
music: remove unnecessary documentation
Remove unnecessary function documentation for private methods in
DeviceLibrary.
2023-06-01 20:18:02 -06:00
Alexander Capehart
a37df594e7
music: fix song build bottleneck
Fix redundant separator parsing obliterating loading performance.

If there are no separators configured, the parsing function would not
short-circuit and instead do a useless O(n) iteraton (including
escaping!), massively reducing performance.

Song build performance still isn't the best (blame intelligent
sorting), but it's definitely better now.
2023-06-01 20:16:39 -06:00
Alexander Capehart
f9ccb831d8
music: fix comparison issues
Fix a few problems with the current comparison algorithm:
1. It wasn't actually comparing the raw music information, only the
UIDs, which was redundant.
2. The comparison in the main music loading process occurred on the
main thread, which causes massive freeze-up issues.

Resolves #457.
2023-06-01 15:10:24 -06:00
Alexander Capehart
63f7627fbc
all: log listener additions
Log whenever a listener is added/removed.

This might make it easier to track concurrency issues stemming from
listener dispatch and addition occuring at the same time.
2023-05-29 09:24:06 -06:00
Alexander Capehart
10d05b1f26
all: fix log statements
Fix messy and useless log statements throughout the app.
2023-05-28 10:10:03 -06:00
Alexander Capehart
699227c1a8
all: relog project
Fill in a lot of code paths in the project with log statements in order
to improve the debugging experience.
2023-05-26 16:36:06 -06:00
Alexander Capehart
b037cfb166
music: improve sorting
Update sorting usage in-app so that it's only done when absolutely
necessary.
2023-05-25 13:47:11 -06:00