playlist db remover
This commit is contained in:
@@ -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);
|
||||
|
||||
+2
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user