From 213a0d5293605abb0ac0c673833eb26100bbbc03 Mon Sep 17 00:00:00 2001 From: skajmer <64442855+skajmer@users.noreply.github.com> Date: Sun, 7 Dec 2025 20:18:40 +0100 Subject: [PATCH 1/6] Add #298 --- app/src/main/res/values-pl/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5e6c3646..6e06d276 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -124,6 +124,10 @@ Albumy oznaczone gwiazdką będą dostępne offline Synchronizacja wykonawców oznaczonych gwiazdką Masz wykonawców oznaczonych gwiazdką, bez pobranej muzyki + + %d piosenka wymaga synchronizacji + %d piosenek wymaga synchronizacji + Najlepsze Odkrywanie Odtwórz wszystkie losowo From 475ed3e7c831bd6a30d9a5109a91d7d5d6536f6b Mon Sep 17 00:00:00 2001 From: skajmer <64442855+skajmer@users.noreply.github.com> Date: Wed, 10 Dec 2025 21:59:32 +0100 Subject: [PATCH 2/6] Add #300 --- app/src/main/res/values-pl/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 6e06d276..25148ad4 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -531,4 +531,6 @@ Zbieranie piosenek z folderu… Odtwarzanie %d piosenek Nie znaleziono piosenek w folderze + Sort recent searches chronologically Sortuj ostatnie wyszukiwania chronologicznie + Jeżeli włączone, sortuje wyszukiwania chronologicznie. Sortuje po naziwe jeżeli wyłączone. From c6df43da9ce160114e81313400453a6a73b4182a Mon Sep 17 00:00:00 2001 From: skajmer <64442855+skajmer@users.noreply.github.com> Date: Wed, 10 Dec 2025 22:01:19 +0100 Subject: [PATCH 3/6] left some english in by accident --- app/src/main/res/values-pl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 25148ad4..b8b79a06 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -531,6 +531,6 @@ Zbieranie piosenek z folderu… Odtwarzanie %d piosenek Nie znaleziono piosenek w folderze - Sort recent searches chronologically Sortuj ostatnie wyszukiwania chronologicznie + Sortuj ostatnie wyszukiwania chronologicznie Jeżeli włączone, sortuje wyszukiwania chronologicznie. Sortuje po naziwe jeżeli wyłączone. From 0b6879950752c7f14a05c610592a4cd21481649d Mon Sep 17 00:00:00 2001 From: Tymon Flower Date: Mon, 15 Dec 2025 18:25:28 +0100 Subject: [PATCH 4/6] Update description_empty_title in English and Polish --- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5e6c3646..aeb0ac64 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -61,7 +61,7 @@ Kontynuuj Miej na uwadze to że kontynuowanie tej operacji spowoduje usunięcie wszystkich pobranych plików z wszystkich serwerów. Usuwanie zapisanych plików - Brak opisu + Brak tekstu Płyta %1$s - %2$s Płyta %1$s Anuluj diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cf7985cd..ca37fc86 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -61,7 +61,7 @@ Continue Please be aware that continuing with this action will result in the permanent deletion of all saved items downloaded from all servers. Delete saved items - No description available + No lyrics available Disc %1$s - %2$s Disc %1$s Cancel From 0d329aff6483f7c7872f528c109d94a76cd4245c Mon Sep 17 00:00:00 2001 From: eddyizm Date: Wed, 17 Dec 2025 22:27:00 -0800 Subject: [PATCH 5/6] fix: checks preferecen and writes files externally, updates the ui --- .../ui/adapter/PlayerSongQueueAdapter.java | 27 ++++--- .../ui/fragment/PlayerQueueFragment.java | 71 ++++++++++++++----- 2 files changed, 70 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java index 14269b1c..f34990e0 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java @@ -23,6 +23,7 @@ import com.cappielloantonio.tempo.service.MediaManager; import com.cappielloantonio.tempo.subsonic.models.Child; import com.cappielloantonio.tempo.util.DownloadUtil; import com.cappielloantonio.tempo.util.Constants; +import com.cappielloantonio.tempo.util.ExternalAudioReader; import com.cappielloantonio.tempo.util.MusicUtil; import com.cappielloantonio.tempo.util.Preferences; import com.google.common.util.concurrent.ListenableFuture; @@ -31,7 +32,9 @@ import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; public class PlayerSongQueueAdapter extends RecyclerView.Adapter { private static final String TAG = "PlayerSongQueueAdapter"; @@ -39,7 +42,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter mediaBrowserListenableFuture; private List songs; - + private final Map downloadStatusCache = new ConcurrentHashMap<>(); private String currentPlayingId; private boolean isPlaying; private List currentPlayingPositions = Collections.emptyList(); @@ -80,7 +83,6 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter getItems() { return this.songs; } diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java index b2b13d90..f1c10371 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlayerQueueFragment.java @@ -21,6 +21,7 @@ import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.cappielloantonio.tempo.R; import com.cappielloantonio.tempo.databinding.InnerFragmentPlayerQueueBinding; import com.cappielloantonio.tempo.interfaces.ClickCallback; import com.cappielloantonio.tempo.service.DownloaderManager; @@ -32,6 +33,8 @@ import com.cappielloantonio.tempo.ui.adapter.PlayerSongQueueAdapter; import com.cappielloantonio.tempo.ui.dialog.PlaylistChooserDialog; import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.DownloadUtil; +import com.cappielloantonio.tempo.util.ExternalAudioReader; +import com.cappielloantonio.tempo.util.ExternalAudioWriter; import com.cappielloantonio.tempo.util.MappingUtil; import com.cappielloantonio.tempo.util.Preferences; import com.cappielloantonio.tempo.viewmodel.PlaybackViewModel; @@ -384,28 +387,62 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback { return; } - List mediaItemsToDownload = MappingUtil.mapMediaItems(queueSongs); + int downloadCount = 0; + + if (Preferences.getDownloadDirectoryUri() == null) { + List mediaItemsToDownload = MappingUtil.mapMediaItems(queueSongs); + List downloadModels = new ArrayList<>(); - List downloadModels = new ArrayList<>(); + for (Child child : queueSongs) { + com.cappielloantonio.tempo.model.Download downloadModel = + new com.cappielloantonio.tempo.model.Download(child); + downloadModel.setArtist(child.getArtist()); + downloadModel.setAlbum(child.getAlbum()); + downloadModel.setCoverArtId(child.getCoverArtId()); + downloadModels.add(downloadModel); + } - for (Child child : queueSongs) { - com.cappielloantonio.tempo.model.Download downloadModel = - new com.cappielloantonio.tempo.model.Download(child); - downloadModel.setArtist(child.getArtist()); - downloadModel.setAlbum(child.getAlbum()); - downloadModel.setCoverArtId(child.getCoverArtId()); - downloadModels.add(downloadModel); - } + DownloaderManager downloaderManager = DownloadUtil.getDownloadTracker(requireContext()); - DownloaderManager downloaderManager = DownloadUtil.getDownloadTracker(requireContext()); - - if (downloaderManager != null) { - downloaderManager.download(mediaItemsToDownload, downloadModels); - Toast.makeText(requireContext(), "Starting download of " + queueSongs.size() + " songs in the background.", Toast.LENGTH_SHORT).show(); + if (downloaderManager != null) { + downloaderManager.download(mediaItemsToDownload, downloadModels); + downloadCount = queueSongs.size(); + Toast.makeText(requireContext(), + getResources().getQuantityString(R.plurals.songs_download_started, downloadCount, downloadCount), + Toast.LENGTH_SHORT).show(); + + new Handler().postDelayed(() -> { + if (playerSongQueueAdapter != null) { + playerSongQueueAdapter.notifyDataSetChanged(); + } + }, 1000); + } else { + Log.e(TAG, "DownloaderManager not initialized. Check DownloadUtil."); + Toast.makeText(requireContext(), "Download service unavailable.", Toast.LENGTH_SHORT).show(); + } } else { - Log.e(TAG, "DownloaderManager not initialized. Check DownloadUtil."); - Toast.makeText(requireContext(), "Download service unavailable.", Toast.LENGTH_SHORT).show(); + for (Child song : queueSongs) { + if (ExternalAudioReader.getUri(song) == null) { + ExternalAudioWriter.downloadToUserDirectory(requireContext(), song); + downloadCount++; + } + } + + if (downloadCount > 0) { + Toast.makeText(requireContext(), + getResources().getQuantityString(R.plurals.songs_download_started, downloadCount, downloadCount), + Toast.LENGTH_SHORT).show(); + + new Handler().postDelayed(() -> { + if (playerSongQueueAdapter != null) { + playerSongQueueAdapter.notifyDataSetChanged(); + } + }, 2000); + } else { + Toast.makeText(requireContext(), "All songs already downloaded", Toast.LENGTH_SHORT).show(); + } } + toggleFabMenu(); } From 727e13700835efc279dde08c16f2e5b5c0f27cd2 Mon Sep 17 00:00:00 2001 From: pochopsp Date: Sat, 20 Dec 2025 12:07:00 +0100 Subject: [PATCH 6/6] Update description_empty_title in Italian --- app/src/main/res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ac0a4086..03e1e471 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -61,7 +61,7 @@ Continua Attenzione, procedendo questa azione eliminerà definitivamente tutti gli elementi scaricati da tutti i server. Elimina elementi salvati - Descrizione non disponibile + Testo non disponibile Disco %1$s - %2$s Disco %1$s Annulla