summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/storage/DBTasks.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/danoeh/antennapod/storage/DBTasks.java')
-rw-r--r--src/de/danoeh/antennapod/storage/DBTasks.java57
1 files changed, 51 insertions, 6 deletions
diff --git a/src/de/danoeh/antennapod/storage/DBTasks.java b/src/de/danoeh/antennapod/storage/DBTasks.java
index b1efda658..b9a1fd002 100644
--- a/src/de/danoeh/antennapod/storage/DBTasks.java
+++ b/src/de/danoeh/antennapod/storage/DBTasks.java
@@ -23,11 +23,13 @@ import de.danoeh.antennapod.feed.FeedImage;
import de.danoeh.antennapod.feed.FeedItem;
import de.danoeh.antennapod.feed.FeedMedia;
import de.danoeh.antennapod.preferences.UserPreferences;
+import de.danoeh.antennapod.service.GpodnetSyncService;
import de.danoeh.antennapod.service.PlaybackService;
import de.danoeh.antennapod.service.download.DownloadStatus;
import de.danoeh.antennapod.util.DownloadError;
import de.danoeh.antennapod.util.NetworkUtils;
import de.danoeh.antennapod.util.QueueAccess;
+import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator;
import de.danoeh.antennapod.util.exception.MediaFileNotFoundException;
/**
@@ -40,6 +42,39 @@ public final class DBTasks {
}
/**
+ * Removes the feed with the given download url. This method should NOT be executed on the GUI thread.
+ * @param context Used for accessing the db
+ * @param downloadUrl URL of the feed.
+ * */
+ public static void removeFeedWithDownloadUrl(Context context, String downloadUrl) {
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ Cursor cursor = adapter.getFeedCursorDownloadUrls();
+ long feedID = 0;
+ if (cursor.moveToFirst()) {
+ do {
+ if (cursor.getString(1).equals(downloadUrl)) {
+ feedID = cursor.getLong(0);
+ }
+ } while (cursor.moveToNext());
+ }
+ cursor.close();
+ adapter.close();
+
+ if (feedID != 0) {
+ try {
+ DBWriter.deleteFeed(context, feedID).get();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
+ } else {
+ Log.w(TAG, "removeFeedWithDownloadUrl: Could not find feed with url: " + downloadUrl);
+ }
+ }
+
+ /**
* Starts playback of a FeedMedia object's file. This method will build an Intent based on the given parameters to
* start the {@link PlaybackService}.
*
@@ -110,6 +145,8 @@ public final class DBTasks {
refreshFeeds(context, DBReader.getFeedList(context));
}
isRefreshing.set(false);
+
+ GpodnetSyncService.sendSyncIntent(context);
}
}.start();
} else {
@@ -406,12 +443,13 @@ public final class DBTasks {
private static int performAutoCleanup(final Context context,
final int episodeNumber) {
- List<FeedItem> candidates = DBReader.getDownloadedItems(context);
- List<FeedItem> queue = DBReader.getQueue(context);
+ List<FeedItem> candidates = new ArrayList<FeedItem>();
+ List<FeedItem> downloadedItems = DBReader.getDownloadedItems(context);
+ QueueAccess queue = QueueAccess.IDListAccess(DBReader.getQueueIDList(context));
List<FeedItem> delete;
- for (FeedItem item : candidates) {
+ for (FeedItem item : downloadedItems) {
if (item.hasMedia() && item.getMedia().isDownloaded()
- && !queue.contains(item) && item.isRead()) {
+ && !queue.contains(item.getId()) && item.isRead()) {
candidates.add(item);
}
@@ -440,7 +478,13 @@ public final class DBTasks {
}
for (FeedItem item : delete) {
- DBWriter.deleteFeedMediaOfItem(context, item.getId());
+ try {
+ DBWriter.deleteFeedMediaOfItem(context, item.getId()).get();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } catch (ExecutionException e) {
+ e.printStackTrace();
+ }
}
int counter = delete.size();
@@ -561,6 +605,7 @@ public final class DBTasks {
Log.d(TAG, "Feed with title " + newFeed.getTitle()
+ " already exists. Syncing new with existing one.");
+ Collections.sort(newFeed.getItems(), new FeedItemPubdateComparator());
savedFeed.setItems(DBReader.getFeedItemList(context, savedFeed));
if (savedFeed.compareWithOther(newFeed)) {
if (AppConfig.DEBUG)
@@ -578,7 +623,7 @@ public final class DBTasks {
final int i = idx;
item.setFeed(savedFeed);
savedFeed.getItems().add(i, item);
- DBWriter.markItemRead(context, item.getId(), false);
+ item.setRead(false);
} else {
oldItem.updateFromOther(item);
}