Start injecting shared object instances.
This is not a 100% conversion, as certain portions of the code are not
really ready for 100% DI constructors just yet.
Split off "raw" music (RawSong, RawAlbum) from real music impls
(RealSong, RealAlbum).
They don't really make sense as a sub-class anymore given that there is
no longer a canonical music datastructure.
Parallelize music loading.
- Queries over Media DB and Cache are ran parallel
- MediaStoreExtractor can now continue extracting songs independent
of MetadataExtractor's task pool capacity
- Library and Cache are saved in parallel
Resolves#343.
This should result in some pretty signifigant performance gains
due to the operations now being ran in parallel instead of
sequentially.
Hide the MusicStore implementation behind an interface, transforming it
into a new MusicRepository class.
This is in preparation for dependency injection.
Finally give up and use Room to persist the playback state.
This should make dependency injection much easier, and the
implementation isn't exactly the *worst*, as I was already using
"raw" data structures for the old queue database.
Split off the song property extraction code into a music package class.
This is part of an initiative to remove non-parameter uses of contexts
in ViewModels.
Split off the search algorithm from the ViewModel into a separate
object.
Part of an initiative to eliminate all non-parameter usage of contexts
in ViewModels.
Accept positions that are zeroed, but only if there are non-zero total
values as well.
Sometimes zeroed positions are deliberate, but other times they are
placeholders meant to indicate a lack of a position. To resolve this,
Auxio now considers zeroed track/disc numbers in the presence of
non-zero track/disc numbers to be valid.
Manually use our own navigation graph in the new settings view.
This avoids a crash that occurs with the default preferences navigation
(on some devices) where the differing app IDs between debug and release
makes it so that the fragments cannot be found. Because you know.
Android.
Disable the new instructions-based system for now.
The way I was doing reflection was likely far too unsafe and prone to
bugs. I'll want to do it some other way.
* Translated using Weblate (Spanish)
Currently translated at 100.0% (244 of 244 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/es/
* Translated using Weblate (Korean)
Currently translated at 100.0% (244 of 244 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ko/
* Translated using Weblate (Russian)
Currently translated at 100.0% (244 of 244 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/ru/
* Translated using Weblate (Korean)
Currently translated at 100.0% (27 of 27 strings)
Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/ko/
* Translated using Weblate (Czech)
Currently translated at 100.0% (245 of 245 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/
* Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/zh_Hans/
* Translated using Weblate (Czech)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/cs/
* Translated using Weblate (German)
Currently translated at 99.6% (255 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/de/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/es/
* Translated using Weblate (Italian)
Currently translated at 97.6% (250 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/it/
* 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 (Spanish)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/es/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/uk/
* Translated using Weblate (Lithuanian)
Currently translated at 100.0% (256 of 256 strings)
Translation: Auxio/Strings
Translate-URL: https://hosted.weblate.org/projects/auxio/strings/lt/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (27 of 27 strings)
Translation: Auxio/Metadata
Translate-URL: https://hosted.weblate.org/projects/auxio/metadata/uk/
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Hoseok Seo <ddinghoya@gmail.com>
Co-authored-by: kirill blaze <kirillblaze2@gmail.com>
Co-authored-by: Fjuro <ifjuro@proton.me>
Co-authored-by: Eric <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Co-authored-by: Alessandro <alessandro.cocco@outlook.com>
Co-authored-by: qwerty287 <ndev@web.de>
Co-authored-by: BMN <weblate@yopmail.com>
Co-authored-by: Dan <denqwerta@gmail.com>
Co-authored-by: Vaclovas lntas <vaclovas1999@gmail.com>
Completely rework the detail list implementations so that resorting the
song list causes a replace operation instead of a diff operation.
This finally makes the list experience consistent across the app.
Switch to item decorations to manage header dividers.
This is much more reliable than encoding it in-data. Only cost comes in
that it forces me to backport yet another component since I still can't
update MDC after over half a year.
Redesign the header component to be more aligned with M3 guidelines.
This includes moving the divider to the top when reasonable, using a
smaller font size, and using a tinted coloration to separate itself
from the list contents.
Make list instructions generic in preparation for the detail list
update.
Detail views need their own instructions datatype, so this is meant to
allow that to be implemented without issue.
Split up the settings ui into four categories.
This should reduce the visual load on the user as Auxio continues to
accrue possible configuration options.
Resolves#323.
Leverage the new UpdateInstructions system to allow the home view to
diff the lists on music updates, and then replace the lists on
resorting events.
This just improves quality-of-life overall.
Reorganize the music folders dialog to be more visually straightforward
than prior, primarily by grouping the folder elements into the same
visual region.
Resolves#318.
Just pre-emptively add support for TXXX variations of the non-standard
vorbis artist fields to the ID3v2 parser.
I'd imagine the naming convention will be similar between them, so why
not.
Make all adapters relying on diffing unified into a DiffAdapter
superclass that can then accurately respond to the new
UpdateInstructions data.
UpdateInstructions is still not fully used everywhere, but will be
soon.