11use std:: sync:: Arc ;
22
3- use music_player_entity:: { track, tracklist } ;
3+ use music_player_entity:: track;
44use music_player_playback:: player:: { Player , PlayerEngine } ;
55use music_player_storage:: Database ;
6- use sea_orm:: EntityTrait ;
76use tokio:: sync:: Mutex ;
87
9- use crate :: api:: v1alpha1:: {
10- tracklist_service_server:: TracklistService , AddTrackRequest , AddTrackResponse ,
11- ClearTracklistRequest , ClearTracklistResponse , FilterTracklistRequest , FilterTracklistResponse ,
12- GetNextTrackRequest , GetNextTrackResponse , GetPreviousTrackRequest , GetPreviousTrackResponse ,
13- GetRandomRequest , GetRandomResponse , GetRepeatRequest , GetRepeatResponse , GetSingleRequest ,
14- GetSingleResponse , GetTracklistTracksRequest , GetTracklistTracksResponse , PlayNextRequest ,
15- PlayNextResponse , RemoveTrackRequest , RemoveTrackResponse , SetRepeatRequest , SetRepeatResponse ,
16- ShuffleRequest , ShuffleResponse ,
8+ use crate :: {
9+ api:: v1alpha1:: {
10+ tracklist_service_server:: TracklistService , AddTrackRequest , AddTrackResponse ,
11+ ClearTracklistRequest , ClearTracklistResponse , FilterTracklistRequest ,
12+ FilterTracklistResponse , GetNextTrackRequest , GetNextTrackResponse ,
13+ GetPreviousTrackRequest , GetPreviousTrackResponse , GetRandomRequest , GetRandomResponse ,
14+ GetRepeatRequest , GetRepeatResponse , GetSingleRequest , GetSingleResponse ,
15+ GetTracklistTracksRequest , GetTracklistTracksResponse , PlayNextRequest , PlayNextResponse ,
16+ RemoveTrackRequest , RemoveTrackResponse , SetRepeatRequest , SetRepeatResponse ,
17+ ShuffleRequest , ShuffleResponse ,
18+ } ,
19+ metadata:: v1alpha1:: { Album , Artist , Track } ,
1720} ;
1821
1922pub struct Tracklist {
@@ -34,8 +37,16 @@ impl TracklistService for Tracklist {
3437 request : tonic:: Request < AddTrackRequest > ,
3538 ) -> Result < tonic:: Response < AddTrackResponse > , tonic:: Status > {
3639 let song = request. get_ref ( ) . track . as_ref ( ) . unwrap ( ) ;
40+ let artist = match song. artists . len ( ) {
41+ 0 => "Unknown Artist" . to_string ( ) ,
42+ _ => song. artists [ 0 ] . name . clone ( ) ,
43+ } ;
3744 self . player . lock ( ) . await . load_tracklist ( vec ! [ track:: Model {
45+ id: song. id. clone( ) ,
3846 uri: song. uri. clone( ) ,
47+ title: song. title. clone( ) ,
48+ album: song. album. clone( ) . unwrap_or_default( ) . title,
49+ artist,
3950 ..Default :: default ( )
4051 } ] ) ;
4152 let response = AddTrackResponse { } ;
@@ -46,6 +57,7 @@ impl TracklistService for Tracklist {
4657 & self ,
4758 _request : tonic:: Request < ClearTracklistRequest > ,
4859 ) -> Result < tonic:: Response < ClearTracklistResponse > , tonic:: Status > {
60+ self . player . lock ( ) . await . clear ( ) ;
4961 let response = ClearTracklistResponse { } ;
5062 Ok ( tonic:: Response :: new ( response) )
5163 }
@@ -126,12 +138,50 @@ impl TracklistService for Tracklist {
126138 & self ,
127139 _request : tonic:: Request < GetTracklistTracksRequest > ,
128140 ) -> Result < tonic:: Response < GetTracklistTracksResponse > , tonic:: Status > {
129- tracklist:: Entity :: find ( )
130- . all ( self . db . get_connection ( ) )
131- . await
132- . map_err ( |e| tonic:: Status :: internal ( e. to_string ( ) ) ) ?;
133-
134- let response = GetTracklistTracksResponse { } ;
141+ let ( previous_tracks, next_tracks) = self . player . lock ( ) . await . get_tracks ( ) . await ;
142+
143+ let response = GetTracklistTracksResponse {
144+ next_tracks : next_tracks
145+ . into_iter ( )
146+ . map ( |track| Track {
147+ id : track. id ,
148+ title : track. title ,
149+ uri : track. uri ,
150+ disc_number : format ! ( "{}" , track. track. unwrap_or( 0 ) ) . parse ( ) . unwrap ( ) ,
151+ artists : vec ! [ Artist {
152+ name: track. artist,
153+ ..Default :: default ( )
154+ } ] ,
155+ album : Some ( Album {
156+ // id: track.album_id.unwrap(),
157+ title : track. album ,
158+ year : format ! ( "{}" , track. year. unwrap_or( 0 ) ) . parse ( ) . unwrap ( ) ,
159+ ..Default :: default ( )
160+ } ) ,
161+ ..Default :: default ( )
162+ } )
163+ . collect ( ) ,
164+ previous_tracks : previous_tracks
165+ . into_iter ( )
166+ . map ( |track| Track {
167+ id : track. id ,
168+ title : track. title ,
169+ uri : track. uri ,
170+ disc_number : format ! ( "{}" , track. track. unwrap_or( 0 ) ) . parse ( ) . unwrap ( ) ,
171+ artists : vec ! [ Artist {
172+ name: track. artist,
173+ ..Default :: default ( )
174+ } ] ,
175+ album : Some ( Album {
176+ // id: track.album_id.unwrap(),
177+ title : track. album ,
178+ year : format ! ( "{}" , track. year. unwrap_or( 0 ) ) . parse ( ) . unwrap ( ) ,
179+ ..Default :: default ( )
180+ } ) ,
181+ ..Default :: default ( )
182+ } )
183+ . collect ( ) ,
184+ } ;
135185 Ok ( tonic:: Response :: new ( response) )
136186 }
137187
0 commit comments