package Ġcom . g ch rist ov . news feed . k mm feed data . use case Ċ Ċ import Ġcom . g ch rist ov . news feed . k mm feed data . model . Decorated Feed Item Ċ import Ġcom . g ch rist ov . news feed . k mm feed data . model . Section ed Feed Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠMerge Section ed Feed UseCase ( private Ġval Ġdispatcher : ĠCor outine Dispatcher ) Ġ{ ĊĠĠĠ Ġsuspend Ġoperator Ġfun Ġinvoke ( ĊĠĠĠĠĠĠĠ Ġthis Feed : ĠSection ed Feed , ĊĠĠĠĠĠĠĠ Ġnew Feed : ĠSection ed Feed ĊĠĠĠ Ġ): ĠSection ed Feed Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSection ed Feed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpages Ġ= Ġnew Feed . pages , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġnew Feed . currentPage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsections Ġ= Ġmutable ListOf < Section ed Feed . Section >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Feed . sections . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexisting Ġsections Ġso Ġneed Ġto Ġmerge Ġ- Ġjust Ġadd Ġnew Ġsections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( new Feed . sections ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Feed . sections . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġnew Ġsections Ġso Ġneed Ġto Ġmerge Ġ- Ġjust Ġadd Ġexisting Ġsections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( this Feed . sections ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġall Ġexisting Ġsections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( this Feed . sections ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMerge Ġthe Ġlast Ġand Ġfirst Ġsections Ġtogether Ġif Ġthey Ġare Ġfrom Ġthe Ġsame Ġtype , Ġotherwise ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġappend Ġthe Ġnew Ġsections ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Old Section Ġ= Ġthis Feed . sections . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst New Section Ġ= Ġnew Feed . sections . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Old Section . type Ġ== Ġfirst New Section . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmerged Last Old Section Ġ= ĠSection ed Feed . Section ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġlast Old Section . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Items Ġ= Ġmutable ListOf < Decorated Feed Item >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( last Old Section . feed Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( first New Section . feed Items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ( this Feed . sections . last Index , Ġmerged Last Old Section ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( new Feed . sections . sub List ( 1 , Ġnew Feed . sections . size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( new Feed . sections ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }