aboutsummaryrefslogtreecommitdiff
path: root/subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2012-08-14 20:29:07 -0700
committerScott Jackson <daneren2005@gmail.com>2012-08-14 20:29:07 -0700
commit973110dedc9bd4cb68fe82a80304e5ff20192a32 (patch)
treede56a4f15972ff3b3438aeca80b7e44e43b0e626 /subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java
parent4ce59daa35f0e8a04d134fa300589702823de1ba (diff)
downloaddsub-973110dedc9bd4cb68fe82a80304e5ff20192a32.tar.gz
dsub-973110dedc9bd4cb68fe82a80304e5ff20192a32.tar.bz2
dsub-973110dedc9bd4cb68fe82a80304e5ff20192a32.zip
Changed package name to subdroid to avoid getting banned by Google for being to similar to subphonic
Diffstat (limited to 'subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java')
-rw-r--r--subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java109
1 files changed, 0 insertions, 109 deletions
diff --git a/subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java b/subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java
deleted file mode 100644
index c6bbf785..00000000
--- a/subsonic-android/src/github/daneren2005/subphonic/util/ShufflePlayBuffer.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-package github.daneren2005.subphonic.util;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-import android.content.Context;
-import android.util.Log;
-import github.daneren2005.subphonic.domain.MusicDirectory;
-import github.daneren2005.subphonic.service.MusicService;
-import github.daneren2005.subphonic.service.MusicServiceFactory;
-
-/**
- * @author Sindre Mehus
- * @version $Id$
- */
-public class ShufflePlayBuffer {
-
- private static final String TAG = ShufflePlayBuffer.class.getSimpleName();
- private static final int CAPACITY = 50;
- private static final int REFILL_THRESHOLD = 40;
-
- private final ScheduledExecutorService executorService;
- private final List<MusicDirectory.Entry> buffer = new ArrayList<MusicDirectory.Entry>();
- private Context context;
- private int currentServer;
-
- public ShufflePlayBuffer(Context context) {
- this.context = context;
- executorService = Executors.newSingleThreadScheduledExecutor();
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- refill();
- }
- };
- executorService.scheduleWithFixedDelay(runnable, 1, 10, TimeUnit.SECONDS);
- }
-
- public List<MusicDirectory.Entry> get(int size) {
- clearBufferIfnecessary();
-
- List<MusicDirectory.Entry> result = new ArrayList<MusicDirectory.Entry>(size);
- synchronized (buffer) {
- while (!buffer.isEmpty() && result.size() < size) {
- result.add(buffer.remove(buffer.size() - 1));
- }
- }
- Log.i(TAG, "Taking " + result.size() + " songs from shuffle play buffer. " + buffer.size() + " remaining.");
- return result;
- }
-
- public void shutdown() {
- executorService.shutdown();
- }
-
- private void refill() {
-
- // Check if active server has changed.
- clearBufferIfnecessary();
-
- if (buffer.size() > REFILL_THRESHOLD || (!Util.isNetworkConnected(context) && !Util.isOffline(context))) {
- return;
- }
-
- try {
- MusicService service = MusicServiceFactory.getMusicService(context);
- int n = CAPACITY - buffer.size();
- MusicDirectory songs = service.getRandomSongs(n, context, null);
-
- synchronized (buffer) {
- buffer.addAll(songs.getChildren());
- Log.i(TAG, "Refilled shuffle play buffer with " + songs.getChildren().size() + " songs.");
- }
- } catch (Exception x) {
- Log.w(TAG, "Failed to refill shuffle play buffer.", x);
- }
- }
-
- private void clearBufferIfnecessary() {
- synchronized (buffer) {
- if (currentServer != Util.getActiveServer(context)) {
- currentServer = Util.getActiveServer(context);
- buffer.clear();
- }
- }
- }
-
-}