From 1f6bcb3659def2c2160477adb3d494a1030e9511 Mon Sep 17 00:00:00 2001 From: Daniel Oeh Date: Sat, 24 Dec 2011 13:48:11 +0100 Subject: Created FeedSyncService --- AndroidManifest.xml | 5 ++ src/de/podfetcher/feed/FeedManager.java | 45 +++++++++++++++- src/de/podfetcher/service/FeedSyncService.java | 67 ++++++++++++++++++++++++ src/de/podfetcher/storage/DownloadRequester.java | 2 +- src/de/podfetcher/storage/DownloadService.java | 2 - 5 files changed, 117 insertions(+), 4 deletions(-) create mode 100644 src/de/podfetcher/service/FeedSyncService.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index f57c15c2f..1bda344bb 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -23,6 +23,11 @@ + + + + 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()); } -- cgit v1.2.3