fix(library): remove track from playlist
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user