package Ġdev . tri ets ch . spotify . cli . common Ċ Ċ import Ġcom . github . aj alt . cli kt . output . Cli kt Help Formatter Ċ import Ġcom . github . aj alt . cli kt . output . Help Formatter Ċ import Ġcom . wrapper . spotify . exceptions . detailed . Unauthorized Exception Ċ import Ġdev . tri ets ch . spotify . cli . Spot Ċ import Ġdev . tri ets ch . spotify . cli . commands . Authentication Ċ import Ġdev . tri ets ch . spotify . cli . commands . Login Ċ import Ġdev . tri ets ch . spotify . cli . common . Cli Context . Terminal . SP OT IFY _ GREEN Ċ import Ġdev . tri ets ch . spotify . cli . common . Cli Context . Terminal . TERM _ COLORS Ċ import Ġdev . tri ets ch . spotify . cli . common . Cli Context . get Credentials Ċ Ċ fun Ġrun If Authenticated ( block : Ġ() Ġ-> ĠUnit ) Ġ= Ġget Credentials () ĊĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Catch ing ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠUnauthorized Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Your Ġcredentials Ġhave Ġexpired . ĠPlease Ġlogin Ġto Ġrequest Ġan Ġaccess Ġtoken Ġusing : Ġ${ Spot . COMMAND } Ġ${ Authentication . COMMAND } Ġ${ Login . COMMAND }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" An Ġunexpected Ġerror Ġoccurred , Ġenable Ġverbose Ġlogging Ġto Ġsee Ġthe Ġstack trace : Ġ${ Spot . COMMAND } Ġ-- verbose Ġ< your Ġcommand >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Verbose ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ?: Ġprintln (" You Ġare Ġcurrently Ġnot Ġlogged Ġin . ĠPlease Ġlogin Ġto Ġrequest Ġan Ġaccess Ġtoken Ġusing : Ġ${ Spot . COMMAND } Ġ${ Authentication . COMMAND } Ġ${ Login . COMMAND }") Ċ Ċ fun Ġprint Verbose ( var arg Ġmessages : ĠAny ?) Ġ{ ĊĠĠĠ Ġif Ġ( Cli Context . VERBOSE _ LOG GING ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessages . forEach Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠBrowser Util Ġ{ ĊĠĠĠ Ġprivate Ġval Ġruntime Ġ= ĠRuntime . get Runtime () ĊĠĠĠ Ġprivate Ġval Ġbrowsers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" ep iph any ", Ġ" firefox ", Ġ" mozilla ", Ġ" kon quer or ", ĊĠĠĠĠĠĠĠ Ġ" net scape ", Ġ" oper a ", Ġ" links ", Ġ" ly nx ", Ġ" chrome ", Ġ" chromium " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġopen Url In Browser ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠSystem . getProperty (" os . name "). toLowerCase () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . indexOf (" win ") Ġ>= Ġ 0 Ġ-> Ġruntime . exec (" r und ll 3 2 Ġurl . dll , File Protocol Handler Ġ$ url "); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . indexOf (" mac ") Ġ>= Ġ 0 Ġ-> Ġruntime . exec (" open Ġ$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . indexOf (" nix ") Ġ>= Ġ 0 Ġ|| Ġos . indexOf (" nux ") Ġ>= Ġ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowsers . forEach Indexed Ġ{ Ġindex , Ġbrowser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġappend (""" $ browser Ġ"$ url """ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend (""" Ġ|| Ġ$ browser Ġ"$ url """ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime . exec ( array Of (" sh ", Ġ"- c ", Ġcommand )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠColor Help Formatter Ġ: ĠCli kt Help Formatter () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrender Tag ( tag : ĠString , Ġvalue : ĠString ) Ġ= ĠTER M _ COLORS . green ( super . render Tag ( tag , Ġvalue )) ĊĠĠĠ Ġoverride Ġfun Ġrender Option Name ( name : ĠString ) Ġ= Ġsuper . render Option Name ( name ) ĊĠĠĠ Ġoverride Ġfun Ġrender Argument Name ( name : ĠString ) Ġ= ĠSP OT IFY _ GREEN ( super . render Argument Name ( name )) ĊĠĠĠ Ġoverride Ġfun Ġrender Sub command Name ( name : ĠString ) Ġ= ĠSP OT IFY _ GREEN ( super . render Sub command Name ( name )) ĊĊĠĠĠ Ġoverride Ġfun Ġrender Section Title ( title : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( TERM _ COLORS . bold Ġ+ ĠTER M _ COLORS . underline )( super . render Section Title ( title )) ĊĊĠĠĠ Ġoverride Ġfun Ġoption Met av ar ( option : ĠHelp Formatter . Parameter Help . Option ) Ġ= ĊĠĠĠĠĠĠĠ ĠTER M _ COLORS . green ( super . option Met av ar ( option )) Ċ } Ċ