package Ġcom . ml . product . search . ui . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . ml . product . search . repository . ML Repository Ċ import Ġcom . ml . product . search . repository . api . services . Network Utils Ċ import Ġcom . ml . product . search . repository . default Error Connection Ċ import Ġcom . ml . product . search . repository . model . Product Ċ import Ġcom . ml . product . search . repository . model . Results Ċ import Ġcom . ml . product . search . repository . unknown Error Ċ import Ġcom . ml . product . search . ui . to Product Items Ċ import Ġcom . ml . product . search . ui . view . adapter . items . Product Item Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ const Ġval ĠDEFAULT _ OFFSET Ġ= Ġ" 0 " Ċ const Ġval ĠDEFAULT _ LIMIT Ġ= Ġ" 5 0 " Ċ Ċ /** Ċ Ġ* ĠView Ġmodel Ġclass Ġfor ĠProducts ĠSearch Ġscreen Ċ Ġ*/ Ċ class ĠProduct Search ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġnetwork Utils : ĠNetwork Utils , ĊĠĠĠ Ġprivate Ġval Ġml Repository : ĠML Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ products LiveData Ġ= ĠMutable LiveData < Results < List < Product Item >> >() ĊĠĠĠ Ġval Ġproducts LiveData : ĠLive Data < Results < List < Product Item >>> Ġ= Ġ_ products LiveData ĊĊĠĠĠ Ġprivate Ġvar Ġsite : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset Site ( site : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . site Ġ= Ġsite ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Product ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Utils . is Network Connection Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġml Repository . search Product ( site !! , Ġquery , ĠDEFAULT _ OFFSET , ĠDEFAULT _ LIMIT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" exception Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products LiveData . value Ġ= Ġunknown Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products LiveData . value Ġ= Ġdefault Error Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Result ( results : ĠResults < List < Product >>) Ġ= Ġwhen Ġ( results ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠResults . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products LiveData . value Ġ= ĠResults . Success ( results . value . to Product Items ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠResults . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products LiveData . value Ġ= Ġresults Ġas ĠResults . Failure < List < Product Item >> ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ