feat(v2): migrate playlist commands to V2 architecture
- Add playlist methods to QbzCore (get_user_playlists, get_playlist, add_tracks_to_playlist, remove_tracks_from_playlist) - Add playlist methods to CoreBridge - Create V2 Tauri commands for all playlist operations - Update frontend to use V2 playlist commands - Support both playlistTrackIds and trackIds in remove command (with automatic resolution like legacy)
This commit is contained in:
1 parent
7a133e2915
commit
846da0270e
12 files changed
+202
-20
No files matched your search
@@ -7,7 +7,7 @@ use std::sync::Arc;
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
use qbz_models::{
|
||||
Album, Artist, CoreEvent, FrontendAdapter, Quality, QueueState, RepeatMode,
|
||||
Album, Artist, CoreEvent, FrontendAdapter, Playlist, Quality, QueueState, RepeatMode,
|
||||
SearchResultsPage, StreamUrl, Track, UserSession,
|
||||
};
|
||||
use qbz_player::{Player, PlaybackState, QueueManager};
|
||||
@@ -353,6 +353,54 @@ impl<A: FrontendAdapter + Send + Sync + 'static> QbzCore<A> {
|
||||
.map_err(CoreError::Api)
|
||||
}
|
||||
|
||||
// ==================== Playlists ====================
|
||||
|
||||
/// Get user playlists
|
||||
pub async fn get_user_playlists(&self) -> Result<Vec<Playlist>, CoreError> {
|
||||
let client = self.client.read().await;
|
||||
let client = client.as_ref().ok_or(CoreError::NotInitialized)?;
|
||||
|
||||
client.get_user_playlists().await.map_err(CoreError::Api)
|
||||
}
|
||||
|
||||
/// Get playlist by ID
|
||||
pub async fn get_playlist(&self, playlist_id: u64) -> Result<Playlist, CoreError> {
|
||||
let client = self.client.read().await;
|
||||
let client = client.as_ref().ok_or(CoreError::NotInitialized)?;
|
||||
|
||||
client.get_playlist(playlist_id).await.map_err(CoreError::Api)
|
||||
}
|
||||
|
||||
/// Add tracks to playlist
|
||||
pub async fn add_tracks_to_playlist(
|
||||
&self,
|
||||
playlist_id: u64,
|
||||
track_ids: &[u64],
|
||||
) -> Result<(), CoreError> {
|
||||
let client = self.client.read().await;
|
||||
let client = client.as_ref().ok_or(CoreError::NotInitialized)?;
|
||||
|
||||
client
|
||||
.add_tracks_to_playlist(playlist_id, track_ids)
|
||||
.await
|
||||
.map_err(CoreError::Api)
|
||||
}
|
||||
|
||||
/// Remove tracks from playlist
|
||||
pub async fn remove_tracks_from_playlist(
|
||||
&self,
|
||||
playlist_id: u64,
|
||||
playlist_track_ids: &[u64],
|
||||
) -> Result<(), CoreError> {
|
||||
let client = self.client.read().await;
|
||||
let client = client.as_ref().ok_or(CoreError::NotInitialized)?;
|
||||
|
||||
client
|
||||
.remove_tracks_from_playlist(playlist_id, playlist_track_ids)
|
||||
.await
|
||||
.map_err(CoreError::Api)
|
||||
}
|
||||
|
||||
// ==================== Event Emission ====================
|
||||
|
||||
/// Emit an event to the frontend adapter
|
||||
|
||||
Reference in new issue
Block a user