summaryrefslogtreecommitdiff
path: root/src/de/podfetcher/storage/DownloadService.java
blob: b7e7fdac3ab1722587f28c2c4e8f70663c65703b (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
94
95
96
97
98
99
100
/** 
 * 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, 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)) {
				handleCompletedImageDownload(context, item_intent); 
			}

			// 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) {
		requester.removeFeedByID(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1));
		// Get Feed Information
		Feed feed = manager.getFeed(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1));
		feed.setFile_url(requester.getFeedfilePath(context) + requester.getFeedfileName(feed.getId()));
		// Update Information in Database
		manager.setFeed(context, feed);
		// Download Feed Image if provided
		if(feed.getImage() != null) {
			requester.downloadImage(context, feed.getImage());
		}
			// Notify FeedSyncService about the new Feed
			sendBroadcast(item_intent);

	}

	/** Is called whenever a Feed-Image is downloaded */
	private void handleCompletedImageDownload(Context contex, Intent intent) {
			requester.removeImageByID(item_intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1));
			FeedImage image = manager.getFeedImage(item_intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1));
			image.setFile_url(requester.getImagefilePath(context) + requester.getImagefileName(image.getId()));
			sendBroadcast(item_intent);

	}
}