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