summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2024-03-24 12:25:32 +0100
committerGitHub <noreply@github.com>2024-03-24 12:25:32 +0100
commit5218e06904e489f77da4078de775dd0a63b94ef4 (patch)
tree5184c4228bb66027b317d5b0fcc73e08f44d7117 /core
parent79856b7931eebc7093013861de78ac68228ea7e6 (diff)
downloadAntennaPod-5218e06904e489f77da4078de775dd0a63b94ef4.zip
Faster feed deletion (#7019)
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadServiceInterfaceImpl.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APCleanupAlgorithm.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/APQueueCleanupAlgorithm.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java26
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/ExceptFavoriteCleanupAlgorithm.java2
-rw-r--r--core/src/test/java/de/danoeh/antennapod/core/storage/DbWriterTest.java6
7 files changed, 21 insertions, 23 deletions
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<List<WorkInfo>> 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);