forked from upstream-mirrors/OpenTracks
optimize multiple track deletion
After #480 got implemented, we can now delete multiple tracks in one go and only cause DB vacuum once.
This commit is contained in:
committed by
Dennis Guse
parent
e4270b983a
commit
43e0f33776
@@ -55,13 +55,7 @@ public class TrackDeleteActivity extends AbstractActivity {
|
|||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(TrackDeleteActivity.this);
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(TrackDeleteActivity.this);
|
||||||
|
|
||||||
PowerManager.WakeLock wakeLock = SystemUtils.acquireWakeLock(TrackDeleteActivity.this, null);
|
PowerManager.WakeLock wakeLock = SystemUtils.acquireWakeLock(TrackDeleteActivity.this, null);
|
||||||
|
contentProviderUtils.deleteTracks(TrackDeleteActivity.this, trackIds);
|
||||||
for (Track.Id id : trackIds) {
|
|
||||||
if (Thread.interrupted()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
contentProviderUtils.deleteTrack(TrackDeleteActivity.this, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
wakeLock = SystemUtils.releaseWakeLock(wakeLock);
|
wakeLock = SystemUtils.releaseWakeLock(wakeLock);
|
||||||
if (Thread.interrupted()) {
|
if (Thread.interrupted()) {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import androidx.loader.content.Loader;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -179,6 +180,17 @@ public class ContentProviderUtils {
|
|||||||
FileUtils.deleteDirectoryRecurse(dir);
|
FileUtils.deleteDirectoryRecurse(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteTracks(Context context, @NonNull List<Track.Id> trackIds) {
|
||||||
|
// Delete track folder resources.
|
||||||
|
for (Track.Id trackId : trackIds) {
|
||||||
|
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete track last since it triggers a database vacuum call
|
||||||
|
String whereClause = String.format(TracksColumns._ID + " IN (%s)", TextUtils.join(",", Collections.nCopies(trackIds.size(), "?")));
|
||||||
|
contentResolver.delete(TracksColumns.CONTENT_URI, whereClause, trackIds.stream().map(id->Long.toString(id.getId())).toArray(String[]::new));
|
||||||
|
}
|
||||||
|
|
||||||
public void deleteTrack(Context context, @NonNull Track.Id trackId) {
|
public void deleteTrack(Context context, @NonNull Track.Id trackId) {
|
||||||
// Delete track folder resources.
|
// Delete track folder resources.
|
||||||
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
|
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
|
||||||
|
|||||||
+1
-3
@@ -519,9 +519,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
* Cleans up import.
|
* Cleans up import.
|
||||||
*/
|
*/
|
||||||
private void cleanImport() {
|
private void cleanImport() {
|
||||||
for (Track.Id trackId : trackIds) {
|
contentProviderUtils.deleteTracks(context, trackIds);
|
||||||
contentProviderUtils.deleteTrack(context, trackId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user