package Ġcn . stack flow . workbench . common . base Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . king . base . util . System Utils Ċ import Ġcom . king . frame . mv vm frame . base . Data ViewModel Ċ import Ġcom . king . frame . mv vm frame . base . li ved ata . Single Live Event Ċ import Ġcn . stack flow . workbench . App Ċ import Ġcn . stack flow . workbench . R Ċ import Ġcn . stack flow . workbench . common . api . ApiService Ċ import Ġcn . stack flow . workbench . common . bean . Result Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Socket TimeoutException Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ< a Ġhref =" mailto : jen ly 1 3 1 4 @ gmail . com "> J en ly </ a > Ċ Ġ*/ Ċ open Ġclass ĠBase ViewModel Ġ@ Inject Ġconstructor ( application : ĠApplication , Ġmodel : ĠBase Model ?) Ġ: Ġ ĠData ViewModel ( application , Ġmodel ) Ġ{ ĊĊĠĠĠ Ġopen Ġfun Ġget App () Ġ= Ġget Application < App >() ĊĊĠĠĠ Ġopen Ġfun ĠgetString (@ String Res Ġres Id : ĠInt ) Ġ= Ġget App (). getString ( res Id ) ĊĊĠĠĠ Ġval Ġapi Service : ĠApi Service Ġby Ġlazy Ġ{ Ġget Ret rofit Service ( ApiService :: class . java ) Ġ} ĊĊĠĠĠ Ġopen Ġval Ġlive Data Tag Ġby Ġlazy Ġ{ ĠSingle Live Event < Int >() Ġ} ĊĊĊĠĠĠ Ġfun Ġis Success ( result : ĠResult < *> ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( getString ( R . string . result _ failure )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( result . is Success ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġresult . get ErrorMessage () Ġ?: ĠgetString ( R . string . result _ failure ) ĊĠĠĠĠĠĠĠ ĠsendMessage ( msg ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġlaunch ( show Loading : ĠBoolean Ġ= Ġtrue , Ġtag : ĠInt ? Ġ= Ġnull , Ġblock : Ġsuspend Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch ( show Loading , Ġtag , Ġblock , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System Utils . is Net Work Active ( getApp ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSocket TimeoutException Ġ-> ĠsendMessage ( getString ( R . string . result _ connect _ timeout _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnect Exception Ġ-> ĠsendMessage ( getString ( R . string . result _ connect _ failed _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠsendMessage ( getString ( R . string . result _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( getString ( R . string . result _ network _ un available _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlaunch ( ĊĠĠĠĠĠĠĠ Ġshow Loading : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtag : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġblock : Ġsuspend Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġerror : Ġsuspend Ġ( Throwable ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( show Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtag ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Tag . value Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }