diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java index 16a5a161c..8ee31a03c 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/actionbutton/DeleteActionButton.java @@ -39,7 +39,7 @@ public class DeleteActionButton extends ItemActionButton { } LocalDeleteModal.showLocalFeedDeleteWarningIfNecessary(context, Collections.singletonList(item), - () -> DBWriter.deleteFeedMediaOfItem(context, media.getId())); + () -> DBWriter.deleteFeedMediaOfItem(context, media)); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java b/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java index 618c411ea..b4e8a4768 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/actions/EpisodeMultiSelectActionHandler.java @@ -104,7 +104,7 @@ public class EpisodeMultiSelectActionHandler { for (FeedItem feedItem : items) { if (feedItem.hasMedia() && feedItem.getMedia().isDownloaded()) { countHasMedia++; - DBWriter.deleteFeedMediaOfItem(activity, feedItem.getMedia().getId()); + DBWriter.deleteFeedMediaOfItem(activity, feedItem.getMedia()); } } showMessage(R.plurals.deleted_multi_episode_batch_label, countHasMedia); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java index e196b96b4..462fcf968 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java @@ -40,7 +40,7 @@ public class DeleteSwipeAction implements SwipeAction { } LocalDeleteModal.showLocalFeedDeleteWarningIfNecessary( fragment.requireContext(), Collections.singletonList(item), - () -> DBWriter.deleteFeedMediaOfItem(fragment.requireContext(), item.getMedia().getId())); + () -> DBWriter.deleteFeedMediaOfItem(fragment.requireContext(), item.getMedia())); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 5e86e14f0..48e43358f 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -153,7 +153,7 @@ public class FeedItemMenuHandler { context.sendBroadcast(MediaButtonStarter.createIntent(context, KeyEvent.KEYCODE_MEDIA_NEXT)); } else if (menuItemId == R.id.remove_item) { LocalDeleteModal.showLocalFeedDeleteWarningIfNecessary(context, Arrays.asList(selectedItem), - () -> DBWriter.deleteFeedMediaOfItem(context, selectedItem.getMedia().getId())); + () -> DBWriter.deleteFeedMediaOfItem(context, selectedItem.getMedia())); } else if (menuItemId == R.id.remove_inbox_item) { removeNewFlagWithUndo(fragment, selectedItem); } else if (menuItemId == R.id.mark_read_item) { @@ -232,7 +232,7 @@ public class FeedItemMenuHandler { FeedMedia media = item.getMedia(); boolean shouldAutoDelete = FeedUtil.shouldAutoDeleteItemsOnThatFeed(item.getFeed()); if (media != null && FeedItemUtil.hasAlmostEnded(media) && shouldAutoDelete) { - DBWriter.deleteFeedMediaOfItem(fragment.requireContext(), media.getId()); + DBWriter.deleteFeedMediaOfItem(fragment.requireContext(), media); } }; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceInterfaceImpl.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceInterfaceImpl.java index e1490923b..6c595388a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceInterfaceImpl.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceInterfaceImpl.java @@ -67,7 +67,9 @@ public class DownloadServiceInterfaceImpl extends DownloadServiceInterface { @Override public void cancel(Context context, FeedMedia media) { // This needs to be done here, not in the worker. Reason: The worker might or might not be running. - DBWriter.deleteFeedMediaOfItem(context, media.getId()); // Remove partially downloaded file + if (media.fileExists()) { + DBWriter.deleteFeedMediaOfItem(context, media); // Remove partially downloaded file + } String tag = WORK_TAG_EPISODE_URL + media.getDownloadUrl(); Future> future = WorkManager.getInstance(context).getWorkInfosByTag(tag); Observable.fromFuture(future) 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 41a8a20ee..195f6b5a4 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 @@ -1150,7 +1150,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { && FeedUtil.shouldAutoDeleteItemsOnThatFeed(item.getFeed())); if (shouldAutoDelete && (!item.isTagged(FeedItem.TAG_FAVORITE) || !UserPreferences.shouldFavoriteKeepEpisode())) { - DBWriter.deleteFeedMediaOfItem(PlaybackService.this, media.getId()); + DBWriter.deleteFeedMediaOfItem(PlaybackService.this, media); Log.d(TAG, "Episode Deleted"); } notifyChildrenChanged(getString(R.string.queue_label)); 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 1d2e3ffd2..fad806770 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 @@ -66,7 +66,7 @@ public class APCleanupAlgorithm extends EpisodeCleanupAlgorithm { for (FeedItem item : delete) { try { - DBWriter.deleteFeedMediaOfItem(context, item.getMedia().getId()).get(); + DBWriter.deleteFeedMediaOfItem(context, item.getMedia()).get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } 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 2bd840fd1..4f17760dc 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 @@ -58,7 +58,7 @@ public class APQueueCleanupAlgorithm extends EpisodeCleanupAlgorithm { for (FeedItem item : delete) { try { - DBWriter.deleteFeedMediaOfItem(context, item.getMedia().getId()).get(); + DBWriter.deleteFeedMediaOfItem(context, item.getMedia()).get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java index 531de0379..ae14afc69 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java @@ -96,18 +96,16 @@ public class DBWriter { * Deletes a downloaded FeedMedia file from the storage device. * * @param context A context that is used for opening a database connection. - * @param mediaId ID of the FeedMedia object whose downloaded file should be deleted. */ public static Future deleteFeedMediaOfItem(@NonNull final Context context, - final long mediaId) { + final FeedMedia media) { return runOnDbThread(() -> { - final FeedMedia media = DBReader.getFeedMedia(mediaId); - if (media != null) { - boolean result = deleteFeedMediaSynchronous(context, media); - - if (result && UserPreferences.shouldDeleteRemoveFromQueue()) { - DBWriter.removeQueueItemSynchronous(context, false, media.getItem().getId()); - } + if (media == null) { + return; + } + boolean result = deleteFeedMediaSynchronous(context, media); + if (result && UserPreferences.shouldDeleteRemoveFromQueue()) { + DBWriter.removeQueueItemSynchronous(context, false, media.getItemId()); } }); } @@ -174,15 +172,11 @@ public class DBWriter { */ public static Future deleteFeed(final Context context, final long feedId) { return runOnDbThread(() -> { - final Feed feed = DBReader.getFeed(feedId); + final Feed feed = DBReader.getFeed(feedId, false); if (feed == null) { return; } - // delete stored media files and mark them as read - if (feed.getItems() == null) { - DBReader.getFeedItemList(feed); - } deleteFeedItemsSynchronous(context, feed.getItems()); // delete feed @@ -225,7 +219,9 @@ public class DBWriter { IntentUtils.sendLocalBroadcast(context, PlaybackServiceInterface.ACTION_SHUTDOWN_PLAYBACK_SERVICE); } if (!item.getFeed().isLocalFeed()) { - DownloadServiceInterface.get().cancel(context, item.getMedia()); + if (DownloadServiceInterface.get().isDownloadingEpisode(item.getMedia().getDownloadUrl())) { + DownloadServiceInterface.get().cancel(context, item.getMedia()); + } if (item.getMedia().isDownloaded()) { deleteFeedMediaSynchronous(context, item.getMedia()); } 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 da01a82f1..33c9e88a8 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 @@ -59,7 +59,7 @@ public class ExceptFavoriteCleanupAlgorithm extends EpisodeCleanupAlgorithm { for (FeedItem item : delete) { try { - DBWriter.deleteFeedMediaOfItem(context, item.getMedia().getId()).get(); + DBWriter.deleteFeedMediaOfItem(context, item.getMedia()).get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java index cfcff56d8..8e4cae855 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java @@ -151,7 +151,7 @@ public class DbWriterTest { assertTrue(media.getId() != 0); assertTrue(item.getId() != 0); - DBWriter.deleteFeedMediaOfItem(context, media.getId()) + DBWriter.deleteFeedMediaOfItem(context, media) .get(TIMEOUT, TimeUnit.SECONDS); media = DBReader.getFeedMedia(media.getId()); assertNotNull(media); @@ -189,9 +189,9 @@ public class DbWriterTest { assertTrue(media.getId() != 0); assertTrue(item.getId() != 0); queue = DBReader.getQueue(); - assertTrue(queue.size() != 0); + assertFalse(queue.isEmpty()); - DBWriter.deleteFeedMediaOfItem(context, media.getId()); + DBWriter.deleteFeedMediaOfItem(context, media); Awaitility.await().timeout(2, TimeUnit.SECONDS).until(() -> !dest.exists()); media = DBReader.getFeedMedia(media.getId()); assertNotNull(media); diff --git a/model/src/main/java/de/danoeh/antennapod/model/feed/FeedMedia.java b/model/src/main/java/de/danoeh/antennapod/model/feed/FeedMedia.java index 7cd2d4953..571cbc128 100644 --- a/model/src/main/java/de/danoeh/antennapod/model/feed/FeedMedia.java +++ b/model/src/main/java/de/danoeh/antennapod/model/feed/FeedMedia.java @@ -414,6 +414,10 @@ public class FeedMedia implements Playable { return itemID; } + public void setItemId(long id) { + itemID = id; + } + @Override public void onPlaybackStart() { startPosition = Math.max(position, 0); 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 cbc295e70..a169c8fda 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 @@ -667,6 +667,7 @@ public class PodDBAdapter { } if (item.getMedia() != null) { setMedia(item.getMedia()); + item.getMedia().setItemId(item.getId()); } if (item.getChapters() != null) { setChapters(item);