package Ġl uy ao . wan android . compose . ui . home Ċ Ċ import Ġandroidx . compose . Model Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġl uy ao . util . k tx . base . Base ViewModel Ċ import Ġl uy ao . wan android . compose . model . bean . Article List Ċ import Ġl uy ao . wan android . compose . model . bean . Result Ċ import Ġl uy ao . wan android . compose . model . repository .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġl uy ao Ċ Ġ* Ġon Ġ 2 0 1 9 / 1 0 / 1 5 Ġ 1 0 : 4 6 Ċ Ġ*/ Ċ class ĠArticle ViewModel Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġsealed Ġclass ĠArticle Type Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠHome Ġ: ĠArticle Type () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ é¦ĸé¡µ ĊĠĠĠĠĠĠĠ Ġobject ĠSquare Ġ: ĠArticle Type () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¹¿ åľº ĊĠĠĠĠĠĠĠ Ġobject ĠLatest Project Ġ: ĠArticle Type () ĠĠĠĠĠĠĠ Ġ// Ġ æľĢæĸ° é¡¹çĽ® ĊĠĠĠĠĠĠĠ Ġobject ĠProject Detail List Ġ: ĠArticle Type () ĠĠĠ Ġ// Ġ é¡¹çĽ® åĪĹè¡¨ ĊĠĠĠĠĠĠĠ Ġobject ĠCollection Ġ: ĠArticle Type () ĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĶ¶ èĹı ĊĠĠĠĠĠĠĠ Ġobject ĠSystem Type Ġ: ĠArticle Type () ĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä½ĵ ç³» åĪĨç±» ĊĠĠĠĠĠĠĠ Ġobject ĠBlog Ġ: ĠArticle Type () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¬ ä¼Ĺ åı· ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ui State Ġ= ĠMutable LiveData < Article Ui Model >() ĊĠĠĠ Ġval Ġui State : ĠLive Data < Article Ui Model > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ ui State ĊĊĠĠĠ Ġprivate Ġval Ġsquare Repository Ġby Ġlazy Ġ{ ĠSquare Repository () Ġ} ĊĠĠĠ Ġprivate Ġval Ġhome Repository Ġby Ġlazy Ġ{ ĠHome Repository () Ġ} ĊĠĠĠ Ġprivate Ġval Ġproject Repository Ġby Ġlazy Ġ{ ĠProject Repository () Ġ} ĊĠĠĠ Ġprivate Ġval Ġcollect Repository Ġby Ġlazy Ġ{ ĠCollect Repository () Ġ} ĊĠĠĠ Ġprivate Ġval Ġsystem Repository Ġby Ġlazy Ġ{ ĠSystem Repository () Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĊ Ċ // ĠĠĠ Ġval Ġm B anners : ĠLive Data < List < Banner >> Ġ= Ġlive Data Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġkotlin . run Catch ing Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ Ġhome Repository . getB anners () Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġis Ġl uy ao . wan android . compose . model . bean . Result . Success ) Ġemit ( data . data ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Home Article List ( is Refresh : ĠBoolean Ġ= Ġfalse ) Ġ= Ġget Article List ( Article Type . Home , Ġis Refresh ) ĊĠĠĠ Ġfun Ġget Square Article List ( is Refresh : ĠBoolean Ġ= Ġfalse ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Article List ( Article Type . Square , Ġis Refresh ) ĊĊĠĠĠ Ġfun Ġget Latest Project List ( is Refresh : ĠBoolean Ġ= Ġfalse ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Article List ( Article Type . Latest Project , Ġis Refresh ) ĊĊĠĠĠ Ġfun Ġget Project Type Detail List ( is Refresh : ĠBoolean Ġ= Ġfalse , Ġcid : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Article List ( Article Type . Project Detail List , Ġis Refresh , Ġcid ) ĊĊĠĠĠ Ġfun Ġget Collect Article List ( is Refresh : ĠBoolean Ġ= Ġfalse ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Article List ( Article Type . Collection , Ġis Refresh ) ĊĊĠĠĠ Ġfun Ġget System Type Article List ( is Refresh : ĠBoolean Ġ= Ġfalse , Ġcid : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Article List ( Article Type . System Type , Ġis Refresh , Ġcid ) ĊĊĠĠĠ Ġfun Ġget Blog Article List ( is Refresh : ĠBoolean Ġ= Ġfalse , Ġcid : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Article List ( Article Type . Blog , Ġis Refresh , Ġcid ) ĊĊĠĠĠ Ġfun Ġcollect Article ( article Id : ĠInt , Ġboolean : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( boolean ) Ġcollect Repository . collect Article ( article Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcollect Repository . un Collect Article ( article Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Article List ( article Type : ĠArticle Type , Ġis Refresh : ĠBoolean Ġ= Ġfalse , Ġcid : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Default ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Article Ui State ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Refresh ) ĠcurrentPage Ġ= Ġif Ġ( article Type Ġis ĠArticle Type . Project Detail List ) Ġ 1 Ġelse Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwhen Ġ( article Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . Home Ġ-> Ġhome Repository . get Article List ( currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . Square Ġ-> Ġsquare Repository . get Square Article List ( currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . Latest Project Ġ-> Ġproject Repository . getLast ed Project ( currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . Project Detail List Ġ-> Ġproject Repository . getProject Type Detail List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . Collection Ġ-> Ġcollect Repository . get Collect Articles ( currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . System Type Ġ-> Ġsystem Repository . getSystem Type Detail ( cid , ĠcurrentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Type . Blog Ġ-> Ġsystem Repository . get Blog Article ( cid , ĠcurrentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis Ġl uy ao . wan android . compose . model . bean . Result . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarticle List Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( article List . offset Ġ>= Ġarticle List . total ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Article Ui State ( show End Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Article Ui State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Success Ġ= Ġarticle List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Refresh Ġ= Ġis Refresh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( result Ġis ĠResult . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit Article Ui State ( show Error Ġ= Ġresult . exception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġemit Article Ui State ( ĊĠĠĠĠĠĠĠ Ġshow Loading : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshow Error : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshow Success : ĠArticle List ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġshow End : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Refresh : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġneed Login : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġui Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArticle Ui Model ( show Loading , Ġshow Error , Ġshow Success , Ġshow End , Ġis Refresh , Ġneed Login ) ĊĠĠĠĠĠĠĠ Ġ_ ui State . value Ġ= Ġui Model ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġdata Ġclass ĠArticle Ui Model ( ĊĠĠĠĠĠĠĠ Ġval Ġshow Loading : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġshow Error : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġshow Success : ĠArticle List ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġval Ġshow End : ĠBoolean Ġ= Ġfalse , Ġ// Ġ åĬłè½½ æĽ´å¤ļ ĊĠĠĠĠĠĠĠ Ġval Ġis Refresh : ĠBoolean Ġ= Ġfalse , Ġ// Ġ åĪ·æĸ° ĊĠĠĠĠĠĠĠ Ġval Ġneed Login : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊ Ċ }