- Make the interpreters use a more conventional naming structure
- Remove the redundant file name extraction that is largely an artifact
of older versions
Split the version-specific components into "Interpreters" that are then
composed into MediaStoreExtractor. This is both a nicer design and also
allows me to resolve an evil Huawei bug that prevents me from using the
new path fields.
Resolves#592
The context of the "New Playlist" dialog can differ depending on the
action performed, such as adding to a playlist or importing a playlist.
We need to make sure we're still showing the right message once this
is done.
Add more types of playlist messages corresponding to other actions, so
they can be indicated in the UI only when the process is complete.
This is somewhat incomplete. It does not include indicating errors for
other playlist operations (Which I want to do), and neither does it
handle situations in which some playlist operations and up reducing
to others (i.e import -> create). I need to do that later.
Add a menu option that allows you to import a playlist file into an
existing playlist.
This is useful for keeping Auxio playlists up to date with a remote
source.
Add configuration options for:
- Using windows-compatible paths with \ separators and C:\\ volume
prefixes
- Switching between relative and absolute paths
- Turns out path extraction via MediaStore doesn't work, have to grok
the URI format.
- Added playlist name extraction
- Proactively handling whitespace
Always decode with ffmpeg before decoding with MediaCodec.
MediaCodec is unreliable on some devices in such a way as to cause a
full loading failure on them. Prevent this by using ffmpeg.
At some point, the switch to keying raw music information broke my
mitigation for duplicate tags that use similar cases. This then
crashed the music loader in certain cases. Fix it by making the
check use raw music keys.
Resolves#614
Only include an artists explicit albums (ones directly linked w/album
artist) in their count.
This is arguably more appropriate than the prior behavior, given
Auxio's collaborator/artist distinction.
Resolves#581.
This is part of the MusicBrainz spec, but I didn't think of implementing
it. Turns out it's stupidly common among music releases, so may as well.
Resolves#590.
Recently, Android 14 seemed to have finally made it impossible to start
services in onStart. I never realized this error since I thought
onStart signified the beginning of the foreground state, when it was
actually onResume. I think it only worked prior due to race conditions.
Try to fix it by moving the service starting code to onResume.
See #608.
- Use Replace instead of Diff for now since that avoids the scroll
state freaking out. In practice I'll likely need to radically refactor
this system (AGAIN...) to make the queue updates 100% fine-grained,
even during shuffling.
- Remove the behaivor of staying paused on the next track. That's
covered by #568.
M4A has it's own multi-value spec that works similarly to vorbis, where
they just repeat the atom several times with multiple values. Since M4A
atoms are remapped to ID3v2 frames, this more or less requires us to
tolerate duplicate ID3v2 frames as well, which is frustratingly a spec
violation. It solves the problem though
Resolves#558.
Completely misunderstood how this would affect the widget/notification
on Android 14. Apparently it just blocks all intents, even if they are
tangentially from the app.
Resolves#598.