android: a folder of audio files, and a paste of track links

The paste door now reads itself the way the desktop's does: one track link
in the paste and every line is looked up on its own public page
(playlist_import_track_links), which is the way past Spotify's 100-track
public ceiling — the wait screen counts them as they arrive. A fourth door
imports a folder of audio files off this phone, picked with the storage
plugin's own document-tree picker; playlist_import_folder grew a path
argument for it, because on Android it had no dialog to open and always
answered nothing. A YouTube playlist link needed no door at all — the link
one already dispatches it.
This commit is contained in:
KeelrLeek committed 2026-09-13 23:32:00 -05:00
1 parent 24c6857847
commit c737809325
9 files changed
+215 -47

No files matched your search

+29 -18
View File
@@ -349,14 +349,23 @@ describe / pin / duplicate / delete, `playlist_add_items`,
desktop's commands already emit; the page re-reads its rows when the
playlist's revision moves.
- **Importing** (`importer.svelte.js`, `screens/Import.svelte`): the
shelf's Import opens the doors that need no file — a link (YouTube ·
Spotify · Apple Music · TIDAL · Deezer), a pasted tracklist (plain lines,
a timestamped setlist, or track links), a YouTube DJ set's posted
tracklist. The backend stages the draft over plain HTTP (the same
commands as the desktop, no yt-dlp involved), the review screen shows
every row's verdict, the stream rows are verified against the catalog
while it is up (the desktop's pass, verbatim), and Create swaps the
review for the playlist it made (`nav.replace`).
shelf's Import opens four doors — a link (YouTube · Spotify · Apple
Music · TIDAL · Deezer; a YouTube playlist link rides this one too, the
backend dispatches it by host), a pasted tracklist (plain lines, a
timestamped setlist, or track links), a YouTube DJ set's posted
tracklist, and a folder of audio files on this phone. A paste holding
even one track link takes the link path (`playlist_import_track_links`,
the desktop's own detector verbatim): each line is read off its own
public page — the way past Spotify's 100-track public ceiling — and the
wait screen counts them as they come. The folder door picks with the
storage plugin's document-tree picker and hands the resolved path to
`playlist_import_folder`, which grew a `path` argument for it: on the
phone that command had no dialog to open and always answered nothing.
The backend stages the draft over plain HTTP (the same commands as the
desktop, no yt-dlp involved), the review screen shows every row's
verdict, the stream rows are verified against the catalog while it is up
(the desktop's pass, verbatim), and Create swaps the review for the
playlist it made (`nav.replace`).
- **The share sheet** (`crates/tauri-plugin-share`, `share.svelte.js`):
Share → SoulStream from any app. The plugin's `ShareActivity` (an
ACTION_SEND text/plain target, merged into the app's manifest from the
@@ -367,9 +376,9 @@ describe / pin / duplicate / delete, `playlist_add_items`,
anything else the pasted-tracklist door. The phone walk sends the intent
itself (`adb shell am start -a android.intent.action.SEND …`).
Not on the phone yet: the file and folder import doors (the files are on
the desktop), the listener door, drag reorder, the cover picker, export,
Share on SoulStream.
Not on the phone yet: the playlist-file door and export — both want a file
picker the storage plugin has still to grow — the listener door (it needs
yt-dlp, a desktop tool), drag reorder, and Share on SoulStream.
## Settings that reach the config
@@ -569,8 +578,9 @@ a catalog record, its Save and the Transfers burst → Gaps → the playlist
shelf and a page with every row kind (a local row, the stream row through
the resolver, the filter, a removal and its undo, unpin, rename, a new
playlist, Add to playlist from a record's sheet, delete) → the import doors
(a pasted tracklist, a link with its catalog verification, a share from
another app) → the playlist repair (an unknown row relinked from the
(a pasted tracklist, a link with its catalog verification, pasted track
links read a page each, a folder of audio files off the phone, a share
from another app) → the playlist repair (an unknown row relinked from the
library) → the artwork viewer → a queue row's sheet → a catalog song's,
a catalog card's and the record page's sheets → the now-playing Save →
a peer's sheet, a raw file's sheet, a user's shares browsed and a folder
@@ -616,11 +626,12 @@ paused) without the walk.
key, Who has it) — Freenet on the phone is a later experiment; the
network side is in. Rooms and chat are built and mock-walked; a live room
is Kyle's to join.
- The desktop-only doors and tools: the file and folder playlist imports,
the listener door and the lyric alignment models (a desktop runtime),
playlist export, drag reorder (Move up / down / to the top stand in), catalog track
previews, the full discography page, the artist-artwork upscaler,
updates and the account section (sign-in lives on Community).
- The desktop-only doors and tools: the playlist-file import and export (a
file picker the phone's storage plugin has still to grow), the listener
door and the lyric alignment models (a desktop runtime), drag reorder
(Move up / down / to the top stand in), catalog track previews, the full
discography page, the artist-artwork upscaler, updates and the account
section (sign-in lives on Community).
- Follows and the play history are per library folder, so the phone's own
folder starts empty of both; they arrive with a shared library.
- The artwork viewer: the cover at full size, pinch to zoom, one finger