package Ġio . github . gn up ingu in . spotify . service Ċ Ċ import Ġio . github . gn up ingu in . spotify . client .* Ċ import Ġio . github . gn up ingu in . spotify . service . Paging Utils . Companion . MAX _ P AGING _ STEP Ċ import Ġio . github . gn up ingu in . spotify . service . importer . User Track Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ interface ĠSpotify Service Ġ{ ĊĊĠĠĠ Ġfun Ġsearch Tracks ( tracks : ĠList < User Track >) Ġ: ĠList < Spot ify Track > ĊĊĠĠĠ Ġfun ĠaddTo Spot ify ( tracks : ĠList < Spot ify Track >) ĊĊĠĠĠ Ġfun Ġget Saved Tracks (): ĠList < Track Object > ĊĊĠĠĠ Ġfun Ġcreate Saved Artist Playlist ( artist Id : ĠString ): ĠList < Track Object > Ċ Ċ } Ċ Ċ @ Component Ċ class ĠSpotify ServiceImpl ( private Ġval Ġspot ify Client : ĠSpotify Client , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsecurity Context : ĠSpotify SecurityContext Ċ ) Ġ: ĠSpotify Service Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠaddTo Spot ify ( tracks : ĠList < Spot ify Track >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġtracks . map Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠ Ġspot ify Client . addTo Lik ed ( ids ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch Tracks ( tracks : ĠList < User Track >): ĠList < Spot ify Track > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtracks . map NotNull Ġ{ Ġuser Track Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġcreate Search Query ( user Track ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Ġ= Ġspot ify Client . search ( q Ġ= Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search . tracks . items . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch . tracks . items [ 0 ] Ġ// TODO Ġshow Ġall Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Saved Tracks (): ĠList < Track Object > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload Lik ed S ongs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . items Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . track Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Saved Artist Playlist ( artist Id : ĠString ): ĠList < Track Object > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtracks Ġ= Ġget Saved Tracks (). filter Ġ{ Ġtrack Ġ-> Ġis Art ists Track ( track , Ġartist Id ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( tracks . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Name Ġ= Ġget Artist Name ( tracks , Ġartist Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠCreate Playlist Request ("${ artist Name }: Ġ@ Spot ify Utils Telegram Bot ", Ġ" The Ġplaylist Ġwas Ġcreated Ġby Ġ@ Spot ify Utils Telegram Bot Ġfrom Ġyour Ġlik ed Ġsongs Ġfor Ġspecified Ġartist .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Ġ= Ġspot ify Client . create Play List ( security Context . getUserId (), Ġrequest ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracks . map Ġ{ Ġ" spotify : track :${ it . id }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. window ed ( 1 0 0 , Ġ 1 0 0 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspot ify Client . addTo Playlist ( playlist . id , ĠAdd Items To Playlist Request ( uris Ġ= Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtracks ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Artist Name ( ĊĠĠĠĠĠĠĠ Ġtracks : ĠList < Track Object >, ĊĠĠĠĠĠĠĠ Ġartist Id : ĠString ĊĠĠĠ Ġ) Ġ= Ġtracks . first (). artists . find Ġ{ Ġit . id Ġ== Ġartist Id Ġ} !!. name ĊĊĠĠĠ Ġprivate Ġfun Ġis Art ists Track ( ĊĠĠĠĠĠĠĠ Ġtrack : ĠTrack Object , ĊĠĠĠĠĠĠĠ Ġartist Id : ĠString ĊĠĠĠ Ġ) Ġ= Ġtrack . artists . map Ġ{ Ġit . id Ġ}. contains ( artist Id ) ĊĊĠĠĠ Ġprivate Ġfun Ġload Lik ed S ongs () Ġ= Ġgenerate Sequence ( spotify Client . lik ed S ongs ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspot ify Client . lik ed S ongs ( offset Ġ= Ġit . offset Ġ+ ĠMAX _ P AGING _ STEP ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Search Query ( user Track : ĠUser Track ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġ" artist :\" ${ user Track . band . trim ()} \" Ġtrack :\" ${ user Track . song . trim () }\ "" Ċ Ċ }