Clean up non-subscribed feeds
This commit is contained in:
parent
2bc755abba
commit
2037978dd3
|
@ -34,6 +34,7 @@ import de.danoeh.antennapod.model.download.DownloadRequest;
|
|||
|
||||
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestBuilder;
|
||||
import de.danoeh.antennapod.parser.feed.FeedHandlerResult;
|
||||
import de.danoeh.antennapod.storage.database.NonSubscribedFeedsCleaner;
|
||||
import de.danoeh.antennapod.ui.notifications.NotificationUtils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
@ -96,8 +97,9 @@ public class FeedUpdateWorker extends Worker {
|
|||
}
|
||||
refreshFeeds(toUpdate, force);
|
||||
|
||||
notificationManager.cancel(R.id.notification_updating_feeds);
|
||||
NonSubscribedFeedsCleaner.deleteOldNonSubscribedFeeds(getApplicationContext());
|
||||
AutoDownloadManager.getInstance().autodownloadUndownloadedItems(getApplicationContext());
|
||||
notificationManager.cancel(R.id.notification_updating_feeds);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package de.danoeh.antennapod.storage.database;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
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.SortOrder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class NonSubscribedFeedsCleaner {
|
||||
private static final String TAG = "NonSubscrFeedsCleaner";
|
||||
|
||||
public static void deleteOldNonSubscribedFeeds(Context context) {
|
||||
List<Feed> feeds = DBReader.getFeedList();
|
||||
for (Feed feed : feeds) {
|
||||
if (feed.getState() != Feed.STATE_NOT_SUBSCRIBED) {
|
||||
continue;
|
||||
}
|
||||
DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(), SortOrder.DATE_NEW_OLD, 0, Integer.MAX_VALUE);
|
||||
if (shouldDelete(feed)) {
|
||||
Log.d(TAG, "Deleting unsubscribed feed " + feed.getTitle());
|
||||
DBWriter.deleteFeed(context, feed.getId());
|
||||
}
|
||||
feed.setItems(null); // Let it be garbage collected
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean shouldDelete(Feed feed) {
|
||||
if (feed.getState() != Feed.STATE_NOT_SUBSCRIBED) {
|
||||
return false;
|
||||
} else if (feed.getItems() == null) {
|
||||
return false;
|
||||
}
|
||||
for (FeedItem item : feed.getItems()) {
|
||||
if (item.isTagged(FeedItem.TAG_FAVORITE)
|
||||
|| item.isTagged(FeedItem.TAG_QUEUE)
|
||||
|| item.isDownloaded()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return feed.getLastRefreshAttempt() < System.currentTimeMillis() - 1000L * 3600 * 24 * 100;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
package de.danoeh.antennapod.storage.database;
|
||||
|
||||
import de.danoeh.antennapod.model.feed.Feed;
|
||||
import de.danoeh.antennapod.model.feed.FeedItem;
|
||||
import de.danoeh.antennapod.model.feed.FeedMedia;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NonSubscribedFeedsCleanerTest {
|
||||
|
||||
@Test
|
||||
public void testSubscribed() {
|
||||
Feed feed = createFeed();
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS));
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
feed.setState(Feed.STATE_NOT_SUBSCRIBED);
|
||||
assertTrue(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOldDate() {
|
||||
Feed feed = createFeed();
|
||||
feed.setState(Feed.STATE_NOT_SUBSCRIBED);
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis());
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(10, TimeUnit.DAYS));
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS));
|
||||
assertTrue(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() + TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS));
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueuedItem() {
|
||||
Feed feed = createFeed();
|
||||
feed.setState(Feed.STATE_NOT_SUBSCRIBED);
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS));
|
||||
feed.getItems().add(createItem(feed));
|
||||
assertTrue(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
FeedItem queuedItem = createItem(feed);
|
||||
queuedItem.addTag(FeedItem.TAG_QUEUE);
|
||||
feed.getItems().add(queuedItem);
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFavoriteItem() {
|
||||
Feed feed = createFeed();
|
||||
feed.setState(Feed.STATE_NOT_SUBSCRIBED);
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS));
|
||||
feed.getItems().add(createItem(feed));
|
||||
assertTrue(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
FeedItem queuedItem = createItem(feed);
|
||||
queuedItem.addTag(FeedItem.TAG_FAVORITE);
|
||||
feed.getItems().add(queuedItem);
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDownloadedItem() {
|
||||
Feed feed = createFeed();
|
||||
feed.setState(Feed.STATE_NOT_SUBSCRIBED);
|
||||
feed.setLastRefreshAttempt(System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(200, TimeUnit.DAYS));
|
||||
feed.getItems().add(createItem(feed));
|
||||
assertTrue(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
|
||||
FeedItem queuedItem = createItem(feed);
|
||||
queuedItem.getMedia().setDownloaded(true, System.currentTimeMillis());
|
||||
feed.getItems().add(queuedItem);
|
||||
assertFalse(NonSubscribedFeedsCleaner.shouldDelete(feed));
|
||||
}
|
||||
|
||||
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",
|
||||
"http://example.com/image", null, "http://example.com/feed", System.currentTimeMillis());
|
||||
feed.setItems(new ArrayList<>());
|
||||
return feed;
|
||||
}
|
||||
|
||||
private FeedItem createItem(Feed feed) {
|
||||
FeedItem item = new FeedItem(0, "Item", "ItemId", "url", new Date(), FeedItem.PLAYED, feed);
|
||||
FeedMedia media = new FeedMedia(item, "http://download.url.net/", 1234567, "audio/mpeg");
|
||||
media.setId(item.getId());
|
||||
item.setMedia(media);
|
||||
return item;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue