/* ĊĠ ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠCommons Ware , ĠLLC ĊĊĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ġyou Ġmay Ġnot ĊĠ Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain ĉ a Ġcopy ĊĠ Ġof Ġthe ĠLicense Ġat Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 . ĠUnless Ġrequired ĊĠ Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ġdistributed Ġunder Ġthe ĊĠ ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĉ WITHOUT ĉ WAR RAN TIES ĠOR ĠCONDITIONS ĊĠ ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific ĊĠ Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . ĊĊĠ ĠCover ed Ġin Ġdetail Ġin Ġthe Ġbook Ġ_ Elements Ġof ĠAndroid ĠR _ ĊĊĠ Ġhttps :// commons ware . com / R Ċ */ Ċ Ċ package Ġcom . commons ware . android . r . vide ot agger Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ sealed Ġclass ĠMain ViewState Ġ{ ĊĠ Ġobject ĠLoading Ġ: ĠMain ViewState () ĊĠ Ġdata Ġclass ĠContent ( val Ġmodels : ĠList < Video Model >) Ġ: ĠMain ViewState () ĊĠ Ġobject ĠError Ġ: ĠMain ViewState () Ċ } Ċ Ċ class ĠMain Motor ( private Ġval Ġrepo : ĠVideo Repository ) Ġ: ĠViewModel () Ġ{ ĊĠ Ġprivate Ġval Ġ_ states Ġ= ĠMutable LiveData < Main ViewState >() ĊĠ Ġval Ġstates : ĠLive Data < Main ViewState > Ġ= Ġ_ states ĊĊĠ Ġfun Ġload Videos () Ġ{ ĊĠĠĠ Ġ_ states . value Ġ= ĠMain ViewState . Loading ĊĊĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ states . value Ġ= ĠMain ViewState . Content ( repo . load Videos ()) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" Movie Tag ger ", Ġ" Exception Ġloading Ġvideos ", Ġex ) ĊĠĠĠĠĠĠĠ Ġ_ states . value Ġ= ĠMain ViewState . Error ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġapply Tags ( models : ĠList < Video Model >, Ġtags : ĠString ) Ġ{ ĊĠĠĠ Ġ_ states . value Ġ= ĠMain ViewState . Loading ĊĊĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠ Ġrepo . update Info ( models , Ġtags ) ĊĠĠĠĠĠ Ġload Videos () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }