fix(library): remove track from playlist

This commit is contained in:
2024-12-03 01:32:23 +01:00
parent e192bd5e23
commit e69a4271cb
3 changed files with 47 additions and 11 deletions

View File

@@ -9,8 +9,8 @@ service Library {
rpc ListPlaylists(google.protobuf.Empty) returns (ListPlaylistsResponse);
rpc CreatePlaylist(CreatePlaylistRequest) returns (CreatePlaylistResponse);
rpc DeletePlaylist(DeletePlaylistRequest) returns (google.protobuf.Empty);
rpc AddTrackToPlaylist(AddTrackToPlaylistRequest) returns (google.protobuf.Empty);
rpc RemoveTrackFromPlaylist(RemoveTrackFromPlaylistRequest) returns (google.protobuf.Empty);
rpc AddTrackToPlaylist(AddTrackToPlaylistRequest) returns (TrackList);
rpc RemoveTrackFromPlaylist(RemoveTrackFromPlaylistRequest) returns (TrackList);
rpc SwapTracks(SwapTracksRequest) returns (TrackList);
}

View File

@@ -332,13 +332,33 @@ pub async fn remove_track_from_playlist(
track_rank: u32,
) -> Result<bool, rusqlite::Error> {
let manager = pool.get().await.unwrap();
let connection = manager.lock().unwrap();
let mut connection = manager.lock().unwrap();
let mut statement = connection
.prepare("DELETE FROM playlist_tracks WHERE playlist_id = ?1 AND track_rank = ?2")?;
let len = statement.execute(params![playlist_id, track_rank])?;
let tx = connection.transaction()?;
Ok(len == 1)
let len = tx.execute(
"DELETE FROM playlist_tracks WHERE playlist_id = ?1 AND rank = ?2",
params![playlist_id, track_rank],
)?;
tx.execute(
"UPDATE playlist_tracks SET rank = - rank WHERE playlist_id = ?1 AND rank > ?2",
[playlist_id, track_rank],
)?;
tx.execute(
"UPDATE playlist_tracks SET rank = - rank - 1 WHERE playlist_id = ?1 AND rank < 0",
[playlist_id],
)?;
if len != 1 {
tx.rollback()?;
return Ok(false);
}
tx.commit()?;
Ok(true)
}
pub async fn swap_playlist_tracks(

View File

@@ -105,7 +105,7 @@ impl Library for LibraryService {
async fn add_track_to_playlist(
&self,
request: Request<AddTrackToPlaylistRequest>,
) -> Result<Response<()>, Status> {
) -> Result<Response<TrackList>, Status> {
let input = request.get_ref();
let Ok(success) =
@@ -118,13 +118,21 @@ impl Library for LibraryService {
return Err(Status::internal(""));
}
Ok(Response::new(()))
let Ok(playlist) = get_playlist(&self.pool, input.playlist_id).await else {
return Err(Status::internal(""));
};
let response = TrackList {
tracks: playlist.tracks,
};
Ok(Response::new(response))
}
async fn remove_track_from_playlist(
&self,
request: Request<RemoveTrackFromPlaylistRequest>,
) -> Result<Response<()>, Status> {
) -> Result<Response<TrackList>, Status> {
let input = request.get_ref();
let Ok(success) =
@@ -137,7 +145,15 @@ impl Library for LibraryService {
return Err(Status::internal(""));
}
Ok(Response::new(()))
let Ok(playlist) = get_playlist(&self.pool, input.playlist_id).await else {
return Err(Status::internal(""));
};
let response = TrackList {
tracks: playlist.tracks,
};
Ok(Response::new(response))
}
async fn swap_tracks(