/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠI ce Rock ĠMAG ĠInc . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġorg . example . library . feature . list . presentation Ċ Ċ import Ġcom . github . a ak ira . n api er . N api er Ċ import Ġdev . icer ock . mo ko . mv vm . State Ċ import Ġdev . icer ock . mo ko . mv vm . as State Ċ import Ġdev . icer ock . mo ko . mv vm . li ved ata .* Ċ import Ġdev . icer ock . mo ko . mv vm . view model . ViewModel Ċ import Ġdev . icer ock . mo ko . resources . String Resource Ċ import Ġdev . icer ock . mo ko . resources . desc . StringDesc Ċ import Ġdev . icer ock . mo ko . resources . desc . desc Ċ import Ġdev . icer ock . mo ko . units . Table Unit Item Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . example . library . feature . list . model . List Source Ċ Ċ class ĠList ViewModel < T >( ĊĠĠĠ Ġprivate Ġval Ġlist Source : ĠList Source < T >, ĊĠĠĠ Ġprivate Ġval Ġstrings : ĠStrings , ĊĠĠĠ Ġprivate Ġval Ġunits Factory : ĠUnits Factory < T > Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ state : ĠMutable LiveData < State < List < T >, ĠThrowable >> Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData ( initial Value Ġ= ĠState . Loading ()) ĊĊĠĠĠ Ġval Ġstate : ĠLive Data < State < List < Table Unit Item >, ĠString Desc >> Ġ= Ġ_ state ĊĠĠĠĠĠĠĠ Ġ. data Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ{ Ġnews Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews . map Ġ{ Ġunits Factory . create Tile ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. error Transform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnew Ġtype Ġinfer rence Ġrequire Ġset Ġtypes Ġo O ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap < Throwable , ĠString Desc > Ġ{ Ġit . message ?. desc () Ġ?: Ġstrings . unknown Error . desc () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġload List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Retry Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġload List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Refresh ( completion : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġlist Source . getList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= Ġitems . as State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN api er . e (" can 't Ġrefresh ", Ġthrowable Ġ= Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload List () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠState . Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġlist Source . getList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= Ġitems . as State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ state . value Ġ= ĠState . Error ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠUnits Factory < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Tile ( data : ĠT ): ĠTable Unit Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠStrings Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunknown Error : ĠString Resource ĊĠĠĠ Ġ} Ċ } Ċ