package Ġchat . rocket . android . server . presentation Ċ Ċ import Ġchat . rocket . android . Build Config Ċ import Ġchat . rocket . android . authentication . server . presentation . Version Check View Ċ import Ġchat . rocket . android . core . lifecycle . Cancel Strategy Ċ import Ġchat . rocket . android . server . infra est ruct ure . Rocket Chat Client Factory Ċ import Ġchat . rocket . android . util . VersionInfo Ċ import Ġchat . rocket . android . util . extensions . launch UI Ċ import Ġchat . rocket . android . util . retry IO Ċ import Ġchat . rocket . common . Rocket Chat Invalid Protocol Exception Ċ import Ġchat . rocket . common . model . Server Info Ċ import Ġchat . rocket . core . Rocket Chat Client Ċ import Ġchat . rocket . core . internal . rest . server Info Ċ import Ġkotlinx . coroutines . experimental . Deferred Ċ import Ġkotlinx . coroutines . experimental . Job Ċ import Ġkotlinx . coroutines . experimental . async Ċ import Ġtim ber . log . Tim ber Ċ Ċ abstract Ġclass ĠCheck Server Presenter Ġconstructor ( private Ġval Ġstrategy : ĠCancel Strategy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfactory : ĠRocket Chat Client Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġview : ĠVersion Check View ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcurrent Server : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclient : ĠRocket Chat Client ĊĊĠĠĠ Ġinternal Ġfun Ġcheck Server Info ( server Url : ĠString ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlaunch UI ( strategy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Server Ġ= Ġserver Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Ġ= Ġfactory . create ( current Server ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Info Ġ= Ġretry IO ( description Ġ= Ġ" server Info ", Ġtimes Ġ= Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . server Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server Info . redirect ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Server Url ( server Info . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġcheck Server Version ( server Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVersion . Version Ok Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Your Ġversion Ġis Ġnice ! Ġ( Requires : Ġ 0 . 6 2 . 0 , ĠY ours : Ġ${ version . version }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . version Ok () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVersion . Recommended Version Warning Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Your Ġserver Ġ${ version . version } Ġis Ġbel low Ġrecommended Ġversion Ġ${ Build Config . RE COMM ENDED _ SERVER _ VERSION }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . alert Not Recommended Version () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVersion . OutOf Date Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" O ops . ĠLooks Ġlike Ġyour Ġserver Ġ${ version . version } Ġis Ġout - of - date ! ĠMinimum Ġserver Ġversion Ġrequired Ġ${ Build Config . REQUIRED _ SERVER _ VERSION } !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . block And Alert Not Required Version () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( ex , Ġ" Error Ġgetting Ġserver Ġinfo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( ex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRocket Chat Invalid Protocol Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . error Invalid Protocol () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . error Checking Server Version () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Server Version ( server Info : ĠServer Info ): ĠVersion Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis Server Version Ġ= Ġserver Info . version ĊĠĠĠĠĠĠĠ Ġval Ġis Required Version Ġ= Ġis Required Server Version ( this Server Version ) ĊĠĠĠĠĠĠĠ Ġval Ġis Recommended Version Ġ= Ġis Recommended Server Version ( this Server Version ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isRequired Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Recommended Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Your Ġversion Ġis Ġnice ! Ġ( Requires : Ġ 0 . 6 2 . 0 , ĠY ours : Ġ$ this Server Version )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVersion . Version Ok ( this Server Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVersion . Recommended Version Warning ( this Server Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVersion . OutOf Date Error ( this Server Version ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Required Server Version ( version : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Minimum Version ( version , Ġget Version Dist illed ( Build Config . REQUIRED _ SERVER _ VERSION )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Recommended Server Version ( version : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Minimum Version ( version , Ġget Version Dist illed ( Build Config . RE COMM ENDED _ SERVER _ VERSION )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Minimum Version ( version : ĠString , Ġrequired : ĠVersion Info ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis Version Ġ= Ġget Version Dist illed ( version ) ĊĠĠĠĠĠĠĠ Ġwith ( this Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( major Ġ< Ġrequired . major ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( major Ġ> Ġrequired . major ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( minor Ġ< Ġrequired . minor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( minor Ġ> Ġrequired . minor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġupdate Ġ>= Ġrequired . update ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Version Dist illed ( version : ĠString ): ĠVersion Info Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsplit Ġ= Ġversion . split ("- ") ĊĠĠĠĠĠĠĠ Ġif Ġ( split . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVersion Info ( 0 , Ġ 0 , Ġ 0 , Ġnull , Ġ" 0 . 0 . 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġver Ġ= Ġsplit [ 0 ] ĊĠĠĠĠĠĠĠ Ġvar Ġrelease : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( split . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Ġ= Ġsplit [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsplit Ġ= Ġver . split (".") ĊĠĠĠĠĠĠĠ Ġval Ġmajor Ġ= Ġget VersionNumber ( split , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġminor Ġ= Ġget VersionNumber ( split , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġget VersionNumber ( split , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠVersion Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmajor Ġ= Ġmajor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminor Ġ= Ġminor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ġ= Ġupdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Ġ= Ġrelease , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Ġ= Ġversion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget VersionNumber ( split : ĠList < String >, Ġindex : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit . get OrNull ( index )?. toInt () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠVersion ( val Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠVersion Ok ( private Ġval Ġcurrent Version : ĠString ) Ġ: ĠVersion ( current Version ) ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠRecomm ended Version Warning ( private Ġval Ġcurrent Version : ĠString ) Ġ: ĠVersion ( current Version ) ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠOut Of Date Error ( private Ġval Ġcurrent Version : ĠString ) Ġ: ĠVersion ( current Version ) ĊĠĠĠ Ġ} Ċ }