Add a real playlist naming dialog and UX flow.
This is a bit rough at the moment since theres a good amount of nuance
here. Should improve as the playlist implementation continues to grow
more fleshed out.
Unwind the picker abstraction into smaller dialog packages.
While this increases repetition, it will make the playlist dialog
implementations much less shoddy.
Re-add the tryAsync wrapper function to the loading process to properly
handle music loading errors.
Turns out there is basically no other way to properly do this except for
the insane exception -> Result -> exception hack.
Refactor the music name implementation to do the following:
1. Unify normal and sort names under a single datatype
2. Handle arbitrary-length digit strings
3. Ignore puncutation regardless of the intelligent sort
configuration, as it is trivially localizable.
Resolves#423.
Co-authored by: ChatGPT-3.5
Move everything over to the media3 library instead of ExoPlayer.
Media3 is worse in every way. It labels half of ExoPlayer as "unsafe"
because it thinks that it's garbage uwu "helpful" abstractions are
perfectly servicable when in reality they are a pile of garbage filled
with insane performance issues, race conditions, and a seeming lack
of awareness to the sheer absurdity of android's media APIs. It is
absolutely horrible, but ExoPlayer will stop being maintained soon
and I will have to move over for further maintenance.
Correctly bubble failures in the music loading process.
Do it the easy way and simply map to a result, then backl to an
exception. I need to actually just make it fully bubble event
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/
* Translated using Weblate (Czech)
Currently translated at 100.0% (260 of 260 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/
* Translated using Weblate (German)
Currently translated at 100.0% (260 of 260 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/de/
* Translated using Weblate (Russian)
Currently translated at 100.0% (260 of 260 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ru/
* Translated using Weblate (Lithuanian)
Currently translated at 100.0% (260 of 260 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/lt/
* Translated using Weblate (Belarusian)
Currently translated at 100.0% (260 of 260 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/be/
* Translated using Weblate (Czech)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/
* Translated using Weblate (German)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/de/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/es/
* Translated using Weblate (Korean)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ko/
* Translated using Weblate (Russian)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ru/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/uk/
* Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/zh_Hans/
* Translated using Weblate (Belarusian)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/be/
* Translated using Weblate (Lithuanian)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/lt/
* Added translation using Weblate (Odia)
* Added translation using Weblate (Finnish)
* Translated using Weblate (Odia)
Currently translated at 0.7% (2 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/or/
* Translated using Weblate (Greek)
Currently translated at 45.5% (119 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/el/
* Translated using Weblate (Italian)
Currently translated at 99.6% (260 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/it/
* Translated using Weblate (Polish)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/uk/
* Translated using Weblate (Croatian)
Currently translated at 100.0% (30 of 30 strings)
Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/hr/
* Translated using Weblate (Croatian)
Currently translated at 100.0% (261 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/hr/
* Translated using Weblate (Odia)
Currently translated at 1.9% (5 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/or/
* Translated using Weblate (Finnish)
Currently translated at 90.0% (235 of 261 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/fi/
---------
Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: Vaclovas Intas <vaclovas1999@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Hoseok Seo <ddinghoya@gmail.com>
Co-authored-by: BMN <weblate@yopmail.com>
Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: Jiri Grönroos <jiri.gronroos@iki.fi>
Co-authored-by: Subham Jena <subhamjena8465@gmail.com>
Co-authored-by: Ricardo Feleque <rnfeq869w@relay.firefox.com>
Co-authored-by: atilluF <atilluF@users.noreply.hosted.weblate.org>
Co-authored-by: Maciej Klupp <maciej.klupp@gmail.com>
Co-authored-by: Milo Ivir <mail@milotype.de>
Refactor the weird picker god module into specific sub-impls in
playback and a new navigation package.
I cannot keep this unified. The needs are too different among each
picker. Better to keep it separate, especially in preparation for
the playlist dialogs.
If the user clicks on the playback bar in any context, including the
queue view, open the playback panel.
This adds another means to closing the queue that does not involve
swiping.
Resolves#402.
Make the numeric sort name handling added prior dependent on a new
"Intelligent Sorting" setting that also controls the article checks.
This kind of behavior might not be desirable in all cases, and it makes
the setting more consistent anyway.
Make the numeric sort name handling added prior dependent on a new
"Intelligent Sorting" setting that also controls the article checks.
This kind of behavior might not be desirable in all cases, and it makes
the setting more consistent anyway.
Refactor the disjoint Library and Playlist setup into two new
DeviceLibrary and UserLibrary implementations.
This makes the API surface a bit less disjoint than prior.
Unify Indexer and MusicRepository into a single class.
This is meant to create a single dependency on PlaylistDatabase and
reduce the amount of orchestration.
* Translated using Weblate (Arabic (ar_IQ))
Currently translated at 58.9% (151 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ar_IQ/
* Added translation using Weblate (Hebrew)
* Translated using Weblate (Hebrew)
Currently translated at 96.5% (28 of 29 strings)
Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/he/
* Translated using Weblate (Hebrew)
Currently translated at 61.7% (158 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/he/
* Translated using Weblate (German)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/de/
* Translated using Weblate (Polish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
* Translated using Weblate (Polish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
* Translated using Weblate (Polish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
* Translated using Weblate (German)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/de/
* Translated using Weblate (German)
Currently translated at 100.0% (29 of 29 strings)
Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/de/
* Translated using Weblate (Galician)
Currently translated at 98.0% (251 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/gl/
* Translated using Weblate (Polish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
* Translated using Weblate (Polish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
* Translated using Weblate (Polish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/pl/
---------
Co-authored-by: Moayad Ahmed <meayad1728383@gmail.com>
Co-authored-by: FAYE <pl4gve@gmail.com>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: Maciej Klupp <maciej.klupp@gmail.com>
Co-authored-by: Макар Разин <makarrazin14@gmail.com>
Co-authored-by: C. Rüdinger <Mail-an-CR@web.de>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Due to a sudden pivot to starting from repository backwards with
playlists, there were some half-baked changesets lying around that
I forgot to revert. Do that.
Add the boilerplate code for the playlist system.
Any functionality is runtime only and is not integrated in-app. Plan is
to build the UI scaffold first followed by the backing playlist.
Separate the header information into it's own adapter, and concatenate
it with the prior adapter.
This way, it can be updated separately without a jarring list update.
Broadcast the audiofx session when playing/pausing rather than starting
and stopping.
This is apparently the more correct way to do this.
Resolves#391.
Add fine-grained updates to the queue view.
Should do the following:
1. Make queue updates faster (no diff calculation)
2. Resolve some bugs regarding duplicate queue items.
3. Finally complete the new list framework.
Resolves#350Resolves#335Resolves#380
Re-add the fine-grained updates that were removed prior due to state
concerns.
This time they should be safe enough to use, as the differ has been
fully vendored. The change is not complete enough however, as the queue
view has not been properly ported to use these updates just yet.
Not adding this broke MP4-AAC files for some insane reason. Google devs
try not to maintain two near-identical products with only slightly
infuriating differences challenge (IMPOSSIBLE)
Resolves#388.
Now that Library is no longer a data class, it needs to have an
implementation of equals.
This caused all reloads to be interpreted as new libraries, even when
they were not.
Add a setting to remove hard-coded sort names based on articles.
This feature is nice, but does not work with some non-english music.
Those individuals should have the ability to disable it.
The implementation honestly is not the greatest, primarily because it
does a 100% reload when it could just regenerate the library. Auxio's
current music model isn't really designed for that, so it will do this
until a need to that kind of "soft reload" really arises.
Resolves#359.
Fix an issue where audio info extraction would break if done
consequtively.
Accidentally released a global state instance of the extractor. Now
that it's a local instance, the issue should not occur.
Fix an issue where stripping of the FFMpeg extension would not occur,
as AGP would try to default to an entirely different NDK version.
Eventually I'm considering just vendoring the FFMpeg extension outright
once I can upstream some of the ExoPlayer patches.
Move the ExoPlayer build process into gradle by leveraging some shell
scripting and submodule magic.
This more or less kills all windows compatibility, but that is fine.
Who even develops on windows?