diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2013-08-02 23:54:50 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2013-08-02 23:54:50 +0200 |
commit | 2071793e6aa1a106744078fcbcf7c0529ed315c4 (patch) | |
tree | fb32bfd20e5e66401578c61e108afda1a0b1f81c /src/de/danoeh/antennapod/storage | |
parent | 71a47c0a5bf99a734081d217eb3e14d75f017a7a (diff) | |
download | AntennaPod-2071793e6aa1a106744078fcbcf7c0529ed315c4.zip |
Organizing the queue now works, several bugfixes etc.
Diffstat (limited to 'src/de/danoeh/antennapod/storage')
-rw-r--r-- | src/de/danoeh/antennapod/storage/DBReader.java | 30 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/storage/DBTasks.java | 4 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/storage/DBWriter.java | 65 | ||||
-rw-r--r-- | src/de/danoeh/antennapod/storage/PodDBAdapter.java | 23 |
4 files changed, 98 insertions, 24 deletions
diff --git a/src/de/danoeh/antennapod/storage/DBReader.java b/src/de/danoeh/antennapod/storage/DBReader.java index ab3d6342d..c8135bea1 100644 --- a/src/de/danoeh/antennapod/storage/DBReader.java +++ b/src/de/danoeh/antennapod/storage/DBReader.java @@ -18,7 +18,7 @@ import de.danoeh.antennapod.feed.FeedMedia; import de.danoeh.antennapod.feed.ID3Chapter; import de.danoeh.antennapod.feed.SimpleChapter; import de.danoeh.antennapod.feed.VorbisCommentChapter; -import de.danoeh.antennapod.service.download.DownloadStatus; +import de.danoeh.antennapod.service.download.*; import de.danoeh.antennapod.util.comparator.DownloadStatusComparator; import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator; @@ -132,8 +132,7 @@ public final class DBReader { itemIds.add(String.valueOf(item.getId())); item.setRead((itemlistCursor - .getInt(PodDBAdapter.IDX_FI_SMALL_READ) > 0) ? true - : false); + .getInt(PodDBAdapter.IDX_FI_SMALL_READ) > 0)); item.setItemIdentifier(itemlistCursor .getString(PodDBAdapter.IDX_FI_SMALL_ITEM_IDENTIFIER)); @@ -182,7 +181,6 @@ public final class DBReader { } extractMediafromItemlist(adapter, items, itemIds); - Collections.sort(items, new FeedItemPubdateComparator()); return items; } @@ -275,11 +273,33 @@ public final class DBReader { itemlistCursor); itemlistCursor.close(); loadFeedDataOfFeedItemlist(context, items); - Collections.sort(items, new FeedItemPubdateComparator()); return items; } + public static List<Long> getQueueIDList(Context context) { + PodDBAdapter adapter = new PodDBAdapter(context); + + adapter.open(); + List<Long> result = getQueueIDList(adapter); + adapter.close(); + + return result; + } + + static List<Long> getQueueIDList(PodDBAdapter adapter) { + adapter.open(); + Cursor queueCursor = adapter.getQueueIDCursor(); + + List<Long> queueIds = new ArrayList<Long>(queueCursor.getCount()); + if (queueCursor.moveToFirst()) { + do { + queueIds.add(queueCursor.getLong(0)); + } while (queueCursor.moveToNext()); + } + return queueIds; + } + public static List<FeedItem> getQueue(Context context) { if (AppConfig.DEBUG) Log.d(TAG, "Extracting queue"); diff --git a/src/de/danoeh/antennapod/storage/DBTasks.java b/src/de/danoeh/antennapod/storage/DBTasks.java index eceb3c1b4..39c30445e 100644 --- a/src/de/danoeh/antennapod/storage/DBTasks.java +++ b/src/de/danoeh/antennapod/storage/DBTasks.java @@ -87,7 +87,7 @@ public final class DBTasks { } } - public void refreshExpiredFeeds(final Context context) { + public static void refreshExpiredFeeds(final Context context) { if (AppConfig.DEBUG) Log.d(TAG, "Refreshing expired feeds"); @@ -130,7 +130,7 @@ public final class DBTasks { } /** Updates a specific feed. */ - private static void refreshFeed(Context context, Feed feed) + public static void refreshFeed(Context context, Feed feed) throws DownloadRequestException { DownloadRequester.getInstance().downloadFeed(context, new Feed(feed.getDownload_url(), new Date(), feed.getTitle())); diff --git a/src/de/danoeh/antennapod/storage/DBWriter.java b/src/de/danoeh/antennapod/storage/DBWriter.java index 3ff2fddc1..76f6306f8 100644 --- a/src/de/danoeh/antennapod/storage/DBWriter.java +++ b/src/de/danoeh/antennapod/storage/DBWriter.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.storage; import java.io.File; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ExecutorService; @@ -15,13 +16,11 @@ import android.database.Cursor; import android.preference.PreferenceManager; import android.util.Log; import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.feed.EventDistributor; -import de.danoeh.antennapod.feed.Feed; -import de.danoeh.antennapod.feed.FeedItem; -import de.danoeh.antennapod.feed.FeedMedia; +import de.danoeh.antennapod.feed.*; import de.danoeh.antennapod.preferences.PlaybackPreferences; import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.service.download.DownloadStatus; +import de.danoeh.antennapod.util.QueueAccess; public class DBWriter { private static final String TAG = "DBWriter"; @@ -349,20 +348,23 @@ public class DBWriter { if (queue != null) { boolean queueModified = false; - - if (itemListContains(queue, itemId)) { + QueueAccess queueAccess = QueueAccess.ItemListAccess(queue); + if (queueAccess.contains(itemId)) { item = DBReader.getFeedItem(context, itemId); if (item != null) { - queue.remove(item); - queueModified = true; + queueModified = queueAccess.remove(itemId); } } if (queueModified) { adapter.setQueue(queue); EventDistributor.getInstance() .sendQueueUpdateBroadcast(); - } - } + } else { + Log.w(TAG, "Queue was not modified by call to removeQueueItem"); + } + } else { + Log.e(TAG, "removeQueueItem: Could not load queue"); + } adapter.close(); if (performAutoDownload) { @@ -393,21 +395,30 @@ public class DBWriter { if (queue != null) { if (from >= 0 && from < queue.size() && to >= 0 && to < queue.size()) { + final FeedItem item = queue.remove(from); queue.add(to, item); - adapter.setQueue(queue); + + adapter.setQueue(queue); if (broadcastUpdate) { EventDistributor.getInstance() .sendQueueUpdateBroadcast(); } } - } + } else { + Log.e(TAG, "moveQueueItem: Could not load queue"); + } adapter.close(); } }); } + public static void markItemRead(Context context, FeedItem item, boolean read, boolean resetMediaPosition) { + long mediaId = (item.hasMedia()) ? item.getMedia().getId() : 0; + markItemRead(context, item.getId(), read, mediaId, resetMediaPosition); + } + public static void markItemRead(final Context context, final long itemId, final boolean read) { markItemRead(context, itemId, read, 0, false); @@ -507,9 +518,9 @@ public class DBWriter { } - static void setFeedMedia(final Context context, + public static Future<?> setFeedMedia(final Context context, final FeedMedia media) { - dbExec.submit(new Runnable() { + return dbExec.submit(new Runnable() { @Override public void run() { @@ -522,6 +533,32 @@ public class DBWriter { } + public static Future<?> setFeedItem(final Context context, + final FeedItem item) { + return dbExec.submit(new Runnable() { + + @Override + public void run() { + PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + adapter.setSingleFeedItem(item); + adapter.close(); + }}); + } + + public static Future<?> setFeedImage(final Context context, + final FeedImage image) { + return dbExec.submit(new Runnable() { + + @Override + public void run() { + PodDBAdapter adapter = new PodDBAdapter(context); + adapter.open(); + adapter.setImage(image); + adapter.close(); + }}); + } + private static boolean itemListContains(List<FeedItem> 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 7c28ade14..1aa8c93d4 100644 --- a/src/de/danoeh/antennapod/storage/PodDBAdapter.java +++ b/src/de/danoeh/antennapod/storage/PodDBAdapter.java @@ -305,6 +305,7 @@ public class PodDBAdapter { * @return the id of the entry * */ public long setImage(FeedImage image) { + db.beginTransaction(); ContentValues values = new ContentValues(); values.put(KEY_TITLE, image.getTitle()); values.put(KEY_DOWNLOAD_URL, image.getDownload_url()); @@ -316,6 +317,13 @@ public class PodDBAdapter { db.update(TABLE_NAME_FEED_IMAGES, values, KEY_ID + "=?", new String[] { String.valueOf(image.getId()) }); } + if (image.getFeed() != null && image.getFeed().getId() != 0 ) { + values.clear(); + values.put(KEY_IMAGE, image.getId()); + db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[] {String.valueOf(image.getFeed().getId())}); + } + db.setTransactionSuccessful(); + db.endTransaction(); return image.getId(); } @@ -686,11 +694,11 @@ public class PodDBAdapter { open(); String selFiSmall = Arrays.toString(SEL_FI_SMALL); Object[] args = (Object[]) new String[] { - selFiSmall.substring(1, selFiSmall.length() - 1), + selFiSmall.substring(1, selFiSmall.length() - 1) + "," + TABLE_NAME_QUEUE + "." + KEY_ID, TABLE_NAME_FEED_ITEMS, TABLE_NAME_QUEUE, TABLE_NAME_FEED_ITEMS + "." + KEY_ID, TABLE_NAME_QUEUE + "." + KEY_FEEDITEM, - TABLE_NAME_QUEUE + "." + KEY_FEEDITEM }; + TABLE_NAME_QUEUE + "." + KEY_ID }; String query = String.format( "SELECT %s FROM %s INNER JOIN %s ON %s=%s ORDER BY %s", args); Cursor c = db.rawQuery(query, null); @@ -703,6 +711,12 @@ public class PodDBAdapter { return c; } + public Cursor getQueueIDCursor() { + open(); + Cursor c = db.query(TABLE_NAME_QUEUE, new String[]{KEY_FEEDITEM}, null, null, null, null, KEY_ID + " ASC", null); + return c; + } + /** * Returns a cursor which contains all feed items in the unread items list. * The returned cursor uses the SEL_FI_SMALL selection. @@ -791,8 +805,11 @@ public class PodDBAdapter { /** Builds an IN-operator argument depending on the number of items. */ private String buildInOperator(int size) { + if (size == 1) { + return "(?)"; + } StringBuffer buffer = new StringBuffer("("); - for (int i = 0; i <= size; i++) { + for (int i = 0; i < size - 1; i++) { buffer.append("?,"); } buffer.append("?)"); |