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) --- .../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 +- 10 files changed, 47 insertions(+), 120 deletions(-) (limited to 'core') 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) { -- cgit v1.2.3