playlist db remover

This commit is contained in:
gdlbo
2024-03-18 10:14:32 +03:00
parent 9bfc39c0f1
commit 444887a191
4 changed files with 44 additions and 14 deletions
@@ -94,6 +94,7 @@ public class MusicCacheImpl {
public static void clear() {
MusicCacheDbDelegate.drop(AndroidUtils.getGlobalContext());
PlaylistCacheDbDelegate.drop(AndroidUtils.getGlobalContext());
MusicCacheStorageUtils.clear();
}
}
@@ -14,6 +14,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import ru.vtosters.lite.music.cache.helpers.PlaylistHelper;
import ru.vtosters.lite.music.cache.helpers.TracklistHelper;
import ru.vtosters.lite.utils.music.MusicCacheStorageUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -65,7 +66,7 @@ public class PlaylistCacheDb extends SQLiteOpenHelper implements AutoCloseable {
getWritableDatabase().insert(Constants.TABLE_NAME, null, values);
}
public void deletePlaylist(int id, int ownerId) {
private void deletePlaylist(int id, int ownerId) {
getWritableDatabase().delete(Constants.TABLE_NAME, Constants.COLUMN_ID + " = ? AND " + Constants.COLUMN_OWNER_ID + " = ?", new String[]{String.valueOf(id), String.valueOf(ownerId)});
}
@@ -80,6 +81,41 @@ public class PlaylistCacheDb extends SQLiteOpenHelper implements AutoCloseable {
return DatabaseUtils.queryNumEntries(getReadableDatabase(), Constants.TABLE_NAME);
}
public void deletePlaylistWithTracks(String playlistId) {
SQLiteDatabase db = getWritableDatabase();
String[] parts = playlistId.split("_");
int id = Integer.parseInt(parts[1]);
int ownerId = Integer.parseInt(parts[0]);
// Get all tracks in the playlist
List<MusicTrack> tracks = getTracksInPlaylist(playlistId);
// Delete the playlist
deletePlaylist(id, ownerId);
// Delete each track, but only if it's not in any other playlists
for (MusicTrack track : tracks) {
String trackId = track.y1();
if (!isTrackInAnyOtherPlaylist(trackId)) {
MusicCacheStorageUtils.removeTrackDirById(trackId);
}
}
}
private boolean isTrackInAnyOtherPlaylist(String trackId) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(
Constants.TABLE_PLAYLIST_TRACKS,
null,
Constants.COLUMN_TRACK_ID + " = ?",
new String[]{trackId},
null, null, null
);
boolean exists = cursor.getCount() > 1;
cursor.close();
return exists;
}
public List<Playlist> getAllPlaylists() {
Cursor cursor = getReadableDatabase().query(Constants.TABLE_NAME, null, null, null, null, null, null);
List<Playlist> playlists = getPlaylistsWithCursor(cursor);
@@ -21,13 +21,9 @@ public class PlaylistCacheDbDelegate {
}
}
public static void deletePlaylist(Context context, String id) {
public static void deletePlaylist(Context context, String playlistId) {
try (var db = connectToDb(context)) {
String[] parts = id.split("_");
int playlistId = Integer.parseInt(parts[1]);
int ownerId = Integer.parseInt(parts[0]);
db.deletePlaylist(playlistId, ownerId);
db.deletePlaylistWithTracks(playlistId);
}
}
@@ -3,9 +3,7 @@ package ru.vtosters.lite.music.downloader;
import android.util.Log;
import com.vk.dto.music.MusicTrack;
import ru.vtosters.lite.music.cache.delegate.PlaylistCacheDbDelegate;
import ru.vtosters.lite.music.interfaces.Callback;
import ru.vtosters.lite.utils.AndroidUtils;
import java.io.File;
import java.util.List;
@@ -14,14 +12,13 @@ import java.util.concurrent.atomic.AtomicInteger;
import java8.util.concurrent.CompletableFuture;
public class PlaylistDownloader {
public static CompletableFuture<Void>
downloadPlaylist(List<MusicTrack> playlist, String playlistName, String path, Callback callback) {
public static void downloadPlaylist(List<MusicTrack> playlist, String playlistName, String path, Callback callback) {
var outDir = new File(path);
if (!outDir.exists())
if (outDir.mkdirs()) Log.v("PlaylistDownloader", "Directory created");
else Log.e("PlaylistDownloader", "Directory creation failed");
Callback delegate = new ProgressCallback(callback);
return CompletableFuture.allOf(playlist
CompletableFuture.allOf(playlist
.stream()
.map(x -> {
Callback.CompletableFutureCallback d = new
@@ -32,9 +29,9 @@ public class PlaylistDownloader {
.toArray(CompletableFuture[]::new));
}
public static CompletableFuture<Void> cachePlaylist(List<MusicTrack> playlist, Callback callback, String playlistId) {
public static void cachePlaylist(List<MusicTrack> playlist, Callback callback, String playlistId) {
Callback delegate = new ProgressCallback(callback);
return CompletableFuture.allOf(playlist
CompletableFuture.allOf(playlist
.stream()
.map(x -> {
Callback.CompletableFutureCallback d = new Callback.CompletableFutureCallback(delegate);