summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Oeh <daniel@daniel-pc.(none)>2011-12-24 13:48:11 +0100
committerDaniel Oeh <daniel@daniel-pc.(none)>2011-12-24 13:48:11 +0100
commit1f6bcb3659def2c2160477adb3d494a1030e9511 (patch)
tree47e154e7b04b8dd7b56cf7d4bf8597318e30fee8 /src
parent1f39a1a0f1f1b0667fc21a7a19b401d8d080a3f1 (diff)
downloadAntennaPod-1f6bcb3659def2c2160477adb3d494a1030e9511.zip
Created FeedSyncService
Diffstat (limited to 'src')
-rw-r--r--src/de/podfetcher/feed/FeedManager.java45
-rw-r--r--src/de/podfetcher/service/FeedSyncService.java67
-rw-r--r--src/de/podfetcher/storage/DownloadRequester.java2
-rw-r--r--src/de/podfetcher/storage/DownloadService.java2
4 files changed, 112 insertions, 4 deletions
diff --git a/src/de/podfetcher/feed/FeedManager.java b/src/de/podfetcher/feed/FeedManager.java
index 7a5579055..c88237fc0 100644
--- a/src/de/podfetcher/feed/FeedManager.java
+++ b/src/de/podfetcher/feed/FeedManager.java
@@ -44,12 +44,55 @@ public class FeedManager {
Feed feed = new Feed(url);
feed.download_url = url;
feed.id = adapter.setFeed(feed);
-
+ // Add Feed to Feedlist if not available
+ Feed foundFeed = getFeed(feed.id);
+ if(foundFeed == null) {
+ feeds.add(feed);
+ }else {
+ feed = foundFeed;
+ }
DownloadRequester req = DownloadRequester.getInstance();
req.downloadFeed(context, feed);
}
+ /** Adds a new Feeditem if its not in the list
+ * This Method is only called if the downloaded Feed was already in the feedlist
+ * */
+ public void addFeedItem(Context context, FeedItem item) {
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ // Search list for feeditem
+ Feed foundFeed = searchFeedByLink(item.link);
+ FeedItem foundItem = searchFeedItemByLink(foundFeed, item.link)
+ if(foundItem != null) {
+ // Update Information, mark as read
+ item.id = foundItem.id;
+ foundItem = item
+ adapter.setFeedItem(item);
+ } else {
+ foundFeed.items.add(item);
+ item.id = adapter.setFeedItem(item);
+ }
+ }
+
+ private Feed searchFeedByLink(String link) {
+ for(Feed feed : feeds) {
+ if(feed.link.equals(link)) {
+ return feed;
+ }
+ }
+ return null;
+ }
+
+ private FeedItem searchFeedItemByLink(Feed feed, String link) {
+ for(FeedItem item : feed.items) {
+ if(item.link.equals(link)) {
+ return item;
+ }
+ }
+ return null;
+ }
+
/** Updates Information of an existing Feed */
public void setFeed(Context context, Feed feed) {
PodDBAdapter adapter = new PodDBAdapter(context);
diff --git a/src/de/podfetcher/service/FeedSyncService.java b/src/de/podfetcher/service/FeedSyncService.java
new file mode 100644
index 000000000..569cfbced
--- /dev/null
+++ b/src/de/podfetcher/service/FeedSyncService.java
@@ -0,0 +1,67 @@
+/*
+ * Syncs downloaded Feedfiles with Feeds in the database
+ *
+ *
+ * */
+
+package de.podfetcher.service
+
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.lang.Runtime;
+
+import de.podfetcher.FeedManager;
+import de.podfetcher.Feed;
+import de.podfetcher.FeedHandler;
+
+import android.app.Service;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.IBinder;
+import android.content.Context;
+
+public class FeedSyncService extends Service {
+
+ private ScheduledThreadPoolExecutor executor;
+ private FeedManager manager;
+
+ @Override
+ public void onCreate() {
+ executor = new ScheduledThreadPoolExecutor(Runtime.availableProcessors() + 2);
+ manager = FeedManager.getInstance();
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ executor.submit(new FeedSyncThread(handleIntent(intent)));
+ }
+
+ /** Extracts a Feed object from the given Intent */
+ private Feed handleIntent(Intent intent) {
+ Feed feed = manager.getFeed(intent.getLongExtra(DownloadRequester.EXTRA_ITEM_ID, -1));
+ feed.file_url = requester.getFeedfilePath(context) + requester.getFeedfileName(feed.id);
+ return feed;
+ }
+
+ /** Takes a single Feed, parses the corresponding file and refreshes information in the manager */
+ class FeedSyncThread implements Runnable {
+
+ private Feed feed;
+
+ public FeedSyncThread(Feed feed) {
+ this.feed = feed;
+ }
+
+ public void run() {
+ FeedManager manager = FeedManager.getInstance();
+ FeedHandler handler = new FeedHandler();
+
+ feed = handler.parseFeed(feed);
+ }
+
+ }
+}
diff --git a/src/de/podfetcher/storage/DownloadRequester.java b/src/de/podfetcher/storage/DownloadRequester.java
index 4a3912c7f..4cac526f4 100644
--- a/src/de/podfetcher/storage/DownloadRequester.java
+++ b/src/de/podfetcher/storage/DownloadRequester.java
@@ -69,7 +69,7 @@ public class DownloadRequester {
public void downloadImage(Context context, FeedImage image) {
download(context, images, image.download_url,
- new File(getImagefilePath, getImagefileName(image.id)),
+ new File(getImagefilePath(context), getImagefileName(image.id)),
true, ACTION_IMAGE_DOWNLOAD_COMPLETED, image.id);
}
diff --git a/src/de/podfetcher/storage/DownloadService.java b/src/de/podfetcher/storage/DownloadService.java
index 7dbf9ff4f..74a346623 100644
--- a/src/de/podfetcher/storage/DownloadService.java
+++ b/src/de/podfetcher/storage/DownloadService.java
@@ -22,8 +22,6 @@ public class DownloadService extends Service {
@Override
public void onCreate() {
- receiver = new DownloadReceiver();
-
registerReceiver(receiver, createIntentFilter());
}