package Ġorg . de af s apps . android . fav quotes . datal ayer . datasource Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . right Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . channels . Con fl ated Broadcast Channel Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . as Flow Ċ import Ġorg . de af s apps . android . fav quotes . datal ayer . domain . to Bo Ċ import Ġorg . de af s apps . android . fav quotes . datal ayer . domain . toList Wrapper Bo Ċ import Ġorg . de af s apps . android . fav quotes . datal ayer . domain . to Quote Bo Ċ import Ġorg . de af s apps . android . fav quotes . datal ayer . service . Fav Qs ApiService Ċ import Ġorg . de af s apps . android . fav quotes . datal ayer . utils . ret rofit Safe Call Ċ import Ġorg . de af s apps . android . fav quotes . domain layer . domain . Failure Bo Ċ import Ġorg . de af s apps . android . fav quotes . domain layer . domain . Quote Bo Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠUSER _ TOKEN Ġ= Ġ" Token Ġtoken = f 7 6 bc 4 b 1 9 2 ea 1 3 6 6 f 4 1 2 5 e 3 2 d 6 a 0 c 9 5 1 " Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ interface ĠQu otes DataSource Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠQU OT ES _ DATA _ SOURCE _ TAG Ġ= Ġ" quotes DataSource " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAPI _ BASE _ URL Ġ= Ġ" https :// fav qs . com " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch Random Quote (): ĠEither < Failure Bo , ĠQuote Bo > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġquery Quote List (): ĠEither < Failure Bo , ĠBoolean > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch Quote ById ( id : ĠInt ): ĠEither < Failure Bo , ĠQuote Bo > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch Quote List (): ĠFlow < Either < Failure Bo , ĠList < Quote Bo >>> Ċ } Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ class ĠF av Qs DataSource Ġ@ Inject Ġconstructor ( private Ġval Ġretrofit : ĠRet rofit ) Ġ: ĠQu otes DataSource Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġquote List : ĠCon fl ated Broadcast Channel < Either < Failure Bo , ĠList < Quote Bo >>> Ġby Ġlazy Ġ{ ĠCon fl ated Broadcast Channel () Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Random Quote (): ĠEither < Failure Bo , ĠQuote Bo > Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Fav Qs ApiService :: class . java ). fetch Quote Of The Day () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ret rofit Safe Call ( transform Ġ= Ġ{ Ġit . to Quote Bo () Ġ}) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġquery Quote List (): ĠEither < Failure Bo , ĠBoolean > Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Fav Qs ApiService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Public Quotes ( USER _ TOKEN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ret rofit Safe Call ( transform Ġ= Ġ{ Ġit . toList Wrapper Bo () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . or Null ()?. let Ġ{ Ġquote List . offer ( it . quote List . right ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . quote List . isNotEmpty () Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Quote ById ( id : ĠInt ): ĠEither < Failure Bo , ĠQuote Bo > Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Fav Qs ApiService :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Public Quote ById ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= ĠUSER _ TOKEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). ret rofit Safe Call ( transform Ġ= Ġ{ Ġit . to Bo () Ġ}) ĊĊĠĠĠ Ġ@ Flow Preview ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Quote List (): ĠFlow < Either < Failure Bo , ĠList < Quote Bo >>> Ġ= Ġquote List . as Flow () Ċ Ċ } Ċ