package Ġio . github . war ri or zz . kt ify . player Ċ Ċ import Ġio . github . war ri or zz . kt ify . Kt ify Ċ import Ġio . github . war ri or zz . kt ify . model . Episode Ċ import Ġio . github . war ri or zz . kt ify . model . Linked Track Ċ import Ġio . github . war ri or zz . kt ify . model . Track Ċ import Ġio . github . war ri or zz . kt ify . model . auth . Scope Ċ import Ġio . github . war ri or zz . kt ify . model . player .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . http .* Ċ import Ġkotlinx . serialization . json .* Ċ Ċ @ Opt In ( Experimental Std lib Api :: class ) Ċ class ĠK t ify Player Ġinternal Ġconstructor ( val Ġkt ify : ĠK t ify ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠRead Ġthe Ġuser 's Ġcurrent Ġplayback . ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġmarket Ġ Ġ( Optional ) Ġ[ ISO Ġ 3 1 6 6 - 1 Ġalpha - 2 ]( https :// en . wikipedia . org / wiki / ISO _ 3 1 6 6 - 1 _ alpha - 2 ) Ġcode Ġof Ġa Ġcountry . ĠCan Ġalso Ġbe Ġ' from _ token ', Ġequivalent Ġto Ġthe Ġcurrent Ġusers Ġcountry . ĊĠĠĠĠ Ġ* Ġ Ġ@ return ĠThe Ġ[ Current Playback ]( https :// github . com / war ri or zz / kt ify / blob / ac 3 1 8 a 3 8 f 7 2 f 7 7 0 8 9 3 f 2 c 4 c 9 cf 6 4 dc 1 8 a 2 e 0 5 a 8 6 / src / main / kotlin / com / github / war ri or zz / kt ify / model / player / Current Playback . kt # L 1 6 ) Ġobject , Ġcan Ġbe Ġnull Ġif Ġnothing Ġis Ġcurrently Ġplayed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun ĠgetCurrent Playback ( market : ĠString ? Ġ= Ġnull ): ĠCurrent Playback ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( kt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ READ _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( market Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" market ", Ġmarket ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" additional _ types ", Ġ" track , episode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneeded Element Ġ= Ġ" is _ playing ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde serialization Strategy Ġ= ĠCurrent Playback . serializer () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( market Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" market ", Ġmarket ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" additional _ types ", Ġ" track , episode ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠTransfer Ġplayback Ġto Ġanother Ġdevice ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe ĠID Ġof Ġthe Ġdevice Ġto Ġwhich Ġthe Ġplayback Ġshould Ġbe Ġtransferred ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġplay ĠĠĠĠĠĠĠ ĠIf Ġtrue , Ġthe Ġplayback Ġwill Ġstart , Ġif Ġfalse Ġor Ġnot Ġprovided , Ġthe Ġcurrent Ġplayback Ġstate Ġwill Ġbe Ġkept ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġtransfer Playback ( deviceId : ĠString , Ġplay : ĠBoolean Ġ= Ġfalse ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ ids ", Ġ"{ device _ ids :[ \" $ deviceId \"] }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" play ", Ġplay . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠGet Ġa Ġlist Ġof Ġthe Ġavailable Ġdevices ĊĠĠĠĠ Ġ* Ġ Ġ@ return ĠThe Ġ[ Available Devices ]( https :// github . com / war ri or zz / kt ify / blob / ac 3 1 8 a 3 8 f 7 2 f 7 7 0 8 9 3 f 2 c 4 c 9 cf 6 4 dc 1 8 a 2 e 0 5 a 8 6 / src / main / kotlin / com / github / war ri or zz / kt ify / model / player / Devices . kt # L 7 ) Ġobject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġget Available Devices (): ĠAvailable Devices Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Authentication Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ READ _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / devices ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠGet Ġthe Ġtrack Ġcurrently Ġplayed Ġon Ġthe Ġuser 's Ġaccount ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġmarket Ġ Ġ( Optional ) Ġ[ ISO Ġ 3 1 6 6 - 1 Ġalpha - 2 ]( https :// en . wikipedia . org / wiki / ISO _ 3 1 6 6 - 1 _ alpha - 2 ) Ġcode Ġof Ġa Ġcountry . ĠCan Ġalso Ġbe Ġ' from _ token ', Ġequivalent Ġto Ġthe Ġcurrent Ġusers Ġcountry . ĊĠĠĠĠ Ġ* Ġ Ġ@ return ĠThe Ġ[ Current Playing Track ]( https :// github . com / war ri or zz / kt ify / blob / ac 3 1 8 a 3 8 f 7 2 f 7 7 0 8 9 3 f 2 c 4 c 9 cf 6 4 dc 1 8 a 2 e 0 5 a 8 6 / src / main / kotlin / com / github / war ri or zz / kt ify / model / player / Current Playback . kt # L 3 8 ) Ġobject , Ġcan Ġbe Ġnull Ġif Ġno Ġtrack Ġis Ġcurrently Ġplayed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun ĠgetCurrent Playing Track ( market : ĠString ? Ġ= Ġnull ): ĠCurrent Playing Track ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneeded Element Ġ= Ġ" is _ playing ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde serialization Strategy Ġ= ĠCurrent Playing Track . serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ READ _ CURRENT LY _ PLAY ING ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / currently - playing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( market Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" market ", Ġmarket ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠStart Ġor Ġresume Ġthe Ġuser 's Ġplayback , Ġclick Ġ[ here ]( https :// developer . spotify . com / documentation / web - api / reference /# category - player ) Ġfor Ġfurther Ġcontext ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġstart Playback ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcontext Uri : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġur is : ĠList < String >? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġoffset : ĠJsonObject ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġposition Ms : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / play ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġbuild JsonObject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" context _ uri ", Ġcontext Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uris Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uris ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild JsonArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġur is . forEach Ġ{ Ġadd ( Json . parse ToJson Element ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" offset ", Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ms Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (" position _ ms ", Ġposition Ms ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠPause Ġthe Ġuser 's Ġplayback ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġpause Playback ( deviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / pause ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSkip Ġthe Ġuser 's Ġplayback Ġto Ġthe Ġnext Ġtrack ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġskip To Next Track ( deviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Post ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / next ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSkip Ġthe Ġuser 's Ġplayback Ġto Ġthe Ġprevious Ġtrack ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġskip To Previous Track ( deviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Post ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / previous ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSeek Ġto Ġa Ġspecific Ġposition Ġin Ġthe Ġuser 's Ġplayback ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġposition Ms Ġ ĠThe Ġposition Ġin Ġmilliseconds . ĠMust Ġbe Ġpositive , Ġif Ġit Ġis Ġgreater Ġthan Ġthe Ġsongs Ġlength , Ġthe Ġplayer Ġwill Ġskip Ġto Ġthe Ġnext Ġsong . ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġseek To Position ( position Ms : ĠInt , ĠdeviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / seek ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" position _ ms ", Ġposition Ms . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSet Ġthe Ġrepeat Ġmode Ġof Ġthe Ġuser 's Ġplayer ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġrepeat State ĠĠ ĠThe Ġrepeat Ġstate , Ġrepresented Ġby Ġthe Ġ[ Repeat State ]( https :// github . com / war ri or zz / kt ify / blob / 3 9 a 3 7 be 4 5 a 4 7 1 a 4 e 2 5 3 0 2 5 6 3 4 0 f 6 c 0 0 d 6 a 8 dc 4 cd / src / main / kotlin / com / github / war ri or zz / kt ify / model / player / Current Playback . kt # L 8 9 ) Ġenum Ġclass ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġset Repeat Mode ( repeat State : ĠRepeat State , ĠdeviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / repeat ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" state ", ĠJson . encode ToString ( Repeat State . serializer (), Ġrepeat State ). replace (" \"", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSet Ġthe Ġvolume Ġof Ġthe Ġuser 's Ġplayer ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġvolume Percent ĠĠ ĠThe Ġvolume Ġpercentage Ġ( must Ġbe Ġa Ġvalue Ġfrom Ġ 0 Ġto Ġ 1 0 0 Ġinclusive .) ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . BadRequest ] Ġif Ġthe Ġvolume Ġwasn 't Ġbetween Ġ 0 Ġand Ġ 1 0 0 , Ġ Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġset Volume ( volume Percent : ĠInt , ĠdeviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( volume Percent Ġ> Ġ 1 0 0 Ġ|| Ġvolume Percent Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHttpStatusCode . BadRequest ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / volume ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" volume _ percent ", Ġvolume Percent . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSet Ġthe Ġshuffle Ġstate Ġof Ġthe Ġuser 's Ġplayer ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġshuffle State ĠĠ ĠThe Ġnew Ġshuffle Ġstate ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġtoggle Shuffle Playback ( shuffle State : ĠBoolean , ĠdeviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Put ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / shuffle ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" state ", Ġshuffle State . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠGets Ġthe Ġrecently Ġplayed Ġtracks Ġof Ġthe Ġuser ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġlimit ĠĠ ĠThe Ġmaximum Ġnumber Ġof Ġitems Ġreturned . ĠNeeds Ġto Ġbe Ġbetween Ġ 1 Ġand Ġ 5 0 , Ġotherwise Ġit Ġwill Ġbe Ġ 2 0 ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġafter ĠĠ ĠTimestamp Ġin Ġmilliseconds , Ġreturns Ġitems Ġafter Ġthis Ġposition Ġ( not Ġincluding ), Ġeither Ġafter Ġor Ġbefore Ġmust Ġbe Ġpresent ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġbefore Ġ ĠTimestamp Ġin Ġmilliseconds , Ġreturns Ġitems Ġbefore Ġthis Ġposition Ġ( not Ġincluding ), Ġeither Ġafter Ġor Ġbefore Ġmust Ġbe Ġpresent ĊĠĠĠĠ Ġ* Ġ Ġ@ return ĠThe Ġ[ Play History Cursor Paging Object ]. ĠNull Ġif Ġeither Ġthe Ġrequirements Ġaren 't Ġmet Ġor Ġa Ġprivate Ġsession Ġwas Ġenabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġget Recent ly Play ed Tracks ( ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġafter : ĠLong ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġbefore : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠPlay History Cursor Paging Object ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( after Ġ== Ġnull Ġ&& Ġbefore Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( kt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ READ _ REC ENT LY _ PLAYER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / recent ly - play ed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ!= Ġnull Ġ&& Ġlimit Ġin Ġ 1 .. 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" limit ", Ġlimit . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( after Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" after ", Ġafter . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( before Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" before ", Ġbefore . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ READ _ REC ENT LY _ PLAYER , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Authentication Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Get ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / recent ly - play ed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ!= Ġnull Ġ&& Ġlimit Ġin Ġ 1 .. 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" limit ", Ġlimit . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( after Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" after ", Ġafter . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( before Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" before ", Ġbefore . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠWill Ġbe Ġinternal Ġonce Ġthe Ġwhole ĠAPI Ġis Ġcovered ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġadd Item To Queue ( uri : ĠString , ĠdeviceId : ĠString ? Ġ= Ġnull ): ĠHttpStatusCode Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkt ify . request Helper . make Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Scope Ġ= ĠScope . USER _ MO DIFY _ PLAY BACK _ STATE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠHttpMethod . Post ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . take From ( kt ify . request Helper . baseUrl Ġ+ Ġ" me / player / queue ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" uri ", Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" device _ id ", ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠAdds Ġa Ġtrack Ġto Ġthe Ġuser 's Ġqueue ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġtrack ĠĠ ĠThe Ġtrack Ġto Ġadd Ġto Ġthe Ġqueue ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġadd Item To Queue ( track : ĠTrack , ĠdeviceId : ĠString ?) Ġ= Ġadd Item To Queue ( track . uri , ĠdeviceId ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠAdds Ġa Ġtrack Ġto Ġthe Ġuser 's Ġqueue ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġtrack ĠĠ ĠThe Ġtrack Ġto Ġadd Ġto Ġthe Ġqueue ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġadd Item To Queue ( track : ĠLinked Track , ĠdeviceId : ĠString ?) Ġ= Ġadd Item To Queue ( track . uri , ĠdeviceId ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠAdds Ġan Ġepisode Ġto Ġthe Ġuser 's Ġqueue ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ Ġepisode ĠĠ ĠThe Ġepisode Ġto Ġadd Ġto Ġthe Ġqueue ĊĠĠĠĠ Ġ* Ġ Ġ@ param Ġ ĠdeviceId ĠĠĠ ĠThe Ġdevice ĠID , Ġif Ġnot Ġprovided , Ġthe Ġuser 's Ġcurrent Ġactive Ġdevice Ġis Ġtargeted ĊĠĠĠĠ Ġ* Ġ Ġ@ return Ġ[ HttpStatusCode . No Content ] Ġif Ġthe Ġrequest Ġsucceeded , Ġ[ HttpStatusCode . NotFound ] Ġif Ġthe Ġdevice Ġwas Ġnot Ġfound , Ġ[ HttpStatusCode . Forbidden ] Ġif Ġthe Ġuser Ġis Ġnon - premium ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġadd Item To Queue ( episode : ĠEp isode , ĠdeviceId : ĠString ?) Ġ= Ġadd Item To Queue ( episode . uri , ĠdeviceId ) Ċ } Ċ