/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠGoogle , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . pl aid app . search . domain Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġio . pl aid app . core . data . Pl aid Item Ċ import Ġio . pl aid app . core . interfaces . Search DataSource Factory Ċ import Ġio . pl aid app . core . ui . get Pl aid Items For Display Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . supervisor Scope Ċ Ċ /** Ċ Ġ* ĠS ear ches Ġfor Ġa Ġquery Ġin Ġa Ġlist Ġof Ġdata Ġsources . ĠEx poses Ġthe Ġresults Ġof Ġthe Ġsearch Ġin Ġa ĠLive Data , Ċ Ġ* Ġthat Ġis Ġupdated Ġwhenever Ġloading Ġof Ġsearch Ġresults Ġis Ġrequested . Ċ Ġ* ĠThe Ġresults Ġof Ġloading Ġmore Ġare Ġappended Ġat Ġthe Ġend Ġof Ġthe Ġlist . Ċ Ġ*/ Ċ class ĠLoad Search Data UseCase ( ĊĠĠĠ Ġfactories : ĠSet < Search DataSource Factory >, ĊĠĠĠ Ġquery : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata Sources Ġ= Ġfactories . map Ġ{ Ġit . create ( query ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ search Result Ġ= ĠMed iator LiveData < List < Pl aid Item >>() ĊĠĠĠ Ġval Ġsearch Result : ĠLive Data < List < Pl aid Item >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ search Result ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Sources . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ search Result . add Source ( it . items ) Ġ{ Ġnew List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle New List ( new List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġoperator Ġfun Ġinvoke () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Jobs Ġ= Ġmutable ListOf < Deferred < Unit >>() ĊĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Sources . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred Jobs . add ( async Ġ{ Ġit . load More () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdeferred Jobs . await All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle New List ( new List : ĠList < Pl aid Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Items Ġ= Ġ_ search Result . value . or Empty (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġsearch Result Ġ= Ġget Pl aid Items For Display ( old Items , Ġnew List ) ĊĠĠĠĠĠĠĠ Ġ_ search Result . post Value ( search Result ) ĊĠĠĠ Ġ} Ċ } Ċ