From 24d1a06662c8eec31f3a4c3ebdcd3aea759fb63a Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Wed, 1 Mar 2023 20:52:23 +0100 Subject: Instead of specialized methods, use the global 'getEpisodes' method with a filter (#6358) --- .../de/test/antennapod/playback/PlaybackTest.java | 4 +- .../antennapod/fragment/AllEpisodesFragment.java | 6 +- .../fragment/CompletedDownloadsFragment.java | 3 +- .../danoeh/antennapod/fragment/InboxFragment.java | 7 +- .../ui/home/sections/DownloadsSection.java | 3 +- .../antennapod/ui/home/sections/InboxSection.java | 6 +- .../core/export/favorites/FavoritesWriter.java | 2 +- .../core/service/playback/PlaybackService.java | 10 +- .../core/storage/APCleanupAlgorithm.java | 4 +- .../core/storage/APQueueCleanupAlgorithm.java | 4 +- .../core/storage/AutomaticDownloadAlgorithm.java | 6 +- .../danoeh/antennapod/core/storage/DBReader.java | 119 +++------------------ .../core/storage/EpisodeCleanupAlgorithm.java | 4 +- .../storage/ExceptFavoriteCleanupAlgorithm.java | 6 +- .../danoeh/antennapod/core/sync/SyncService.java | 5 +- .../antennapod/core/storage/DbReaderTest.java | 7 +- .../antennapod/storage/database/PodDBAdapter.java | 83 ++------------ 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 episodes = DBReader.getRecentlyPublishedEpisodes(0, 10, + final List episodes = DBReader.getEpisodes(0, 10, FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD); Matcher 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 episodes = DBReader.getRecentlyPublishedEpisodes(0, 10, + final List 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 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 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 downloadedItems = DBReader.getDownloadedItems(sortOrder); + List downloadedItems = DBReader.getEpisodes(0, Integer.MAX_VALUE, + new FeedItemFilter(FeedItemFilter.DOWNLOADED), sortOrder); List 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 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 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 allFavorites = DBReader.getRecentlyPublishedEpisodes(0, Integer.MAX_VALUE, + List allFavorites = DBReader.getEpisodes(0, Integer.MAX_VALUE, new FeedItemFilter(FeedItemFilter.IS_FAVORITE), SortOrder.DATE_NEW_OLD); Map> 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 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 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 getCandidates() { List candidates = new ArrayList<>(); - List downloadedItems = DBReader.getDownloadedItems(SortOrder.DATE_NEW_OLD); + List 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 getCandidates() { List candidates = new ArrayList<>(); - List downloadedItems = DBReader.getDownloadedItems(SortOrder.DATE_NEW_OLD); + List 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 candidates; final List queue = DBReader.getQueue(); - final List newItems = DBReader.getNewItemsList(0, Integer.MAX_VALUE, SortOrder.DATE_NEW_OLD); + final List 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 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 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 getPlayedItems() { - Log.d(TAG, "getPlayedItems() called"); - - PodDBAdapter adapter = PodDBAdapter.getInstance(); - adapter.open(); - try (Cursor cursor = adapter.getPlayedItemsCursor()) { - List 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 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 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 getRecentlyPublishedEpisodes(int offset, int limit, - FeedItemFilter filter, SortOrder sortOrder) { + public static List 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 items = extractItemlistFromCursor(adapter, cursor); loadAdditionalFeedItemListData(items); return items; @@ -380,26 +311,26 @@ public final class DBReader { } } - public static List 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 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 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 items = extractItemlistFromCursor(adapter, cursor); + loadAdditionalFeedItemListData(items); + return items; } finally { adapter.close(); } @@ -755,24 +686,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. * @@ -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 items = new ArrayList<>(); Map 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 getCandidates() { List candidates = new ArrayList<>(); - List downloadedItems = DBReader.getDownloadedItems(SortOrder.DATE_NEW_OLD); + List 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 queuedEpisodeActions = synchronizationQueueStorage.getQueuedEpisodeActions(); if (lastSync == 0) { EventBus.getDefault().postSticky(new SyncServiceEvent(R.string.sync_status_upload_played)); - List readItems = DBReader.getPlayedItems(); + List 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 downloaded = saveDownloadedItems(numItems); - List downloadedSaved = DBReader.getDownloadedItems(null); + List 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 newItemsSaved = DBReader.getNewItemsList(0, Integer.MAX_VALUE, SortOrder.DATE_NEW_OLD); + List 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 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. -- cgit v1.2.3