From c5f848ead5037ec73daa9d5eda17e8556091ef90 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sun, 1 Sep 2013 13:49:19 +0200 Subject: Added subscription syncing --- src/de/danoeh/antennapod/storage/DBReader.java | 21 +++++++++++++ src/de/danoeh/antennapod/storage/DBTasks.java | 36 ++++++++++++++++++++++ src/de/danoeh/antennapod/storage/DBWriter.java | 4 +++ src/de/danoeh/antennapod/storage/PodDBAdapter.java | 4 +++ 4 files changed, 65 insertions(+) (limited to 'src/de/danoeh/antennapod/storage') diff --git a/src/de/danoeh/antennapod/storage/DBReader.java b/src/de/danoeh/antennapod/storage/DBReader.java index 28ab3d939..a5a4c8cd4 100644 --- a/src/de/danoeh/antennapod/storage/DBReader.java +++ b/src/de/danoeh/antennapod/storage/DBReader.java @@ -75,6 +75,27 @@ public final class DBReader { return feeds; } + /** + * Returns a list with the download URLs of all feeds. + * @param context A context that is used for opening the database connection. + * @return A list of Strings with the download URLs of all feeds. + * */ + public static List getFeedListDownloadUrls(final Context context) { + PodDBAdapter adapter = new PodDBAdapter(context); + List result = new ArrayList(); + adapter.open(); + Cursor feeds = adapter.getFeedCursorDownloadUrls(); + if (feeds.moveToFirst()) { + do { + result.add(feeds.getString(1)); + } while (feeds.moveToNext()); + } + feeds.close(); + adapter.close(); + + return result; + } + /** * Returns a list of 'expired Feeds', i.e. Feeds that have not been updated for a certain amount of time. * diff --git a/src/de/danoeh/antennapod/storage/DBTasks.java b/src/de/danoeh/antennapod/storage/DBTasks.java index 741699bdf..9fd084843 100644 --- a/src/de/danoeh/antennapod/storage/DBTasks.java +++ b/src/de/danoeh/antennapod/storage/DBTasks.java @@ -23,6 +23,7 @@ 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; @@ -39,6 +40,39 @@ public final class DBTasks { private 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 +144,8 @@ public final class DBTasks { refreshFeeds(context, DBReader.getFeedList(context)); } isRefreshing.set(false); + + GpodnetSyncService.sendSyncIntent(context); } }.start(); } else { diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java index d96299dbe..bbc6f94b7 100644 --- a/src/de/danoeh/antennapod/storage/DBWriter.java +++ b/src/de/danoeh/antennapod/storage/DBWriter.java @@ -18,6 +18,7 @@ import android.util.Log; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.feed.*; import de.danoeh.antennapod.preferences.PlaybackPreferences; +import de.danoeh.antennapod.service.GpodnetSyncService; import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.service.download.DownloadStatus; import de.danoeh.antennapod.util.QueueAccess; @@ -171,6 +172,8 @@ public class DBWriter { } adapter.removeFeed(feed); adapter.close(); + + GpodnetSyncService.sendActionUploadIntent(context); EventDistributor.getInstance().sendFeedUpdateBroadcast(); } } @@ -614,6 +617,7 @@ public class DBWriter { adapter.setCompleteFeed(feed); adapter.close(); + GpodnetSyncService.sendActionUploadIntent(context); EventDistributor.getInstance().sendFeedUpdateBroadcast(); } }); diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index bb743e2b1..ff98d4ae7 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -659,6 +659,10 @@ public class PodDBAdapter { return c; } + public final Cursor getFeedCursorDownloadUrls() { + return db.query(TABLE_NAME_FEEDS, new String[]{KEY_ID, KEY_DOWNLOAD_URL}, null, null, null, null, null); + } + public final Cursor getExpiredFeedsCursor(long expirationTime) { Cursor c = db.query(TABLE_NAME_FEEDS, null, "? Date: Mon, 2 Sep 2013 15:13:00 +0200 Subject: Upload changes instead of whole subscription list --- src/de/danoeh/antennapod/storage/DBWriter.java | 26 ++++++++++++++++++++-- src/de/danoeh/antennapod/storage/PodDBAdapter.java | 9 ++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) (limited to 'src/de/danoeh/antennapod/storage') diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java index bbc6f94b7..b3e1d6bc1 100644 --- a/src/de/danoeh/antennapod/storage/DBWriter.java +++ b/src/de/danoeh/antennapod/storage/DBWriter.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.Date; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -17,6 +18,7 @@ import android.preference.PreferenceManager; import android.util.Log; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.feed.*; +import de.danoeh.antennapod.preferences.GpodnetPreferences; import de.danoeh.antennapod.preferences.PlaybackPreferences; import de.danoeh.antennapod.service.GpodnetSyncService; import de.danoeh.antennapod.service.PlaybackService; @@ -173,7 +175,7 @@ public class DBWriter { adapter.removeFeed(feed); adapter.close(); - GpodnetSyncService.sendActionUploadIntent(context); + GpodnetPreferences.addRemovedFeed(feed.getDownload_url()); EventDistributor.getInstance().sendFeedUpdateBroadcast(); } } @@ -617,7 +619,7 @@ public class DBWriter { adapter.setCompleteFeed(feed); adapter.close(); - GpodnetSyncService.sendActionUploadIntent(context); + GpodnetPreferences.addAddedFeed(feed.getDownload_url()); EventDistributor.getInstance().sendFeedUpdateBroadcast(); } }); @@ -720,6 +722,26 @@ public class DBWriter { }); } + /** + * Updates download URLs of feeds from a given Map. The key of the Map is the original URL of the feed + * and the value is the updated URL + * */ + public static Future updateFeedDownloadURLs(final Context context, final Map urls) { + return dbExec.submit(new Runnable() { + @Override + public void run() { + PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + for (String key : urls.keySet()) { + if (AppConfig.DEBUG) Log.d(TAG, "Replacing URL " + key + " with url " + urls.get(key)); + + adapter.setFeedDownloadUrl(key, urls.get(key)); + } + adapter.close(); + } + }); + } + private static boolean itemListContains(List items, long itemId) { for (FeedItem item : items) { if (item.getId() == itemId) { diff --git a/src/de/danoeh/antennapod/storage/PodDBAdapter.java b/src/de/danoeh/antennapod/storage/PodDBAdapter.java index ff98d4ae7..ce1bf721d 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -425,6 +425,15 @@ public class PodDBAdapter { db.endTransaction(); } + /** + * Updates the download URL of a Feed. + */ + public void setFeedDownloadUrl(String original, String updated) { + ContentValues values = new ContentValues(); + values.put(KEY_DOWNLOAD_URL, updated); + db.update(TABLE_NAME_FEEDS, values, KEY_DOWNLOAD_URL + "=?", new String[]{original}); + } + public void setFeedItemlist(List items) { db.beginTransaction(); for (FeedItem item : items) { -- cgit v1.2.3 From 196f5407ce16d888bafae70788b60a8edf5ac27b Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Wed, 4 Sep 2013 20:10:42 +0200 Subject: Deleting a media file didn't work correctly --- src/de/danoeh/antennapod/storage/DBWriter.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/de/danoeh/antennapod/storage') diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java index d96299dbe..74d84ef20 100644 --- a/src/de/danoeh/antennapod/storage/DBWriter.java +++ b/src/de/danoeh/antennapod/storage/DBWriter.java @@ -101,6 +101,8 @@ public class DBWriter { } if (AppConfig.DEBUG) Log.d(TAG, "Deleting File. Result: " + result); + EventDistributor.getInstance().sendQueueUpdateBroadcast(); + EventDistributor.getInstance().sendUnreadItemsUpdateBroadcast(); } } }); -- cgit v1.2.3