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:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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"
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user