Faster feed deletion (#7019)
This commit is contained in:
parent
79856b7931
commit
5218e06904
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user