summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/storage
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2013-08-02 23:54:50 +0200
committerdaniel oeh <daniel.oeh@gmail.com>2013-08-02 23:54:50 +0200
commit2071793e6aa1a106744078fcbcf7c0529ed315c4 (patch)
treefb32bfd20e5e66401578c61e108afda1a0b1f81c /src/de/danoeh/antennapod/storage
parent71a47c0a5bf99a734081d217eb3e14d75f017a7a (diff)
downloadAntennaPod-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.java30
-rw-r--r--src/de/danoeh/antennapod/storage/DBTasks.java4
-rw-r--r--src/de/danoeh/antennapod/storage/DBWriter.java65
-rw-r--r--src/de/danoeh/antennapod/storage/PodDBAdapter.java23
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("?)");