Merge pull request #2310 from dklimkin/datareader
Some cleanup on DBReader:
This commit is contained in:
commit
6a30dd611a
@ -4,7 +4,6 @@ import android.database.Cursor;
|
||||
import android.support.v4.util.ArrayMap;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@ -66,23 +65,28 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
List<Feed> result = getFeedList(adapter);
|
||||
try {
|
||||
return getFeedList(adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Feed> getFeedList(PodDBAdapter adapter) {
|
||||
Cursor feedlistCursor = adapter.getAllFeedsCursor();
|
||||
List<Feed> feeds = new ArrayList<>(feedlistCursor.getCount());
|
||||
|
||||
if (feedlistCursor.moveToFirst()) {
|
||||
do {
|
||||
Feed feed = extractFeedFromCursorRow(adapter, feedlistCursor);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getAllFeedsCursor();
|
||||
List<Feed> feeds = new ArrayList<>(cursor.getCount());
|
||||
while (cursor.moveToNext()) {
|
||||
Feed feed = extractFeedFromCursorRow(adapter, cursor);
|
||||
feeds.add(feed);
|
||||
} while (feedlistCursor.moveToNext());
|
||||
}
|
||||
feedlistCursor.close();
|
||||
return feeds;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -92,23 +96,26 @@ public final class DBReader {
|
||||
*/
|
||||
public static List<String> getFeedListDownloadUrls() {
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
List<String> result = new ArrayList<>();
|
||||
adapter.open();
|
||||
Cursor feeds = adapter.getFeedCursorDownloadUrls();
|
||||
if (feeds.moveToFirst()) {
|
||||
do {
|
||||
result.add(feeds.getString(1));
|
||||
} while (feeds.moveToNext());
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFeedCursorDownloadUrls();
|
||||
List<String> result = new ArrayList<>(cursor.getCount());
|
||||
while (cursor.moveToNext()) {
|
||||
result.add(cursor.getString(1));
|
||||
}
|
||||
feeds.close();
|
||||
adapter.close();
|
||||
|
||||
return result;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Loads additional data in to the feed items from other database queries
|
||||
*
|
||||
* @param items the FeedItems who should have other data loaded
|
||||
*/
|
||||
public static void loadAdditionalFeedItemListData(List<FeedItem> items) {
|
||||
@ -139,16 +146,17 @@ public final class DBReader {
|
||||
*/
|
||||
public static void loadFeedDataOfFeedItemList(List<FeedItem> items) {
|
||||
List<Feed> feeds = getFeedList();
|
||||
for (FeedItem item : items) {
|
||||
|
||||
Map<Long, Feed> feedIndex = new ArrayMap<>(feeds.size());
|
||||
for (Feed feed : feeds) {
|
||||
if (feed.getId() == item.getFeedId()) {
|
||||
item.setFeed(feed);
|
||||
break;
|
||||
feedIndex.put(feed.getId(), feed);
|
||||
}
|
||||
}
|
||||
if (item.getFeed() == null) {
|
||||
for (FeedItem item : items) {
|
||||
Feed feed = feedIndex.get(item.getFeedId());
|
||||
if (feed == null) {
|
||||
Log.w(TAG, "No match found for item with ID " + item.getId() + ". Feed ID was " + item.getFeedId());
|
||||
}
|
||||
item.setFeed(feed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -165,33 +173,35 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Cursor itemlistCursor = adapter.getAllItemsOfFeedCursor(feed);
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter,
|
||||
itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
adapter.close();
|
||||
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getAllItemsOfFeedCursor(feed);
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
Collections.sort(items, new FeedItemPubdateComparator());
|
||||
|
||||
for (FeedItem item : items) {
|
||||
item.setFeed(feed);
|
||||
}
|
||||
|
||||
return items;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static List<FeedItem> extractItemlistFromCursor(Cursor itemlistCursor) {
|
||||
Log.d(TAG, "extractItemlistFromCursor() called with: " + "itemlistCursor = [" + itemlistCursor + "]");
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
List<FeedItem> result = extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
try {
|
||||
return extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static List<FeedItem> extractItemlistFromCursor(PodDBAdapter adapter,
|
||||
Cursor cursor) {
|
||||
private static List<FeedItem> extractItemlistFromCursor(PodDBAdapter adapter, Cursor cursor) {
|
||||
List<FeedItem> result = new ArrayList<>(cursor.getCount());
|
||||
|
||||
LongList imageIds = new LongList(cursor.getCount());
|
||||
@ -207,7 +217,7 @@ public final class DBReader {
|
||||
itemIds.add(item.getId());
|
||||
} while (cursor.moveToNext());
|
||||
Map<Long, FeedImage> images = getFeedImages(adapter, imageIds.toArray());
|
||||
Map<Long,FeedMedia> medias = getFeedMedia(adapter, itemIds.toArray());
|
||||
Map<Long, FeedMedia> medias = getFeedMedia(adapter, itemIds);
|
||||
for (int i = 0; i < result.size(); i++) {
|
||||
FeedItem item = result.get(i);
|
||||
long imageId = imageIds.get(i);
|
||||
@ -223,15 +233,14 @@ public final class DBReader {
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Map<Long,FeedMedia> getFeedMedia(PodDBAdapter adapter,
|
||||
long... itemIds) {
|
||||
|
||||
String[] ids = new String[itemIds.length];
|
||||
for(int i=0, len=itemIds.length; i < len; i++) {
|
||||
ids[i] = String.valueOf(itemIds[i]);
|
||||
private static Map<Long, FeedMedia> getFeedMedia(PodDBAdapter adapter, LongList itemIds) {
|
||||
List<String> ids = new ArrayList<>(itemIds.size());
|
||||
for (long item : itemIds.toArray()) {
|
||||
ids.add(String.valueOf(item));
|
||||
}
|
||||
Map<Long,FeedMedia> result = new ArrayMap<>(itemIds.length);
|
||||
Cursor cursor = adapter.getFeedMediaCursor(ids);
|
||||
|
||||
Map<Long, FeedMedia> result = new ArrayMap<>(itemIds.size());
|
||||
Cursor cursor = adapter.getFeedMediaCursor(ids.toArray(new String[0]));
|
||||
try {
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
@ -247,8 +256,7 @@ public final class DBReader {
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Feed extractFeedFromCursorRow(PodDBAdapter adapter,
|
||||
Cursor cursor) {
|
||||
private static Feed extractFeedFromCursorRow(PodDBAdapter adapter, Cursor cursor) {
|
||||
final FeedImage image;
|
||||
int indexImage = cursor.getColumnIndex(PodDBAdapter.KEY_IMAGE);
|
||||
long imageId = cursor.getLong(indexImage);
|
||||
@ -272,11 +280,17 @@ public final class DBReader {
|
||||
|
||||
static List<FeedItem> getQueue(PodDBAdapter adapter) {
|
||||
Log.d(TAG, "getQueue()");
|
||||
Cursor itemlistCursor = adapter.getQueueCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getQueueCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
return items;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -290,22 +304,27 @@ public final class DBReader {
|
||||
Log.d(TAG, "getQueueIDList() called");
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
LongList result = getQueueIDList(adapter);
|
||||
try {
|
||||
return getQueueIDList(adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
static LongList getQueueIDList(PodDBAdapter adapter) {
|
||||
Cursor queueCursor = adapter.getQueueIDCursor();
|
||||
|
||||
LongList queueIds = new LongList(queueCursor.getCount());
|
||||
if (queueCursor.moveToFirst()) {
|
||||
do {
|
||||
queueIds.add(queueCursor.getLong(0));
|
||||
} while (queueCursor.moveToNext());
|
||||
private static LongList getQueueIDList(PodDBAdapter adapter) {
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getQueueIDCursor();
|
||||
LongList queueIds = new LongList(cursor.getCount());
|
||||
while (cursor.moveToNext()) {
|
||||
queueIds.add(cursor.getLong(0));
|
||||
}
|
||||
queueCursor.close();
|
||||
return queueIds;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -316,13 +335,15 @@ public final class DBReader {
|
||||
* list in a {@link de.danoeh.antennapod.core.util.QueueAccess} object for easier access to the queue's properties.
|
||||
*/
|
||||
public static List<FeedItem> getQueue() {
|
||||
Log.d(TAG, "getQueue() called with: " + "");
|
||||
Log.d(TAG, "getQueue() called");
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
List<FeedItem> items = getQueue(adapter);
|
||||
try {
|
||||
return getQueue(adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return items;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -331,22 +352,23 @@ public final class DBReader {
|
||||
* @return A list of FeedItems whose episdoe has been downloaded.
|
||||
*/
|
||||
public static List<FeedItem> getDownloadedItems() {
|
||||
Log.d(TAG, "getDownloadedItems() called with: " + "");
|
||||
Log.d(TAG, "getDownloadedItems() called");
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Cursor itemlistCursor = adapter.getDownloadedItemsCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter,
|
||||
itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getDownloadedItemsCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
adapter.close();
|
||||
|
||||
Collections.sort(items, new FeedItemPubdateComparator());
|
||||
|
||||
return items;
|
||||
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -359,20 +381,24 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
Cursor itemlistCursor = adapter.getUnreadItemsCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getUnreadItemsCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
|
||||
adapter.close();
|
||||
|
||||
return items;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a list of FeedItems that are considered new.
|
||||
* Excludes items from feeds that do not have keep updated enabled.
|
||||
*
|
||||
* @return A list of FeedItems that are considered new.
|
||||
*/
|
||||
public static List<FeedItem> getNewItemsList() {
|
||||
@ -380,16 +406,18 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Cursor itemlistCursor = adapter.getNewItemsCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getNewItemsCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
|
||||
adapter.close();
|
||||
|
||||
return items;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static List<FeedItem> getFavoriteItemsList() {
|
||||
@ -397,33 +425,39 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Cursor itemlistCursor = adapter.getFavoritesCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFavoritesCursor();
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
|
||||
adapter.close();
|
||||
|
||||
return items;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static LongList getFavoriteIDList() {
|
||||
Log.d(TAG, "getFavoriteIDList() called");
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
Cursor favoritesCursor = adapter.getFavoritesCursor();
|
||||
|
||||
LongList favoriteIDs = new LongList(favoritesCursor.getCount());
|
||||
if (favoritesCursor.moveToFirst()) {
|
||||
do {
|
||||
favoriteIDs.add(favoritesCursor.getLong(0));
|
||||
} while (favoritesCursor.moveToNext());
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFavoritesCursor();
|
||||
LongList favoriteIDs = new LongList(cursor.getCount());
|
||||
while (cursor.moveToNext()) {
|
||||
favoriteIDs.add(cursor.getLong(0));
|
||||
}
|
||||
favoritesCursor.close();
|
||||
adapter.close();
|
||||
return favoriteIDs;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -436,16 +470,18 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Cursor itemlistCursor = adapter.getRecentlyPublishedItemsCursor(limit);
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemlistCursor);
|
||||
itemlistCursor.close();
|
||||
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getRecentlyPublishedItemsCursor(limit);
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
|
||||
adapter.close();
|
||||
|
||||
return items;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -461,21 +497,29 @@ public final class DBReader {
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
|
||||
Cursor mediaCursor = adapter.getCompletedMediaCursor(PLAYBACK_HISTORY_SIZE);
|
||||
Cursor mediaCursor = null;
|
||||
Cursor itemCursor = null;
|
||||
try {
|
||||
mediaCursor = adapter.getCompletedMediaCursor(PLAYBACK_HISTORY_SIZE);
|
||||
String[] itemIds = new String[mediaCursor.getCount()];
|
||||
for (int i = 0; i < itemIds.length && mediaCursor.moveToPosition(i); i++) {
|
||||
int index = mediaCursor.getColumnIndex(PodDBAdapter.KEY_FEEDITEM);
|
||||
itemIds[i] = Long.toString(mediaCursor.getLong(index));
|
||||
}
|
||||
mediaCursor.close();
|
||||
Cursor itemCursor = adapter.getFeedItemCursor(itemIds);
|
||||
itemCursor = adapter.getFeedItemCursor(itemIds);
|
||||
List<FeedItem> items = extractItemlistFromCursor(adapter, itemCursor);
|
||||
loadAdditionalFeedItemListData(items);
|
||||
itemCursor.close();
|
||||
adapter.close();
|
||||
|
||||
Collections.sort(items, new PlaybackCompletionDateComparator());
|
||||
return items;
|
||||
} finally {
|
||||
if (mediaCursor != null) {
|
||||
mediaCursor.close();
|
||||
}
|
||||
if (itemCursor != null) {
|
||||
itemCursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -489,19 +533,21 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
Cursor logCursor = adapter.getDownloadLogCursor(DOWNLOAD_LOG_SIZE);
|
||||
List<DownloadStatus> downloadLog = new ArrayList<>(logCursor.getCount());
|
||||
|
||||
if (logCursor.moveToFirst()) {
|
||||
do {
|
||||
DownloadStatus status = DownloadStatus.fromCursor(logCursor);
|
||||
downloadLog.add(status);
|
||||
} while (logCursor.moveToNext());
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getDownloadLogCursor(DOWNLOAD_LOG_SIZE);
|
||||
List<DownloadStatus> downloadLog = new ArrayList<>(cursor.getCount());
|
||||
while (cursor.moveToNext()) {
|
||||
downloadLog.add(DownloadStatus.fromCursor(cursor));
|
||||
}
|
||||
logCursor.close();
|
||||
adapter.close();
|
||||
Collections.sort(downloadLog, new DownloadStatusComparator());
|
||||
return downloadLog;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -516,19 +562,21 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
Cursor cursor = adapter.getDownloadLog(Feed.FEEDFILETYPE_FEED, feed.getId());
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getDownloadLog(Feed.FEEDFILETYPE_FEED, feed.getId());
|
||||
List<DownloadStatus> downloadLog = new ArrayList<>(cursor.getCount());
|
||||
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
DownloadStatus status = DownloadStatus.fromCursor(cursor);
|
||||
downloadLog.add(status);
|
||||
} while (cursor.moveToNext());
|
||||
while (cursor.moveToNext()) {
|
||||
downloadLog.add(DownloadStatus.fromCursor(cursor));
|
||||
}
|
||||
cursor.close();
|
||||
adapter.close();
|
||||
Collections.sort(downloadLog, new DownloadStatusComparator());
|
||||
return downloadLog;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -542,18 +590,21 @@ public final class DBReader {
|
||||
Log.d(TAG, "getFeedStatisticsList() called");
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
List<FeedItemStatistics> result = new ArrayList<>();
|
||||
Cursor cursor = adapter.getFeedStatisticsCursor();
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFeedStatisticsCursor();
|
||||
List<FeedItemStatistics> result = new ArrayList<>(cursor.getCount());
|
||||
while (cursor.moveToNext()) {
|
||||
FeedItemStatistics fis = FeedItemStatistics.fromCursor(cursor);
|
||||
result.add(fis);
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
|
||||
cursor.close();
|
||||
adapter.close();
|
||||
return result;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -565,73 +616,58 @@ public final class DBReader {
|
||||
*/
|
||||
public static Feed getFeed(final long feedId) {
|
||||
Log.d(TAG, "getFeed() called with: " + "feedId = [" + feedId + "]");
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
Feed result = getFeed(feedId, adapter);
|
||||
try {
|
||||
return getFeed(feedId, adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
static Feed getFeed(final long feedId, PodDBAdapter adapter) {
|
||||
Feed feed = null;
|
||||
|
||||
Cursor feedCursor = adapter.getFeedCursor(feedId);
|
||||
if (feedCursor.moveToFirst()) {
|
||||
feed = extractFeedFromCursorRow(adapter, feedCursor);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFeedCursor(feedId);
|
||||
if (cursor.moveToNext()) {
|
||||
feed = extractFeedFromCursorRow(adapter, cursor);
|
||||
feed.setItems(getFeedItemList(feed));
|
||||
} else {
|
||||
Log.e(TAG, "getFeed could not find feed with id " + feedId);
|
||||
}
|
||||
feedCursor.close();
|
||||
return feed;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static FeedItem getFeedItem(final long itemId, PodDBAdapter adapter) {
|
||||
private static FeedItem getFeedItem(final long itemId, PodDBAdapter adapter) {
|
||||
Log.d(TAG, "Loading feeditem with id " + itemId);
|
||||
FeedItem item = null;
|
||||
|
||||
Cursor itemCursor = adapter.getFeedItemCursor(Long.toString(itemId));
|
||||
if (!itemCursor.moveToFirst()) {
|
||||
itemCursor.close();
|
||||
return null;
|
||||
}
|
||||
List<FeedItem> list = extractItemlistFromCursor(adapter, itemCursor);
|
||||
itemCursor.close();
|
||||
if (list.size() > 0) {
|
||||
FeedItem item = null;
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFeedItemCursor(Long.toString(itemId));
|
||||
if (cursor.moveToNext()) {
|
||||
List<FeedItem> list = extractItemlistFromCursor(adapter, cursor);
|
||||
if (!list.isEmpty()) {
|
||||
item = list.get(0);
|
||||
loadAdditionalFeedItemListData(list);
|
||||
if (item.hasChapters()) {
|
||||
loadChaptersOfFeedItem(adapter, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
static List<FeedItem> getFeedItems(PodDBAdapter adapter, final long... itemIds) {
|
||||
|
||||
String[] ids = new String[itemIds.length];
|
||||
for(int i = 0; i < itemIds.length; i++) {
|
||||
long itemId = itemIds[i];
|
||||
ids[i] = Long.toString(itemId);
|
||||
}
|
||||
|
||||
List<FeedItem> result;
|
||||
|
||||
Cursor itemCursor = adapter.getFeedItemCursor(ids);
|
||||
if (itemCursor.moveToFirst()) {
|
||||
result = extractItemlistFromCursor(adapter, itemCursor);
|
||||
loadAdditionalFeedItemListData(result);
|
||||
for(FeedItem item : result) {
|
||||
if (item.hasChapters()) {
|
||||
loadChaptersOfFeedItem(adapter, item);
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
result = Collections.emptyList();
|
||||
}
|
||||
itemCursor.close();
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -647,46 +683,37 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
FeedItem item = getFeedItem(itemId, adapter);
|
||||
try {
|
||||
return getFeedItem(itemId, adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
static FeedItem getFeedItem(final String podcastUrl, final String episodeUrl, PodDBAdapter adapter) {
|
||||
Log.d(TAG, "Loading feeditem with podcast url " + podcastUrl + " and episode url " + episodeUrl);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getFeedItemCursor(podcastUrl, episodeUrl);
|
||||
if (!cursor.moveToNext()) {
|
||||
return null;
|
||||
}
|
||||
List<FeedItem> list = extractItemlistFromCursor(adapter, cursor);
|
||||
FeedItem item = null;
|
||||
Cursor itemCursor = adapter.getFeedItemCursor(podcastUrl, episodeUrl);
|
||||
if (itemCursor.moveToFirst()) {
|
||||
List<FeedItem> list = extractItemlistFromCursor(adapter, itemCursor);
|
||||
if (list.size() > 0) {
|
||||
if (!list.isEmpty()) {
|
||||
item = list.get(0);
|
||||
loadAdditionalFeedItemListData(list);
|
||||
if (item.hasChapters()) {
|
||||
loadChaptersOfFeedItem(adapter, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
itemCursor.close();
|
||||
return item;
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads specific FeedItems from the database. This method canbe used for loading more
|
||||
* than one FeedItem
|
||||
*
|
||||
* @param itemIds The IDs of the FeedItems
|
||||
* @return The FeedItems or an empty list if none of the FeedItems could be found. All FeedComponent-attributes
|
||||
* as well as chapter marks of the FeedItems will also be loaded from the database.
|
||||
*/
|
||||
public static List<FeedItem> getFeedItems(final long... itemIds) {
|
||||
Log.d(TAG, "getFeedItems() called with: " + "itemIds = [" + Arrays.toString(itemIds) + "]");
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
List<FeedItem> items = getFeedItems(adapter, itemIds);
|
||||
adapter.close();
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns credentials based on image URL
|
||||
@ -699,16 +726,18 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
String credentials = getImageAuthentication(imageUrl, adapter);
|
||||
try {
|
||||
return getImageAuthentication(imageUrl, adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return credentials;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static String getImageAuthentication(final String imageUrl, PodDBAdapter adapter) {
|
||||
private static String getImageAuthentication(final String imageUrl, PodDBAdapter adapter) {
|
||||
String credentials = null;
|
||||
Cursor cursor = adapter.getImageAuthenticationCursor(imageUrl);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getImageAuthenticationCursor(imageUrl);
|
||||
if (cursor.moveToFirst()) {
|
||||
String username = cursor.getString(0);
|
||||
String password = cursor.getString(1);
|
||||
@ -721,8 +750,10 @@ public final class DBReader {
|
||||
credentials = "";
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
return credentials;
|
||||
}
|
||||
|
||||
@ -739,9 +770,11 @@ public final class DBReader {
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
FeedItem item = getFeedItem(podcastUrl, episodeUrl, adapter);
|
||||
try {
|
||||
return getFeedItem(podcastUrl, episodeUrl, adapter);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -753,18 +786,24 @@ public final class DBReader {
|
||||
Log.d(TAG, "loadExtraInformationOfFeedItem() called with: " + "item = [" + item + "]");
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
Cursor extraCursor = adapter.getExtraInformationOfItem(item);
|
||||
if (extraCursor.moveToFirst()) {
|
||||
int indexDescription = extraCursor.getColumnIndex(PodDBAdapter.KEY_DESCRIPTION);
|
||||
String description = extraCursor.getString(indexDescription);
|
||||
int indexContentEncoded = extraCursor.getColumnIndex(PodDBAdapter.KEY_CONTENT_ENCODED);
|
||||
String contentEncoded = extraCursor.getString(indexContentEncoded);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getExtraInformationOfItem(item);
|
||||
if (cursor.moveToFirst()) {
|
||||
int indexDescription = cursor.getColumnIndex(PodDBAdapter.KEY_DESCRIPTION);
|
||||
String description = cursor.getString(indexDescription);
|
||||
int indexContentEncoded = cursor.getColumnIndex(PodDBAdapter.KEY_CONTENT_ENCODED);
|
||||
String contentEncoded = cursor.getString(indexContentEncoded);
|
||||
item.setDescription(description);
|
||||
item.setContentEncoded(contentEncoded);
|
||||
}
|
||||
extraCursor.close();
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the list of chapters that belongs to this FeedItem if available. This method overwrites
|
||||
@ -775,52 +814,60 @@ public final class DBReader {
|
||||
*/
|
||||
public static void loadChaptersOfFeedItem(final FeedItem item) {
|
||||
Log.d(TAG, "loadChaptersOfFeedItem() called with: " + "item = [" + item + "]");
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
try {
|
||||
loadChaptersOfFeedItem(adapter, item);
|
||||
} finally {
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
static void loadChaptersOfFeedItem(PodDBAdapter adapter, FeedItem item) {
|
||||
Cursor chapterCursor = adapter.getSimpleChaptersOfFeedItemCursor(item);
|
||||
if (chapterCursor.moveToFirst()) {
|
||||
item.setChapters(new ArrayList<>());
|
||||
do {
|
||||
int indexType = chapterCursor.getColumnIndex(PodDBAdapter.KEY_CHAPTER_TYPE);
|
||||
int indexStart = chapterCursor.getColumnIndex(PodDBAdapter.KEY_START);
|
||||
int indexTitle = chapterCursor.getColumnIndex(PodDBAdapter.KEY_TITLE);
|
||||
int indexLink = chapterCursor.getColumnIndex(PodDBAdapter.KEY_LINK);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = adapter.getSimpleChaptersOfFeedItemCursor(item);
|
||||
int chaptersCount = cursor.getCount();
|
||||
if (chaptersCount == 0) {
|
||||
item.setChapters(null);
|
||||
return;
|
||||
}
|
||||
item.setChapters(new ArrayList<>(chaptersCount));
|
||||
while (cursor.moveToNext()) {
|
||||
int indexType = cursor.getColumnIndex(PodDBAdapter.KEY_CHAPTER_TYPE);
|
||||
int indexStart = cursor.getColumnIndex(PodDBAdapter.KEY_START);
|
||||
int indexTitle = cursor.getColumnIndex(PodDBAdapter.KEY_TITLE);
|
||||
int indexLink = cursor.getColumnIndex(PodDBAdapter.KEY_LINK);
|
||||
|
||||
int chapterType = chapterCursor.getInt(indexType);
|
||||
int chapterType = cursor.getInt(indexType);
|
||||
Chapter chapter = null;
|
||||
long start = chapterCursor.getLong(indexStart);
|
||||
String title = chapterCursor.getString(indexTitle);
|
||||
String link = chapterCursor.getString(indexLink);
|
||||
long start = cursor.getLong(indexStart);
|
||||
String title = cursor.getString(indexTitle);
|
||||
String link = cursor.getString(indexLink);
|
||||
|
||||
switch (chapterType) {
|
||||
case SimpleChapter.CHAPTERTYPE_SIMPLECHAPTER:
|
||||
chapter = new SimpleChapter(start, title, item,
|
||||
link);
|
||||
chapter = new SimpleChapter(start, title, item, link);
|
||||
break;
|
||||
case ID3Chapter.CHAPTERTYPE_ID3CHAPTER:
|
||||
chapter = new ID3Chapter(start, title, item,
|
||||
link);
|
||||
chapter = new ID3Chapter(start, title, item, link);
|
||||
break;
|
||||
case VorbisCommentChapter.CHAPTERTYPE_VORBISCOMMENT_CHAPTER:
|
||||
chapter = new VorbisCommentChapter(start,
|
||||
title, item, link);
|
||||
chapter = new VorbisCommentChapter(start, title, item, link);
|
||||
break;
|
||||
}
|
||||
if (chapter != null) {
|
||||
int indexId = chapterCursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
chapter.setId(chapterCursor.getLong(indexId));
|
||||
int indexId = cursor.getColumnIndex(PodDBAdapter.KEY_ID);
|
||||
chapter.setId(cursor.getLong(indexId));
|
||||
item.getChapters().add(chapter);
|
||||
}
|
||||
} while (chapterCursor.moveToNext());
|
||||
} else {
|
||||
item.setChapters(null);
|
||||
}
|
||||
chapterCursor.close();
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -828,13 +875,17 @@ public final class DBReader {
|
||||
*
|
||||
* @return The number of downloaded episodes.
|
||||
*/
|
||||
|
||||
public static int getNumberOfDownloadedEpisodes() {
|
||||
Log.d(TAG, "getNumberOfDownloadedEpisodes() called with: " + "");
|
||||
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
final int result = adapter.getNumberOfDownloadedEpisodes();
|
||||
try {
|
||||
return adapter.getNumberOfDownloadedEpisodes();
|
||||
} finally {
|
||||
adapter.close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -847,9 +898,11 @@ public final class DBReader {
|
||||
Log.d(TAG, "getFeedImage() called with: " + "imageId = [" + imageId + "]");
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
adapter.open();
|
||||
FeedImage result = getFeedImage(adapter, imageId);
|
||||
try {
|
||||
return getFeedImage(adapter, imageId);
|
||||
} finally {
|
||||
adapter.close();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -874,15 +927,16 @@ public final class DBReader {
|
||||
ids[i] = String.valueOf(imageIds[i]);
|
||||
}
|
||||
Cursor cursor = adapter.getImageCursor(ids);
|
||||
Map<Long, FeedImage> result = new ArrayMap<>(cursor.getCount());
|
||||
try {
|
||||
if ((cursor.getCount() == 0) || !cursor.moveToFirst()) {
|
||||
int imageCount = cursor.getCount();
|
||||
if (imageCount == 0) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
do {
|
||||
Map<Long, FeedImage> result = new ArrayMap<>(imageCount);
|
||||
try {
|
||||
while (cursor.moveToNext()) {
|
||||
FeedImage image = FeedImage.fromCursor(cursor);
|
||||
result.put(image.getId(), image);
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
@ -899,18 +953,16 @@ public final class DBReader {
|
||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||
|
||||
adapter.open();
|
||||
Cursor mediaCursor = adapter.getSingleFeedMediaCursor(mediaId);
|
||||
|
||||
Cursor mediaCursor = null;
|
||||
try {
|
||||
mediaCursor = adapter.getSingleFeedMediaCursor(mediaId);
|
||||
if (!mediaCursor.moveToFirst()) {
|
||||
mediaCursor.close();
|
||||
return null;
|
||||
}
|
||||
|
||||
int indexFeedItem = mediaCursor.getColumnIndex(PodDBAdapter.KEY_FEEDITEM);
|
||||
long itemId = mediaCursor.getLong(indexFeedItem);
|
||||
FeedMedia media = FeedMedia.fromCursor(mediaCursor);
|
||||
mediaCursor.close();
|
||||
|
||||
if (media != null) {
|
||||
FeedItem item = getFeedItem(itemId);
|
||||
if (item != null) {
|
||||
@ -918,10 +970,14 @@ public final class DBReader {
|
||||
item.setMedia(media);
|
||||
}
|
||||
}
|
||||
|
||||
adapter.close();
|
||||
|
||||
return media;
|
||||
|
||||
} finally {
|
||||
if (mediaCursor != null) {
|
||||
mediaCursor.close();
|
||||
}
|
||||
adapter.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1100,7 +1156,6 @@ public final class DBReader {
|
||||
* Returns data necessary for displaying the navigation drawer. This includes
|
||||
* the list of subscriptions, the number of items in the queue and the number of unread
|
||||
* items.
|
||||
*
|
||||
*/
|
||||
public static NavDrawerData getNavDrawerData() {
|
||||
Log.d(TAG, "getNavDrawerData() called with: " + "");
|
||||
|
@ -1156,7 +1156,9 @@ public class PodDBAdapter {
|
||||
+ TABLE_NAME_FEED_IMAGES + " WHERE " + KEY_ID + " IN "
|
||||
+ buildInOperator(neededLength), parts);
|
||||
}
|
||||
return new MergeCursor(cursors);
|
||||
Cursor result = new MergeCursor(cursors);
|
||||
result.moveToFirst();
|
||||
return result;
|
||||
} else {
|
||||
return db.query(TABLE_NAME_FEED_IMAGES, null, KEY_ID + " IN "
|
||||
+ buildInOperator(length), imageIds, null, null, null);
|
||||
@ -1341,7 +1343,9 @@ public class PodDBAdapter {
|
||||
+ TABLE_NAME_FEED_MEDIA + " WHERE " + KEY_FEEDITEM + " IN "
|
||||
+ buildInOperator(neededLength), parts);
|
||||
}
|
||||
return new MergeCursor(cursors);
|
||||
Cursor result = new MergeCursor(cursors);
|
||||
result.moveToFirst();
|
||||
return result;
|
||||
} else {
|
||||
return db.query(TABLE_NAME_FEED_MEDIA, null, KEY_FEEDITEM + " IN "
|
||||
+ buildInOperator(length), itemIds, null, null, null);
|
||||
|
Loading…
x
Reference in New Issue
Block a user