package Ġtab ac ow ang . me . movie go . ui . home Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . core . component . K oin Component Ċ import Ġorg . k oin . core . component . inject Ċ import Ġtab ac ow ang . me . movie go . data . remote . model . Movie Data Ċ import Ġtab ac ow ang . me . movie go . data . remote . model . T mdb Response Ċ import Ġtab ac ow ang . me . movie go . data . remote . model . filter Genre List Ċ import Ġtab ac ow ang . me . movie go . data . repo . Movie Api Repo Ċ import Ġtab ac ow ang . me . movie go . util . Movie Category Ċ Ċ class ĠHome ViewModel Ġ: ĠViewModel (), ĠK oin Component Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmovie Api Repo : ĠMovie Api Repo Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġ_ isLoading Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval ĠisLoading : ĠLive Data < Boolean > Ġget () Ġ= Ġ_ isLoading ĊĊĠĠĠ Ġprivate Ġval Ġ_ now Playing Movies Ġ= ĠMutable LiveData < T mdb Response < Movie Data >>() ĊĠĠĠ Ġval Ġnow Playing Movies : ĠLive Data < T mdb Response < Movie Data >> Ġget () Ġ= Ġ_ now Playing Movies ĊĊĠĠĠ Ġprivate Ġval Ġ_ popular Movies Ġ= ĠMutable LiveData < T mdb Response < Movie Data >>() ĊĠĠĠ Ġval Ġpopular Movies : ĠLive Data < T mdb Response < Movie Data >> Ġget () Ġ= Ġ_ popular Movies ĊĊĠĠĠ Ġprivate Ġval Ġ_ top R ated Movies Ġ= ĠMutable LiveData < T mdb Response < Movie Data >>() ĊĠĠĠ Ġval Ġtop R ated Movies : ĠLive Data < T mdb Response < Movie Data >> Ġget () Ġ= Ġ_ top R ated Movies ĊĊĠĠĠ Ġprivate Ġval Ġ_ up coming Movies Ġ= ĠMutable LiveData < T mdb Response < Movie Data >>() ĊĠĠĠ Ġval Ġupcoming Movies : ĠLive Data < T mdb Response < Movie Data >> Ġget () Ġ= Ġ_ up coming Movies ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġget Movies () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Movies () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenre List Ġ= Ġmovie Api Repo . get Genre List () Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Playing Request Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Api Repo . get Movie List ( Movie Category . MO W _ PLAY ING )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . results ?. map Ġ{ Ġmovie Data Ġ-> Ġmovie Data . filter Genre List ( genre List ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopular Request Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Api Repo . get Movie List ( Movie Category . POP ULAR )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . results ?. map Ġ{ Ġmovie Data Ġ-> Ġmovie Data . filter Genre List ( genre List ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop R ated Request Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Api Repo . get Movie List ( Movie Category . TOP _ R ATED )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . results ?. map Ġ{ Ġmovie Data Ġ-> Ġmovie Data . filter Genre List ( genre List ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupcoming Request Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Api Repo . get Movie List ( Movie Category . UP COM ING )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . results ?. map Ġ{ Ġmovie Data Ġ-> Ġmovie Data . filter Genre List ( genre List ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( now Playing Result , Ġpopular Result , Ġtop R ated Result , Ġupcoming Result ) Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnow Playing Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopular Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop R ated Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupcoming Request ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). await All () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ now Playing Movies . value Ġ= Ġnow Playing Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ popular Movies . value Ġ= Ġpopular Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ top R ated Movies . value Ġ= Ġtop R ated Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ up coming Movies . value Ġ= Ġupcoming Result ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ isLoading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }