package Ġcom . cts . country infos . ui Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . cts . country infos . model . Country Ċ import Ġcom . cts . country infos . repository . ApiResponse Ċ import Ġcom . cts . country infos . repository . Country Info Repository Ċ import Ġcom . cts . country infos . ui . view model . viewModel Factory Ċ import Ġcom . cts . country infos . utils . Remote Data NotFoundException Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠB ab u ĠK aliy amo orth y Ġon Ġ 1 3 / 1 2 / 1 9 . Ċ Ġ*/ Ċ class ĠCountry InfoList ViewModel ( private Ġval Ġcountry Info Repository : ĠCountry Info Repository ) Ġ: ĊĠĠĠ ĠViewModel () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠF ACT ORY Ġ= ĠviewModel Factory (:: Country InfoList ViewModel ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġ_ is Fetch InProgress Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġis Fetch InProgress : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ is Fetch InProgress ĊĊĠĠĠ Ġprivate Ġval Ġ_ country : ĠMutable LiveData < Country > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Country >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcountry : ĠLive Data < Country > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ country ĊĊĊĠĠĠ Ġfun Ġfetch Country InfoList () Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Country Infos Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Country InfoList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Country InfoList () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcountry Info Repository . get Country Infos () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Ġis ĠApiResponse . Success Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ country . post Value ( response . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Country Info Repository ", Ġ" json Ġdata Ġis Ġ" Ġ+ ĠGson (). toJson ( response . data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠRemote Data NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ ĠCountry Info Repository . Country Fetch Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġfetch Country Infos ( block : Ġsuspend Ġ() Ġ-> ĠUnit ): ĠJob Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Fetch InProgress . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠRemote Data NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Fetch InProgress . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }