package Ġdan b roid . ipfs d . client Ċ Ċ import Ġandroid . content . Context Ċ import Ġdan b roid . ipfs . api . IP FS Ċ import Ġdan b roid . ipfs . api . Request Ċ import Ġdan b roid . ipfs . api . okhttp . Ok Http Executor Ċ import Ġdan b roid . ipfs d . IP F SD Ċ import Ġdan b roid . util . misc . Singleton Holder Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠService ApiClient Ġprivate Ġconstructor ( ĊĠ Ġval Ġservice Client : ĠService Client , ĊĠ Ġprivate Ġval Ġexecutor : ĠIP FS . Executor , ĊĠ Ġoverride Ġval Ġcoroutine Scope : ĠCor outine Scope Ġ= Ġexecutor . coroutine Scope , Ċ ) Ġ: ĠIP FS . Executor Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġif Ġ(! service Client . is Service Installed ()) Ġ{ ĊĠĠĠĠĠ Ġlog . error (" Package Ġ${ IP F SD . SERVICE _ PKG } Ġis Ġnot Ġinstalled ") ĊĠĠĠĠĠ Ġshow IP F SD Not Installed Dialog ( service Client . context ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġsuspend Ġfun Ġ< T > Ġinvoke ( request : ĠRequest < T >): ĠIP FS . ApiResponse < T > Ġ{ ĊĠĠĠ Ġlog . info (" invoke () Ġ$ request ") ĊĠĠĠ Ġservice Client . wait T ill Started () ĊĠĠĠ Ġreturn Ġexecutor . invoke ( request ) ĊĠ Ġ} ĊĊĊĠ Ġoverride Ġfun Ġ< T > Ġinvoke ( request : ĠRequest < T >, Ġcallback : ĠIP FS . Executor . Callback < T >) Ġ{ ĊĠĠĠ Ġexecutor . coroutine Scope . launch Ġ{ ĊĠĠĠĠĠ Ġservice Client . wait T ill Started () ĊĠĠĠĠĠ Ġexecutor . invoke ( request , Ġcallback ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġ/* TODO Ġoverride Ġfun Ġ< T > Ġexec ( call : ĠApi Call < T >): ĠFlow < Api Call . ApiResponse < T >> Ġ= Ġflow Ġ{ ĊĠĠĠ Ġservice Client . wait T ill Started () ĊĠĠĠ Ġemit All ( executor . exec ( call )) ĊĠ Ġ}*/ ĊĊĠ Ġcompanion Ġobject Ġ: ĠSingleton Holder < Service ApiClient , ĠPair < ServiceClient , ĠIP FS . Executor >> ({ ĊĠĠĠ ĠService ApiClient ( it . first , Ġit . second ) ĊĠ Ġ}) Ġ{ ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ PORT Ġ= Ġ 5 0 0 1 ĊĠĠĠ Ġconst Ġval ĠDEFAULT _ API _ URL Ġ= Ġ" http :// localhost :$ DEFAULT _ PORT / api / v 0 " ĊĊĠĠĠ Ġfun ĠgetInstance ( context : ĠContext , Ġexecutor : ĠIP FS . Executor ): ĠService ApiClient Ġ= ĊĠĠĠĠĠ ĠgetInstance ( Pair ( ServiceClient . getInstance ( context ), Ġexecutor )) ĊĊĠ Ġ} ĊĊ Ċ } Ċ Ċ private Ġobject Ġ_ android IP FS Ġ: Ġdan b roid . ipfs . api . utils . Singleton Holder < IP FS , ĠContext >({ ĊĠ ĠIP FS ( Ċ /* ĠĠĠ ĠOk Http Executor Ġ{ ĊĠĠĠĠĠ Ġurl Base Ġ= Ġ" https :// home . dan b rough . org / api / v 0 " ĊĠĠĠĠĠ Ġset Credentials (" dan ", Ġ" po iq we 0 9 8 1 2 3 ") ĊĠĠĠ Ġ}*/ ĊĠĠĠ ĠService ApiClient . getInstance ( it , ĠOk Http Executor ()) ĊĠ Ġ) Ċ }) Ċ Ċ val ĠContext . ipfs Api : ĠIP FS ĊĠ Ġget () Ġ= Ġ_ android IP FS . getInstance ( this ) ĊĊ Ċ private Ġval Ġlog Ġ= Ġdan b roid . logging . getLog ( Service ApiClient :: class )