summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2023-03-01 20:52:23 +0100
committerGitHub <noreply@github.com>2023-03-01 20:52:23 +0100
commit24d1a06662c8eec31f3a4c3ebdcd3aea759fb63a (patch)
tree82873a97be29ec64127a07773ac8911657547b68
parent581e71b306bbc28dc504bde1d1bba6d6121e26e1 (diff)
downloadAntennaPod-24d1a06662c8eec31f3a4c3ebdcd3aea759fb63a.zip
Instead of specialized methods, use the global 'getEpisodes' method with a filter (#6358)
-rw-r--r--app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/ui/home/sections/DownloadsSection.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/ui/home/sections/InboxSection.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/export/favorites/FavoritesWriter.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java10
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java119
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithm.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/ExceptFavoriteCleanupAlgorithm.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java5
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/storage/DbReaderTest.java7
-rw-r--r--storage/database/src/main/java/de/danoeh/antennapod/storage/database/PodDBAdapter.java83
17 files changed, 71 insertions, 208 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java b/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java
index 735cff532..16605d202 100644
--- a/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/playback/PlaybackTest.java
@@ -235,7 +235,7 @@ public class PlaybackTest {
openNavDrawer();
onDrawerItem(withText(R.string.episodes_label)).perform(click());
- final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10,
+ final List<FeedItem> episodes = DBReader.getEpisodes(0, 10,
FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD);
Matcher<View> allEpisodesMatcher = allOf(withId(R.id.recyclerView), isDisplayed(), hasMinimumChildCount(2));
onView(isRoot()).perform(waitForView(allEpisodesMatcher, 1000));
@@ -271,7 +271,7 @@ public class PlaybackTest {
uiTestUtils.addLocalFeedData(true);
DBWriter.clearQueue().get();
activityTestRule.launchActivity(new Intent());
- final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10,
+ final List<FeedItem> episodes = DBReader.getEpisodes(0, 10,
FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD);
startLocalPlayback();
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
index dfbaf9695..7061a69f3 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -61,15 +61,13 @@ public class AllEpisodesFragment extends EpisodesListFragment {
@NonNull
@Override
protected List<FeedItem> loadData() {
- return DBReader.getRecentlyPublishedEpisodes(0, page * EPISODES_PER_PAGE,
- getFilter(), getSortOrder());
+ return DBReader.getEpisodes(0, page * EPISODES_PER_PAGE, getFilter(), getSortOrder());
}
@NonNull
@Override
protected List<FeedItem> loadMoreData(int page) {
- return DBReader.getRecentlyPublishedEpisodes((page - 1) * EPISODES_PER_PAGE,
- EPISODES_PER_PAGE, getFilter(), getSortOrder());
+ return DBReader.getEpisodes((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE, getFilter(), getSortOrder());
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
index f615252bd..dbc453301 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java
@@ -315,7 +315,8 @@ public class CompletedDownloadsFragment extends Fragment
emptyView.hide();
disposable = Observable.fromCallable(() -> {
SortOrder sortOrder = UserPreferences.getDownloadsSortedOrder();
- List<FeedItem> downloadedItems = DBReader.getDownloadedItems(sortOrder);
+ List<FeedItem> downloadedItems = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), sortOrder);
List<Long> mediaIds = new ArrayList<>();
if (runningDownloads == null) {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java
index c04adee6d..f8bcbb532 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/InboxFragment.java
@@ -97,14 +97,15 @@ public class InboxFragment extends EpisodesListFragment {
@NonNull
@Override
protected List<FeedItem> loadData() {
- return DBReader.getNewItemsList(0, page * EPISODES_PER_PAGE, UserPreferences.getInboxSortedOrder());
+ return DBReader.getEpisodes(0, page * EPISODES_PER_PAGE,
+ new FeedItemFilter(FeedItemFilter.NEW), UserPreferences.getInboxSortedOrder());
}
@NonNull
@Override
protected List<FeedItem> loadMoreData(int page) {
- return DBReader.getNewItemsList((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE,
- UserPreferences.getInboxSortedOrder());
+ return DBReader.getEpisodes((page - 1) * EPISODES_PER_PAGE, EPISODES_PER_PAGE,
+ new FeedItemFilter(FeedItemFilter.NEW), UserPreferences.getInboxSortedOrder());
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/ui/home/sections/DownloadsSection.java b/app/src/main/java/de/danoeh/antennapod/ui/home/sections/DownloadsSection.java
index 0053b0e82..1240546c4 100644
--- a/app/src/main/java/de/danoeh/antennapod/ui/home/sections/DownloadsSection.java
+++ b/app/src/main/java/de/danoeh/antennapod/ui/home/sections/DownloadsSection.java
@@ -124,7 +124,8 @@ public class DownloadsSection extends HomeSection {
disposable.dispose();
}
SortOrder sortOrder = UserPreferences.getDownloadsSortedOrder();
- disposable = Observable.fromCallable(() -> DBReader.getDownloadedItems(sortOrder))
+ disposable = Observable.fromCallable(() -> DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), sortOrder))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(downloads -> {
diff --git a/app/src/main/java/de/danoeh/antennapod/ui/home/sections/InboxSection.java b/app/src/main/java/de/danoeh/antennapod/ui/home/sections/InboxSection.java
index 6baea05e6..8d343a16a 100644
--- a/app/src/main/java/de/danoeh/antennapod/ui/home/sections/InboxSection.java
+++ b/app/src/main/java/de/danoeh/antennapod/ui/home/sections/InboxSection.java
@@ -26,7 +26,6 @@ import de.danoeh.antennapod.fragment.InboxFragment;
import de.danoeh.antennapod.fragment.swipeactions.SwipeActions;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedItemFilter;
-import de.danoeh.antennapod.storage.database.PodDBAdapter;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.ui.home.HomeSection;
import io.reactivex.Observable;
@@ -126,8 +125,9 @@ public class InboxSection extends HomeSection {
disposable.dispose();
}
disposable = Observable.fromCallable(() ->
- new Pair<>(DBReader.getNewItemsList(0, NUM_EPISODES, UserPreferences.getInboxSortedOrder()),
- PodDBAdapter.getInstance().getNumberOfNewItems()))
+ new Pair<>(DBReader.getEpisodes(0, NUM_EPISODES,
+ new FeedItemFilter(FeedItemFilter.NEW), UserPreferences.getInboxSortedOrder()),
+ DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.NEW))))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(data -> {
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 5ccfc93fe..649ec815a 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
@@ -43,7 +43,7 @@ public class FavoritesWriter implements ExportWriter {
InputStream feedTemplateStream = context.getAssets().open(FEED_TEMPLATE);
String feedTemplate = IOUtils.toString(feedTemplateStream, UTF_8);
- List<FeedItem> allFavorites = DBReader.getRecentlyPublishedEpisodes(0, Integer.MAX_VALUE,
+ List<FeedItem> allFavorites = DBReader.getEpisodes(0, Integer.MAX_VALUE,
new FeedItemFilter(FeedItemFilter.IS_FAVORITE), SortOrder.DATE_NEW_OLD);
Map<Long, List<FeedItem>> favoriteByFeed = getFeedMap(allFavorites);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index 62ddf969c..053d852eb 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -402,9 +402,9 @@ public class PlaybackService extends MediaBrowserServiceCompat {
List<MediaBrowserCompat.MediaItem> mediaItems = new ArrayList<>();
if (parentId.equals(getResources().getString(R.string.app_name))) {
mediaItems.add(createBrowsableMediaItem(R.string.queue_label, R.drawable.ic_playlist_play_black,
- DBReader.getQueue().size()));
+ DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.QUEUED))));
mediaItems.add(createBrowsableMediaItem(R.string.downloads_label, R.drawable.ic_download_black,
- DBReader.getDownloadedItems(UserPreferences.getDownloadsSortedOrder()).size()));
+ DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.DOWNLOADED))));
mediaItems.add(createBrowsableMediaItem(R.string.episodes_label, R.drawable.ic_feed_black,
DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.UNPLAYED))));
List<Feed> feeds = DBReader.getFeedList();
@@ -418,10 +418,10 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (parentId.equals(getResources().getString(R.string.queue_label))) {
feedItems = DBReader.getQueue();
} else if (parentId.equals(getResources().getString(R.string.downloads_label))) {
- feedItems = DBReader.getDownloadedItems(UserPreferences.getDownloadsSortedOrder());
+ feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), UserPreferences.getDownloadsSortedOrder());
} else if (parentId.equals(getResources().getString(R.string.episodes_label))) {
- feedItems = DBReader.getRecentlyPublishedEpisodes(0,
- MAX_ANDROID_AUTO_EPISODES_PER_FEED,
+ feedItems = DBReader.getEpisodes(0, MAX_ANDROID_AUTO_EPISODES_PER_FEED,
new FeedItemFilter(FeedItemFilter.UNPLAYED), SortOrder.DATE_NEW_OLD);
} else if (parentId.startsWith("FeedId:")) {
long feedId = Long.parseLong(parentId.split(":")[1]);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java
index 30c50b576..1d2e3ffd2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java
@@ -14,6 +14,7 @@ import java.util.Locale;
import java.util.concurrent.ExecutionException;
import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.SortOrder;
@@ -89,7 +90,8 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm {
@NonNull
private List<FeedItem> getCandidates() {
List<FeedItem> candidates = new ArrayList<>();
- List<FeedItem> downloadedItems = DBReader.getDownloadedItems(SortOrder.DATE_NEW_OLD);
+ List<FeedItem> downloadedItems = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD);
Date mostRecentDateForDeletion = calcMostRecentDateForDeletion(new Date());
for (FeedItem item : downloadedItems) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java
index 3241f37ef..2bd840fd1 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java
@@ -12,6 +12,7 @@ import java.util.Locale;
import java.util.concurrent.ExecutionException;
import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.SortOrder;
/**
@@ -76,7 +77,8 @@ public class APQueueCleanupAlgorithm extends EpisodeCleanupAlgorithm {
@NonNull
private List<FeedItem> getCandidates() {
List<FeedItem> candidates = new ArrayList<>();
- List<FeedItem> downloadedItems = DBReader.getDownloadedItems(SortOrder.DATE_NEW_OLD);
+ List<FeedItem> downloadedItems = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD);
for (FeedItem item : downloadedItems) {
if (item.hasMedia()
&& item.getMedia().isDownloaded()
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java
index c9f37fd00..0f3121551 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java
@@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest;
import de.danoeh.antennapod.core.service.download.DownloadRequestCreator;
@@ -53,7 +54,8 @@ public class AutomaticDownloadAlgorithm {
List<FeedItem> candidates;
final List<FeedItem> queue = DBReader.getQueue();
- final List<FeedItem> newItems = DBReader.getNewItemsList(0, Integer.MAX_VALUE, SortOrder.DATE_NEW_OLD);
+ final List<FeedItem> newItems = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.NEW), SortOrder.DATE_NEW_OLD);
candidates = new ArrayList<>(queue.size() + newItems.size());
candidates.addAll(queue);
for (FeedItem newItem : newItems) {
@@ -77,7 +79,7 @@ public class AutomaticDownloadAlgorithm {
}
int autoDownloadableEpisodes = candidates.size();
- int downloadedEpisodes = DBReader.getNumberOfDownloadedEpisodes();
+ int downloadedEpisodes = DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.DOWNLOADED));
int deletedEpisodes = EpisodeCleanupAlgorithmFactory.build()
.makeRoomForEpisodes(context, autoDownloadableEpisodes);
boolean cacheIsUnlimited =
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 b76284347..4a2c6148a 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
@@ -275,73 +275,6 @@ public final class DBReader {
}
}
- /**
- * Loads a list of FeedItems whose episode has been downloaded.
- *
- * @return A list of FeedItems whose episdoe has been downloaded.
- */
- @NonNull
- public static List<FeedItem> getDownloadedItems(@Nullable SortOrder sortOrder) {
- Log.d(TAG, "getDownloadedItems() called");
-
- // Set a default sort order
- if (sortOrder == null) {
- sortOrder = SortOrder.DATE_NEW_OLD;
- }
-
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- try (Cursor cursor = adapter.getDownloadedItemsCursor(sortOrder)) {
- List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
- loadAdditionalFeedItemListData(items);
- return items;
- } finally {
- adapter.close();
- }
- }
-
- /**
- * Loads a list of FeedItems whose episode has been played.
- *
- * @return A list of FeedItems whose episdoe has been played.
- */
- @NonNull
- public static List<FeedItem> getPlayedItems() {
- Log.d(TAG, "getPlayedItems() called");
-
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- try (Cursor cursor = adapter.getPlayedItemsCursor()) {
- List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
- loadAdditionalFeedItemListData(items);
- return items;
- } finally {
- adapter.close();
- }
- }
-
- /**
- * Loads a list of FeedItems that are considered new.
- * Excludes items from feeds that do not have keep updated enabled.
- *
- * @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 considered new.
- */
- public static List<FeedItem> getNewItemsList(int offset, int limit, SortOrder sortOrder) {
- Log.d(TAG, "getNewItemsList() called");
-
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- try (Cursor cursor = adapter.getNewItemsCursor(offset, limit, sortOrder)) {
- List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
- loadAdditionalFeedItemListData(items);
- return items;
- } finally {
- adapter.close();
- }
- }
-
private static LongList getFavoriteIDList() {
Log.d(TAG, "getFavoriteIDList() called");
@@ -359,19 +292,17 @@ public final class DBReader {
}
/**
- * Loads a filtered list of FeedItems sorted by pubDate in descending order.
*
* @param offset The first episode that should be loaded.
* @param limit The maximum number of episodes that should be loaded.
* @param filter The filter describing which episodes to filter out.
*/
@NonNull
- public static List<FeedItem> getRecentlyPublishedEpisodes(int offset, int limit,
- FeedItemFilter filter, SortOrder sortOrder) {
+ public static List<FeedItem> getEpisodes(int offset, int limit, FeedItemFilter filter, SortOrder sortOrder) {
Log.d(TAG, "getRecentlyPublishedEpisodes() called with: offset=" + offset + ", limit=" + limit);
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
- try (Cursor cursor = adapter.getRecentlyPublishedItemsCursor(offset, limit, filter, sortOrder)) {
+ try (Cursor cursor = adapter.getEpisodesCursor(offset, limit, filter, sortOrder)) {
List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
loadAdditionalFeedItemListData(items);
return items;
@@ -380,26 +311,26 @@ public final class DBReader {
}
}
- public static List<FeedItem> getRandomEpisodes(int limit, int seed) {
+ public static int getTotalEpisodeCount(FeedItemFilter filter) {
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
- try (Cursor cursor = adapter.getRandomEpisodesCursor(limit, seed)) {
- List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
- loadAdditionalFeedItemListData(items);
- return items;
+ try (Cursor cursor = adapter.getEpisodeCountCursor(filter)) {
+ if (cursor.moveToFirst()) {
+ return cursor.getInt(0);
+ }
+ return -1;
} finally {
adapter.close();
}
}
- public static int getTotalEpisodeCount(FeedItemFilter filter) {
+ public static List<FeedItem> getRandomEpisodes(int limit, int seed) {
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
- try (Cursor cursor = adapter.getTotalEpisodeCountCursor(filter)) {
- if (cursor.moveToFirst()) {
- return cursor.getInt(0);
- }
- return -1;
+ try (Cursor cursor = adapter.getRandomEpisodesCursor(limit, seed)) {
+ List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
+ loadAdditionalFeedItemListData(items);
+ return items;
} finally {
adapter.close();
}
@@ -756,24 +687,6 @@ public final class DBReader {
}
/**
- * Returns the number of downloaded episodes.
- *
- * @return The number of downloaded episodes.
- */
-
- public static int getNumberOfDownloadedEpisodes() {
- Log.d(TAG, "getNumberOfDownloadedEpisodes() called with: " + "");
-
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- try {
- return adapter.getNumberOfDownloadedEpisodes();
- } finally {
- adapter.close();
- }
- }
-
- /**
* Searches the DB for a FeedMedia of the given id.
*
* @param mediaId The id of the object
@@ -959,9 +872,9 @@ public final class DBReader {
}
Collections.sort(feeds, comparator);
- int queueSize = adapter.getQueueSize();
- int numNewItems = adapter.getNumberOfNewItems();
- int numDownloadedItems = adapter.getNumberOfDownloadedEpisodes();
+ final int queueSize = adapter.getQueueSize();
+ final int numNewItems = getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.NEW));
+ final int numDownloadedItems = getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.DOWNLOADED));
List<NavDrawerData.DrawerItem> items = new ArrayList<>();
Map<String, NavDrawerData.TagDrawerItem> folders = new HashMap<>();
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithm.java
index 84a0dd575..e6d3b2917 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithm.java
@@ -2,6 +2,7 @@ package de.danoeh.antennapod.core.storage;
import android.content.Context;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
public abstract class EpisodeCleanupAlgorithm {
@@ -51,8 +52,7 @@ public abstract class EpisodeCleanupAlgorithm {
int getNumEpisodesToCleanup(final int amountOfRoomNeeded) {
if (amountOfRoomNeeded >= 0
&& UserPreferences.getEpisodeCacheSize() != UserPreferences.EPISODE_CACHE_SIZE_UNLIMITED) {
- int downloadedEpisodes = DBReader
- .getNumberOfDownloadedEpisodes();
+ int downloadedEpisodes = DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.DOWNLOADED));
if (downloadedEpisodes + amountOfRoomNeeded >= UserPreferences
.getEpisodeCacheSize()) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/ExceptFavoriteCleanupAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/ExceptFavoriteCleanupAlgorithm.java
index 448cffeb9..da01a82f1 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/ExceptFavoriteCleanupAlgorithm.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/ExceptFavoriteCleanupAlgorithm.java
@@ -13,6 +13,7 @@ import java.util.Locale;
import java.util.concurrent.ExecutionException;
import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
@@ -75,7 +76,8 @@ public class ExceptFavoriteCleanupAlgorithm extends EpisodeCleanupAlgorithm {
@NonNull
private List<FeedItem> getCandidates() {
List<FeedItem> candidates = new ArrayList<>();
- List<FeedItem> downloadedItems = DBReader.getDownloadedItems(SortOrder.DATE_NEW_OLD);
+ List<FeedItem> downloadedItems = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD);
for (FeedItem item : downloadedItems) {
if (item.hasMedia()
&& item.getMedia().isDownloaded()
@@ -90,7 +92,7 @@ public class ExceptFavoriteCleanupAlgorithm extends EpisodeCleanupAlgorithm {
public int getDefaultCleanupParameter() {
int cacheSize = UserPreferences.getEpisodeCacheSize();
if (cacheSize != UserPreferences.EPISODE_CACHE_SIZE_UNLIMITED) {
- int downloadedEpisodes = DBReader.getNumberOfDownloadedEpisodes();
+ int downloadedEpisodes = DBReader.getTotalEpisodeCount(new FeedItemFilter(FeedItemFilter.DOWNLOADED));
if (downloadedEpisodes > cacheSize) {
return downloadedEpisodes - cacheSize;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java
index 6e2658c1c..73f467154 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/sync/SyncService.java
@@ -20,6 +20,8 @@ import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
+import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequest;
import de.danoeh.antennapod.core.service.download.DownloadService;
import de.danoeh.antennapod.core.service.download.DownloadRequestCreator;
@@ -213,7 +215,8 @@ public class SyncService extends Worker {
List<EpisodeAction> queuedEpisodeActions = synchronizationQueueStorage.getQueuedEpisodeActions();
if (lastSync == 0) {
EventBus.getDefault().postSticky(new SyncServiceEvent(R.string.sync_status_upload_played));
- List<FeedItem> readItems = DBReader.getPlayedItems();
+ List<FeedItem> readItems = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.PLAYED), SortOrder.DATE_NEW_OLD);
Log.d(TAG, "First sync. Upload state for all " + readItems.size() + " played episodes");
for (FeedItem item : readItems) {
FeedMedia media = item.getMedia();
diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/DbReaderTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/DbReaderTest.java
index 886c6821b..3fadf7528 100644
--- a/core/src/test/java/de/danoeh/antennapod/core/storage/DbReaderTest.java
+++ b/core/src/test/java/de/danoeh/antennapod/core/storage/DbReaderTest.java
@@ -13,6 +13,7 @@ import androidx.test.platform.app.InstrumentationRegistry;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
@@ -239,7 +240,8 @@ public class DbReaderTest {
public void testGetDownloadedItems() {
final int numItems = 10;
List<FeedItem> downloaded = saveDownloadedItems(numItems);
- List<FeedItem> downloadedSaved = DBReader.getDownloadedItems(null);
+ List<FeedItem> downloadedSaved = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD);
assertNotNull(downloadedSaved);
assertEquals(downloaded.size(), downloadedSaved.size());
for (FeedItem item : downloadedSaved) {
@@ -283,7 +285,8 @@ public class DbReaderTest {
for (int i = 0; i < newItems.size(); i++) {
unreadIds[i] = newItems.get(i).getId();
}
- List<FeedItem> newItemsSaved = DBReader.getNewItemsList(0, Integer.MAX_VALUE, SortOrder.DATE_NEW_OLD);
+ List<FeedItem> newItemsSaved = DBReader.getEpisodes(0, Integer.MAX_VALUE,
+ new FeedItemFilter(FeedItemFilter.NEW), SortOrder.DATE_NEW_OLD);
assertNotNull(newItemsSaved);
assertEquals(newItemsSaved.size(), newItems.size());
for (FeedItem feedItem : newItemsSaved) {
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 825dea84e..c870e35de 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
@@ -45,8 +45,6 @@ import org.apache.commons.io.FileUtils;
import static de.danoeh.antennapod.model.feed.FeedPreferences.SPEED_USE_GLOBAL;
import static de.danoeh.antennapod.model.feed.SortOrder.toCodeString;
-import de.danoeh.antennapod.storage.database.mapper.FeedItemSortQuery;
-
/**
* Implements methods for accessing the database
*/
@@ -1049,24 +1047,7 @@ public class PodDBAdapter {
db.execSQL(sql);
}
- /**
- * Returns a cursor which contains all feed items that are considered new.
- * Excludes those feeds that do not have 'Keep Updated' enabled.
- * The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.
- */
- public final Cursor getNewItemsCursor(int offset, int limit, SortOrder sortOrder) {
- String sortQuery = FeedItemSortQuery.generateFrom(sortOrder);
- final String query = SELECT_FEED_ITEMS_AND_MEDIA
- + " INNER JOIN " + TABLE_NAME_FEEDS
- + " ON " + TABLE_NAME_FEED_ITEMS + "." + KEY_FEED + "=" + TABLE_NAME_FEEDS + "." + KEY_ID
- + " WHERE " + TABLE_NAME_FEED_ITEMS + "." + KEY_READ + "=" + FeedItem.NEW
- + " AND " + TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED + " > 0"
- + " ORDER BY " + sortQuery + " LIMIT " + offset + ", " + limit;
- return db.rawQuery(query, null);
- }
-
- public final Cursor getRecentlyPublishedItemsCursor(int offset, int limit,
- FeedItemFilter filter, SortOrder sortOrder) {
+ public final Cursor getEpisodesCursor(int offset, int limit, FeedItemFilter filter, SortOrder sortOrder) {
String orderByQuery = FeedItemSortQuery.generateFrom(sortOrder);
String filterQuery = FeedItemFilterQuery.generateFrom(filter);
String whereClause = "".equals(filterQuery) ? "" : " WHERE " + filterQuery;
@@ -1075,6 +1056,14 @@ public class PodDBAdapter {
return db.rawQuery(query, null);
}
+ public final Cursor getEpisodeCountCursor(FeedItemFilter filter) {
+ String filterQuery = FeedItemFilterQuery.generateFrom(filter);
+ String whereClause = "".equals(filterQuery) ? "" : " WHERE " + filterQuery;
+ final String query = "SELECT count(" + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + ") FROM " + TABLE_NAME_FEED_ITEMS
+ + JOIN_FEED_ITEM_AND_MEDIA + whereClause;
+ return db.rawQuery(query, null);
+ }
+
public Cursor getRandomEpisodesCursor(int limit, int seed) {
final String allItemsRandomOrder = SELECT_FEED_ITEMS_AND_MEDIA
+ " WHERE (" + KEY_READ + " = " + FeedItem.NEW + " OR " + KEY_READ + " = " + FeedItem.UNPLAYED + ") "
@@ -1097,28 +1086,6 @@ public class PodDBAdapter {
return "((" + SELECT_KEY_ITEM_ID + " * " + seed + ") % 46471)";
}
- public final Cursor getTotalEpisodeCountCursor(FeedItemFilter filter) {
- String filterQuery = FeedItemFilterQuery.generateFrom(filter);
- String whereClause = "".equals(filterQuery) ? "" : " WHERE " + filterQuery;
- final String query = "SELECT count(" + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + ") FROM " + TABLE_NAME_FEED_ITEMS
- + JOIN_FEED_ITEM_AND_MEDIA + whereClause;
- return db.rawQuery(query, null);
- }
-
- public Cursor getDownloadedItemsCursor(SortOrder sortOrder) {
- String sortQuery = FeedItemSortQuery.generateFrom(sortOrder);
- final String query = SELECT_FEED_ITEMS_AND_MEDIA
- + " WHERE " + TABLE_NAME_FEED_MEDIA + "." + KEY_DOWNLOADED + " > 0"
- + " ORDER BY " + sortQuery;
- return db.rawQuery(query, null);
- }
-
- public Cursor getPlayedItemsCursor() {
- final String query = SELECT_FEED_ITEMS_AND_MEDIA
- + "WHERE " + TABLE_NAME_FEED_ITEMS + "." + KEY_READ + "=" + FeedItem.PLAYED;
- return db.rawQuery(query, null);
- }
-
/**
* Returns a cursor which contains feed media objects with a playback
* completion date in ascending order.
@@ -1267,25 +1234,6 @@ public class PodDBAdapter {
return result;
}
- public final int getNumberOfNewItems() {
- Object[] args = new String[]{
- TABLE_NAME_FEED_ITEMS + "." + KEY_ID,
- TABLE_NAME_FEED_ITEMS,
- TABLE_NAME_FEEDS,
- TABLE_NAME_FEED_ITEMS + "." + KEY_FEED + "=" + TABLE_NAME_FEEDS + "." + KEY_ID,
- TABLE_NAME_FEED_ITEMS + "." + KEY_READ + "=" + FeedItem.NEW
- + " AND " + TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED + " > 0"
- };
- final String query = String.format("SELECT COUNT(%s) FROM %s INNER JOIN %s ON %s WHERE %s", args);
- Cursor c = db.rawQuery(query, null);
- int result = 0;
- if (c.moveToFirst()) {
- result = c.getInt(0);
- }
- c.close();
- return result;
- }
-
public final Map<Long, Integer> getFeedCounters(FeedCounter setting, long... feedIds) {
String whereRead;
switch (setting) {
@@ -1371,19 +1319,6 @@ public class PodDBAdapter {
return result;
}
- public final int getNumberOfDownloadedEpisodes() {
- final String query = "SELECT COUNT(DISTINCT " + KEY_ID + ") AS count FROM " + TABLE_NAME_FEED_MEDIA +
- " WHERE " + KEY_DOWNLOADED + " > 0";
-
- Cursor c = db.rawQuery(query, null);
- int result = 0;
- if (c.moveToFirst()) {
- result = c.getInt(0);
- }
- c.close();
- return result;
- }
-
/**
* Uses DatabaseUtils to escape a search query and removes ' at the
* beginning and the end of the string returned by the escape method.