aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--subsonic-android/src/github/daneren2005/subphonic/service/DownloadService.java1
-rw-r--r--subsonic-android/src/github/daneren2005/subphonic/service/DownloadServiceImpl.java30
2 files changed, 28 insertions, 3 deletions
diff --git a/subsonic-android/src/github/daneren2005/subphonic/service/DownloadService.java b/subsonic-android/src/github/daneren2005/subphonic/service/DownloadService.java
index 58b9e8e8..1301464f 100644
--- a/subsonic-android/src/github/daneren2005/subphonic/service/DownloadService.java
+++ b/subsonic-android/src/github/daneren2005/subphonic/service/DownloadService.java
@@ -33,6 +33,7 @@ import github.daneren2005.subphonic.domain.RepeatMode;
public interface DownloadService {
void download(List<MusicDirectory.Entry> songs, boolean save, boolean autoplay, boolean playNext, boolean shuffle);
+ void downloadBackground(List<MusicDirectory.Entry> songs, boolean save);
void setShufflePlayEnabled(boolean enabled);
diff --git a/subsonic-android/src/github/daneren2005/subphonic/service/DownloadServiceImpl.java b/subsonic-android/src/github/daneren2005/subphonic/service/DownloadServiceImpl.java
index c7256a84..70438ad8 100644
--- a/subsonic-android/src/github/daneren2005/subphonic/service/DownloadServiceImpl.java
+++ b/subsonic-android/src/github/daneren2005/subphonic/service/DownloadServiceImpl.java
@@ -66,6 +66,7 @@ public class DownloadServiceImpl extends Service implements DownloadService {
private final IBinder binder = new SimpleServiceBinder<DownloadService>(this);
private MediaPlayer mediaPlayer;
private final List<DownloadFile> downloadList = new ArrayList<DownloadFile>();
+ private final List<DownloadFile> backgroundDownloadList = new ArrayList<DownloadFile>();
private final Handler handler = new Handler();
private final DownloadServiceLifecycleSupport lifecycleSupport = new DownloadServiceLifecycleSupport(this);
private final ShufflePlayBuffer shufflePlayBuffer = new ShufflePlayBuffer(this);
@@ -218,6 +219,15 @@ public class DownloadServiceImpl extends Service implements DownloadService {
}
lifecycleSupport.serializeDownloadQueue();
}
+ public synchronized void downloadBackground(List<MusicDirectory.Entry> songs, boolean save) {
+ for (MusicDirectory.Entry song : songs) {
+ DownloadFile downloadFile = new DownloadFile(this, song, save);
+ backgroundDownloadList.add(downloadFile);
+ }
+
+ checkDownloads();
+ lifecycleSupport.serializeDownloadQueue();
+ }
private void updateJukeboxPlaylist() {
if (jukeboxEnabled) {
@@ -418,7 +428,10 @@ public class DownloadServiceImpl extends Service implements DownloadService {
@Override
public synchronized List<DownloadFile> getDownloads() {
- return new ArrayList<DownloadFile>(downloadList);
+ List<DownloadFile> temp = new ArrayList<DownloadFile>();
+ temp.addAll(downloadList);
+ temp.addAll(backgroundDownloadList);
+ return temp;
}
/** Plays either the current song (resume) or the first/next one in queue. */
@@ -774,7 +787,7 @@ public class DownloadServiceImpl extends Service implements DownloadService {
return;
}
- if (downloadList.isEmpty()) {
+ if (downloadList.isEmpty() && backgroundDownloadList.isEmpty()) {
return;
}
@@ -794,7 +807,7 @@ public class DownloadServiceImpl extends Service implements DownloadService {
}
// Find a suitable target for download.
- else if (currentDownloading == null || currentDownloading.isWorkDone() || currentDownloading.isFailed()) {
+ else if (currentDownloading == null || currentDownloading.isWorkDone() || currentDownloading.isFailed() && !downloadList.isEmpty()) {
int n = size();
if (n == 0) {
@@ -821,6 +834,17 @@ public class DownloadServiceImpl extends Service implements DownloadService {
i = (i + 1) % n;
} while (i != start);
}
+ else if(!backgroundDownloadList.isEmpty()) {
+ for(int i = 0; i < backgroundDownloadList.size(); i++) {
+ DownloadFile downloadFile = backgroundDownloadList.get(i);
+ if (!downloadFile.isWorkDone() && downloadFile.shouldSave()) {
+ currentDownloading = downloadFile;
+ currentDownloading.download();
+ cleanupCandidates.add(currentDownloading);
+ break;
+ }
+ }
+ }
// Delete obsolete .partial and .complete files.
cleanup();