diff options
author | Simon Rutishauser <simon.rutishauser@web.de> | 2014-01-02 15:43:43 +0100 |
---|---|---|
committer | Simon Rutishauser <simon.rutishauser@web.de> | 2014-01-02 21:09:53 +0100 |
commit | 8c116142b89aa78f50fbf9dc08701428a6ea0b98 (patch) | |
tree | baeef2a817676efc0950689f1e8196b77ecd8dda /src/de/danoeh/antennapod/storage/DBWriter.java | |
parent | 375aefb2bf28c2bb4cee545808fadd93c1328434 (diff) | |
download | AntennaPod-8c116142b89aa78f50fbf9dc08701428a6ea0b98.zip |
* directly update Feed/FeedItem FlattrStatus instead of writing back entire Feed/FeedItem to database
* fix race condition when fetching FlattrStatus
* fix missing copy of Flattr status in Feed.updateFromOther()
* fix feed reading from db, was missing FlattrStatus
followup on #331
Diffstat (limited to 'src/de/danoeh/antennapod/storage/DBWriter.java')
-rw-r--r-- | src/de/danoeh/antennapod/storage/DBWriter.java | 57 |
1 files changed, 47 insertions, 10 deletions
diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java index 5976adf01..f356b88dd 100644 --- a/src/de/danoeh/antennapod/storage/DBWriter.java +++ b/src/de/danoeh/antennapod/storage/DBWriter.java @@ -214,6 +214,24 @@ public class DBWriter { } /** + * Saves the FlattrStatus of a Feed object in the database. + */ + public static Future<?> setFeedFlattrStatus(final Context context, + final Feed feed) { + return dbExec.submit(new Runnable() { + + @Override + public void run() { + PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + adapter.setFeedFlattrStatus(feed); + adapter.close(); + } + }); + } + + + /** * Adds a FeedMedia object to the playback history. A FeedMedia object is in the playback history if * its playback completion date is set to a non-null value. This method will set the playback completion date to the * current date regardless of the current value. @@ -764,6 +782,23 @@ public class DBWriter { } /** + * Saves the FlattrStatus of a FeedItem object in the database. + */ + public static Future<?> setFeedItemFlattrStatus(final Context context, + final FeedItem item) { + return dbExec.submit(new Runnable() { + + @Override + public void run() { + PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + adapter.setFeedItemFlattrStatus(item); + adapter.close(); + } + }); + } + + /** * Saves a FeedImage object in the database. This method will save all attributes of the FeedImage object. The * contents of FeedComponent-attributes (e.g. the FeedImages's 'feed'-attribute) will not be saved. * @@ -847,23 +882,25 @@ public class DBWriter { // Set flattr status of the passed thing (either a FeedItem or a Feed) - public static void setFlattredStatus(Context context, FlattrThing thing) { + public static Future<?> setFlattredStatus(Context context, FlattrThing thing) { // must propagate this to back db if (thing instanceof FeedItem) - DBWriter.setFeedItem(context, (FeedItem) thing); + return setFeedItemFlattrStatus(context, (FeedItem)thing); else if (thing instanceof Feed) - DBWriter.setCompleteFeed(context, (Feed) thing); + return setFeedFlattrStatus(context, (Feed)thing); else if (thing instanceof SimpleFlattrThing) {} // SimpleFlattrThings are generated on the fly and do not have DB backing else Log.e(TAG, "flattrQueue processing - thing is neither FeedItem nor Feed nor SimpleFlattrThing"); + + return null; } /* * Set flattr status of the feeds/feeditems in flattrList to flattred at the given timestamp, * where the information has been retrieved from the flattr API */ - public static void setFlattredStatus(Context context, List<Flattr> flattrList) { + public static void setFlattredStatus(final Context context, List<Flattr> flattrList) { class FlattrLinkTime { public String paymentLink; public long time; @@ -885,7 +922,7 @@ public class DBWriter { String paymentLink; List<Feed> feeds = DBReader.getFeedList(context); - for (Feed feed: feeds) { + for (final Feed feed: feeds) { // check if the feed has been flattred paymentLink = feed.getPaymentLink(); if (paymentLink != null) { @@ -895,17 +932,17 @@ public class DBWriter { if (AppConfig.DEBUG) Log.d(TAG, "Feed: Trying to match " + feedThingUrl); - for (FlattrLinkTime flattr: flattrLinkTime) { + for (final FlattrLinkTime flattr: flattrLinkTime) { if (flattr.paymentLink.equals(feedThingUrl)) { feed.setFlattrStatus(new FlattrStatus(flattr.time)); - setCompleteFeed(context, feed); + setFeedFlattrStatus(context, feed); break; } } } // check if any of the feeditems have been flattred - for (FeedItem item: DBReader.getFeedItemList(context, feed)) { + for (final FeedItem item: DBReader.getFeedItemList(context, feed)) { paymentLink = item.getPaymentLink(); if (paymentLink != null) { @@ -915,10 +952,10 @@ public class DBWriter { if (AppConfig.DEBUG) Log.d(TAG, "FeedItem: Trying to match " + feedItemThingUrl); - for (FlattrLinkTime flattr: flattrLinkTime) { + for (final FlattrLinkTime flattr: flattrLinkTime) { if (flattr.paymentLink.equals(feedItemThingUrl)) { item.setFlattrStatus(new FlattrStatus(flattr.time)); - setFeedItem(context, item); + setFeedItemFlattrStatus(context, item); break; } } |