package Ġremote Ċ Ċ import ĠI LI AS _ CLIENT _ ID Ċ import ĠI LI AS _ DOMAIN Ċ import ĠI LI AS _ PASSWORD Ċ import ĠI LI AS _ USER Ċ import Ġokhttp 3 .* Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . scal ars . Scalars Converter Factory Ċ import Ġretrofit 2 . http .* Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . security . Message Digest Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . xml . bind . Datatype Converter Ċ Ċ object ĠI li as Ġ{ ĊĠĠĠ Ġprivate Ġval Ġil ias Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠ Ġ. baseUrl ( ILI AS _ DOMAIN ) ĊĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Scalars Converter Factory . create ()) ĊĠĠĠĠĠĠĠ Ġ. client ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cookie Jar ( Cookie Store ()). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. build (). create ( I li as API :: class . java ) ĊĊĠĠĠ Ġfun Ġlist I li as Resources G oto ( url : ĠString , Ġname Short ener : Ġ( String ) Ġ-> ĠString Ġ= Ġ{ Ġit Ġ}): ĠList < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġil ias . download ( url ). execute (). body ()?. string () ĊĠĠĠĠĠĠĠ Ġif Ġ( response ?. contains (" In halt ") Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġil ias . login ( ILI AS _ USER , ĠI LI AS _ PASSWORD , Ġ" An meld en "). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġil ias . download ( url ). execute (). body ()?. string () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠPattern . compile (""" < h 4 Ġclass =" il _ Container Item Title ">< a Ġhref =" ([^ "] + )" [^ > ]* >( [^ < ]+ )</ a > .* ?</ a > """) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. matcher ( response Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠ Ġval Ġil ias Resources Ġ= Ġmutable ListOf < Pair < String , ĠString >>() ĊĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġil ias Resources . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ name Short ener . invoke ( matcher . group ( 2 ). trim ()) }. pdf " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher . group ( 1 ). replace ("& amp ;", Ġ"& ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġil ias Resources . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlist Web Resources ( ĊĠĠĠĠĠĠĠ Ġdownload Url : ĠString , Ġregex : ĠString , ĠbaseUrl : ĠString Ġ= Ġdownload Url , ĊĠĠĠĠĠĠĠ Ġname Short ener : Ġ( String ) Ġ-> ĠString Ġ= Ġ{ Ġit Ġ} ĊĠĠĠ Ġ): ĠList < Pair < String , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠPattern . compile ( regex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. matcher ( il ias . download ( download Url ). execute (). body ()?. string ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġil ias Resources Ġ= Ġmutable ListOf < Pair < String , ĠString >>() ĊĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġil ias Resources . add ("${ name Short ener . invoke ( matcher . group ( 2 )) }. pdf " Ġto ĠbaseUrl Ġ+ Ġmatcher . group ( 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġil ias Resources . toList () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdownload Refresh ( type : ĠString , Ġname : ĠString , Ġurl : ĠString , Ġprevious : ĠI li as Resource ?): ĠI li as Resource ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdownload URL ( url ) ĊĠĠĠĠĠĠĠ Ġif Ġ( previous Ġ!= Ġnull Ġ&& Ġresponse . code () Ġ== ĠHttp URLConnection . HTTP _ NOT _ MODI FIED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ type Ġ$ name Ġunchanged Ġ${ previous . hash }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprevious . copy ( name Ġ= Ġname ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ Ġdownloaded Ġfrom Ġ${ response . raw (). request (). url (). encoded Path () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠDat atype Converter . print Hex Binary ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Digest . getInstance (" MD 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. digest ( response . body () !!. bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( previous Ġ!= Ġnull Ġ&& Ġprevious . hash Ġ== Ġhash ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ type Ġ$ name Ġun ch aged ĠMD 5 Ġ$ hash ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious . copy ( name Ġ= Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ type Ġ$ name Ġ${ previous ?. let Ġ{ Ġ" changed Ġ${ it . hash }" Ġ} Ġ?: Ġ" unc ached "} Ġ$ hash ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI li as Resource ( type , Ġname , Ġurl , Ġhash , ĠTelegram Resource . Remote Telegram Resource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġhandle Ġdownload Ġfailure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload URL ( url ). body () !!. byte Stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Failed Ġto Ġfetch Ġ$ type Ġ$ name !") ĊĠĠĠĠĠĠĠ Ġprintln ( response ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload URL ( url : ĠString ): ĠResponse < ResponseBody > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġil ias . download ( url ). execute () ĊĠĠĠĠĠĠĠ Ġif Ġ( response . raw (). request (). url (). encoded Path (). contains (" login ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġil ias . login ( ILI AS _ USER , ĠI LI AS _ PASSWORD , Ġ" An meld en "). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġil ias . download ( url ). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġinterface ĠI li as API Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Form Url Encoded ĊĠĠĠĠĠĠĠ Ġ@ POST (" il ias . php ? client _ id =$ ILI AS _ CLIENT _ ID & cmd = post & base Class = il Start Up GUI ") ĊĠĠĠĠĠĠĠ Ġfun Ġlogin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Field (" username ") Ġusername : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Field (" password ") Ġpassword : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Field (" cmd [ do Standard Authentication ]") Ġauthentication : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠCall < String > ĊĊĠĠĠĠĠĠĠ Ġ@ GET (" il ias . php ? cmd = show Overview & base Class = ile x ercise handler gui ") ĊĠĠĠĠĠĠĠ Ġfun Ġlist Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Query (" ref _ id ") Ġref _ id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Query (" target ") Ġtarget : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠCall < String > ĊĊĠĠĠĠĠĠĠ Ġ@ GET ĊĠĠĠĠĠĠĠ Ġfun Ġdownload (@ Url Ġurl : ĠString ): ĠCall < ResponseBody > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠCookie Store ( private Ġvar Ġcookies : ĠList < Cookie > Ġ= Ġempty List ()) Ġ: ĠCookie Jar Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave From Response ( url : ĠHttp Url , Ġcookies : ĠList < Cookie >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . cookies Ġ= Ġcookies ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload For Request ( url : ĠHttp Url ): ĠList < Cookie > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcookies ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ