add gonic to test servers setup
gather artist image URLs on allArtists to remove weird Future<Uri> interface for artist images
move source options around
Currently translated at 82.0% (55 of 67 strings)
Translated using Weblate (Czech)
Currently translated at 1.4% (1 of 67 strings)
Added translation using Weblate (Czech)
Co-authored-by: Roman <peposik.r@seznam.cz>
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/cs/
Translation: Subtracks/subtracks
Currently translated at 100.0% (67 of 67 strings)
Translated using Weblate (Portuguese)
Currently translated at 11.9% (8 of 67 strings)
Added translation using Weblate (Portuguese)
Co-authored-by: Joel Calado <joelcalado@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/pt/
Translation: Subtracks/subtracks
* get all song coverArt as they are rendered
doing it all up front was too heavy
temporarily disabled mapping artwork in setQueue, need to fix this
* use cache data for track artwork when available
* fix round art in context menu for songs
* set only the first artwork at play time
then set the rest in the playback service
* handle both cached images and fetching images
* remove commented code
* fix shuffle
fix first thumbnail not being updated on shuffle for now playing background
* basic i18n poc
* translate home, filters, tabs
support dot notation in backend for namespaces
* i18n context menu, artist filters, list controls
also nothings here
fix backend not caching fallback
* i18n queue, artist view, search/results
* i18n settings and server view
* Added translation using Weblate (Norwegian Bokmål)
* Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (6 of 6 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/nb_NO/
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/
* Update translation files
Updated by "Cleanup translation files" hook in Weblate.
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/
* fix url escaping
* added some mostly naive text overflow fixes
rewrote filter context menu as a slide in because the old one apparently can't handle dynamic width
* Added translation using Weblate (French)
* Translated using Weblate (French)
Currently translated at 17.4% (11 of 63 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* Translated using Weblate (French)
Currently translated at 19.0% (12 of 63 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* Translated using Weblate (French)
Currently translated at 40.0% (26 of 65 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* add weblate and some pretty badges to readme
* fix link
* Translated using Weblate (French)
Currently translated at 50.7% (33 of 65 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* Translated using Weblate (English)
Currently translated at 100.0% (65 of 65 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/en/
* Translated using Weblate (French)
Currently translated at 90.7% (59 of 65 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* i18n now playing context type
fix overscroll on new filter menu
fix getting default namespace from the i18n backend
* Translated using Weblate (French)
Currently translated at 96.9% (63 of 65 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (66 of 66 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/fr/
* Translated using Weblate (Japanese) (#98)
Currently translated at 7.5% (5 of 66 strings)
Translation: Subtracks/subtracks
Translate-URL: https://hosted.weblate.org/projects/subtracks/subtracks/ja/
Co-authored-by: Austin Riedhammer <austinried@functionkey.xyz>
* little note to remind me why that's there
* update licenses
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Clyhtsuriva <aimeric@adjutor.xyz>
async-storage 1.17.3: required updating sdk to 31, kotlin to 1.6.10
react-native-track-player 2.1.3: added new "android:exported" prop required by API 31
react-native-fs: 2.19.0
* initial react-query experiments
* use queries for item screens
send the data we do have over routing to prepopulate (album/playlist)
use number for starred because sending Date freaks out react-navigation
* add in equiv. song cover art fix
* reorg, switch artistview over
start mapping song cover art when any are available
* refactor useStar to queries
fix caching for starred items and album cover art
* add hook to reset queries on server change
* refactor search to use query
* fix song cover art setting
* use query for artistInfo
* remove last bits of library state
* cleanup
* use query key factory
already fixed one wrong key...
* require coverart size
* let's try no promise queues on these for now
* image cache uses query
* perf fix for playlist parsing
also use placeholder data so we don't have to deal with staleness
* drill that disabled
also list controls doesn't need its own songs hook/copy
* switch to react-native-blob-util for downloads
slightly slower but allows us to use DownloadManager, which backgrounds downloads so they are no longer corrupted when the app suspends
* add a fake "top songs" based on artist search
then sorted by play count/ratings
artistview should load now even if topSongs fails
* try not to swap between topSongs/search on refetch
set queueContext by song list so the index isn't off if the list changes
* add content type validation for file fetching
also try to speed up existing file return by limiting fs ops
* if the HEAD fails, don't queue the download
* clean up params
* reimpl clear image cache
* precompute contextId
prevents wrong "is playing" when any mismatch between queue and list
* clear images from all servers
use external files dir instead of cache
* fix pressable disabled flicker
don't retry topsongs on failure
try to optimize setqueue and fixcoverart a bit
* wait for queries during clear
* break out fetchExistingFile from fetchFile
allows to tell if file is coming from disk or not
only show placeholder/loading spinner if actually fetching image
* forgot these wouldn't do anything with objects
* remove query cache when switching servers
* add content-disposition extension gathering
add support for progress hook (needs native support still)
* added custom RNBU pkg with progress changes
* fully unmount tabs when server changes
prevents unwanted requests, gives fresh start on switch
fix fixCoverArt not re-rendering in certain cases on search
* use serverId from fetch deps
* fix lint
* update licenses
* just use the whole lodash package
* make using cache buster optional
* start of music store refactor
moving stuff into a state cache
better separate it from view logic
* added paginated list/album list
* reworked fetchAlbumList to remove ui state
refactored home screen to use new method
i broke playing songs somehow, JS thread goes into a loop
* don't reset parts manually, do it all at once
* fixed perf issue related to too many rerenders
rerenders were caused by strict equality check on object/array picks
switched artistInfo to new store
updated zustand and fixed deprecation warnings
* update typescript
and use workspace tsc version for vscode
* remove old artistInfo
* switched to new playlist w/songs
removed more unused stuff
* remove unused + (slightly) rework search
* refactor star
* use only original/large imges for covers/artist
fix view artist from context menu
add loading indicators to song list and artist views (show info we have right away)
* set starred/unstar assuming it works
and correct state on error
* reorg, remove old music slice files
* added back fix for song cover art
* sort artists by localCompare name
* update licenses
* fix now playing background grey bar
* update react-native-gesture-handler
for node-fetch security alert
* fix another gradient height grey bar issue
* update licenses again
* remove thumbnail cache
* rename to remove "Library" from methods
* Revert "remove thumbnail cache"
This reverts commit e0db4931f1.
* use ids for lists, pull state later
* Revert "use only original/large imges for covers/artist"
This reverts commit c9aea9065c.
* deep equal ListItem props for now
this needs a bigger refactor
* use immer as middleware
* refactor api client to use string method
hoping to use this for requestKey/deduping next
* use thumbnails in list items
* Revert "refactor api client to use string method"
This reverts commit 234326135b.
* rename/cleanup
* store servers by id
* get rid of settings selectors
* renames for clarity
remove unused estimateContentLength setting
* remove trackplayer selectors
* fix migration for library filter settings
* fixed shuffle order reporting wrong track/queue
* removed the other selectors
* don't actually need es6/react for our state
* fix slow artist sort on star
localeCompare is too slow for large lists
* upgrade RN to 0.67-rc.6
upgrade react-native-reanimated to 2.3.1
debug and release building/working
* update to RN stable 0.67
* yarn upgrade
also use xmldom builtin types
* ignore ndk dir for linting
* upgrade types (RN 0.67 not out yet)
* remove deprecated rule
* actually i like that one, keep for now
* update licenses
* upgrade RN types and use builtin dep
* upgrade RN 0.67.1
* FEATURE: add plain text password toggle to settings
* clean up state types, lint, and add migrate
Co-authored-by: austinried <4966622+austinried@users.noreply.github.com>
Subtracks does not contain advertisements, and does not collect personal data. I am not interested in advertisements or your personal data at all. There is no Subtracks server for any data to be sent to, so no information is ever transmitted to me or stored by me outside of your device in any way.
The only data that is stored on your device is information about the music on the servers that you choose to connect to. Data that is transmitted to those servers is subject to that server's privacy policy, and I do not collect or store it.
## Contact
If you have any questions about this policy, you may contact me at: subtracks(@)functionkey(.)xyz
Subtracks is an Android open source music streaming app for [Subsonic-API-compatible](http://www.subsonic.org/pages/api.jsp) servers ([Subsonic](http://www.subsonic.org/pages/index.jsp), [Navidrome](https://www.navidrome.org/), [Airsonic](https://airsonic.github.io/), and more). It's designed to give you clean and convenient access to your music in the style of modern media players.
# Screenshots
<p float="left">
#### Subtracks is an Android open source music streaming app for [Subsonic-compatible](http://www.subsonic.org/pages/api.jsp) servers ([Subsonic](http://www.subsonic.org/pages/index.jsp), [Navidrome](https://www.navidrome.org/), [Airsonic](https://airsonic.github.io/), and more). It's designed to give you clean and convenient access to your music in the style of modern media players.

[](https://github.com/austinried/subtracks/releases/latest/)
[](https://github.com/austinried/subtracks/releases/)
>Each download source above is signed with a different key, so you cannot switch between them without first uninstalling and then re-installing the app.
## ✨ Features
# Features
- Album and artist art display by default (full-res in detail/now playing views)
- Gapless playback
- Mulitple server support
@@ -27,7 +47,8 @@ Subtracks is an Android open source music streaming app for [Subsonic-API-compat
- Loop and shuffle playback options
- Long-press for context menu shortcuts
# Coming Soon™
## 🔜 Coming Soon™
- Offline support
- Customizable home screen categories
- Browse by folder support (currently only browses by tags)
@@ -37,3 +58,20 @@ Subtracks is an Android open source music streaming app for [Subsonic-API-compat
- Queue management (add/remove/sort)
- Multi-select actions
- Performance & animation improvements
- More shuffle play modes
## ⚙️ Building
See [Building from source](BUILDING.md).
## 🔤 Translations
Want to see Subtracks in your language? Visit the project on [Weblate](https://hosted.weblate.org/engage/subtracks/) to help!
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.