package Ġcom . kt mi . t mi . dsl . builder . scopes . filters Ċ Ċ import Ġcom . kt mi . t mi . dsl . builder . Tw itch Dsl Ċ import Ġcom . kt mi . t mi . dsl . builder . Tw itch Scope Ċ import Ġcom . kt mi . t mi . messages . Tw itch Message Ċ import Ġkotlinx . coroutines . Coroutine Name Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . filter Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ /** Ċ Ġ* Ġ[ Tw itch Dsl ] Ġscope Ġused Ġto Ġfilter Ġout Ġ[ Tw itch Message ] s Ġusing Ġgiven Ġpredicate Ġ( which Ġis Ġset Ġin Ġthe Ġbody Ġwith Ġ[ with Predicate ]) Ċ Ġ* Ġ@ param Ġparent Ġparent Ġscope Ġwhere Ġmessages Ġare Ġforwarded Ġand Ġfrom Ġ Ġwhere Ġmain Ġ[ Flow ] Ġof Ġ[ Tw itch Message ] s Ġis Ġretrieved Ċ Ġ* Ġ@ param Ġcoroutine Context Ġ[ Coroutine Context ] Ġused Ġfor Ġcreating Ġ[ Tw itch Message ] Ġlisteners Ċ Ġ*/ Ċ class ĠFilter Scope ( ĊĠĠĠ Ġparent : ĠTw itch Scope , ĊĠĠĠ Ġcoroutine Context : ĠCor outine Context Ċ ) Ġ: ĠTw itch Scope ( parent , coroutine Context Ġ+ ĠCor outine Name (" Filter Tw itch ")) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġpredicate : Ġ( suspend Ġ( Tw itch Message ) Ġ-> ĠBoolean ) Ġ= Ġ{ Ġtrue Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġpredicate Ġof Ġ[ Filter Scope ] Ġused Ġin Ġfiltering Ġincoming Ġ[ Tw itch Message ] s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġin fix Ġfun Ġwith Predicate ( filter : Ġsuspend Ġ( Tw itch Message ) Ġ-> ĠBoolean ) Ġ{ Ġpredicate Ġ= Ġfilter Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tw itch Flow (): ĠFlow < Tw itch Message > Ġ= ĊĠĠĠĠĠĠĠ Ġsuper . get Tw itch Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( predicate ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Tw itch Dsl ] Ġbuilder Ġfunction Ġfor Ġ[ Filter Scope ] Ċ Ġ* Ġ@ param Ġblock Ġbody Ġof Ġthe ĠDSL Ġ([ Filter Scope ]) Ċ Ġ*/ Ċ @ Tw itch Dsl Ċ inline Ġfun ĠTw itch Scope . filter ( block : ĠFilter Scope . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠ ĠFilter Scope ( this , Ġcoroutine Context ). apply ( block )