From f751b3803b49fa2d4f004d6ead11245bd1b65108 Mon Sep 17 00:00:00 2001 From: Daniel Oeh Date: Sat, 24 Dec 2011 11:38:55 +0100 Subject: Created DownloadService --- src/de/podfetcher/storage/DownloadReceiver.java | 9 +-- src/de/podfetcher/storage/DownloadRequester.java | 15 +++- src/de/podfetcher/storage/DownloadService.java | 89 ++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 7 deletions(-) create mode 100644 src/de/podfetcher/storage/DownloadService.java (limited to 'src/de/podfetcher/storage') diff --git a/src/de/podfetcher/storage/DownloadReceiver.java b/src/de/podfetcher/storage/DownloadReceiver.java index 872f539ed..ed424eafb 100644 --- a/src/de/podfetcher/storage/DownloadReceiver.java +++ b/src/de/podfetcher/storage/DownloadReceiver.java @@ -1,6 +1,7 @@ package de.podfetcher.storage; import de.podfetcher.PodcastApp; +import de.podfetcher.feed.*; import android.app.DownloadManager; import android.content.BroadcastReceiver; import android.content.Context; @@ -29,19 +30,19 @@ public class DownloadReceiver extends BroadcastReceiver { /** Is called whenever a Feed is Downloaded */ private void handleCompletedFeedDownload(Context context, Intent intent) { - RSSHandler handler = new RSSHandler(); + FeedHandler handler = new FeedHandler(); - requester.removeFeedByID(item_intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); + requester.removeFeedByID(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); // Get Feed Information Feed feed = manager.getFeed(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); - feed.file_url = DownloadRequester.getFeedfilePath() + DownloadRequester.getFeedfileName(feed.id); + feed.file_url = requester.getFeedfilePath(context) + requester.getFeedfileName(feed.id); feed = handler.parseFeed(feed); // Download Feed Image if provided if(feed.image != null) { requester.downloadImage(context, feed.image); } // Update Information in Database - manager.setFeed(feed); + manager.setFeed(context, feed); } } diff --git a/src/de/podfetcher/storage/DownloadRequester.java b/src/de/podfetcher/storage/DownloadRequester.java index 407555ee0..7b6c5434b 100644 --- a/src/de/podfetcher/storage/DownloadRequester.java +++ b/src/de/podfetcher/storage/DownloadRequester.java @@ -63,7 +63,7 @@ public class DownloadRequester { } public void downloadFeed(Context context, Feed feed) { download(context, feeds, feed.download_url, - new File(getFeedfilePath(id), getFeedfileName(id)), + new File(getFeedfilePath(context), getFeedfileName(feed.id)), true, ACTION_FEED_DOWNLOAD_COMPLETED, feed.id); } @@ -129,8 +129,17 @@ public class DownloadRequester { return null; } - public String getFeedfilePath() { - return context.getExternalFilesDir(FEED_DOWNLOADPATH); + /** Get the number of uncompleted Downloads */ + public int getNumberOfDownloads() { + return feeds.size() + images.size() + media.size(); + } + + public int getNumberOfFeedDownloads() { + return feeds.size(); + } + + public String getFeedfilePath(Context context) { + return context.getExternalFilesDir(FEED_DOWNLOADPATH).toString(); } public String getFeedfileName(long id) { diff --git a/src/de/podfetcher/storage/DownloadService.java b/src/de/podfetcher/storage/DownloadService.java new file mode 100644 index 000000000..7dbf9ff4f --- /dev/null +++ b/src/de/podfetcher/storage/DownloadService.java @@ -0,0 +1,89 @@ +/** + * Registers a DownloadReceiver and waits for all Downloads + * to complete, then stops + * */ + + +package de.podfetcher.storage; + +import de.podfetcher.feed.*; +import android.app.Service; +import android.app.DownloadManager; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.IBinder; +import android.content.BroadcastReceiver; +import android.content.Context; + +public class DownloadService extends Service { + + private DownloadRequester requester; + private FeedManager manager; + + @Override + public void onCreate() { + receiver = new DownloadReceiver(); + + registerReceiver(receiver, createIntentFilter()); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onDestroy() { + unregisterReceiver(receiver); + } + + private IntentFilter createIntentFilter() { + IntentFilter filter = new IntentFilter(); + + filter.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE); + + return filter; + } + + private BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); + requester = DownloadRequester.getInstance(); + manager = FeedManager.getInstance(); + Intent item_intent = requester.getItemIntent(id); + String action = item_intent.getAction(); + if(action.equals(DownloadRequester.ACTION_FEED_DOWNLOAD_COMPLETED)) { + handleCompletedFeedDownload(context, intent); + } else if(action.equals(DownloadRequester.ACTION_MEDIA_DOWNLOAD_COMPLETED)) { + requester.removeMediaByID(item_intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); + } else if(action.equals(DownloadRequester.ACTION_IMAGE_DOWNLOAD_COMPLETED)) { + requester.removeImageByID(item_intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); + } + + // Check if there's something else to download, otherwise stop + if(requester.getNumberOfDownloads() == 0) { + stopSelf(); + } + //PodcastApp.getInstance().getApplicationContext().sendBroadcast(item_intent); + } + }; + + + /** Is called whenever a Feed is Downloaded */ + private void handleCompletedFeedDownload(Context context, Intent intent) { + FeedHandler handler = new FeedHandler(); + + requester.removeFeedByID(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); + // Get Feed Information + Feed feed = manager.getFeed(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1)); + feed.file_url = requester.getFeedfilePath(context) + requester.getFeedfileName(feed.id); + feed = handler.parseFeed(feed); + // Download Feed Image if provided + if(feed.image != null) { + requester.downloadImage(context, feed.image); + } + // Update Information in Database + manager.setFeed(context, feed); + } +} -- cgit v1.2.3