/* Ċ Ġ* Ġ ĠCopyright Ġ( C ) ĠMR 3 Y Ġ- ĠAll ĠRights ĠReserved Ċ Ġ* ĠĠ ĠUnauthorized Ġcopying Ġof Ġthis Ġfile , Ġvia Ġany Ġmedium Ġis Ġstrictly Ġpro hibited Ċ Ġ* ĠĠ ĠPro pri etary Ġand Ġconf idential Ċ Ġ* ĠĠ ĠWritten Ġby ĠMR 3 Y Ġ< ab don asr 3 7 9 @ gmail . com >, Ġ 2 0 2 0 . Ċ Ġ*/ Ċ Ċ package Ġcom . secret . read it . core . paging . articles Ċ Ċ import Ġandroidx . paging . Paging Source Ċ import Ġcom . google . firebase . firestore . Document Snapshot Ċ import Ġcom . secret . read it . core . data . articles . content . Content DataSource Ċ import Ġcom . secret . read it . core . paging . check If Successful Ċ import Ġcom . secret . read it . core . result . Result Ċ import Ġcom . secret . read it . core . result . succeeded Ċ import Ġcom . secret . read it . model . Article Ċ import Ġcom . secret . read it . model . Content Ċ Ċ type alias ĠArticle With Content Ġ= ĠPair < Article , ĠContent > Ċ Ċ // ĠHandle Ġboilerplate Ġof Ġfilling Ġpage Ġwith Ġthe Ġcorrect Ġdata Ċ internal Ġsuspend Ġfun Ġprocess ( ĊĠĠĠ Ġresult : ĠResult < Pair < List < Article >, ĠDocument Snapshot >>, ĊĠĠĠ Ġparams : ĠP aging Source . Load Params < Document Snapshot >, ĊĠĠĠ Ġcontent Source : ĠContent DataSource , ĊĠĠĠ Ġcontent Limit : ĠInt Ċ ): ĠP aging Source . Load Result < Document Snapshot , ĠArticle With Content > Ġ{ ĊĠĠĠ Ġvar Ġlast Snapshot Ġ= Ġparams . key ĊĠĠĠ Ġval Ġdata Ġ= Ġcheck If Successful ( result )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarticles Ġ= Ġit . first ĊĠĠĠĠĠĠĠ Ġlast Snapshot Ġ= Ġit . second ĊĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= Ġmutable ListOf < Content >() ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarticles . forEach Ġ{ Ġarticle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġload Content Ġ= Ġcontent Source . getContent ( article . id , Ġcontent Limit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( load Content . succeeded ) Ġcontents . add ( Content (( load Content Ġas ĠResult . Success ). data )) Ġelse Ġreturn @ run ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarticles . zip ( contents ) ĊĠĠĠ Ġ} Ġ?: Ġreturn ĠP aging Source . Load Result . Error ( Exception ()) Ġ// Ġresult Ġdidn 't Ġsucceed , Ġthis Ġcan Ġbe Ġinterpreted Ġby ĠUi Ġconsumers Ġas ĠLoad State . Error ĊĠĠĠ Ġreturn ĠP aging Source . Load Result . Page ( data , Ġprev Key Ġ= Ġnull Ġ/* We Ġdon 't Ġsupport Ġloading Ġbefore Ġcurrent Ġpage Ġyet */, Ġnext Key Ġ= Ġlast Snapshot ) Ċ } Ċ