1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2025-09-04 11:57:57 +00:00

Add option to delete a download without also deleting file

This commit is contained in:
Stypox
2025-08-16 16:50:01 +02:00
parent 9bc8139b8c
commit 7644066c5a
5 changed files with 51 additions and 14 deletions

View File

@@ -265,7 +265,7 @@ public class DownloadManager {
} }
} }
public void deleteMission(Mission mission) { public void deleteMission(Mission mission, boolean alsoDeleteFile) {
synchronized (this) { synchronized (this) {
if (mission instanceof DownloadMission) { if (mission instanceof DownloadMission) {
mMissionsPending.remove(mission); mMissionsPending.remove(mission);
@@ -274,7 +274,9 @@ public class DownloadManager {
mFinishedMissionStore.deleteMission(mission); mFinishedMissionStore.deleteMission(mission);
} }
mission.delete(); if (alsoDeleteFile) {
mission.delete();
}
} }
} }

View File

@@ -614,7 +614,7 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
while (i.hasNext()) { while (i.hasNext()) {
Mission mission = i.next(); Mission mission = i.next();
if (mission != null) { if (mission != null) {
mDownloadManager.deleteMission(mission); mDownloadManager.deleteMission(mission, true);
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri())); mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
} }
i.remove(); i.remove();
@@ -667,7 +667,14 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
shareFile(h.item.mission); shareFile(h.item.mission);
return true; return true;
case R.id.delete: case R.id.delete:
mDeleter.append(h.item.mission); // delete the entry and the file
mDeleter.append(h.item.mission, true);
applyChanges();
checkMasterButtonsVisibility();
return true;
case R.id.delete_entry:
// just delete the entry
mDeleter.append(h.item.mission, false);
applyChanges(); applyChanges();
checkMasterButtonsVisibility(); checkMasterButtonsVisibility();
return true; return true;
@@ -676,7 +683,7 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
final StoredFileHelper storage = h.item.mission.storage; final StoredFileHelper storage = h.item.mission.storage;
if (!storage.existsAsFile()) { if (!storage.existsAsFile()) {
Toast.makeText(mContext, R.string.missing_file, Toast.LENGTH_SHORT).show(); Toast.makeText(mContext, R.string.missing_file, Toast.LENGTH_SHORT).show();
mDeleter.append(h.item.mission); mDeleter.append(h.item.mission, true);
applyChanges(); applyChanges();
return true; return true;
} }

View File

@@ -13,7 +13,9 @@ import com.google.android.material.snackbar.Snackbar;
import org.schabi.newpipe.R; import org.schabi.newpipe.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Optional;
import kotlin.Pair;
import us.shandian.giga.get.FinishedMission; import us.shandian.giga.get.FinishedMission;
import us.shandian.giga.get.Mission; import us.shandian.giga.get.Mission;
import us.shandian.giga.service.DownloadManager; import us.shandian.giga.service.DownloadManager;
@@ -30,7 +32,8 @@ public class Deleter {
private static final int DELAY_RESUME = 400;// ms private static final int DELAY_RESUME = 400;// ms
private Snackbar snackbar; private Snackbar snackbar;
private ArrayList<Mission> items; // list of missions to be deleted, and whether to also delete the corresponding file
private ArrayList<Pair<Mission, Boolean>> items;
private boolean running = true; private boolean running = true;
private final Context mContext; private final Context mContext;
@@ -51,7 +54,7 @@ public class Deleter {
items = new ArrayList<>(2); items = new ArrayList<>(2);
} }
public void append(Mission item) { public void append(Mission item, boolean alsoDeleteFile) {
/* If a mission is removed from the list while the Snackbar for a previously /* If a mission is removed from the list while the Snackbar for a previously
* removed item is still showing, commit the action for the previous item * removed item is still showing, commit the action for the previous item
* immediately. This prevents Snackbars from stacking up in reverse order. * immediately. This prevents Snackbars from stacking up in reverse order.
@@ -60,13 +63,13 @@ public class Deleter {
commit(); commit();
mIterator.hide(item); mIterator.hide(item);
items.add(0, item); items.add(0, new Pair<>(item, alsoDeleteFile));
show(); show();
} }
private void forget() { private void forget() {
mIterator.unHide(items.remove(0)); mIterator.unHide(items.remove(0).getFirst());
mAdapter.applyChanges(); mAdapter.applyChanges();
show(); show();
@@ -84,7 +87,19 @@ public class Deleter {
private void next() { private void next() {
if (items.size() < 1) return; if (items.size() < 1) return;
String msg = mContext.getString(R.string.file_deleted).concat(":\n").concat(items.get(0).storage.getName()); final Optional<String> fileToBeDeleted = items.stream()
.filter(Pair::getSecond)
.map(p -> p.getFirst().storage.getName())
.findFirst();
String msg;
if (fileToBeDeleted.isPresent()) {
msg = mContext.getString(R.string.file_deleted)
.concat(":\n")
.concat(fileToBeDeleted.get());
} else {
msg = mContext.getString(R.string.entry_deleted);
}
snackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE); snackbar = Snackbar.make(mView, msg, Snackbar.LENGTH_INDEFINITE);
snackbar.setAction(R.string.undo, s -> forget()); snackbar.setAction(R.string.undo, s -> forget());
@@ -98,11 +113,13 @@ public class Deleter {
if (items.size() < 1) return; if (items.size() < 1) return;
while (items.size() > 0) { while (items.size() > 0) {
Mission mission = items.remove(0); Pair<Mission, Boolean> missionAndAlsoDeleteFile = items.remove(0);
Mission mission = missionAndAlsoDeleteFile.getFirst();
boolean alsoDeleteFile = missionAndAlsoDeleteFile.getSecond();
if (mission.deleted) continue; if (mission.deleted) continue;
mIterator.unHide(mission); mIterator.unHide(mission);
mDownloadManager.deleteMission(mission); mDownloadManager.deleteMission(mission, alsoDeleteFile);
if (mission instanceof FinishedMission) { if (mission instanceof FinishedMission) {
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri())); mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mission.storage.getUri()));
@@ -137,7 +154,11 @@ public class Deleter {
pause(); pause();
for (Mission mission : items) mDownloadManager.deleteMission(mission); for (Pair<Mission, Boolean> missionAndAlsoDeleteFile : items) {
Mission mission = missionAndAlsoDeleteFile.getFirst();
boolean alsoDeleteFile = missionAndAlsoDeleteFile.getSecond();
mDownloadManager.deleteMission(mission, alsoDeleteFile);
}
items = null; items = null;
} }
} }

View File

@@ -27,7 +27,11 @@
<item <item
android:id="@+id/delete" android:id="@+id/delete"
android:title="@string/delete" /> android:title="@string/delete_file" />
<item
android:id="@+id/delete_entry"
android:title="@string/delete_entry" />
<item <item
android:id="@+id/error_message_view" android:id="@+id/error_message_view"

View File

@@ -333,6 +333,8 @@
<string name="pause">Pause</string> <string name="pause">Pause</string>
<string name="create">Create</string> <string name="create">Create</string>
<string name="delete">Delete</string> <string name="delete">Delete</string>
<string name="delete_file">Delete file</string>
<string name="delete_entry">Delete entry</string>
<string name="checksum">Checksum</string> <string name="checksum">Checksum</string>
<string name="dismiss">Dismiss</string> <string name="dismiss">Dismiss</string>
<string name="rename">Rename</string> <string name="rename">Rename</string>
@@ -872,4 +874,5 @@
<string name="trending_podcasts">Trending podcasts</string> <string name="trending_podcasts">Trending podcasts</string>
<string name="trending_movies">Trending movies and shows</string> <string name="trending_movies">Trending movies and shows</string>
<string name="trending_music">Trending music</string> <string name="trending_music">Trending music</string>
<string name="entry_deleted">Entry deleted</string>
</resources> </resources>