/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 Ġ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 . home . room . detail . upgrade Ċ Ċ import Ġcom . air bnb . mv rx . Loading Ċ import Ġcom . air bnb . mv rx . M aver icks ViewModel Factory Ċ import Ġcom . air bnb . mv rx . Success Ċ import Ġdagger . ass isted . Ass isted Ċ import Ġdagger . ass isted . Ass isted Factory Ċ import Ġdagger . ass isted . Ass isted Inject Ċ import Ġim . vector . app . core . di . M aver icks Ass isted ViewModel Factory Ċ import Ġim . vector . app . core . di . h ilt M aver icks ViewModel Factory Ċ import Ġim . vector . app . core . platform . Empty View Events Ċ import Ġim . vector . app . core . platform . Vector ViewModel Ċ import Ġim . vector . app . features . session . coroutine Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . matrix . android . sdk . api . session . Session Ċ import Ġorg . matrix . android . sdk . api . session . get Room Ċ import Ġorg . matrix . android . sdk . api . session . get Room Summary Ċ Ċ class ĠMigrate Room ViewModel Ġ@ Ass isted Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Ass isted ĠinitialState : ĠMigrate Room ViewState , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġupgrade Room ViewModel Task : ĠUpgrade Room ViewModel Task ) Ġ: ĊĠĠĠĠĠĠĠ ĠVector ViewModel < Migrate Room ViewState , ĠMigrate Room Action , ĠEmpty View Events >( initialState ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroom Ġ= Ġsession . get Room ( initialState . roomId ) ĊĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġsession . get Room Summary ( initialState . roomId ) ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Version Ġ= Ġroom ?. room Version Service ()?. get Room Version (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Public Ġ= Ġsummary ?. is Public Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Member Count Ġ= Ġsummary ?. other Member Ids ?. count () Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġknown Parents Ġ= Ġsummary ?. flatten Parent Ids Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ass isted Factory ĊĠĠĠ Ġinterface ĠFactory Ġ: ĠM aver icks Ass isted ViewModel Factory < Migrate Room ViewModel , ĠMigrate Room ViewState > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( initialState : ĠMigrate Room ViewState ): ĠMigrate Room ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠM aver icks ViewModel Factory < Migrate Room ViewModel , ĠMigrate Room ViewState > Ġby Ġh ilt M aver icks ViewModel Factory () ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( action : ĠMigrate Room Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMigrate Room Action . Set Auto Invite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( should Issue Inv ites Ġ= Ġaction . auto Invite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMigrate Room Action . Set Update Known Parent Space Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( should Update Known Parents Ġ= Ġaction . update ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMigrate Room Action . Upgrade Room Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Upgrade Room () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Upgrade Room () Ġ= Ġwith State Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġsession . get Room Summary ( state . roomId ) ĊĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( up grading Status Ġ= ĠLoading ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsession . coroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser To Invite Ġ= Ġif Ġ( state . auto Migrate Members And Parents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary ?. other Member Ids ?. take If Ġ{ Ġ! state . is Public Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary ?. other Member Ids ?. take If Ġ{ Ġstate . should Issue Inv ites Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. or Empty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Space ToUpdate Ġ= Ġif Ġ( state . auto Migrate Members And Parents ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary ?. flatten Parent Ids ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary ?. flatten Parent Ids ?. take If Ġ{ Ġstate . should Update Known Parents Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. or Empty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġupgrade Room ViewModel Task . execute ( Upgrade Room ViewModel Task . Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Id Ġ= Ġstate . roomId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Version Ġ= Ġstate . new Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ids To Auto Invite Ġ= Ġuser To Invite , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Space ToUpdate Ġ= Ġparent Space ToUpdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Reporter Ġ= Ġ{ Ġin determinate , Ġprogress , Ġtotal Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupgrading Progress Ġ= Ġprogress , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupgrading Progress Total Ġ= Ġtotal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupgrading Progress In determinate Ġ= Ġin determinate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( up grading Status Ġ= ĠSuccess ( result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ