package Ġcom . j ens ence le st ial . gh ib library . android . data . repository Ċ Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . db . Species Dao Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . mapper . to Entities Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . mapper . to Entity Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . model . Species Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . model . api . Species Response Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . network . Species Service Ċ import Ġcom . j ens ence le st ial . gh ib library . android . data . repository . result . Rep Result Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġretrofit 2 . Response Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Socket TimeoutException Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSpec ies Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġspecies Dao : ĠSpec ies Dao , ĊĠĠĠ Ġprivate Ġval Ġspecies Service : ĠSpec ies Service Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġget Species (): ĠRep Result < List < Species >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Species Response : ĠResponse < List < Species Response >> Ġ= Ġspecies Service . get Species () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Species Response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġspecies To Save : ĠList < Species > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Species Response . body ()?. to Entities () Ġ?: Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecies To Save Ġ= Ġattach Image Urls (* species To Save . to Typed Array ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecies Dao . insert Species ( species To Save ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Success ( result Ġ= Ġspecies Dao . getAll Species ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Error < Nothing >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" Get ĠSpec ies Ġfrom ĠAPI Ġfailed .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSocket TimeoutException , Ġis ĠIOException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġtimeout Ġerrors , Ġget ĠSpec ies Ġfrom ĠDB . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Success ( result Ġ= Ġspecies Dao . getAll Species ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( dbe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" Get ĠSpec ies Ġfrom ĠDB Ġfailed .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Error ( exception Ġ= Ġd be ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠRep Result . Error ( exception Ġ= Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Species ( species Id : ĠString ): ĠRep Result < Species > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Species Response : ĠResponse < Species Response > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecies Service . get Species ( species Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remote Species Response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġspecies To Save : ĠSpec ies ? Ġ= Ġremote Species Response . body ()?. to Entity () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( species To Save Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecies To Save Ġ= Ġattach Image Urls ( species To Save )[ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecies Dao . insert Species ( species To Save ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Success ( result Ġ= Ġspecies Dao . get Species ( species Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Error < Nothing >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" Get ĠSpec ies Ġfrom ĠAPI Ġfailed .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSocket TimeoutException , Ġis ĠIOException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġtimeout Ġerrors , Ġget ĠSpec ies Ġfrom ĠDB . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Success ( result Ġ= Ġspecies Dao . get Species ( species Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( dbe : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" Get ĠSpec ies Ġfrom ĠDB Ġfailed .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRep Result . Error ( exception Ġ= Ġd be ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠRep Result . Error ( exception Ġ= Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġattach Image Urls ( var arg Ġspecies : ĠSpec ies ): ĠList < Species > Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspecies . forEach Ġ{ Ġsp : ĠSpec ies Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp . imageUrl Ġ= Ġwhen Ġ( sp . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" af 3 9 1 0 a 6 - 4 2 9 f - 4 c 7 4 - 9 ad 5 - dfe 1 c 4 aa 0 4 f 2 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// v ign ette 3 . wik ia . no cookie . net / studio - gh ib li / images / b / b 3 / P ony o . jpg / revision / latest ? cb = 2 0 1 6 0 5 2 6 1 4 1 6 1 7 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 bc 9 2 fdd - b 0 f 4 - 4 2 8 6 - ad 7 1 - 1 f 9 9 fb 4 a 0 d 1 e " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// v ign ette 2 . wik ia . no cookie . net / studio - gh ib li / images / 8 / 8 5 / Sk og s ande . png / revision / latest ? cb = 2 0 1 3 0 6 2 8 1 7 2 6 1 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b 5 a 9 2 d 0 e - 5 fb 4 - 4 3 d 4 - ba 6 0 - c 0 1 2 1 3 5 9 5 8 e 4 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// v ign ette . wik ia . no cookie . net / studio - gh ib li / images / 9 / 9 8 / K od ama . jpg / revision / latest ? cb = 2 0 1 3 0 3 2 3 0 9 4 8 0 5 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f 2 5 fa 6 6 1 - 3 0 7 3 - 4 1 4 d - 9 6 8 a - ab 0 6 2 e 3 0 6 5 f 7 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// v ign ette . wik ia . no cookie . net / studio - gh ib li / images / 5 / 5 3 / Night walker _ of _ Mon ono ke . jpg / revision / latest ? cb = 2 0 1 7 1 1 2 1 1 2 5 1 5 8 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 0 3 4 2 8 ba - 8 a 8 6 - 4 b 0 b - a 9 f 1 - 6 5 df 6 ab ef 3 d 3 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// v ign ette . wik ia . no cookie . net / studio - gh ib li / images / 0 / 0 a / L ily . png / revision / latest / scale - to - width - down / 3 5 0 ? cb = 2 0 1 1 0 7 1 6 0 0 4 6 4 7 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 4 b 7 f 5 4 7 - 1 5 7 7 - 4 4 3 0 - 8 0 6 c - c 3 5 8 c 8 b 6 bcf 5 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// v ign ette . wik ia . no cookie . net / studio - gh ib li / images / 5 / 5 3 / T otor o . jpg / revision / latest / scale - to - width - down / 3 5 0 ? cb = 2 0 1 7 1 2 2 4 1 5 2 5 3 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġspecies . toList () ĊĠĠĠ Ġ} Ċ }