Load only favorite IDs instead of whole FeedItems
This commit is contained in:
parent
4c88a1aa69
commit
836e2199bc
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue