package Ġcom . red ridge apps . remote for q bit torrent . repo Ċ Ċ import Ġarrow . core . Try Ċ import Ġcom . red ridge apps . remote for q bit torrent . api . Q Bit torrent Service Ċ import Ġcom . red ridge apps . remote for q bit torrent . model . Q Bit torrent Log Ċ import Ġcom . red ridge apps . remote for q bit torrent . model . Torrent Ċ import Ġcom . red ridge apps . remote for q bit torrent . util . MIME _ TYPE _ TOR RENT _ FILE Ċ import Ġokhttp 3 . MediaType Ċ import Ġokhttp 3 . Multipart Body Ċ import Ġokhttp 3 . RequestBody Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠQ Bit torrent Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpref Repo : ĠPreference Repository , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġq Bit Service : ĠQ Bit torrent Service Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġsave Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Https : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Str : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Str : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpref Repo . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= ĠQ Bit torrent Service . build Base URL ( host , Ġport , Ġuse Https ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġusername Str ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword Str ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġlogin (): ĠTry < Boolean > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġq Bit Service . login ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġpref Repo . username , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpref Repo . password ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsid Ġ= ĠQ Bit torrent Service . extract SID ( response . raw ()) ĊĊĠĠĠĠĠĠĠ Ġsid ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Repo . initial Config Finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Repo . sid Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn @ Try Ġ! sid . isNull Or Blank () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Torrent List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠTry < List < Torrent >> Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn @ Try Ġq Bit Service . get Torrent List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Ġ= Ġpref Repo . torrent List Sort , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Ġ= Ġpref Repo . torrent List Sort Reverse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġpause ( hashes : ĠList < String >? Ġ= Ġnull ): ĠTry < Unit > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġq Bit Service . pause ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhashes Ġ= Ġhashes ?. join ToString ( Q Bit torrent Service . HASH ES _ SEPARATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠQ Bit torrent Service . HASH ES _ ALL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġresume ( hashes : ĠList < String >? Ġ= Ġnull ): ĠTry < Unit > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġq Bit Service . resume ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhashes Ġ= Ġhashes ?. join ToString ( Q Bit torrent Service . HASH ES _ SEPARATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠQ Bit torrent Service . HASH ES _ ALL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Files : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhashes : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠTry < Unit > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġq Bit Service . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhashes Ġ= Ġhashes ?. join ToString ( Q Bit torrent Service . HASH ES _ SEPARATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠQ Bit torrent Service . HASH ES _ ALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Files Ġ= Ġdelete Files ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġre check ( hashes : ĠList < String >? Ġ= Ġnull ): ĠTry < Unit > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġq Bit Service . re check ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhashes Ġ= Ġhashes ?. join ToString ( Q Bit torrent Service . HASH ES _ SEPARATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠQ Bit torrent Service . HASH ES _ ALL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġadd Torrent Links ( links : ĠList < String >): ĠTry < Unit > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġq Bit Service . add Torrent s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurls Ġ= Ġlinks . join ToString ("\ n ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġadd Torrent Files ( files : ĠList < File >): ĠTry < Unit > Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtorrent s Ġ= Ġfiles . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest File Ġ= ĠRequest Body . create ( MediaType . parse ( MIME _ TYPE _ TOR RENT _ FILE ), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMultip art Body . Part . create FormData ( LABEL _ PARAMETER _ NAME _ TOR RENT S , Ġit . name , Ġrequest File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġq Bit Service . add Torrent s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtorrent s Ġ= Ġtorrent s ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Log ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarning : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcritical : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Id : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġ): ĠTry < List < Q Bit torrent Log >> Ġ= ĠTry Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn @ Try Ġq Bit Service . getLog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ= Ġpref Repo . baseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnormal Ġ= Ġnormal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ= Ġinfo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarning Ġ= Ġwarning , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcritical Ġ= Ġcritical , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Known Id Ġ= Ġlast Id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠLABEL _ PARAMETER _ NAME _ TOR RENT S Ġ= Ġ" torrent s " Ċ