diff --git a/storage/database/src/main/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleaner.java b/storage/database/src/main/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleaner.java index fa27e6e5b..4412122d7 100644 --- a/storage/database/src/main/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleaner.java +++ b/storage/database/src/main/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleaner.java @@ -7,6 +7,7 @@ import de.danoeh.antennapod.model.feed.FeedItemFilter; import de.danoeh.antennapod.model.feed.SortOrder; import java.util.List; +import java.util.concurrent.ExecutionException; public class NonSubscribedFeedsCleaner { private static final String TAG = "NonSubscrFeedsCleaner"; @@ -19,10 +20,17 @@ public class NonSubscribedFeedsCleaner { if (feed.getState() != Feed.STATE_NOT_SUBSCRIBED) { continue; } - DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD, 0, Integer.MAX_VALUE); + DBReader.getFeedItemList(feed, new FeedItemFilter(FeedItemFilter.INCLUDE_NOT_SUBSCRIBED), + SortOrder.DATE_NEW_OLD, 0, Integer.MAX_VALUE); + DBReader.loadAdditionalFeedItemListData(feed.getItems()); if (shouldDelete(feed)) { Log.d(TAG, "Deleting unsubscribed feed " + feed.getTitle()); - DBWriter.deleteFeed(context, feed.getId()); + try { + DBWriter.deleteFeed(context, feed.getId()).get(); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + return; + } } feed.setItems(null); // Let it be garbage collected } diff --git a/storage/database/src/test/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleanerTest.java b/storage/database/src/test/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleanerTest.java index 0bd6c82c5..a53a26c9b 100644 --- a/storage/database/src/test/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleanerTest.java +++ b/storage/database/src/test/java/de/danoeh/antennapod/storage/database/NonSubscribedFeedsCleanerTest.java @@ -1,16 +1,24 @@ package de.danoeh.antennapod.storage.database; +import android.content.Context; +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.FeedMedia; +import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface; +import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterfaceStub; +import de.danoeh.antennapod.storage.preferences.PlaybackPreferences; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import java.util.ArrayList; import java.util.Date; +import java.util.List; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -106,6 +114,40 @@ public class NonSubscribedFeedsCleanerTest { assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed)); } + @Test + public void integrationTest() throws ExecutionException, InterruptedException { + final Context context = InstrumentationRegistry.getInstrumentation().getContext(); + final long longAgo = System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS); + + // Initialize database + PlaybackPreferences.init(context); + DownloadServiceInterface.setImpl(new DownloadServiceInterfaceStub()); + PodDBAdapter.init(context); + PodDBAdapter.deleteDatabase(); + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + adapter.close(); + + final Feed subscribedFeed = createFeed(); + final Feed nonSubscribedFeed = createFeed(); + nonSubscribedFeed.setState(Feed.STATE_NOT_SUBSCRIBED); + nonSubscribedFeed.setLastRefreshAttempt(longAgo); + final Feed nonSubscribedFeedFavorite = createFeed(); + nonSubscribedFeedFavorite.setState(Feed.STATE_NOT_SUBSCRIBED); + nonSubscribedFeedFavorite.setLastRefreshAttempt(longAgo); + nonSubscribedFeedFavorite.getItems().add(createItem(nonSubscribedFeedFavorite)); + + DBWriter.setCompleteFeed(subscribedFeed, nonSubscribedFeedFavorite, nonSubscribedFeed).get(); + DBWriter.addFavoriteItem(nonSubscribedFeedFavorite.getItems().get(0)).get(); + + NonSubscribedFeedsCleaner.deleteOldNonSubscribedFeeds(context); + + List feeds = DBReader.getFeedList(); + assertEquals(2, feeds.size()); + assertEquals(subscribedFeed.getId(), feeds.get(0).getId()); + assertEquals(nonSubscribedFeedFavorite.getId(), feeds.get(1).getId()); + } + private Feed createFeed() { Feed feed = new Feed(0, null, "title", "http://example.com", "This is the description", "http://example.com/payment", "Daniel", "en", null, "http://example.com/feed",