summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java26
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java23
-rw-r--r--storage/database/src/main/java/de/danoeh/antennapod/storage/database/PodDBAdapter.java16
3 files changed, 10 insertions, 55 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java
index 29de6ca80..092329229 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java
@@ -3,13 +3,13 @@ package de.danoeh.antennapod.core.export.favorites;
import android.content.Context;
import android.util.Log;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -22,9 +22,6 @@ import de.danoeh.antennapod.core.storage.DBReader;
/** Writes saved favorites to file. */
public class FavoritesWriter implements ExportWriter {
private static final String TAG = "FavoritesWriter";
-
- private static final int PAGE_LIMIT = 100;
-
private static final String FAVORITE_TEMPLATE = "html-export-favorites-item-template.html";
private static final String FEED_TEMPLATE = "html-export-feed-template.html";
private static final String UTF_8 = "UTF-8";
@@ -45,7 +42,9 @@ public class FavoritesWriter implements ExportWriter {
InputStream feedTemplateStream = context.getAssets().open(FEED_TEMPLATE);
String feedTemplate = IOUtils.toString(feedTemplateStream, UTF_8);
- Map<Long, List<FeedItem>> favoriteByFeed = getFeedMap(getFavorites());
+ List<FeedItem> allFavorites = DBReader.getRecentlyPublishedEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.IS_FAVORITE));
+ Map<Long, List<FeedItem>> favoriteByFeed = getFeedMap(allFavorites);
writer.append(templateParts[0]);
@@ -66,23 +65,6 @@ public class FavoritesWriter implements ExportWriter {
Log.d(TAG, "Finished writing document");
}
- private List<FeedItem> getFavorites() {
- int page = 0;
-
- List<FeedItem> favoritesList = new ArrayList<>();
- List<FeedItem> favoritesPage;
- do {
- favoritesPage = DBReader.getFavoriteItemsList(page * PAGE_LIMIT, PAGE_LIMIT);
- favoritesList.addAll(favoritesPage);
- ++page;
- } while (!favoritesPage.isEmpty() && favoritesPage.size() == PAGE_LIMIT);
-
- // sort in descending order
- Collections.sort(favoritesList, (lhs, rhs) -> rhs.getPubDate().compareTo(lhs.getPubDate()));
-
- return favoritesList;
- }
-
/**
* Group favorite episodes by feed, sorting them by publishing date in descending order.
*
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
index 8241a2ca5..899852131 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
@@ -337,33 +337,12 @@ public final class DBReader {
}
}
- /**
- * Loads a list of favorite items.
- *
- * @param offset The first episode that should be loaded.
- * @param limit The maximum number of episodes that should be loaded.
- * @return A list of FeedItems that are marked as favorite.
- */
- public static List<FeedItem> getFavoriteItemsList(int offset, int limit) {
- Log.d(TAG, "getFavoriteItemsList() called");
-
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- try (Cursor cursor = adapter.getFavoritesCursor(offset, limit)) {
- List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
- loadAdditionalFeedItemListData(items);
- return items;
- } finally {
- adapter.close();
- }
- }
-
private static LongList getFavoriteIDList() {
Log.d(TAG, "getFavoriteIDList() called");
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
- try (Cursor cursor = adapter.getFavoritesCursor(0, Integer.MAX_VALUE)) {
+ try (Cursor cursor = adapter.getFavoritesIdsCursor(0, Integer.MAX_VALUE)) {
LongList favoriteIDs = new LongList(cursor.getCount());
while (cursor.moveToNext()) {
favoriteIDs.add(cursor.getLong(0));
diff --git a/storage/database/src/main/java/de/danoeh/antennapod/storage/database/PodDBAdapter.java b/storage/database/src/main/java/de/danoeh/antennapod/storage/database/PodDBAdapter.java
index 42517e972..f4fff808d 100644
--- a/storage/database/src/main/java/de/danoeh/antennapod/storage/database/PodDBAdapter.java
+++ b/storage/database/src/main/java/de/danoeh/antennapod/storage/database/PodDBAdapter.java
@@ -1005,27 +1005,21 @@ public class PodDBAdapter {
return db.rawQuery(query, null);
}
- public final Cursor getFavoritesCursor(int offset, int limit) {
- final String query = SELECT_FEED_ITEMS_AND_MEDIA
+ public final Cursor getFavoritesIdsCursor(int offset, int limit) {
+ // Way faster than selecting all columns
+ final String query = "SELECT " + TABLE_NAME_FEED_ITEMS + "." + KEY_ID
+ + " FROM " + TABLE_NAME_FEED_ITEMS
+ " INNER JOIN " + TABLE_NAME_FAVORITES
- + " ON " + SELECT_KEY_ITEM_ID + " = " + TABLE_NAME_FAVORITES + "." + KEY_FEEDITEM
+ + " ON " + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + " = " + TABLE_NAME_FAVORITES + "." + KEY_FEEDITEM
+ " ORDER BY " + TABLE_NAME_FEED_ITEMS + "." + KEY_PUBDATE + " DESC"
+ " LIMIT " + offset + ", " + limit;
return db.rawQuery(query, null);
}
- public void setFeedItems(int state) {
- setFeedItems(Integer.MIN_VALUE, state, 0);
- }
-
public void setFeedItems(int oldState, int newState) {
setFeedItems(oldState, newState, 0);
}
- public void setFeedItems(int state, long feedId) {
- setFeedItems(Integer.MIN_VALUE, state, feedId);
- }
-
public void setFeedItems(int oldState, int newState, long feedId) {
String sql = "UPDATE " + TABLE_NAME_FEED_ITEMS + " SET " + KEY_READ + "=" + newState;
if (feedId > 0) {