package Ġlink . infra . pack wiz . installer . request Ċ Ċ import Ġlink . infra . pack wiz . installer . metadata . Space Safe URI Ċ import Ġlink . infra . pack wiz . installer . request . handlers . RequestHandler File Ċ import Ġlink . infra . pack wiz . installer . request . handlers . RequestHandler Github Ċ import Ġlink . infra . pack wiz . installer . request . handlers . RequestHandler HTTP Ċ import Ġok io . Source Ċ Ċ object ĠHandler Manager Ġ{ ĊĊ ĉ private Ġval Ġhandlers : ĠList < I RequestHandler > Ġ= ĠlistOf ( Ċĉĉ ĉ RequestHandler Github (), Ċĉĉ ĉ RequestHandler HTTP (), Ċĉĉ ĉ RequestHandler File () Ċ ĉ ) ĊĊĉ Ġ// ĠTODO : Ġget Ġrid Ġof Ġnullable Ġstuff Ġhere Ċ ĉ @ Jvm Static Ċ ĉ fun Ġget New Loc ( base : ĠSpace Safe URI ?, Ġloc : ĠSpace Safe URI ?): ĠSpace Safe URI ? Ġ{ Ċĉ ĉ if Ġ( loc Ġ== Ġnull ) Ġ{ Ċĉĉ ĉ return Ġnull Ċĉ ĉ } Ċĉ ĉ val Ġdest Ġ= Ġbase ?. run Ġ{ Ġresolve ( loc ) Ġ} Ġ?: Ġloc Ċĉ ĉ for Ġ( handler Ġin Ġhandlers ) Ġwith Ġ( handler ) Ġ{ Ċĉĉ ĉ if Ġ( matches Handler ( dest )) Ġ{ Ċĉĉĉ ĉ return Ġget New Loc ( dest ) Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ return Ġdest Ċ ĉ } ĊĊ ĉ // ĠTODO : ĠWhat Ġif Ġfiles Ġare Ġread Ġmultiple Ġtimes ?? Ċ ĉ // ĠZip Ġhandler Ġdis cards Ġonce Ġread , Ġrequesting Ġmultiple Ġtimes Ġon Ġother Ġhandlers Ġwould Ġcause Ġmultiple Ġdownloads Ċ ĉ // ĠC aching Ġsystem ? ĠCopy Ġfrom Ġalready Ġdownloaded Ġfiles ? ĊĊ ĉ // ĠTODO : Ġchange Ġto Ġuse Ġsomething Ġmore Ġid iom atic Ġthan Ġexceptions ? ĊĊ ĉ @ Jvm Static Ċ ĉ @ Throws ( Exception :: class ) Ċ ĉ fun ĠgetFile Source ( loc : ĠSpace Safe URI ): ĠSource Ġ{ Ċĉ ĉ for Ġ( handler Ġin Ġhandlers ) Ġ{ Ċĉĉ ĉ if Ġ( handler . matches Handler ( loc )) Ġ{ Ċĉĉĉ ĉ return Ġhandler . getFile Source ( loc ) Ġ?: Ġthrow ĠException (" Couldn 't Ġfind ĠURI : Ġ$ loc ") Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ throw ĠException (" No Ġhandler Ġavailable Ġfor ĠURI : Ġ$ loc ") Ċ ĉ } ĊĊ ĉ // ĠTODO : Ġgithub Ġto ml Ġresolution ? Ċ ĉ // Ġe . g . Ġhttps :// github . com / comp 5 0 0 / Dem ag net ize Ġ-> Ġde mag net ize . toml Ċ ĉ // Ġhttps :// github . com / comp 5 0 0 / Dem ag net ize / blob / master / de mag net ize . toml Ċ }