summaryrefslogtreecommitdiff
path: root/src/de/podfetcher/storage/DownloadService.java
blob: d6bb1996741b2fdd7b30299f47c332c0d8ecc4a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/** 
 * 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 {

	public static String ACTION_ALL_FEED_DOWNLOADS_COMPLETED = "action.de.podfetcher.storage.all_feed_downloads_completed";
	
	private DownloadRequester requester;
	private FeedManager manager;

	@Override
	public void onCreate() {
		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);
				// Notify FeedSyncService about the new Feed
				sendBroadcast(item_intent);
				if(requester.getNumberOfFeedDownloads() == 0) {
					sendBroadcast(new Intent(ACTION_ALL_FEED_DOWNLOADS_COMPLETED));
				}
			} 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();
			}
		}
	};


	/** 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);
	}
}