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:
Peter Storch
2020-10-31 23:09:46 +01:00
committed by Dennis Guse
parent e4270b983a
commit 43e0f33776
3 changed files with 14 additions and 10 deletions
@@ -55,13 +55,7 @@ public class TrackDeleteActivity extends AbstractActivity {
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(TrackDeleteActivity.this);
PowerManager.WakeLock wakeLock = SystemUtils.acquireWakeLock(TrackDeleteActivity.this, null);
for (Track.Id id : trackIds) {
if (Thread.interrupted()) {
break;
}
contentProviderUtils.deleteTrack(TrackDeleteActivity.this, id);
}
contentProviderUtils.deleteTracks(TrackDeleteActivity.this, trackIds);
wakeLock = SystemUtils.releaseWakeLock(wakeLock);
if (Thread.interrupted()) {
@@ -33,6 +33,7 @@ import androidx.loader.content.Loader;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
@@ -179,6 +180,17 @@ public class ContentProviderUtils {
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) {
// Delete track folder resources.
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
@@ -519,9 +519,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
* Cleans up import.
*/
private void cleanImport() {
for (Track.Id trackId : trackIds) {
contentProviderUtils.deleteTrack(context, trackId);
}
contentProviderUtils.deleteTracks(context, trackIds);
}
/**