summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/de/danoeh/antennapod/feed/FeedMedia.java14
-rw-r--r--src/de/danoeh/antennapod/service/PlaybackService.java31
-rw-r--r--src/de/danoeh/antennapod/util/playback/ExternalMedia.java13
-rw-r--r--src/de/danoeh/antennapod/util/playback/Playable.java15
4 files changed, 62 insertions, 11 deletions
diff --git a/src/de/danoeh/antennapod/feed/FeedMedia.java b/src/de/danoeh/antennapod/feed/FeedMedia.java
index 4096c6cca..1368cf854 100644
--- a/src/de/danoeh/antennapod/feed/FeedMedia.java
+++ b/src/de/danoeh/antennapod/feed/FeedMedia.java
@@ -198,9 +198,18 @@ public class FeedMedia extends FeedFile implements Playable {
@Override
public void loadMetadata() throws PlayableException {
- if (getChapters() == null) {
+ }
+
+ @Override
+ public void loadChapterMarks() {
+ if (getChapters() == null && !localFileAvailable()) {
ChapterUtils.loadChaptersFromStreamUrl(this);
+ if (getChapters() != null) {
+ FeedManager.getInstance().setFeedItem(PodcastApp.getInstance(),
+ item);
+ }
}
+
}
@Override
@@ -337,7 +346,8 @@ public class FeedMedia extends FeedFile implements Playable {
@Override
public String getImageLoaderCacheKey() {
- String out = new Playable.DefaultPlayableImageLoader(this).getImageLoaderCacheKey();
+ String out = new Playable.DefaultPlayableImageLoader(this)
+ .getImageLoaderCacheKey();
if (out == null) {
if (item.getFeed().getImage() != null) {
return item.getFeed().getImage().getImageLoaderCacheKey();
diff --git a/src/de/danoeh/antennapod/service/PlaybackService.java b/src/de/danoeh/antennapod/service/PlaybackService.java
index e169eaa0f..c414e0992 100644
--- a/src/de/danoeh/antennapod/service/PlaybackService.java
+++ b/src/de/danoeh/antennapod/service/PlaybackService.java
@@ -152,6 +152,8 @@ public class PlaybackService extends Service {
/** True if mediaplayer was paused because it lost audio focus temporarily */
private boolean pausedBecauseOfTransientAudiofocusLoss;
+ private Thread chapterLoader;
+
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder {
@@ -272,6 +274,9 @@ public class PlaybackService extends Service {
if (AppConfig.DEBUG)
Log.d(TAG, "Service is about to be destroyed");
isRunning = false;
+ if (chapterLoader != null) {
+ chapterLoader.interrupt();
+ }
disableSleepTimer();
unregisterReceiver(headsetDisconnected);
unregisterReceiver(shutdownReceiver);
@@ -337,7 +342,7 @@ public class PlaybackService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
-
+
if (AppConfig.DEBUG)
Log.d(TAG, "OnStartCommand called");
int keycode = intent.getIntExtra(MediaButtonReceiver.EXTRA_KEYCODE, -1);
@@ -617,6 +622,27 @@ public class PlaybackService extends Service {
media.setDuration(mp.getDuration());
}
setStatus(PlayerStatus.PREPARED);
+ if (chapterLoader != null) {
+ chapterLoader.interrupt();
+ }
+ chapterLoader = new Thread() {
+ @Override
+ public void run() {
+ if (AppConfig.DEBUG)
+ Log.d(TAG, "Chapter loader started");
+ if (media != null && media.getChapters() == null) {
+ media.loadChapterMarks();
+ if (!isInterrupted() && media.getChapters() != null) {
+ sendNotificationBroadcast(NOTIFICATION_TYPE_RELOAD,
+ 0);
+ }
+ }
+ if (AppConfig.DEBUG)
+ Log.d(TAG, "Chapter loader stopped");
+ }
+ };
+ chapterLoader.start();
+
if (startWhenPrepared) {
play();
}
@@ -962,7 +988,8 @@ public class PlaybackService extends Service {
if (media != null && media != null) {
int iconSize = getResources().getDimensionPixelSize(
android.R.dimen.notification_large_icon_width);
- icon = BitmapDecoder.decodeBitmapFromWorkerTaskResource(iconSize, media);
+ icon = BitmapDecoder.decodeBitmapFromWorkerTaskResource(
+ iconSize, media);
}
}
diff --git a/src/de/danoeh/antennapod/util/playback/ExternalMedia.java b/src/de/danoeh/antennapod/util/playback/ExternalMedia.java
index 46f3dfcd8..55a37413b 100644
--- a/src/de/danoeh/antennapod/util/playback/ExternalMedia.java
+++ b/src/de/danoeh/antennapod/util/playback/ExternalMedia.java
@@ -62,8 +62,6 @@ public class ExternalMedia implements Playable {
@Override
public void loadMetadata() throws PlayableException {
- final String tmpFileName = "tmpExternalMediaimage";
-
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
try {
mmr.setDataSource(source);
@@ -80,6 +78,11 @@ public class ExternalMedia implements Playable {
.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
ChapterUtils.loadChaptersFromFileUrl(this);
}
+
+ @Override
+ public void loadChapterMarks() {
+
+ }
@Override
public String getEpisodeTitle() {
@@ -214,12 +217,14 @@ public class ExternalMedia implements Playable {
@Override
public String getImageLoaderCacheKey() {
- return new Playable.DefaultPlayableImageLoader(this).getImageLoaderCacheKey();
+ return new Playable.DefaultPlayableImageLoader(this)
+ .getImageLoaderCacheKey();
}
@Override
public InputStream reopenImageInputStream(InputStream input) {
- return new Playable.DefaultPlayableImageLoader(this).reopenImageInputStream(input);
+ return new Playable.DefaultPlayableImageLoader(this)
+ .reopenImageInputStream(input);
}
}
diff --git a/src/de/danoeh/antennapod/util/playback/Playable.java b/src/de/danoeh/antennapod/util/playback/Playable.java
index ae87d5903..0404379e2 100644
--- a/src/de/danoeh/antennapod/util/playback/Playable.java
+++ b/src/de/danoeh/antennapod/util/playback/Playable.java
@@ -31,11 +31,19 @@ public interface Playable extends Parcelable,
/**
* This method is called from a separate thread by the PlaybackService.
- * Playable objects should load their metadata in this method (for example:
- * chapter marks).
+ * Playable objects should load their metadata in this method. This method
+ * should execute as quickly as possible and NOT load chapter marks if no
+ * local file is available.
*/
public void loadMetadata() throws PlayableException;
+ /**
+ * This method is called from a separate thread by the PlaybackService.
+ * Playable objects should load their chapter marks in this method if no
+ * local file was available when loadMetadata() was called.
+ */
+ public void loadChapterMarks();
+
/** Returns the title of the episode that this playable represents */
public String getEpisodeTitle();
@@ -240,7 +248,8 @@ public interface Playable extends Parcelable,
public InputStream reopenImageInputStream(InputStream input) {
if (input instanceof PublicByteArrayInputStream) {
IOUtils.closeQuietly(input);
- byte[] imgData = ((PublicByteArrayInputStream) input).getByteArray();
+ byte[] imgData = ((PublicByteArrayInputStream) input)
+ .getByteArray();
if (imgData != null) {
ByteArrayInputStream out = new ByteArrayInputStream(imgData);
return out;