Fix an issue where genres consisting only of whitespace crash the genre
parser, and thus the music loader.
Band-aid this by moving the trimming code out of splitEscaped and into
maybeParseSeparators. In a future version I'll need to figure out how I
want to handle these weird edge cases.
Move the music cache to the app storage.
This is actually long-term data, so it makes more sense to do app
storage where it's less likely to get mangled.
Drop item selections when navigating to another view.
This resolves issues that might occur if one were to navigate fast
enough to another view after selecting something. If I were to use a
unified toolbar, this wouldn't be needed, but that is a very far-flung
addition.
Strengthen Auxio-style UIDs.
These UIDs now leverage SHA-256 hashes with null values now writing
themselves as 0 in order to avoid possible message collissions from
other value arrangements.
Redocument the music module.
Much of it's documentation has drifted from reality as changes were
made, this commit completely redoes the documentation in order to
fix that.
Redocument the detail, home, image, and list modules.
Much of this project's documentation has drifted from actual
functionality, and newer code is pretty sparely documented.
This commit seeks to rectify that by redocumenting every source
file in this project.
Remove childish wording/diatribes from the codebase that were added
when I was younger.
I'm an adult now. I have to make this repository at least somewhat
professional.
Remove the about screen's reliance on the home data.
The home view's data can no longer be trusted now due to the "hide
collaborators" setting, so now the about screen uses statistics
derived from MusicStore itself. This also avoids constantly
resumming the duration when the UI is initially created.
Backport the code for full "Month + Year" dates to older versions with
the legacy Date API.
For the same of not missing bugs on newer devices, this is now what
will be used in Auxio.
Rework the music picker system to be a reactive, viewmodel-based system
instead of a janky UI system.
This should make it much easier to maintain and extend in the future.
Handle errors from databases.
Either way, a crash from a database or a silent error will be equally
nightmarish to debug. May as well keep going if they fail.
Try to move multi-artist playback/navigation into a single function.
This function is really bad and is tacked onto the most convienent
location without much thought. I really wish to move this into the
ViewModel flow eventually, but I have no idea how to architecture
that. Oh well.
Add a setting to hide "collaborators", that is artists that do not show
up on any album artist tags.
This is mostly for my own use since I don't get use from useless
collaborator entries.
If a song/album date has a month value, show it in the UI.
This hopefully improves the date experience for more well-tagged
libraries. Due to date limitations however, it is limited to
Android O onwards for now.
Add caching of already-parsed tag data.
This greatly reduces loading times when the music library has not
changed. This completes the music loader in it's entirety now.
Resolves#207.
Re-add parsing by escaped separators.
Previously I removed it becaue the regex parsing was not being
cooperative. Turns out we really do have to write our own parser
code. Fun.
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.
Use plural variants of vorbis artist/album artist tags.
Some people add these tags to signal the artist makeup of a song
when a player supports multiple artists while still allowing less
sophisticated players to operate with single-artist tags.
Add support for MusicBrainz IDs (MBIDs) in both grouping and UID
creation.
This should help with very large libraries where artist names
collide, thus requiring differentiation through other means. It also
theoretically opens the door to fetch online metadata, however I don't
really care for that and it would violate the non-connectivity promise
of Auxio.
Resolves#202.
Add semi-complete support for multiple artists.
This changeset completely reworks the music linker to add the following
new behaviors:
1. Artists are now derived from both artist and album artist tags,
with them being linked to songs and albums respectively
2. Albums and songs can now have multiple artists that can be distinct
from eachother
3. Previous Genre picking infrastructure has been removed and replaced
with artist picking infrastructure. "Play from genre" has been retired
entirely.
This is a clean break to the previous artist model and may not work
with all libraries. Steps to migrate the music library will be added
to the changelog.
Resolves#195.
Combine validation into a new finalization routine that now
individually validates and in the future may finalize certain
fields that require linking to be properly created.