package Ġcodes . t ad . nix android repo Ċ Ċ import Ġcom . android . prefs . Android Locations Singleton Ċ import Ġcom . android . repository . api .* Ċ import Ġcom . android . repository . impl . meta . Local Package Impl Ċ import Ġcom . android . repository . impl . meta . Remote Package Impl Ċ import Ġcom . android . repository . impl . meta . Schema Module Util Ċ import Ġcom . android . sdk lib . repository . Android Sdk Handler Ċ import Ġcom . android . sdk lib . repository . legacy . Legacy Remote Repo Loader Ċ import Ġcom . android . sdk lib . tool . sdk manager . Sdk Manager Cli Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . Print Stream Ċ import Ġjava . net . URL Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . io . path . exists Ċ import Ġkotlin . io . path . file Size Ċ import Ġkotlin . io . path . inputStream ĊĊ Ċ class ĠN ix Downloader Ġ: ĠDown loader Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdownload Fully ( url : ĠURL , Ġindicator : ĠProgress Indicator ): ĠPath Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġkotlin . io . path . create TempFile (" N ix Downloader ") ĊĠĠĠĠĠĠĠ Ġdownload Fully ( url , Ġtarget , Ġnull , Ġindicator ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtarget ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload Fully ( ĊĠĠĠĠĠĠĠ Ġurl : ĠURL , ĊĠĠĠĠĠĠĠ Ġtarget : ĠPath , ĊĠĠĠĠĠĠĠ Ġchecksum : ĠCheck sum ?, ĊĠĠĠĠĠĠĠ Ġindicator : ĠProgress Indicator ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( target . exists () Ġ&& Ġchecksum Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . setText (" Verify ing Ġprevious Ġdownload ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . inputStream (). buffered (). use Ġ{ Ġstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checksum . value Ġ== ĠDown loader . hash ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . file Size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecksum . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator . create Sub Progress ( 0 . 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Should Ġdownload : Ġ$ url Ġ-> Ġ$ target ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload And Stream ( url : ĠURL , Ġindicator : ĠProgress Indicator ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġopen Url ( url . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Url ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠ Ġ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= ĠURL ( url ). open Connection () ĊĠĠĠĠĠĠĠ Ġconnection . connect () ĊĠĠĠĠĠĠĠ Ġreturn Ġconnection . getInputStream (). ensure Mark Reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠInputStream . ensure Mark Reset (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! mark Supported ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Bytes (). inputStream (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ġclose () Ġ} Ġcatch Ġ( e : ĠException ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠN ix Progress Indicator Ġ: ĠProgress Indicator Adapter () Ġ{ ĊĠĠĠ Ġvar Ġerr : ĠPrint Stream Ġ= ĠSystem . err ĊĊĠĠĠ Ġoverride Ġfun Ġlog Warning ( s : ĠString , Ġe : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġerr . println (" Warning : Ġ% s ") ĊĠĠĠĠĠĠĠ Ġe ?. let Ġ{ Ġerr . println ( it . message ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog Warning ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog Warning ( s , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog Error ( s : ĠString , Ġe : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġerr . println (" Error : Ġ% s ") ĊĠĠĠĠĠĠĠ Ġe ?. let Ġ{ Ġerr . println ( it . message ) Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠS dk Manager Cli . Unchecked Command FailedException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog Error ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog Error ( s , Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠN ix Settings ( ĊĠĠĠ Ġprivate Ġval Ġchannel Id : ĠInt Ċ ) Ġ: ĠSettings Controller Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Disable Sdk Pat ches (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġset Disable Sdk Pat ches ( disable : ĠBoolean ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġget Force Http (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġset Force Http ( force : ĠBoolean ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġget Channel (): ĠChannel Ġ= ĠChannel . create ( channelId ) Ċ } Ċ Ċ class ĠN ix Repo Manager ( ĊĠĠĠ Ġchannel Id : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġprogress Ġ= ĠN ix Progress Indicator ĊĠĠĠ Ġprivate Ġval Ġsdk Ġ= ĠAndroid Sdk Handler . getInstance ( Android Locations Singleton , Ġnull ) ĊĠĠĠ Ġprivate Ġval Ġrepo Manager Ġ= Ġsdk . get Sdk Manager ( progress ) ĊĠĠĠ Ġprivate Ġval Ġsettings Ġ= ĠN ix Settings ( channelId ) ĊĠĠĠ Ġprivate Ġval Ġdown loader Ġ= ĠN ix Downloader () ĊĠĠĠ Ġprivate Ġval Ġfallback Loader Ġ= ĠLegacy Remote Repo Loader () ĊĊĠĠĠ Ġfun Ġget Packages (): ĠMap < String , ĠRemote Package > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsed Packages Ġ= Ġmutable Map Of < Repository Source , ĠCollection < Remote Package >>() ĊĠĠĠĠĠĠĠ Ġval Ġlegacy Parsed Packages Ġ= Ġmutable Map Of < Repository Source , ĠCollection < Remote Package >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġrepo Manager . get Sources ( downloader , Ġprogress , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( source Ġin Ġsources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanifest Ġ= Ġdown loader . download And Stream ( URL ( source . url ), Ġprogress ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Source ( source , Ġmanifest , Ġparsed Packages , Ġlegacy Parsed Packages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġsettings . channel ĊĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= Ġmutable Map Of < String , ĠRemote Package >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( source , Ġsource Packages ) Ġin Ġparsed Packages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Packages ( channel , Ġsource , Ġsource Packages , Ġpackages ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ(( source , Ġsource Packages ) Ġin Ġlegacy Parsed Packages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerge Packages ( channel , Ġsource , Ġsource Packages , Ġpackages ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpackages ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Source ( ĊĠĠĠĠĠĠĠ Ġsource : ĠRepository Source , ĊĠĠĠĠĠĠĠ Ġmanifest : ĠInputStream , ĊĠĠĠĠĠĠĠ Ġresult : ĠMutable Map < Repository Source , ĠCollection < Remote Package >>, ĊĠĠĠĠĠĠĠ Ġlegacy Result : ĠMutable Map < Repository Source , ĠCollection < Remote Package >> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= ĠSchema Module Util . un marshal ( manifest , Ġsource . per mitted Modules , Ġtrue , Ġprogress ) Ġas ? ĠRepository ĊĠĠĠĠĠĠĠ Ġif Ġ( repo Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ source ] Ġ= Ġrepo . remote Package ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlegacy Result [ source ] Ġ= Ġfallback Loader . parse Legacy Xml ( source , Ġdown loader , Ġsettings , Ġprogress ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmerge Packages ( ĊĠĠĠĠĠĠĠ Ġchannel : ĠChannel , ĊĠĠĠĠĠĠĠ Ġsource : ĠRepository Source , ĊĠĠĠĠĠĠĠ Ġpackages : ĠCollection < Remote Package >, ĊĠĠĠĠĠĠĠ Ġresult : ĠMutable Map < String , ĠRemote Package > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( pkg Ġin Ġpackages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpkg Ġas ĠRemote Package Impl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Ġ= Ġresult [ pkg . path ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing . version Ġ> Ġpkg . version ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing . version Ġ< Ġpkg . version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpkg . source Ġ= Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ pkg . path ] Ġ= Ġpkg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Ġas ĠRemote Package Impl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Arch ives Ġ= Ġexisting . all Arch ives ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( archive Ġin Ġpkg . all Arch ives ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Arch ives . none Ġ{ Ġit . platform () Ġ== Ġarchive . platform () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting . add Archive ( archive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pkg . channel Ġ<= Ġchannel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpkg . source Ġ= Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ pkg . path ] Ġ= Ġpkg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpackage Xml ( pkg : ĠRemote Package ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġpkg . create Factory () ĊĠĠĠĠĠĠĠ Ġval Ġrepo Ġ= Ġfactory . create Repository Type () ĊĠĠĠĠĠĠĠ Ġpkg . license ?. let Ġ{ Ġrepo . add License ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġimpl Ġ= ĠLocal Package Impl . create ( pkg ) ĊĠĠĠĠĠĠĠ Ġrepo . set Local Package ( impl ) ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġfactory . generate Repository ( repo ) ĊĠĠĠĠĠĠĠ Ġreturn ĠByteArrayOutputStream (). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Module Util . marshal ( element , Ġrepo Manager . schema Modules , Ġout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Manager . getResource Resolver ( progress ), Ġprogress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . toString ( Charsets . UTF _ 8 . name ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ