Only delete from queue if deletion of media succeeds

This commit is contained in:
ByteHamster 2019-01-15 11:30:48 +01:00
parent cf477de365
commit 35f6050194

View File

@ -74,11 +74,27 @@ public class DBWriter {
private DBWriter() { private DBWriter() {
} }
private static Future<?> doDeleteFeedMediaOfItem(final Context context, /**
* 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(final Context context,
final long mediaId) { final long mediaId) {
return dbExec.submit(() -> { return dbExec.submit(() -> {
final FeedMedia media = DBReader.getFeedMedia(mediaId); final FeedMedia media = DBReader.getFeedMedia(mediaId);
if (media != null) { if (media != null) {
boolean result = deleteFeedMediaSynchronous(context, media);
if (result && UserPreferences.shouldDeleteRemoveFromQueue()) {
DBWriter.removeQueueItemSynchronous(context, media.getItem(), false);
}
}
});
}
private static boolean deleteFeedMediaSynchronous(Context context, FeedMedia media) {
Log.i(TAG, String.format("Requested to delete FeedMedia [id=%d, title=%s, downloaded=%s", Log.i(TAG, String.format("Requested to delete FeedMedia [id=%d, title=%s, downloaded=%s",
media.getId(), media.getEpisodeTitle(), String.valueOf(media.isDownloaded()))); media.getId(), media.getEpisodeTitle(), String.valueOf(media.isDownloaded())));
if (media.isDownloaded()) { if (media.isDownloaded()) {
@ -87,7 +103,7 @@ public class DBWriter {
if (mediaFile.exists() && !mediaFile.delete()) { if (mediaFile.exists() && !mediaFile.delete()) {
MessageEvent evt = new MessageEvent(context.getString(R.string.delete_failed)); MessageEvent evt = new MessageEvent(context.getString(R.string.delete_failed));
EventBus.getDefault().post(evt); EventBus.getDefault().post(evt);
return; return false;
} }
media.setDownloaded(false); media.setDownloaded(false);
media.setFile_url(null); media.setFile_url(null);
@ -126,23 +142,8 @@ public class DBWriter {
} }
EventBus.getDefault().post(FeedItemEvent.deletedMedia(Collections.singletonList(media.getItem()))); EventBus.getDefault().post(FeedItemEvent.deletedMedia(Collections.singletonList(media.getItem())));
EventDistributor.getInstance().sendUnreadItemsUpdateBroadcast(); EventDistributor.getInstance().sendUnreadItemsUpdateBroadcast();
}
});
}
/** return true;
* 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(final Context context,
final long mediaId) {
Future res = doDeleteFeedMediaOfItem(context, mediaId);
if (UserPreferences.shouldDeleteRemoveFromQueue()) {
DBWriter.removeQueueItem(context, DBReader.getFeedMedia(mediaId).getItem(), false);
}
return res;
} }
/** /**
@ -428,7 +429,11 @@ public class DBWriter {
*/ */
public static Future<?> removeQueueItem(final Context context, public static Future<?> removeQueueItem(final Context context,
final FeedItem item, final boolean performAutoDownload) { final FeedItem item, final boolean performAutoDownload) {
return dbExec.submit(() -> { return dbExec.submit(() -> removeQueueItemSynchronous(context, item, performAutoDownload));
}
private static void removeQueueItemSynchronous(final Context context,
final FeedItem item, final boolean performAutoDownload) {
final PodDBAdapter adapter = PodDBAdapter.getInstance(); final PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open(); adapter.open();
final List<FeedItem> queue = DBReader.getQueue(adapter); final List<FeedItem> queue = DBReader.getQueue(adapter);
@ -451,8 +456,6 @@ public class DBWriter {
if (performAutoDownload) { if (performAutoDownload) {
DBTasks.autodownloadUndownloadedItems(context); DBTasks.autodownloadUndownloadedItems(context);
} }
});
} }
public static Future<?> addFavoriteItem(final FeedItem item) { public static Future<?> addFavoriteItem(final FeedItem item) {