package Ġcom . te ph ra . mc . last fm . ui . search Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . te ph ra . mc . last fm . data . model . Artist Ċ import Ġcom . te ph ra . mc . last fm . data . model . SearchResults Ċ import Ġcom . te ph ra . mc . last fm . data . repository . IL ast Fm Repo Ċ import Ġcom . te ph ra . mc . last fm . data . repository . Resource Ċ import Ġkotlinx . coroutines . experimental . Common Pool Ċ import Ġkotlinx . coroutines . experimental . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSearch ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġlast Fm Repo : ĠI Last Fm Repo ): ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġinitial Art ists : ĠMutable LiveData < Resource < SearchResults >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġartists List Ġ= Ġmutable ListOf < Artist >() ĊĠĠĠ Ġval Ġnew Art ists : ĠMutable LiveData < Resource < SearchResults >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġprivate Ġvar Ġtotal SearchResults Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġsearch Items PerPage Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġsearch Page Num Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġsearch Ġ= Ġ"" ĊĊĠĠĠ Ġfun Ġsearch For Artist ( search : String ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( search Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . search Ġ= Ġsearch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Common Pool ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġlast Fm Repo . search For Artist ( search ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Ġ( response . data ?. results !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal SearchResults Ġ= Ġtotal Results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Items PerPage Ġ= Ġitems PerPage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Page Num Ġ= ĠstartIndex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartists List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartists List . addAll ( artist matches . artist ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Art ists . post Value ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Art ists . post Value ( Resource . error (" Search Ġcan Ġnot Ġbe Ġempty ", null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetNext Page () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġwork Ġout Ġif Ġits Ġthe Ġlast Ġpage ĊĠĠĠĠĠĠĠ Ġif Ġ( search Items PerPage Ġ* Ġsearch Page Num Ġ< Ġtotal SearchResults ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Common Pool ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġlast Fm Repo . search For Artist ( search , Ġ++ search Page Num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Art ists . post Value ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġjust Ġto Ġnotify ĠUI Ġlayer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Art ists . post Value ( Resource . success ( null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ