/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* Ġ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 Ġim . vector . app . features . ro omp ro file . b anned Ċ Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . air bnb . mv rx . Fragment ViewModel Context Ċ import Ġcom . air bnb . mv rx . Mv Rx ViewModel Factory Ċ import Ġcom . air bnb . mv rx . ViewModel Context Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġdagger . ass isted . Ass isted Factory Ċ import Ġim . vector . app . R Ċ import Ġim . vector . app . core . extensions . exhaustive Ċ import Ġim . vector . app . core . platform . Vector ViewModel Ċ import Ġim . vector . app . core . resources . String Provider Ċ import Ġim . vector . app . features . power level . Power Levels Observable Factory Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . matrix . android . sdk . api . query . Query StringValue Ċ import Ġorg . matrix . android . sdk . api . session . Session Ċ import Ġorg . matrix . android . sdk . api . session . events . model . EventType Ċ import Ġorg . matrix . android . sdk . api . session . events . model . to Model Ċ import Ġorg . matrix . android . sdk . api . session . room . members . room Member QueryParams Ċ import Ġorg . matrix . android . sdk . api . session . room . model . Membership Ċ import Ġorg . matrix . android . sdk . api . session . room . model . Room Member Content Ċ import Ġorg . matrix . android . sdk . api . session . room . model . Room Member Summary Ċ import Ġorg . matrix . android . sdk . api . session . room . power levels . Power Levels Helper Ċ import Ġorg . matrix . android . sdk . rx . rx Ċ import Ġorg . matrix . android . sdk . rx . unwrap Ċ Ċ class ĠRoom B anned Member List ViewModel Ġ@ Ass isted Inject Ġconstructor (@ Ass isted ĠinitialState : ĠRoom B anned Member ListView State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstring Provider : ĠString Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsession : ĠSession ) ĊĠĠĠ Ġ: ĠVector ViewModel < Room B anned Member ListView State , ĠRoom B anned Member List Action , ĠRoom B anned Member ListView Events >( initialState ) Ġ{ ĊĊĠĠĠ Ġ@ Ass isted Factory ĊĠĠĠ Ġinterface ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( initialState : ĠRoom B anned Member ListView State ): ĠRoom B anned Member List ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġroom Ġ= Ġsession . get Room ( initialState . roomId ) !! ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrx Room Ġ= Ġroom . rx () ĊĊĠĠĠĠĠĠĠ Ġroom . rx (). live Room Summary () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. unwrap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ Ġasync Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( room Summary Ġ= Ġasync ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrx Room . live Room Members ( room Member QueryParams Ġ{ Ġmembership s Ġ= ĠlistOf ( Membership . BAN ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb anned Member Sum maries Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpower Levels Content Live Ġ= ĠPower Levels Observable Factory ( room ). create Observable () ĊĊĠĠĠĠĠĠĠ Ġpower Levels Content Live . subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpower Levels Helper Ġ= ĠPower Levels Helper ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ Ġcopy ( can User Ban Ġ= Ġpower Levels Helper . is User Ab le To Ban ( session . my UserId )) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. dispose On Clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠM v Rx ViewModel Factory < Room B anned Member List ViewModel , ĠRoom B anned Member ListView State > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( viewModel Context : ĠViewModel Context , Ġstate : ĠRoom B anned Member ListView State ): ĠRoom B anned Member List ViewModel ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment : ĠRoom B anned Member List Fragment Ġ= Ġ( viewModel Context Ġas ĠFragment ViewModel Context ). fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment . viewModel Factory . create ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( action : ĠRoom B anned Member List Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRoom B anned Member List Action . Query Info Ġ-> Ġon Query Ban Info ( action . room Member Summary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRoom B anned Member List Action . Un Ban User Ġ-> Ġun Ban User ( action . room Member Summary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRoom B anned Member List Action . Filter ĠĠĠ Ġ-> Ġhandle Filter ( action ) ĊĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Filter ( action : ĠRoom B anned Member List Action . Filter ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Ġ= Ġaction . filter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Query Ban Info ( room Member Summary : ĠRoom Member Summary ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb anned Event Ġ= Ġroom . getState Event ( EventType . STATE _ ROOM _ MEMBER , ĠQuery StringValue . Equals ( room Member Summary . userId )) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġb anned Event ?. get Clear Content (). to Model < Room Member Content >() ĊĠĠĠĠĠĠĠ Ġif Ġ( content ?. membership Ġ!= ĠMembers hip . BAN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmay Ġbe Ġreport Ġerror ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreason Ġ= Ġcontent . reason ĊĠĠĠĠĠĠĠ Ġval Ġb anned By Ġ= Ġb anned Event ?. sender Id Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ_ view Events . post ( Room B anned Member ListView Events . Show B anned Info ( b anned By , Ġreason Ġ?: Ġ"", Ġroom Member Summary )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun Ban User ( room Member Summary : ĠRoom Member Summary ) Ġ{ ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( on Go ing Mod eration Action Ġ= Ġthis . on Go ing Mod eration Action Ġ+ Ġroom Member Summary . userId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . un ban ( room Member Summary . userId , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( failure : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ view Events . post ( Room B anned Member ListView Events . Toast Error ( string Provider . getString ( R . string . failed _ to _ un ban ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Go ing Mod eration Action Ġ= Ġon Go ing Mod eration Action Ġ- Ġroom Member Summary . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ