summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/feed
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2013-01-13 21:22:23 +0100
committerdaniel oeh <daniel.oeh@gmail.com>2013-01-13 21:22:23 +0100
commit7d44a549bca89e320b1e2b2bd6b8ac22aee2de5b (patch)
tree003a94efd6dec0aa971006ba6420c24c7f2b0e58 /src/de/danoeh/antennapod/feed
parent80c3280551c8bc2ff900bf003808ac6b0221fc0d (diff)
downloadAntennaPod-7d44a549bca89e320b1e2b2bd6b8ac22aee2de5b.zip
FeedManager now checks if episode file exists before playing.
Diffstat (limited to 'src/de/danoeh/antennapod/feed')
-rw-r--r--src/de/danoeh/antennapod/feed/FeedManager.java79
1 files changed, 61 insertions, 18 deletions
diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java
index 855316d81..597936e5a 100644
--- a/src/de/danoeh/antennapod/feed/FeedManager.java
+++ b/src/de/danoeh/antennapod/feed/FeedManager.java
@@ -30,6 +30,7 @@ import de.danoeh.antennapod.util.FeedtitleComparator;
import de.danoeh.antennapod.util.comparator.DownloadStatusComparator;
import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator;
import de.danoeh.antennapod.util.comparator.PlaybackCompletionDateComparator;
+import de.danoeh.antennapod.util.exception.MediaFileNotFoundException;
/**
* Singleton class Manages all feeds, categories and feeditems
@@ -121,21 +122,50 @@ public class FeedManager {
*/
public void playMedia(Context context, FeedMedia media, boolean showPlayer,
boolean startWhenPrepared, boolean shouldStream) {
- // Start playback Service
- Intent launchIntent = new Intent(context, PlaybackService.class);
- launchIntent.putExtra(PlaybackService.EXTRA_MEDIA_ID, media.getId());
- launchIntent.putExtra(PlaybackService.EXTRA_FEED_ID, media.getItem()
- .getFeed().getId());
- launchIntent.putExtra(PlaybackService.EXTRA_START_WHEN_PREPARED,
- startWhenPrepared);
- launchIntent
- .putExtra(PlaybackService.EXTRA_SHOULD_STREAM, shouldStream);
- launchIntent.putExtra(PlaybackService.EXTRA_PREPARE_IMMEDIATELY, true);
- context.startService(launchIntent);
- if (showPlayer) {
- // Launch Mediaplayer
- context.startActivity(PlaybackService.getPlayerActivityIntent(
- context, media));
+ try {
+ if (!shouldStream) {
+ if (media.getFile_url() == null) {
+ throw new MediaFileNotFoundException("Feed URL was null",
+ media);
+ } else {
+ File f = new File(media.getFile_url());
+ if (!f.exists() || !f.canRead()) {
+ throw new MediaFileNotFoundException(
+ "No episode was found at "
+ + media.getFile_url(), media);
+ }
+ }
+
+ }
+ // Start playback Service
+ Intent launchIntent = new Intent(context, PlaybackService.class);
+ launchIntent
+ .putExtra(PlaybackService.EXTRA_MEDIA_ID, media.getId());
+ launchIntent.putExtra(PlaybackService.EXTRA_FEED_ID, media
+ .getItem().getFeed().getId());
+ launchIntent.putExtra(PlaybackService.EXTRA_START_WHEN_PREPARED,
+ startWhenPrepared);
+ launchIntent.putExtra(PlaybackService.EXTRA_SHOULD_STREAM,
+ shouldStream);
+ launchIntent.putExtra(PlaybackService.EXTRA_PREPARE_IMMEDIATELY,
+ true);
+ context.startService(launchIntent);
+ if (showPlayer) {
+ // Launch Mediaplayer
+ context.startActivity(PlaybackService.getPlayerActivityIntent(
+ context, media));
+ }
+ } catch (MediaFileNotFoundException e) {
+ e.printStackTrace();
+ SharedPreferences prefs = PreferenceManager
+ .getDefaultSharedPreferences(context);
+ final long lastPlayedId = prefs.getLong(
+ PlaybackService.PREF_LAST_PLAYED_ID, -1);
+ if (lastPlayedId == media.getId()) {
+ context.sendBroadcast(new Intent(
+ PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE));
+ }
+ notifyMissingFeedMediaFile(context, media);
}
}
@@ -503,6 +533,19 @@ public class FeedManager {
}
}
+ /**
+ * Notifies the feed manager that a downloaded episode doesn't exist
+ * anymore. It will update the values of the FeedMedia object accordingly.
+ */
+ public void notifyMissingFeedMediaFile(Context context, FeedMedia media) {
+ Log.i(TAG,
+ "The feedmanager was notified about a missing episode. It will update its database now.");
+ media.setDownloaded(false);
+ media.setFile_url(null);
+ setFeedMedia(context, media);
+ sendFeedUpdateBroadcast(context);
+ }
+
public void refreshFeed(Context context, Feed feed)
throws DownloadRequestException {
requester.downloadFeed(context, new Feed(feed.getDownload_url(),
@@ -926,10 +969,10 @@ public class FeedManager {
});
}
-
+
/**
- * Updates Information of an existing Feed and its FeedItems. Creates and opens its own
- * adapter.
+ * Updates Information of an existing Feed and its FeedItems. Creates and
+ * opens its own adapter.
*/
public void setCompleteFeed(final Context context, final Feed feed) {
dbExec.execute(new Runnable() {