package Ġcn . le iz y . lib . base . mvp Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . String Res Ċ import Ġcn . le iz y . lib . http . bean . HttpResponse Ċ import Ġcn . le iz y . lib . util . Toast Util Ċ import Ġcn . le iz y . lib . http . Exceptions Ċ import Ġkotlinx . coroutines .* Ċ Ċ /** Ċ Ġ* Ġ@ author ĠCreated Ġby Ġw ule i Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 9 / 2 8 , Ġ 0 2 8 Ċ Ġ* Ġ@ description Ġ å¼ķåħ¥ kotlin åįı ç¨ĭ æĿ¥ è¿Ľè¡Į èĢĹ æĹ¶ æĵįä½ľ Ċ Ġ* Ġåı¯ä»¥ èĢĥèĻĳ çĽ´æİ¥ åĨĻ åĪ° Base Presenter éĩĮéĿ¢ Ċ Ġ*/ Ċ abstract Ġclass ĠBase Coroutine Presenter < V Ġ: ĠI View , ĠM Ġ: ĠI Model > Ġ: ĠBase Presenter < V , ĠM >() Ġ{ ĊĠĠĠ Ġ/* ĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠDispatch ers . Main Ġ+ ĠJob () */ ĊĠĠĠ Ġprivate Ġval Ġpresenter Scope : ĠCor outine Scope Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main Ġ+ ĠJob ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġjobs : ĠMutable List < Job > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprotected Ġfun Ġshow Toast ( str : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. show Toast ( str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Support Annotation Usage ") ĊĠĠĠ Ġ@ String Res ĊĠĠĠ Ġprotected Ġfun Ġshow Toast ( id Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. show Toast ( id Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġtry Block Ġ ä¼łåħ¥ è¯·æ±Ĥ çļĦä»£çłģ åĿĹ ĊĠĠĠĠ Ġ* Ġ@ param Ġsuccess Block Ġ æĪĲåĬŁ ä»£çłģ åĿĹ ĊĠĠĠĠ Ġ* Ġ@ param Ġfail Block Ġ å¤±è´¥ ä»£çłģ åĿĹ ï¼Ī åı¯ ä¸į ä¼ł ï¼Į éĩĩçĶ¨ é»ĺè®¤ å¤ĦçĲĨ ï¼ī ĊĠĠĠĠ Ġ* Ġ@ param Ġfinally Block Ġ æľĢç»Ī å¤ĦçĲĨ ä»£çłģ åĿĹ ï¼Ī åı¯ ä¸į ä¼ł ï¼ī ĊĠĠĠĠ Ġ* Ġ@ param Ġis Chain Ġ éĵ¾ å¼ı è°ĥçĶ¨ ï¼Ī ä¸ºäºĨ éĺ² æŃ¢ éĵ¾ å¼ı è°ĥçĶ¨ æĹ¶ æļĤ æĹ¶ åĪ« dismiss Ġloading ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġ< T > Ġlaunch Request ( ĊĠĠĠĠĠĠĠ Ġtry Block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠHttpResponse < T > ?, ĊĠĠĠĠĠĠĠ Ġsuccess Block : Ġsuspend ĠCor outine Scope .( T ?) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġfail Block : Ġ( suspend ĠCor outine Scope .( String ?) Ġ-> ĠUnit ) Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tips ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġfinally Block : Ġ( suspend ĠCor outine Scope . () Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġis Chain : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġshow Tips : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show Tips ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. show Loading () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlaunch Main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Catch ( try Block , Ġsuccess Block , Ġfail Block , Ġfinally Block , Ġis Chain , Ġshow Tips ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch Main ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġadd Job ( presenter Scope . launch ( Dispatch ers . Main , Ġblock Ġ= Ġblock )) ĊĊĊĠĠĠ Ġfun Ġlaunch On IO ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġadd Job ( presenter Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġfun Ġlaunch On Default ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġadd Job ( presenter Scope . launch ( Dispatch ers . Default ) Ġ{ Ġblock () Ġ}) ĊĊĠĠĠ Ġprivate Ġfun Ġadd Job ( job : ĠJob ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjobs . add ( job ) ĊĠĠĠĠĠĠĠ Ġjob . invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjobs . remove ( job ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġblocking ( block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking ( Dispatch ers . IO ) Ġ{ Ġblock () Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġtry Catch ( ĊĠĠĠĠĠĠĠ Ġtry Block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠHttpResponse < T > ?, ĊĠĠĠĠĠĠĠ Ġsuccess Block : Ġsuspend ĠCor outine Scope .( T ?) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġfail Block : Ġ( suspend ĠCor outine Scope .( String ?) Ġ-> ĠUnit ), ĊĠĠĠĠĠĠĠ Ġfinally Block : Ġ( suspend ĠCor outine Scope . () Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġis Chain : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġshow Tips : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtry Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Response ( response , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Block ( response ?. Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail Block ( response ?. Operation Desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Chain ) Ġview ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tips ) Ġshow Toast ( response ?. Operation Desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExceptions . handle Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail Block ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Chain ) Ġview ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Tips ) Ġshow Toast ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinally Block ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Chain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T > Ġcall Response ( ĊĠĠĠĠĠĠĠ Ġresponse : ĠHttpResponse < T > ?, ĊĠĠĠĠĠĠĠ Ġsuccess Block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġfail Block : Ġsuspend ĠCor outine Scope . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. ResultCode Ġ== Ġ 2 0 0 Ġ-> Ġsuccess Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfail Block () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetach View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . detach View () ĊĠĠĠĠĠĠĠ Ġif Ġ( jobs . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( job Ġin Ġjobs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjobs . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }