Backport from the iOS version: offline downloads, home-first reconnect, stall warning, Close

- Downloads for offline listening: long-press a track, album, artist or
  playlist -> Download; Menu -> Downloads lists them (progress, space used/free,
  play/shuffle, retry, remove). Saved on the SD card (Android/data/com.minamp/
  files/downloads). MP3 originals kept as they are unless above a lower
  download quality; the rest transcoded to MP3 (320 kbps by default). One at a
  time, Range resume for originals, retried when the server is back, Wi-Fi lock.
- Downloaded tracks play from the SD card, offline too; plays made offline
  are reported to Plex when a connection works again.
- Server.pick: when last time's connection was remote, give the plain home
  addresses 2 s first (a hairpinned remote address kept us encrypted and
  capped at home). test/PreferHomeTest.java.
- Playback "playing" but not moving for 12 s: say so instead of staying silent.
- Menu -> Close Minamp: stop the music and close every screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
XoséandClaude Opus 5.5 committed 2026-10-17 16:03:46 +02:00
1 parent f7f49ecfbb
commit f9050bbac0
15 files changed
+933 -43

No files matched your search

+2
View File
@@ -88,6 +88,8 @@ def slots(D):
("pin status", ["pin_not_yet"], D["text_sub"], False, lambda W: W - 40 - 24, 3, ("12", "11")),
("pin instructions", ["pin_open"], D["text_sub"], False, lambda W: W - 40, 2, ()),
("queue title", ["up_next"], D["text_title"], True, lambda W: W - 3 * D["touch"] - 12, 1, ()),
("downloads title (back + one action)", ["downloads"], D["text_title"], True, lambda W: W - 2 * D["touch"] - 12, 1, ()),
("downloads empty", ["dl_empty"], D["text_status"], False, lambda W: W - 48, 5, ()),
("search hint", ["search_hint"], D["text_body"], False, lambda W: W - D["touch"] - 12 - 20, 1, ()),
("status message", ["queue_empty", "no_playlists", "pick_something", "nothing_playing"], D["text_status"], False,
lambda W: W - 48, 2, ()),
+28
View File
@@ -230,6 +230,34 @@ S = {
"searching": ("Searching…", "Buscando…"),
"nothing_found_q": ("Nothing found for “%1$s”", "Non se atopou nada para “%1$s”"),
# downloads (offline listening)
"downloads": ("Downloads", "Descargas"),
"download": ("Download", "Descargar"),
"remove_download": ("Remove download", "Borrar a descarga"),
"downloading_x": ("Downloading %1$s…", "Descargando %1$s…"),
"queued_n": ("%1$d tracks added to downloads", "%1$d pistas engadidas ás descargas"),
"already_downloaded": ("Already downloaded", "Xa está descargado"),
"dl_waiting": ("Waiting", "Agardando"),
"dl_progress": ("Downloading %1$d%%", "Descargando %1$d%%"),
"dl_failed": ("Failed: %1$s (tap to retry)", "Fallou: %1$s (toca para tentar de novo)"),
"dl_retrying": ("Will retry when the server is reachable", "Tentarase de novo cando se poida conectar co servidor"),
"dl_summary": ("%1$d tracks · %2$s · %3$s free", "%1$d pistas · %2$s · %3$s libres"),
"dl_empty": ("Nothing downloaded yet.\nLong-press an album, playlist or track and choose Download.",
"Aínda non descargaches nada.\nMantén premido un álbum, lista ou pista e escolle Descargar."),
"dl_in_progress": ("In progress", "En curso"),
"dl_done_section": ("On this phone", "Neste teléfono"),
"dl_no_space": ("Not enough free space", "Non hai espazo libre abondo"),
"delete_all_downloads": ("Delete all downloads", "Borrar todas as descargas"),
"delete_all_confirm": ("Delete every downloaded track from this phone?", "Borrar deste teléfono todas as pistas descargadas?"),
"cancel_downloads": ("Cancel pending downloads", "Cancelar as descargas pendentes"),
"set_dl_quality": ("Download quality: %1$s", "Calidade das descargas: %1$s"),
"dl_quality_title": ("Download quality", "Calidade das descargas"),
"dl_quality_original": ("Original MP3s, others 320 kbps", "MP3 orixinais, o resto a 320 kbps"),
"set_delete_downloads": ("Delete all downloads (%1$s)", "Borrar todas as descargas (%1$s)"),
"downloaded": ("Downloaded", "Descargada"),
"quit_app": ("Close Minamp", "Pechar Minamp"),
"stalled": ("Playback is stuck. Try pausing and playing again.", "A reprodución quedou parada. Proba a pausar e reproducir de novo."),
# pure-Java layers (looked up by name through com.minamp.util.Tr)
"tr_kind_home": ("Home network", "Rede da casa"),
"tr_kind_direct": ("Direct", "Directa"),