package Ġcom . re vol gen x . an ilib . infrastructure . source . media _ list Ċ Ċ import Ġcom . otal i ast ud ios . elements . Element Ċ import Ġcom . otal i ast ud ios . elements . Page Ċ import Ġcom . re vol gen x . an ilib . data . field . list . Media List Collection Field Ċ import Ġcom . re vol gen x . an ilib . data . model . list . Media ListModel Ċ import Ġcom . re vol gen x . an ilib . infrastructure . repository . util . Status Ċ import Ġcom . re vol gen x . an ilib . infrastructure . service . list . Media List Service Ċ import Ġcom . re vol gen x . an ilib . common . infra str uture . source . Base Recycler Source Ċ import Ġcom . re vol gen x . an ilib . ui . sorting . Media List Sorting Ċ import Ġcom . re vol gen x . an ilib . ui . sorting . make Media List Sorting Comparator Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠMedia List Collection Source ( ĊĠĠĠ Ġfield : ĠMedia List Collection Field , ĊĠĠĠ Ġprivate Ġval Ġlist Map : ĠMutable Map < Int , ĠMedia ListModel >, ĊĠĠĠ Ġprivate Ġval Ġmedia List Service : ĠMedia List Service , ĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable : ĠComposite Disposable Ċ ) Ġ: ĠBase Recycler Source < Media ListModel , ĠMedia List Collection Field >( field ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfirst Page : ĠPage ĊĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( first : ĠMedia ListModel , Ġsecond : ĠMedia ListModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst . id Ġ== Ġsecond . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: first Page . isInitialized ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Filtered Result ( first Page ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Opened ( page : ĠPage , Ġdependencies : ĠList < Element <* >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Page Opened ( page , Ġdependencies ) ĊĠĠĠĠĠĠĠ Ġif Ġ( page . is First Page ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Page Ġ= Ġpage ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Map . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Service . get Media List Collection ( field , Ġcomposite Disposable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . status Ġ== ĠStatus . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . data Ġas ĠList < Media ListModel >). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Map [ it . media Id !! ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter edList Ġ= Ġget Filter edList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Result ( page , Ġfilter edList ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Result ( page , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Result ( page , Ġempty List < Media ListModel >()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Filtered Result ( page : Page ){ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter edList Ġ= Ġget Filter edList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Result ( page , Ġfilter edList ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filter edList (): ĠMutable List < Media ListModel > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġfield . filter ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( filter . formats In . isNull OrEmpty ()) Ġlist Map . values Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Map . values . filter Ġ{ Ġ Ġfilter . formats In !!. contains ( it . format ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field . filter . status Ġ== Ġnull ) Ġit Ġelse Ġit . filter Ġ{ Ġit . status Ġ== Ġfilter . status Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter . genre Ġ== Ġnull ) Ġit Ġelse Ġit . filter Ġ{ Ġit . genres ?. contains ( filter . genre !! ) Ġ== Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter . search . isNull OrEmpty ()) Ġit Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . filter Ġ{ Ġmodel -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . title !!. rom aji ?. contains ( filter . search !! , Ġtrue ) Ġ== Ġtrue Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . title !!. english ?. contains ( filter . search !! , Ġtrue ) Ġ== Ġtrue Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . title !!. native ?. contains ( filter . search !! , Ġtrue ) Ġ Ġ== Ġtrue || ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . syn onyms ?. any Ġ{ Ġ Ġit . contains ( filter . search !! , Ġtrue )} Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter . list Sort Ġ== Ġnull ) Ġit Ġelse Ġit . sorted With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Media List Sorting Comparator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia List Sorting . Media List Sorting Type . values ()[ filter . list Sort !! ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠ Ġ} Ċ Ċ } Ċ